【发布时间】:2015-02-25 12:07:22
【问题描述】:
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 才能获得这些;问题是我不希望发生其他优化/转换(例如,instcombine)(clang -O1 使用的通道与this answer 提供的结果相似)。
有没有办法实现这个目标?
【问题讨论】:
-
我不知道一个简单的方法,但一种替代方法是启用 -O1 然后显式禁用 -O1 启用的每个选项
-
@technosaurus 你的意思是在clang中?你能告诉我如何禁用它吗?
-
@technosaurus 是的,我认为该线程应该有所帮助。我正在尝试使用
-mllvm选项,但仍然没有找到启用 tbaa 的方法。