forked from OSchip/llvm-project
Moved tracking of CFG block IDs into the CFG class.
Added CFG::getNumBlockIDs() to query the number of distinct block ids created. llvm-svn: 41724
This commit is contained in:
parent
7db004df78
commit
813dd67a34
|
@ -63,7 +63,6 @@ class CFGBuilder : public StmtVisitor<CFGBuilder,CFGBlock*> {
|
|||
CFGBlock* ContinueTargetBlock;
|
||||
CFGBlock* BreakTargetBlock;
|
||||
CFGBlock* SwitchTerminatedBlock;
|
||||
unsigned NumBlocks;
|
||||
|
||||
// LabelMap records the mapping from Label expressions to their blocks.
|
||||
typedef llvm::DenseMap<LabelStmt*,CFGBlock*> LabelMapTy;
|
||||
|
@ -81,8 +80,7 @@ class CFGBuilder : public StmtVisitor<CFGBuilder,CFGBlock*> {
|
|||
public:
|
||||
explicit CFGBuilder() : cfg(NULL), Block(NULL), Succ(NULL),
|
||||
ContinueTargetBlock(NULL), BreakTargetBlock(NULL),
|
||||
SwitchTerminatedBlock(NULL),
|
||||
NumBlocks(0) {
|
||||
SwitchTerminatedBlock(NULL) {
|
||||
// Create an empty CFG.
|
||||
cfg = new CFG();
|
||||
}
|
||||
|
@ -194,7 +192,7 @@ CFG* CFGBuilder::buildCFG(Stmt* Statement) {
|
|||
/// createBlock - Used to lazily create blocks that are connected
|
||||
/// to the current (global) succcessor.
|
||||
CFGBlock* CFGBuilder::createBlock(bool add_successor) {
|
||||
CFGBlock* B = cfg->createBlock(NumBlocks++);
|
||||
CFGBlock* B = cfg->createBlock();
|
||||
if (add_successor && Succ) B->addSuccessor(Succ);
|
||||
return B;
|
||||
}
|
||||
|
@ -894,11 +892,11 @@ CFGBlock* CFGBuilder::VisitIndirectGotoStmt(IndirectGotoStmt* I) {
|
|||
/// block has no successors or predecessors. If this is the first block
|
||||
/// created in the CFG, it is automatically set to be the Entry and Exit
|
||||
/// of the CFG.
|
||||
CFGBlock* CFG::createBlock(unsigned blockID) {
|
||||
CFGBlock* CFG::createBlock() {
|
||||
bool first_block = begin() == end();
|
||||
|
||||
// Create the block.
|
||||
Blocks.push_front(CFGBlock(blockID));
|
||||
Blocks.push_front(CFGBlock(NumBlockIDs++));
|
||||
|
||||
// If this is the first block, set it as the Entry and Exit.
|
||||
if (first_block) Entry = Exit = &front();
|
||||
|
|
|
@ -179,9 +179,10 @@ class CFG {
|
|||
CFGBlock* IndirectGotoBlock; // Special block to contain collective dispatch
|
||||
// for indirect gotos
|
||||
CFGBlockListTy Blocks;
|
||||
unsigned NumBlockIDs;
|
||||
|
||||
public:
|
||||
CFG() : Entry(NULL), Exit(NULL), IndirectGotoBlock(NULL) {};
|
||||
CFG() : Entry(NULL), Exit(NULL), IndirectGotoBlock(NULL), NumBlockIDs(0) {};
|
||||
~CFG() {};
|
||||
|
||||
// Block iterators
|
||||
|
@ -213,7 +214,9 @@ public:
|
|||
|
||||
// Utility
|
||||
|
||||
CFGBlock* createBlock(unsigned blockID);
|
||||
CFGBlock* createBlock();
|
||||
unsigned getNumBlockIDs() const { return NumBlockIDs; }
|
||||
|
||||
static CFG* buildCFG(Stmt* AST);
|
||||
void viewCFG() const;
|
||||
void print(std::ostream& OS) const;
|
||||
|
|
Loading…
Reference in New Issue