방문 * 메소드를 무시할 때 명령문의 기본 블록 ID (blockID)를 얻으려면 어떻게해야합니까?방문 * 메소드 내에서 명령문의 기본 블록 ID를 얻는 방법
아래의 기본 블록에서 VisitIfStmt()를 방문하면이 방문 메소드에서 blockID를 얻는 방법은 입니까?
[B4]
1 : X == 0
T : 만약 [B4.1]
Preds (1) : B6
Succs (2) : B3의 B2
방문 * 메소드를 무시할 때 명령문의 기본 블록 ID (blockID)를 얻으려면 어떻게해야합니까?방문 * 메소드 내에서 명령문의 기본 블록 ID를 얻는 방법
아래의 기본 블록에서 VisitIfStmt()를 방문하면이 방문 메소드에서 blockID를 얻는 방법은 입니까?
[B4]
1 : X == 0
T : 만약 [B4.1]
Preds (1) : B6
Succs (2) : B3의 B2
넌 LLVM을 사용하려고 할 :: PHINode :: getBasicBlockIndex (const BasicBlock * BB).
이전 질문이지만 최근에 같은 대답을해야했습니다. 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();