c++ - 如何识别 LLVM/C++ 中的任何类型的指令?

标签 c++ types casting llvm-clang

我被要求做一个 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)

您可以找到 OpcodeNames 和 Opcode herehere

关于c++ - 如何识别 LLVM/C++ 中的任何类型的指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297309/

相关文章:

c++ - 如何知道Windows XP 或7 中是否安装了MSSql Server?

c++ - 动态多态内存容器 - 返回值不正确

javascript - 配置 Flow 以忽略 React Native 上的 "Missing type annotation for ..."错误

c++ - 如果 void() 不返回值,我们为什么要使用它?

c++ - 调用 QueryPerformanceCounter 时会发生什么?

试图重载模板类中的/运算符的 C++ 错误

types - julia 子类型化参数父类(super class)型时类型不正确

c - 以下算术和是否需要强制转换?

c++ - 在 C++ 中使用 ibpp 时从和到 void * 的无效转换

c++ - 可以禁止 C++ 中的隐式转换吗?