gpt4 book ai didi

llvm:如何获取基本 block 的标签

转载 作者:行者123 更新时间:2023-12-04 00:44:14 28 4
gpt4 key购买 nike

我写了一个 pass 来检测和打印函数中基本 block 的标签,因为我想使用 splitBasicBlock()更远。我是这样写的:

virtual bool runOnModule(Module &M)
{
for(Module::iterator F = M.begin(), E = M.end(); F!= E; ++F)
{
errs()<<"Function:"<<F->getName()<<"\n";
//for(Function::iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
for (iplist<BasicBlock>::iterator iter = F->getBasicBlockList().begin();
iter != F->getBasicBlockList().end();
iter++)
{
BasicBlock* currBB = iter;
errs() << "BasicBlock: " << currBB->getName() << "\n";
}
}
return true;
}

IR 文件如下所示:
; <label>:63                                      ; preds = %43
%64 = load i32* %j, align 4
%65 = sext i32 %64 to i64
%66 = load i8** %tempdst, align 8
%67 = getelementptr inbounds i8* %66, i64 %65
store i8 -1, i8* %67, align 1
br label %73

; <label>:68 ; preds = %43
%69 = load i32* %j, align 4
%70 = sext i32 %69 to i64
%71 = load i8** %tempdst, align 8
%72 = getelementptr inbounds i8* %71, i64 %70
store i8 0, i8* %72, align 1
br label %73

; <label>:73 ; preds = %68, %63
br label %74

但是,我对标签一无所知:
Function:main
BasicBlock:
BasicBlock:
BasicBlock:

这些“未命名”的基本 block 有什么问题?我该怎么办?

最佳答案

虽然 BasicBlocks 可能没有名称(如 hasName() 方法所示),但可以使用 currBB->printAsOperand(errs(), false) 打印唯一的 BasicBlock 标识符。而不是流入errs() currBB->getName() 的值.对于未命名的 BasicBlock,这将提供数字基本 block 表示,例如 %68 .

关于llvm:如何获取基本 block 的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281823/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com