【发布时间】:2021-12-20 18:51:05
【问题描述】:
所以我在 LLVM 中找到了 InstVisitor 类,它令人耳目一新,可以遍历函数并查看我感兴趣的指令。我能够让它工作的一个简单的实现如下:
class MyInstVisitor : public InstVisitor <MyInstVisitor> {
public:
void visitLoadInst(Instruction &I) {
errs() << "Load:\t" << I << "\n";
}
};
之后,使用案例如下:
void visitor(Function &F) {
MyInstVisitor MAV;
MAV.visit(F);
for (auto &I : F) {
errs() << I << "\n"; // this traverses a function through for loop
}
}
再环顾四周,我发现了一个InstVisitor的子类,一个我想使用的PtrUseVisitor(https://llvm.org/doxygen/classllvm_1_1PtrUseVisitor.html)(因为我想在定位@之后访问一个指针值的所有用户987654327@).
但是,我一直在努力寻找正确使用它的方法。
我尝试了很多方法,总结一下:
-
PtrUseVisitor不能像InstVisitor那样实例化 - 模板看起来像这样:
llvm::PtrUseVisitor<DerivedT>我也尝试过类似llvm::PtrUseVisitor<Instruction>::visitPtr()的操作,这是不正确的。 - 我想我遗漏了一些关于如何使用继承的子类的内容,但我可以找到一些与基本事物相关的示例(例如从类
Animal继承)
还有更多……现在有点迷失了。
我的主要目标是使用以下成员函数:
PtrUseVisitor::visitPtr()。谁能帮我提供一个如何使用它的例子?
感谢您提供的任何帮助。
【问题讨论】:
标签: c++ inheritance llvm parent-child llvm-c++-api