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

时间:2018-05-11 17:24:08

标签: c++ types casting llvm-clang

我被要求做一个LLVM功能,允许我找到:跳转/分支,加载/存储,调用,算术和其他类型的指令'。

就我设法做的那样,我已经能够找到使用dyn_cast执行以下代码的CallInst,LoadInst,StoreInst和BranchInst:

    pu.c26_year_built > extract(year from pu.C38_UPDT_HEAT) or 
    pu.c26_year_built > extract(year from pu.C35_UPDT_PLUMB) or 
    pu.c26_year_built > extract(year from pu.C34_UPDT_WIRE) or 
    pu.c26_year_built > extract(year from pu.C22_UPDT_ROOF)

我正在努力寻找一种方法来提取所有算术和其他类型的'说明。

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您可以看到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)

您可以找到操作码名称和操作码herehere