Nei*_*ral 6 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++;;
Run Code Online (Sandbox Code Playgroud)
我正在努力寻找一种提取所有算术和“其他类型”指令的方法。
谢谢你的时间。
你可以在这里看到
用
if (llvm::isa <llvm::LoadInst> (I))
Run Code Online (Sandbox Code Playgroud)
或llvm::StoreInst等。
对于包含二元运算符的指令,llvm::isa <llvm::BinaryOperator> (I)无法区分它们。用
if (!strncmp(I.getOpcodeName(), "add", 4))
Run Code Online (Sandbox Code Playgroud)
或者
if (I.getOpcode == llvm::Add)
Run Code Online (Sandbox Code Playgroud)
您可以在此处和此处找到 OpcodeNames 和 Opcode
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |