Llvm 检查icmp指令中的sgt
对于上述指令,我如何检查icmp指令是否包含sgt或slt?对您的问题的直接回答是将此代码放置在自定义的Llvm 检查icmp指令中的sgt,llvm,Llvm,对于上述指令,我如何检查icmp指令是否包含sgt或slt?对您的问题的直接回答是将此代码放置在自定义的FunctionPass中: %4 = icmp sgt i32 %2, %3 它将转储: %0 = load i32* %argc.addr, align 4 %cmp = icmp sgt i32 %0, 0 因此,只要看一下它,您就知道您需要ICmpInst,并且谓词是ICMP\u SGT 在某个文本IR上运行C++后端,在 .ll < /C>文件中,您只需执行: Lo
FunctionPass
中:
%4 = icmp sgt i32 %2, %3
它将转储:
%0 = load i32* %argc.addr, align 4
%cmp = icmp sgt i32 %0, 0
因此,只要看一下它,您就知道您需要ICmpInst
,并且谓词是ICMP\u SGT
在某个文本IR上运行C++后端,在<代码> .ll < /C>文件中,您只需执行:
LoadInst* int32_19 = new LoadInst(ptr_argc_addr, "", false, label_entry_15);
int32_19->setAlignment(4);
ICmpInst* int1_cmp = new ICmpInst(*label_entry_15, ICmpInst::ICMP_SGT, int32_19, const_int32_8, "cmp");
BranchInst::Create(label_if_then, label_if_else, int1_cmp, label_entry_15);
希望这有帮助 以下是您问题的解决方案:
llc -march=cpp -cppgen=program irfile.ll
ICmpInst*ICC=dyn_cast(inst);
llvm::CmpInst::Predicate pr=ICC->getSignedPredicate();
开关(pr){
案例CmpInst::ICMP_SGT:errs()
llc -march=cpp -cppgen=program irfile.ll
ICmpInst *ICC=dyn_cast<ICmpInst>(inst);
llvm::CmpInst::Predicate pr=ICC->getSignedPredicate();
switch(pr){
case CmpInst::ICMP_SGT: errs()<<"------>SGT\n"; break;
case CmpInst::ICMP_SLT: errs()<<"------>SLT\n"; break;
case CmpInst::ICMP_SGE: errs()<<"------>SGE\n"; break;
case CmpInst::ICMP_SLE: errs()<<"------>SLE\n"; break;
}