如何让Rustc 1.87.0输出LLVM优化统计信息与优化备注?
如何让Rustc 1.87.0输出LLVM优化统计信息与优化备注?
嘿,我之前也踩过一模一样的坑!明明LLVM能识别这些选项(输错正则会报错就是最好的证明),但就是没任何输出,核心原因其实是两个容易忽略的小细节:shell的通配符解析,以及LLVM输出的处理逻辑。
1. 先搞定Shell通配符的坑(针对--pass-remarks)
你写的--pass-remarks=.*里的.*是正则表达式,但在bash/zsh这类shell中,.*会被当成当前目录下的所有隐藏文件/目录解析替换——也就是说,LLVM实际收到的根本不是你要的正则,而是一堆文件名!这就难怪没输出了。
解决方法超简单:把整个LLVM参数用双引号包裹,阻止shell解析通配符。比如:
rustc +mytoolchain --crate-type=rlib --emit=asm -O -Cllvm-args="--pass-remarks=.*" tmp.rs
2. 让--stats输出可见:指定输出文件
LLVM的--stats默认是输出到stderr,但rustc可能会把LLVM的stderr输出捕获或重定向,导致终端看不到内容。这时候你可以直接指定输出文件,强制LLVM把统计信息写入文件:
rustc +mytoolchain --crate-type=rlib --emit=asm -O -Cllvm-args="--stats --stats-output=llvm_optim_stats.txt" tmp.rs
执行完后,当前目录下会生成llvm_optim_stats.txt,里面就是LLVM的优化统计数据。
3. 一个不能忘的基础前提:必须开启优化
LLVM的优化统计和备注只有在优化阶段被触发时才会有内容,所以你必须加上-O(等价于-C opt-level=2)或者更高的优化等级(比如-C opt-level=3或-C opt-level=s)。你已经加了-O,这步做对了,但还是要提一下,避免其他人踩坑。
最后验证一下
你可以创建一个有明显优化空间的tmp.rs(比如写个简单的冗余计算或者循环),然后用上面带引号的命令执行,应该就能看到终端输出优化备注,或者生成对应的统计文件了。
内容来源于stack exchange
相关产品推荐
相关产品推荐

