将 i1 类型转换为整数值

web*_*key 5 llvm llvm-clang llvm-ir llvm-c++-api

对于下面的分支指令

br i1 %cmp, label %if.then, label %if.end, !dbg !35
Run Code Online (Sandbox Code Playgroud)

由于llvm是SSA,我可以直接访问操作数0,来判断比较是否正确。该类型的计算结果为 i1,但我在提取该值时遇到问题(true 或 false)

BranchInst &I;
Value *val = I.getOperand(0);
Run Code Online (Sandbox Code Playgroud)

类型产生 i1 类型,但是当我尝试转换为

ConstantInt *cint = dyn_cast<ConstantInt>(val)铸造似乎不起作用?我该怎么办

web*_*key 10

回答我自己的问题

 BranchInst &I;
    Module* module;
    IRBuilder<> irbuilder(&I);
    Value* value = irbuilder.CreateIntCast(I.getCondition(),
Type::getInt32Ty(module->getContext()), false);
Run Code Online (Sandbox Code Playgroud)

这应该将 i1 转换为 i32。