LLVM 包含一个名为“基于类型的别名分析”( pass source code on github ) 的别名分析,它利用指令中嵌入的 !tbaa
元数据。元数据信息如下:
!1 = metadata !{metadata !2, metadata !2, i64 0}
!2 = metadata !{metadata !"int", metadata !3, i64 0}
!3 = metadata !{metadata !"omnipotent char", metadata !4, i64 0}
!4 = metadata !{metadata !"Simple C/C++ TBAA"}
好像需要clang之类的前端来生成元数据信息。
在不传递任何优化参数(或-O0
)的情况下编译源代码文件无法生成上述元数据。直到现在我才发现我必须至少通过 -O1
来 clang 才能得到这些;问题是我不希望发生其他优化/转换(例如 instcombine )(clang -O1
使用的传递类似于 this answer 呈现的结果)。
有什么办法可以实现这个目标吗?
最佳答案
答案有点过时了。我相信 -disable-llvm-optzns
已被弃用/删除。您可以使用类似这样的驱动程序来执行此操作:
clang -O2 -Xclang -disable-llvm-passes -S -emit-llvm
关于c++ - 有没有什么办法可以告诉 clang 在没有其他优化的情况下生成 TBAA 元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686595/