LLVM: lib/CodeGen/LoopTraversal.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
12
13using namespace llvm;
14
17 assert(MBBNumber < MBBInfos.size() && "Unexpected basic block number.");
18 return MBBInfos[MBBNumber].PrimaryCompleted &&
19 MBBInfos[MBBNumber].IncomingCompleted ==
20 MBBInfos[MBBNumber].PrimaryIncoming &&
21 MBBInfos[MBBNumber].IncomingProcessed == MBB->pred_size();
22}
23
25
27
33
34
35 unsigned MBBNumber = MBB->getNumber();
36 assert(MBBNumber < MBBInfos.size() && "Unexpected basic block number.");
37 MBBInfos[MBBNumber].PrimaryCompleted = true;
38 MBBInfos[MBBNumber].PrimaryIncoming = MBBInfos[MBBNumber].IncomingProcessed;
39 bool Primary = true;
41 while (!Workqueue.empty()) {
43 bool Done = isBlockDone(ActiveMBB);
46 unsigned SuccNumber = Succ->getNumber();
47 assert(SuccNumber < MBBInfos.size() &&
48 "Unexpected basic block number.");
49 if (!isBlockDone(Succ)) {
50 if (Primary)
51 MBBInfos[SuccNumber].IncomingProcessed++;
53 MBBInfos[SuccNumber].IncomingCompleted++;
54 if (isBlockDone(Succ))
56 }
57 }
58 Primary = false;
59 }
60 }
61
62
63
64
66 if (!isBlockDone(MBB))
68
69
70 }
71
73
74 return MBBTraversalOrder;
75}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file builds on the ADT/GraphTraits.h file to build a generic graph post order iterator.
TraversalOrder traverse(MachineFunction &MF)
Definition LoopTraversal.cpp:24
SmallVector< TraversedMBBInfo, 4 > TraversalOrder
Identifies basic blocks that are part of loops and should to be visited twice and returns efficient t...
unsigned pred_size() const
int getNumber() const
MachineBasicBlocks are uniquely numbered at the function level, unless they're not in a MachineFuncti...
iterator_range< succ_iterator > successors()
unsigned getNumBlockIDs() const
getNumBlockIDs - Return the number of MBB ID's allocated.
void assign(size_type NumElts, ValueParamT Elt)
void push_back(const T &Elt)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
This is an optimization pass for GlobalISel generic memory operations.