LLVM包含一个名为“基于类型的别名分析”(在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才能得到这些;问题是,我不希望发生其他优化/转换(例如,不合并) ( clang -O1使用的传递类似于这个答案提供的结果)。
是否有办法达到这一目标?
发布于 2015-01-05 21:33:18
我不建议它用于生产,但你可以这样做:
clang -cc1 -O1 -no-struct-path-tbaa -禁用-llvm-optzns foo.cpp -emit-llvm -o -
要查看TBAA元数据(如果您也想查看该元数据,请删除-no struct tbaa)。
否则,您可以很容易地修改clang,使其始终打开TBAA元数据。
发布于 2020-05-18 14:15:52
答案有点过时了。我认为-disable-llvm-optzns已被废弃/删除。您可以使用这样的方法对驱动程序执行此操作:
clang -O2 -Xclang -disable-llvm-passes -S -emit-llvm
https://stackoverflow.com/questions/27686595
复制相似问题