1

当我们覆盖 visit* 方法时,我们如何获取语句的基本块 ID(blockID)?

例如,对于下面给出的基本块,当访问 VisitIfStmt() 时,如何在此访问方法中获取 blockID?
[B4]
1: x == 0
T: 如果 [B4.1]
Preds (1): B6
Succs (2): B3 B2

4

2 回答 2

1

老问题,但我最近不得不回答同样的问题。您可以使用CFGStmtMap来查询语句的 BBL:

const FunctionDecl* FD = ...;
const CFG* cfg = ...;
std::unique_ptr<ParentMap> PM = llvm::make_unique<ParentMap>(FD->getBody());
std::unique_ptr<CFGStmtMap> CM = llvm::make_unique<CFGStmtMap>(cfg, PM.get());
// do your traversal and for a given Stmt `stmt` you can get
// its containing block:
CFGBlock* stmt_block = CM->getBlock(stmt);
const unsigned int block_id = stmt_block->getBlockID();
于 2015-12-21T09:56:49.247 回答
0

您可以尝试使用 llvm::PHINode::getBasicBlockIndex ( const BasicBlock *BB)。

于 2012-12-18T10:10:57.587 回答