编写自定义的LLVM

发布时间:2024年01月07日

今晚反思了一下,自己最近看的东西太发散了,只有一个模糊的主题——LLVM,然后看了很多作者的一系列文章,但是这些文章比较多而杂,大多数都是一个系列,且较为发散,近来又喜欢发现一个作者便将该作者的一系列文章进行阅读,然后其中引用了另一个作者的文章,又要读一大箩筐,这样铺的太开而没有线,今后还是以一个较为固定且细致的主题发布博文,这样也方便读者查找和掌握重点,用到的资料以链接的形式附在文中,如果某天的资料没有看完,仍可以将链接附在文中,以飨读者。
本文主要是阅读LLVM的文档,LLVM的UserGuide里面有两篇Writing an LLVM Pass,二者的区别是前者是LLVM旧的PassManager,后者是NewPassManager,这一点从链接也可以看出,本文研读的是后者。

Unlike passes under the legacy pass manager where the pass interface is defined via inheritance, passes under the new pass manager rely on concept-based polymorphism, meaning there is no explicit interface (see comments in PassManager.h for more details)
新的PassManager不是基于继承体系的,而是依赖基于概念的多态。
All LLVM passes inherit from the CRTP mix-in PassInfoMixin. The pass should have a run() method which returns a PreservedAnalyses and takes in some unit of IR along with an analysis manager. For example, a function pass would have a PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); method.
新的PassManager的run函数,返回值统一为PreservedAnalyses,两个参数分别为IR单元(例如Instruction, BasicBlock, Function)和一个AnalysisManager。

还是遇到了这个问题,即没有使用源码编译的Debug方法配置环境,很多文件不存在源码,如果仅仅是想测试一下自己编写的Pass,并不需要注册到LLVM中成为一个pass,仍然可以使用之前提及的方式使用Pass。

文章来源:https://blog.csdn.net/weixin_45207619/article/details/135433297
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。