c++ - 有没有什么办法可以告诉 clang 在没有其他优化的情况下生成 TBAA 元数据?

标签 c++ c clang llvm

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/

相关文章:

c++ - 为什么打印字符串数组输出十六进制?

使用 MACRO 将 sprintf 转换为 snprintf

macos - clang 和 libc++ istream::peek() 不设置 eof 标志

objective-c - 为什么 clang 优化会破坏我的内联汇编代码?

c++ - Clang 3.1 和用户定义的文字

c++ - OpenCV 3.4.0 - 未找到 zlibd1.dll

c++ - BitBlt 问题 GDI

有人可以解释我程序中 fgets 的行为吗?

c++ - 是否可以使用 Boost.Hana 进行反序列化?

c - 用空格分隔字符串并将其存储在指针数组中