LLVM 13.1 new Pass插件形式 [for win]

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

LLVM 13.1 new Pass插件形式 [for win]

4大关键点:

  1. LLVM 13.1版本(当前最新版)
  2. windows平台上的pass demo
  3. new pass形式(非legacy)
  4. clang 动态插件形式(pass插件与llvm本体编译分离)

背景:
当前外部资料均为老版本LLVM + legacy模式的pass,和当前llvm版本脱节,新模式下没找到资料就自己研究了下,具体新旧LLVM版本对pass的编写有啥影响,具体原因是啥,怎么做能兼容旧版本见我的上一篇文章(设计新旧异同分析的原理与思路)

操作步骤
(后续所有步骤若目录不一致需自行改动目录结构,不赘述)

  1. 建立:D:\Code\llvm-project文件夹,放入名为clang的源码文件夹,和名为llvm的源码文件夹,再在此目录新建一个MyCustom文件夹用以存放我们的动态插件工程(版本LLVM 13.1)
  2. 按照我的上一篇文章介绍的步骤1~3构建好x64release版本的clang&llvm(新旧pass对llvm和clang的构建并无区别),编译较慢且CPU占用高请找空闲时间完成
  3. 切换至D:\Code\llvm-project\llvm\build\Release\bin目录键入.\clang.exe --version命令确保输出如下形式
clang version 13.0.1
Target: x86_64-pc-windows-msvc
...
  1. 新建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) {
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值