Lines Matching refs:BasicBlock
52 typedef SmallVectorImpl<std::pair<Constant*, BasicBlock*> > PredValueInfo;
53 typedef SmallVector<std::pair<Constant*, BasicBlock*>, 8> PredValueInfoTy;
83 SmallPtrSet<BasicBlock*, 16> LoopHeaders;
85 SmallSet<AssertingVH<BasicBlock>, 16> LoopHeaders;
87 DenseSet<std::pair<Value*, BasicBlock*> > RecursionSet;
91 DenseSet<std::pair<Value*, BasicBlock*> > &TheSet;
92 std::pair<Value*, BasicBlock*> ThePair;
94 RecursionSetRemover(DenseSet<std::pair<Value*, BasicBlock*> > &S, in RecursionSetRemover()
95 std::pair<Value*, BasicBlock*> P) in RecursionSetRemover()
117 bool ProcessBlock(BasicBlock *BB);
118 bool ThreadEdge(BasicBlock *BB, const SmallVectorImpl<BasicBlock*> &PredBBs,
119 BasicBlock *SuccBB);
120 bool DuplicateCondBranchOnPHIIntoPred(BasicBlock *BB,
121 const SmallVectorImpl<BasicBlock *> &PredBBs);
123 bool ComputeValueKnownInPredecessors(Value *V, BasicBlock *BB,
126 bool ProcessThreadableEdges(Value *Cond, BasicBlock *BB,
133 bool TryToUnfoldSelect(CmpInst *CondCmp, BasicBlock *BB);
162 BasicBlock *BB = I; in runOnFunction()
195 BasicBlock *Succ = BI->getSuccessor(0); in runOnFunction()
222 static unsigned getJumpThreadDuplicationCost(const BasicBlock *BB, in getJumpThreadDuplicationCost()
225 BasicBlock::const_iterator I = BB->getFirstNonPHI(); in getJumpThreadDuplicationCost()
293 SmallVector<std::pair<const BasicBlock*,const BasicBlock*>, 32> Edges; in FindLoopHeaders()
297 LoopHeaders.insert(const_cast<BasicBlock*>(Edges[i].second)); in FindLoopHeaders()
327 ComputeValueKnownInPredecessors(Value *V, BasicBlock *BB, PredValueInfo &Result, in ComputeValueKnownInPredecessors()
367 BasicBlock *P = *PI; in ComputeValueKnownInPredecessors()
418 SmallPtrSet<BasicBlock*, 4> LHSKnownBBs; in ComputeValueKnownInPredecessors()
489 BasicBlock *PredBB = PN->getIncomingBlock(i); in ComputeValueKnownInPredecessors()
522 BasicBlock *P = *PI; in ComputeValueKnownInPredecessors()
610 static unsigned GetBestDestForJumpOnUndef(BasicBlock *BB) { in GetBestDestForJumpOnUndef()
613 BasicBlock *TestBB = BBTerm->getSuccessor(MinSucc); in GetBestDestForJumpOnUndef()
628 static bool hasAddressTakenAndUsed(BasicBlock *BB) { in hasAddressTakenAndUsed()
640 bool JumpThreading::ProcessBlock(BasicBlock *BB) { in ProcessBlock()
651 if (BasicBlock *SinglePred = BB->getSinglePredecessor()) { in ProcessBlock()
840 BasicBlock *LoadBB = LI->getParent(); in SimplifyPartiallyRedundantLoad()
860 BasicBlock::iterator BBIt = LI; in SimplifyPartiallyRedundantLoad()
886 SmallPtrSet<BasicBlock*, 8> PredsScanned; in SimplifyPartiallyRedundantLoad()
887 typedef SmallVector<std::pair<BasicBlock*, Value*>, 8> AvailablePredsTy; in SimplifyPartiallyRedundantLoad()
889 BasicBlock *OneUnavailablePred = 0; in SimplifyPartiallyRedundantLoad()
895 BasicBlock *PredBB = *PI; in SimplifyPartiallyRedundantLoad()
928 BasicBlock *UnavailablePred = 0; in SimplifyPartiallyRedundantLoad()
939 SmallVector<BasicBlock*, 8> PredsToSplit; in SimplifyPartiallyRedundantLoad()
940 SmallPtrSet<BasicBlock*, 8> AvailablePredSet; in SimplifyPartiallyRedundantLoad()
948 BasicBlock *P = *PI; in SimplifyPartiallyRedundantLoad()
992 BasicBlock *P = *PI; in SimplifyPartiallyRedundantLoad()
1014 static BasicBlock *
1015 FindMostPopularDest(BasicBlock *BB, in FindMostPopularDest()
1016 const SmallVectorImpl<std::pair<BasicBlock*, in FindMostPopularDest() argument
1017 BasicBlock*> > &PredToDestList) { in FindMostPopularDest()
1024 DenseMap<BasicBlock*, unsigned> DestPopularity; in FindMostPopularDest()
1030 DenseMap<BasicBlock*, unsigned>::iterator DPI = DestPopularity.begin(); in FindMostPopularDest()
1031 BasicBlock *MostPopularDest = DPI->first; in FindMostPopularDest()
1033 SmallVector<BasicBlock*, 4> SamePopularity; in FindMostPopularDest()
1074 bool JumpThreading::ProcessThreadableEdges(Value *Cond, BasicBlock *BB, in ProcessThreadableEdges()
1099 SmallPtrSet<BasicBlock*, 16> SeenPreds; in ProcessThreadableEdges()
1100 SmallVector<std::pair<BasicBlock*, BasicBlock*>, 16> PredToDestList; in ProcessThreadableEdges()
1102 BasicBlock *OnlyDest = 0; in ProcessThreadableEdges()
1103 BasicBlock *MultipleDestSentinel = (BasicBlock*)(intptr_t)~0ULL; in ProcessThreadableEdges()
1106 BasicBlock *Pred = PredValues[i].second; in ProcessThreadableEdges()
1117 BasicBlock *DestBB; in ProcessThreadableEdges()
1147 BasicBlock *MostPopularDest = OnlyDest; in ProcessThreadableEdges()
1154 SmallVector<BasicBlock*, 16> PredsToFactor; in ProcessThreadableEdges()
1157 BasicBlock *Pred = PredToDestList[i].first; in ProcessThreadableEdges()
1183 BasicBlock *BB = PN->getParent(); in ProcessBranchOnPHI()
1187 SmallVector<BasicBlock*, 1> PredBBs; in ProcessBranchOnPHI()
1195 BasicBlock *PredBB = PN->getIncomingBlock(i); in ProcessBranchOnPHI()
1213 BasicBlock *BB = BO->getParent(); in ProcessBranchOnXOR()
1280 SmallVector<BasicBlock*, 8> BlocksToFoldInto; in ProcessBranchOnXOR()
1317 static void AddPHINodeEntriesForMappedBlock(BasicBlock *PHIBB, in AddPHINodeEntriesForMappedBlock()
1318 BasicBlock *OldPred, in AddPHINodeEntriesForMappedBlock()
1319 BasicBlock *NewPred, in AddPHINodeEntriesForMappedBlock()
1321 for (BasicBlock::iterator PNI = PHIBB->begin(); in AddPHINodeEntriesForMappedBlock()
1341 bool JumpThreading::ThreadEdge(BasicBlock *BB, in ThreadEdge()
1342 const SmallVectorImpl<BasicBlock*> &PredBBs, in ThreadEdge()
1343 BasicBlock *SuccBB) { in ThreadEdge()
1368 BasicBlock *PredBB; in ThreadEdge()
1390 BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), in ThreadEdge()
1395 BasicBlock::iterator BI = BB->begin(); in ThreadEdge()
1431 for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) { in ThreadEdge()
1490 bool JumpThreading::DuplicateCondBranchOnPHIIntoPred(BasicBlock *BB, in DuplicateCondBranchOnPHIIntoPred()
1491 const SmallVectorImpl<BasicBlock *> &PredBBs) { in DuplicateCondBranchOnPHIIntoPred()
1512 BasicBlock *PredBB; in DuplicateCondBranchOnPHIIntoPred()
1540 BasicBlock::iterator BI = BB->begin(); in DuplicateCondBranchOnPHIIntoPred()
1585 for (BasicBlock::iterator I = BB->begin(); I != BB->end(); ++I) { in DuplicateCondBranchOnPHIIntoPred()
1641 bool JumpThreading::TryToUnfoldSelect(CmpInst *CondCmp, BasicBlock *BB) { in TryToUnfoldSelect()
1651 BasicBlock *Pred = CondLHS->getIncomingBlock(I); in TryToUnfoldSelect()
1684 BasicBlock *NewBB = BasicBlock::Create(BB->getContext(), "select.unfold", in TryToUnfoldSelect()
1697 for (BasicBlock::iterator BI = BB->begin(); in TryToUnfoldSelect()