Llvm 检查icmp指令中的sgt

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

对于上述指令,我如何检查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>文件中,您只需执行:

  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;
}