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。我不想插入指令,只想转换值。我想出来了,我会发布答案我不想插入指令,只想转换值。我想出来了,我会发布答案