llvm pass

发布时间:2024年01月16日

pass们组合在一起,处理IR

而最后的目标代码生成阶段,会生成另一种MIR(Machine IR)

PassManager管理这些pass

pass处理IR之后会改变分析的情况,这些关于IR的信息由?AnalysisManager处理

1、pass

(1)转换pass

比如我们试图给指针变量加上noalias属性

这里返回的是一个分析

(2)分析pass

分析pass返回的也是分析,但是它不改变IR

也就是不管是分析pass还是转换pass,都要返回一个PreservedAnalyses更新最新的信息。

2、分析工具

Printing Pass pipeline details

clang -O0 -Xclang -disable-O0-optnone -emit-llvm -S test.c

-Xclang是传递想要的参数给前端

-disable-O0-optnone 标志用于在编译时告诉 Clang 或 LLVM 编译器即使在 -O0 优化级别也不要自动为每个函数添加 optnone 属性,允许一定程度的优化发生,尽管这些优化仍然会比其他优化级别如 -O1, -O2, -O3-Os 来得少。

-emit-llvm: 这是告诉编译器生成LLVM中间表示(IR)的选项。LLVM IR是一种高级的、与平台无关的汇编语言,可以被LLVM后端编译为特定目标平台的机器代码。

-S: 这是告诉编译器生成汇编代码的选项。当结合-emit-llvm选项使用时,它将生成LLVM IR的文本表示。

之后对生成的.ll使用如下命令

opt -O2 --disable-output --debug-pass-manager test.ll

综上所述,——debug-pass-manager是一个有用的工具,可以查看Pass管道在某个优化级别上运行的Pass及其顺序。了解这些信息可以让您大致了解pass和分析如何与输入IR交互。】

Printing changes to the IR after each Pass

?opt -O2 --disable-output --print-changed ./test.ll

可以打印出经过pass之后改变的IR

也可以针对指定的函数或者一组特点的pass来看

可以只运行前几个管道

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