【问题标题】:Correct way to use PtrUseVisitor Class in LLVM在 LLVM 中使用 PtrUseVisitor 类的正确方法
【发布时间】: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的子类,一个我想使用的PtrUseVisitorhttps://llvm.org/doxygen/classllvm_1_1PtrUseVisitor.html)(因为我想在定位@之后访问一个指针值的所有用户987654327@).

但是,我一直在努力寻找正确使用它的方法。

我尝试了很多方法,总结一下:

  1. PtrUseVisitor 不能像 InstVisitor 那样实例化
  2. 模板看起来像这样:llvm::PtrUseVisitor&lt;DerivedT&gt; 我也尝试过类似llvm::PtrUseVisitor&lt;Instruction&gt;::visitPtr() 的操作,这是不正确的。
  3. 我想我遗漏了一些关于如何使用继承的子类的内容,但我可以找到一些与基本事物相关的示例(例如从类 Animal 继承)

还有更多……现在有点迷失了。

我的主要目标是使用以下成员函数: PtrUseVisitor::visitPtr()。谁能帮我提供一个如何使用它的例子?

感谢您提供的任何帮助。

【问题讨论】:

    标签: c++ inheritance llvm parent-child llvm-c++-api


    【解决方案1】:

    看看SROA pass,它定义了一个类AllocaSlices::SliceBuilder,它继承自PtrUseVisitor。如果您在该类中查找对 Base:: 方法的调用,这些方法正在使用 PtrUseVisitor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-28
      相关资源
      最近更新 更多