使用new pm写一个pass

范例来自LLVM Techniques, Tips, and Best Practices Clang and Middle-End Libraries

llvm ir到ir是由一个个pass处理的,从一个ir到另一个ir会改变一些东西

书里面就是说想要给指针变量添加一个noalias属性

书里面使用插件的形式,但是不知道怎么我搞不出来,所以就用嵌入源码的形式,就重新编译的话也不用多久。

头文件,我们主要是在cpp里面实现run方法,这里传的是Function,也就是针对函数的优化

cpp文件的话大概就是扫描函数的参数,然后如果是指针且没有noalias属性,我们给他加上alias属性,在后面是管分析的东西,就先不说了,主要是看怎么在源码里加。

总的来说是按照官网的步骤

头文件路径/llvm-project/llvm/Transforms/Utils/StrictOpt.h

cpp文件路径llvm-project/llvm/lib/Transforms/Utils/StrictOpt.cpp

然后cpp同一个目录下面有个CMakeLists.txx,把cpp加上

然后llvm-project/llvm/lib/Passes/PassBuilder.cpp里加上头文件

同目录下的PassRegistry.def加

前面是你命令行要输入的passs名字,后面是你写的源文件里类的名字

改完这些就和正常一样编译,

build

cd build

使用类似的命令 

cmake -G Ninja \ 
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_INSTALL_PREFIX=/data/share/llvm-install \
-DLLVM_TARGETS_TO_BUILD="RISCV;NVPTX;AMDGPU"\
-DLLVM_ENABLE_PROJECTS="clang;lld" \
-DLLVM_USE_LINKER=lld \
-DLLVM_BUILD_RUNTIME=Off \
../Ilvm

这边需要区分和默认的linux bin下面的llvm工具的关系,我们使用我们构建项目的bin下面llc查看信息会发现没有目标机器

所以我们使用opt的时候要加相关的目标

./opt -mtriple=riscv64-unknown-linux-gnu (.ll文件的位置) --passes=strictopt -S -o (要生成的.ll文件位置)

原ir

经过pass的ir

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值