Lines Matching refs:BasicBlock
23 #include "llvm/IR/BasicBlock.h"
76 using BBValuePair = std::pair<BasicBlock *, Value *>;
79 using BBVector = SmallVector<BasicBlock *, 8>;
83 using BBSet = SmallPtrSet<BasicBlock *, 8>;
86 using BB2BBVecMap = MapVector<BasicBlock *, BBVector>;
88 using BBPhiMap = DenseMap<BasicBlock *, PhiMap>;
128 using BBPredicates = DenseMap<BasicBlock *, PredInfo>;
129 using PredMap = DenseMap<BasicBlock *, BBPredicates>;
130 using BB2BBMap = DenseMap<BasicBlock *, BasicBlock *>;
132 using BranchDebugLocMap = DenseMap<BasicBlock *, DebugLoc>;
194 BasicBlock *Result = nullptr;
198 void addBlock(BasicBlock *BB, bool Remember) {
205 BasicBlock *NewResult = DT->findNearestCommonDominator(Result, BB);
216 void addBlock(BasicBlock *BB) {
220 void addAndRememberBlock(BasicBlock *BB) {
226 BasicBlock *result() { return Result; }
324 void delPhiValues(BasicBlock *From, BasicBlock *To);
326 void addPhiValues(BasicBlock *From, BasicBlock *To);
328 void findUndefBlocks(BasicBlock *PHIBlock,
329 const SmallSet<BasicBlock *, 8> &Incomings,
330 SmallVector<BasicBlock *> &UndefBlks) const;
339 void killTerminator(BasicBlock *BB);
341 void changeExit(RegionNode *Node, BasicBlock *NewExit,
344 BasicBlock *getNextFlow(BasicBlock *Dominator);
346 BasicBlock *needPrefix(bool NeedEmpty);
348 BasicBlock *needPostfix(BasicBlock *Flow, bool ExitUseAllowed);
350 void setPrevNode(BasicBlock *BB);
352 bool dominatesPredicates(BasicBlock *BB, RegionNode *Node);
356 void wireFlow(bool ExitUseAllowed, BasicBlock *LoopEnd);
358 void handleLoops(bool ExitUseAllowed, BasicBlock *LoopEnd);
480 BasicBlock *Exit = N->getNodeAs<Region>()->getExit();
486 BasicBlock *BB = N->getNodeAs<BasicBlock>();
489 for (BasicBlock *Succ : Term->successors())
517 BasicBlock *BB = N->getEntry();
521 for (BasicBlock *P : predecessors(BB)) {
531 BasicBlock *Succ = Term->getSuccessor(i);
539 BasicBlock *Other = Term->getSuccessor(!i);
563 BasicBlock *Entry = R->getEntry();
602 for (BasicBlock &BB : *Func) {
617 BasicBlock *Parent = Term->getParent();
618 BasicBlock *SuccTrue = Term->getSuccessor(0);
619 BasicBlock *SuccFalse = Term->getSuccessor(1);
671 void StructurizeCFG::delPhiValues(BasicBlock *From, BasicBlock *To) {
687 void StructurizeCFG::addPhiValues(BasicBlock *From, BasicBlock *To) {
700 BasicBlock *PHIBlock, const SmallSet<BasicBlock *, 8> &Incomings,
701 SmallVector<BasicBlock *> &UndefBlks) const {
726 SmallSet<BasicBlock *, 8> VisitedBlock;
727 SmallVector<BasicBlock *, 8> Stack;
742 BasicBlock *Current = Stack.pop_back_val();
774 DenseMap<BasicBlock *, Value *> Mergeable(IncomingA.begin(), IncomingA.end());
793 DenseMap<BasicBlock *, SmallVector<BasicBlock *>> UndefBlksMap;
823 SmallVector<BasicBlock *> &UndefBlks = UndefBlksMap[To];
824 SmallSet<BasicBlock *, 8> Incomings;
852 BasicBlock *To = AddedPhi.first;
859 SmallVector<BasicBlock *> &UndefBlks = UndefBlksMap[To];
874 SmallVector<BasicBlock *> ConstantPreds;
887 [&](BasicBlock *CP) { return DT->dominates(CP, UB); }))
896 for (BasicBlock *FI : From)
927 void StructurizeCFG::killTerminator(BasicBlock *BB) {
932 for (BasicBlock *Succ : successors(BB))
939 void StructurizeCFG::changeExit(RegionNode *Node, BasicBlock *NewExit,
943 BasicBlock *OldExit = SubRegion->getExit();
944 BasicBlock *Dominator = nullptr;
948 for (BasicBlock *BB : llvm::make_early_inc_range(predecessors(OldExit))) {
973 BasicBlock *BB = Node->getNodeAs<BasicBlock>();
984 BasicBlock *StructurizeCFG::getNextFlow(BasicBlock *Dominator) {
986 BasicBlock *Insert = Order.empty() ? ParentRegion->getExit() :
988 BasicBlock *Flow = BasicBlock::Create(Context, FlowBlockName,
1003 BasicBlock *StructurizeCFG::needPrefix(bool NeedEmpty) {
1004 BasicBlock *Entry = PrevNode->getEntry();
1013 BasicBlock *Flow = getNextFlow(Entry);
1022 BasicBlock *StructurizeCFG::needPostfix(BasicBlock *Flow,
1027 BasicBlock *Exit = ParentRegion->getExit();
1034 void StructurizeCFG::setPrevNode(BasicBlock *BB) {
1040 bool StructurizeCFG::dominatesPredicates(BasicBlock *BB, RegionNode *Node) {
1042 return llvm::all_of(Preds, [&](std::pair<BasicBlock *, PredInfo> Pred) {
1070 BasicBlock *LoopEnd) {
1082 BasicBlock *Flow = needPrefix(false);
1085 BasicBlock *Entry = Node->getEntry();
1086 BasicBlock *Next = needPostfix(Flow, ExitUseAllowed);
1107 BasicBlock *LoopEnd) {
1109 BasicBlock *LoopStart = Node->getEntry();
1129 BasicBlock *Next = needPostfix(LoopEnd, ExitUseAllowed);
1140 BasicBlock *Exit = ParentRegion->getExit();
1166 for (BasicBlock *BB : ParentRegion->blocks())