我被要求做一个 LLVM 函数,允许我找到:跳转/分支、加载/存储、调用、“算术和其他类型的指令”。
据我所知,我已经找到了使用 dyn_cast 执行以下代码的 CallInst、LoadInst、StoreInst 和 BranchInst:
for (const Function &F : *M)
for (const BasicBlock &BB : F)
for (const Instruction &I : BB)
if (const StoreInst *SI = dyn_cast<StoreInst>(&I))
count++;;
我正在努力寻找一种方法来提取所有算术和“其他类型”指令。
感谢您的宝贵时间。
最佳答案
可以看到here
使用
if (llvm::isa <llvm::LoadInst> (I))
或llvm::StoreInst
等
对于包含二元运算符的指令,llvm::isa <llvm::BinaryOperator> (I)
无法区分它们。使用
if (!strncmp(I.getOpcodeName(), "add", 4))
或
if (I.getOpcode == llvm::Add)
关于c++ - 如何识别 LLVM/C++ 中的任何类型的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297309/