LLVM 13.1 new Pass插件形式 [for win]
4大关键点:
- LLVM 13.1版本(当前最新版)
- windows平台上的pass demo
- new pass形式(非legacy)
- clang 动态插件形式(pass插件与llvm本体编译分离)
背景:
当前外部资料均为老版本LLVM + legacy模式的pass,和当前llvm版本脱节,新模式下没找到资料就自己研究了下,具体新旧LLVM版本对pass的编写有啥影响,具体原因是啥,怎么做能兼容旧版本见我的上一篇文章(设计新旧异同分析的原理与思路)
操作步骤
(后续所有步骤若目录不一致需自行改动目录结构,不赘述)
- 建立:D:\Code\llvm-project文件夹,放入名为clang的源码文件夹,和名为llvm的源码文件夹,再在此目录新建一个MyCustom文件夹用以存放我们的动态插件工程(版本LLVM 13.1)
- 按照我的上一篇文章介绍的步骤1~3构建好x64release版本的clang&llvm(新旧pass对llvm和clang的构建并无区别),编译较慢且CPU占用高请找空闲时间完成
- 切换至D:\Code\llvm-project\llvm\build\Release\bin目录键入
.\clang.exe --version命令确保输出如下形式
clang version 13.0.1
Target: x86_64-pc-windows-msvc
...
- 新建D:\Code\llvm-project\MyCustom\src文件夹,在其中新建文件MyPass.cpp并写入
#include <llvm/IR/PassManager.h>
#include <llvm/IR/Module.h>
#include <llvm/Pass.h>
#include <llvm/Passes/PassBuilder.h>
#include <llvm/Passes/PassPlugin.h>
using namespace llvm;
// test for my custom pass
class MyCustomPass : public PassInfoMixin<MyCustomPass> {
public:
PreservedAnalyses run(Module& M, ModuleAnalysisManager& AM)
{
for (auto& f : M) {

本文档详细介绍了如何在Windows平台上使用LLVM13.1版本开发新的Pass插件,采用非legacy的新Pass形式,并以动态插件的方式实现与LLVM本体的分离编译。通过创建C++源码、配置CMakeLists.txt和修改LLVM源码来加载插件,最后成功测试运行。此教程对于新版LLVM Pass开发具有指导意义。
1321

被折叠的 条评论
为什么被折叠?



