Lines Matching refs:BasicBlock
22 #include "llvm/IR/BasicBlock.h"
75 using BBValuePair = std::pair<BasicBlock *, Value *>;
78 using BBVector = SmallVector<BasicBlock *, 8>;
82 using BBSet = SmallPtrSet<BasicBlock *, 8>;
85 using BB2BBVecMap = MapVector<BasicBlock *, BBVector>;
87 using BBPhiMap = DenseMap<BasicBlock *, PhiMap>;
88 using BBPredicates = DenseMap<BasicBlock *, Value *>;
89 using PredMap = DenseMap<BasicBlock *, BBPredicates>;
90 using BB2BBMap = DenseMap<BasicBlock *, BasicBlock *>;
92 using BranchDebugLocMap = DenseMap<BasicBlock *, DebugLoc>;
154 BasicBlock *Result = nullptr;
158 void addBlock(BasicBlock *BB, bool Remember) {
165 BasicBlock *NewResult = DT->findNearestCommonDominator(Result, BB);
176 void addBlock(BasicBlock *BB) {
180 void addAndRememberBlock(BasicBlock *BB) {
186 BasicBlock *result() { return Result; }
284 void delPhiValues(BasicBlock *From, BasicBlock *To);
286 void addPhiValues(BasicBlock *From, BasicBlock *To);
288 void findUndefBlocks(BasicBlock *PHIBlock,
289 const SmallSet<BasicBlock *, 8> &Incomings,
290 SmallVector<BasicBlock *> &UndefBlks) const;
295 void killTerminator(BasicBlock *BB);
297 void changeExit(RegionNode *Node, BasicBlock *NewExit,
300 BasicBlock *getNextFlow(BasicBlock *Dominator);
302 BasicBlock *needPrefix(bool NeedEmpty);
304 BasicBlock *needPostfix(BasicBlock *Flow, bool ExitUseAllowed);
306 void setPrevNode(BasicBlock *BB);
308 bool dominatesPredicates(BasicBlock *BB, RegionNode *Node);
312 void wireFlow(bool ExitUseAllowed, BasicBlock *LoopEnd);
314 void handleLoops(bool ExitUseAllowed, BasicBlock *LoopEnd);
436 BasicBlock *Exit = N->getNodeAs<Region>()->getExit();
442 BasicBlock *BB = N->getNodeAs<BasicBlock>();
445 for (BasicBlock *Succ : Term->successors())
467 BasicBlock *BB = N->getEntry();
471 for (BasicBlock *P : predecessors(BB)) {
481 BasicBlock *Succ = Term->getSuccessor(i);
489 BasicBlock *Other = Term->getSuccessor(!i);
513 BasicBlock *Entry = R->getEntry();
552 for (BasicBlock &BB : *Func) {
567 BasicBlock *Parent = Term->getParent();
568 BasicBlock *SuccTrue = Term->getSuccessor(0);
569 BasicBlock *SuccFalse = Term->getSuccessor(1);
581 for (std::pair<BasicBlock *, Value *> BBAndPred : Preds) {
582 BasicBlock *BB = BBAndPred.first;
628 void StructurizeCFG::delPhiValues(BasicBlock *From, BasicBlock *To) {
644 void StructurizeCFG::addPhiValues(BasicBlock *From, BasicBlock *To) {
657 BasicBlock *PHIBlock, const SmallSet<BasicBlock *, 8> &Incomings,
658 SmallVector<BasicBlock *> &UndefBlks) const {
683 SmallSet<BasicBlock *, 8> VisitedBlock;
684 SmallVector<BasicBlock *, 8> Stack;
699 BasicBlock *Current = Stack.pop_back_val();
718 BasicBlock *To = AddedPhi.first;
724 SmallVector<BasicBlock *> UndefBlks;
734 SmallSet<BasicBlock *, 8> Incomings;
735 SmallVector<BasicBlock *> ConstantPreds;
754 [&](BasicBlock *CP) { return DT->dominates(CP, UB); }))
759 for (BasicBlock *FI : From)
793 void StructurizeCFG::killTerminator(BasicBlock *BB) {
798 for (BasicBlock *Succ : successors(BB))
805 void StructurizeCFG::changeExit(RegionNode *Node, BasicBlock *NewExit,
809 BasicBlock *OldExit = SubRegion->getExit();
810 BasicBlock *Dominator = nullptr;
814 for (BasicBlock *BB : llvm::make_early_inc_range(predecessors(OldExit))) {
839 BasicBlock *BB = Node->getNodeAs<BasicBlock>();
850 BasicBlock *StructurizeCFG::getNextFlow(BasicBlock *Dominator) {
852 BasicBlock *Insert = Order.empty() ? ParentRegion->getExit() :
854 BasicBlock *Flow = BasicBlock::Create(Context, FlowBlockName,
869 BasicBlock *StructurizeCFG::needPrefix(bool NeedEmpty) {
870 BasicBlock *Entry = PrevNode->getEntry();
879 BasicBlock *Flow = getNextFlow(Entry);
888 BasicBlock *StructurizeCFG::needPostfix(BasicBlock *Flow,
893 BasicBlock *Exit = ParentRegion->getExit();
900 void StructurizeCFG::setPrevNode(BasicBlock *BB) {
906 bool StructurizeCFG::dominatesPredicates(BasicBlock *BB, RegionNode *Node) {
908 return llvm::all_of(Preds, [&](std::pair<BasicBlock *, Value *> Pred) {
922 for (std::pair<BasicBlock*, Value*> Pred : Preds) {
923 BasicBlock *BB = Pred.first;
939 BasicBlock *LoopEnd) {
951 BasicBlock *Flow = needPrefix(false);
954 BasicBlock *Entry = Node->getEntry();
955 BasicBlock *Next = needPostfix(Flow, ExitUseAllowed);
976 BasicBlock *LoopEnd) {
978 BasicBlock *LoopStart = Node->getEntry();
998 BasicBlock *Next = needPostfix(LoopEnd, ExitUseAllowed);
1009 BasicBlock *Exit = ParentRegion->getExit();
1035 for (BasicBlock *BB : ParentRegion->blocks())