diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 | 
| commit | eb11fae6d08f479c0799db45860a98af528fa6e7 (patch) | |
| tree | 44d492a50c8c1a7eb8e2d17ea3360ec4d066f042 /lib/Transforms/Vectorize/VPlan.cpp | |
| parent | b8a2042aa938069e862750553db0e4d82d25822c (diff) | |
Notes
Diffstat (limited to 'lib/Transforms/Vectorize/VPlan.cpp')
| -rw-r--r-- | lib/Transforms/Vectorize/VPlan.cpp | 37 | 
1 files changed, 29 insertions, 8 deletions
| diff --git a/lib/Transforms/Vectorize/VPlan.cpp b/lib/Transforms/Vectorize/VPlan.cpp index 4e54fc6db2a5..f7b07b722bb1 100644 --- a/lib/Transforms/Vectorize/VPlan.cpp +++ b/lib/Transforms/Vectorize/VPlan.cpp @@ -116,7 +116,7 @@ VPBasicBlock::createEmptyBasicBlock(VPTransformState::CFGState &CFG) {    BasicBlock *PrevBB = CFG.PrevBB;    BasicBlock *NewBB = BasicBlock::Create(PrevBB->getContext(), getName(),                                           PrevBB->getParent(), CFG.LastBB); -  DEBUG(dbgs() << "LV: created " << NewBB->getName() << '\n'); +  LLVM_DEBUG(dbgs() << "LV: created " << NewBB->getName() << '\n');    // Hook up the new basic block to its predecessors.    for (VPBlockBase *PredVPBlock : getHierarchicalPredecessors()) { @@ -125,7 +125,7 @@ VPBasicBlock::createEmptyBasicBlock(VPTransformState::CFGState &CFG) {      BasicBlock *PredBB = CFG.VPBB2IRBB[PredVPBB];      assert(PredBB && "Predecessor basic-block not found building successor.");      auto *PredBBTerminator = PredBB->getTerminator(); -    DEBUG(dbgs() << "LV: draw edge from" << PredBB->getName() << '\n'); +    LLVM_DEBUG(dbgs() << "LV: draw edge from" << PredBB->getName() << '\n');      if (isa<UnreachableInst>(PredBBTerminator)) {        assert(PredVPSuccessors.size() == 1 &&               "Predecessor ending w/o branch must have single successor."); @@ -175,8 +175,8 @@ void VPBasicBlock::execute(VPTransformState *State) {    }    // 2. Fill the IR basic block with IR instructions. -  DEBUG(dbgs() << "LV: vectorizing VPBB:" << getName() -               << " in BB:" << NewBB->getName() << '\n'); +  LLVM_DEBUG(dbgs() << "LV: vectorizing VPBB:" << getName() +                    << " in BB:" << NewBB->getName() << '\n');    State->CFG.VPBB2IRBB[this] = NewBB;    State->CFG.PrevVPBB = this; @@ -184,7 +184,7 @@ void VPBasicBlock::execute(VPTransformState *State) {    for (VPRecipeBase &Recipe : Recipes)      Recipe.execute(*State); -  DEBUG(dbgs() << "LV: filled BB:" << *NewBB); +  LLVM_DEBUG(dbgs() << "LV: filled BB:" << *NewBB);  }  void VPRegionBlock::execute(VPTransformState *State) { @@ -193,7 +193,7 @@ void VPRegionBlock::execute(VPTransformState *State) {    if (!isReplicator()) {      // Visit the VPBlocks connected to "this", starting from it.      for (VPBlockBase *Block : RPOT) { -      DEBUG(dbgs() << "LV: VPBlock in RPO " << Block->getName() << '\n'); +      LLVM_DEBUG(dbgs() << "LV: VPBlock in RPO " << Block->getName() << '\n');        Block->execute(State);      }      return; @@ -210,7 +210,7 @@ void VPRegionBlock::execute(VPTransformState *State) {        State->Instance->Lane = Lane;        // Visit the VPBlocks connected to \p this, starting from it.        for (VPBlockBase *Block : RPOT) { -        DEBUG(dbgs() << "LV: VPBlock in RPO " << Block->getName() << '\n'); +        LLVM_DEBUG(dbgs() << "LV: VPBlock in RPO " << Block->getName() << '\n');          Block->execute(State);        }      } @@ -220,6 +220,15 @@ void VPRegionBlock::execute(VPTransformState *State) {    State->Instance.reset();  } +void VPRecipeBase::insertBefore(VPRecipeBase *InsertPos) { +  Parent = InsertPos->getParent(); +  Parent->getRecipeList().insert(InsertPos->getIterator(), this); +} + +iplist<VPRecipeBase>::iterator VPRecipeBase::eraseFromParent() { +  return getParent()->getRecipeList().erase(getIterator()); +} +  void VPInstruction::generateInstruction(VPTransformState &State,                                          unsigned Part) {    IRBuilder<> &Builder = State.Builder; @@ -356,7 +365,7 @@ void VPlan::updateDominatorTree(DominatorTree *DT, BasicBlock *LoopPreHeaderBB,             "One successor of a basic block does not lead to the other.");      assert(InterimSucc->getSinglePredecessor() &&             "Interim successor has more than one predecessor."); -    assert(std::distance(pred_begin(PostDomSucc), pred_end(PostDomSucc)) == 2 && +    assert(pred_size(PostDomSucc) == 2 &&             "PostDom successor has more than two predecessors.");      DT->addNewBlock(InterimSucc, BB);      DT->addNewBlock(PostDomSucc, BB); @@ -448,6 +457,18 @@ void VPlanPrinter::dumpBasicBlock(const VPBasicBlock *BasicBlock) {    bumpIndent(1);    for (const VPRecipeBase &Recipe : *BasicBlock)      Recipe.print(OS, Indent); + +  // Dump the condition bit. +  const VPValue *CBV = BasicBlock->getCondBit(); +  if (CBV) { +    OS << " +\n" << Indent << " \"CondBit: "; +    if (const VPInstruction *CBI = dyn_cast<VPInstruction>(CBV)) { +      CBI->printAsOperand(OS); +      OS << " (" << DOT::EscapeString(CBI->getParent()->getName()) << ")\\l\""; +    } else +      CBV->printAsOperand(OS); +  } +    bumpIndent(-2);    OS << "\n" << Indent << "]\n";    dumpEdges(BasicBlock); | 
