Llvm 将i1类型转换为整数值

Llvm 将i1类型转换为整数值,llvm,llvm-clang,llvm-ir,llvm-c++-api,Llvm,Llvm Clang,Llvm Ir,Llvm C++ Api,对于以下分支指令 br i1 %cmp, label %if.then, label %if.end, !dbg !35 因为llvm是SSA,所以我可以直接访问操作数0,以确定比较是否为真。类型的计算结果为i1,但我在提取值时遇到问题(true或false) 类型屈服于i1类型,但当我尝试强制转换为 ConstantInt*cint=dyn_铸造(val)铸造似乎不起作用?我该怎么做呢您希望在代码中使用不同类型的强制转换,而您希望在生成的代码中使用强制转换。Boolean是一位整数类型,因此

对于以下分支指令

br i1 %cmp, label %if.then, label %if.end, !dbg !35
因为llvm是SSA,所以我可以直接访问操作数0,以确定比较是否为真。类型的计算结果为i1,但我在提取值时遇到问题(true或false)

类型屈服于i1类型,但当我尝试强制转换为


ConstantInt*cint=dyn_铸造(val)
铸造似乎不起作用?我该怎么做呢

您希望在代码中使用不同类型的强制转换,而您希望在生成的代码中使用强制转换。Boolean是一位整数类型,因此您可能需要零扩展名
CastInst::Create(CastInst::ZExt,I.getOperand(0),…
应该这样做。

您希望在代码中使用不同类型的强制转换-强制转换,而您希望在生成的代码中使用强制转换,.Boolean是一位整数类型,因此您可能需要零扩展。
CastInst::Create(CastInst::ZExt,I.getOperand(0),…
应该这样做。

回答我自己的问题

 BranchInst &I;
    Module* module;
    IRBuilder<> irbuilder(&I);
    Value* value = irbuilder.CreateIntCast(I.getCondition(),
Type::getInt32Ty(module->getContext()), false);
BranchInst&I;
模块*模块;
IRBuilder&I;
Value*Value=irbuilder.CreateIntCast(I.getCondition(),
类型::getInt32Ty(模块->getContext()),false);

这将把i1转换成i32。

回答我自己的问题

 BranchInst &I;
    Module* module;
    IRBuilder<> irbuilder(&I);
    Value* value = irbuilder.CreateIntCast(I.getCondition(),
Type::getInt32Ty(module->getContext()), false);
BranchInst&I;
模块*模块;
IRBuilder&I;
Value*Value=irbuilder.CreateIntCast(I.getCondition(),
类型::getInt32Ty(模块->getContext()),false);

这应该可以将i1转换为i32。

我不想插入指令,只想转换值。我想出来了,我会发布答案我不想插入指令,只想转换值。我想出来了,我会发布答案