21得票2回答
如何使用“ffast-math”进行编译?

我正在尝试对一些Rust代码进行基准测试,但我不知道如何设置"ffast-math"选项。% rustc -C opt-level=3 -C llvm-args='-enable-unsafe-fp-math' unrolled.rs rustc: Unknown command line a...

16得票4回答
为什么这段代码生成的汇编比等价的C++/Clang代码多得多?

我编写了一个简单的 C++ 函数,以便检查编译器是否进行了优化:bool f1(bool a, bool b) { return !a || (a && b); } 之后,我在 Rust 中检查了等效物:fn f1(a: bool, b: bool) -> boo...

15得票1回答
为什么LLVM似乎忽略了Rust的assume内部函数?

LLVM似乎忽略core::intrinsics::assume(..)调用。它们最终会出现在字节码中,但不会改变生成的机器码。例如,考虑以下(无意义)代码: pub fn one(xs: &mut Vec<i32>) { if let Some(x) = xs....

15得票2回答
LLVM opt mem2reg没有效果

我目前在研究LLVM,并尝试编写一些优化器,以便熟悉opt和clang。我编写了一个名为test.c的文件,内容如下:int foo(int aa, int bb, int cc){ int sum = aa + bb; return sum/cc; } 我编译了源代码并生成了...

15得票1回答
为什么Rust优化器不能移除那些无用的指令(在Godbolt编译器浏览器上测试)?

我想查看一个微小的Rust函数的汇编输出:pub fn double(n: u8) -> u8 { n + n } 我使用了Godbolt Compiler Explorer来生成并查看汇编代码(当然,加了-O标志)。它显示出以下结果:example::double: p...

14得票2回答
我可以翻译为:我能强制 Rust 不优化一个单独的函数吗?

我有一个函数,在Rust/LLVM优化时会导致程序崩溃(在发布版本中),而未经优化的代码(调试版本)则可以正常运行。如果比较生成的汇编代码,我甚至无法理解优化器试图实现什么。 可能原因是这个函数使用了内联汇编。 是否有方法告诉Rust在优化时不要处理某些函数,或者我必须关闭所有优化? 这...

13得票1回答
为什么LLVM IR中的空函数不被作为死代码移除?

从这个简单的C程序开始:void nothing(void) {} int main() { int i; for (i = 0; i < 10; ++i) { nothing(); } return 0; } 我的传递输出如下: 注意:IR语句为绿色。; Fun...

13得票2回答
LLVM 中的 C ABI

我有一个使用LLVM编写的编译器,我想提高ABI兼容性。例如,在Windows x86或Linux上,我发现很难找到C ABI规范文档。而我找到的那些是用RAX/EAX等术语解释的,而不是我可以使用的IR术语。 到目前为止,我认为我已经弄清楚了LLVM如何隐式处理聚合-也就是说,它将聚合的成...

12得票1回答
为什么使用-O0选项(针对这个简单的浮点数求和)时,clang生成效率低下的汇编代码?

我正在使用 llvm clang Apple LLVM 版本 8.0.0 (clang-800.0.42.1) 对这段代码进行反汇编: Translated text: Using llvm clang Apple LLVM version 8.0.0 (clang-800.0.42.1),...

12得票1回答
编译器(特别是rustc)是否能真正简化三角形求和过程,避免使用循环?如何实现?

在Blandy和Orendorff的《Programming Rust》的322页上提到了如下说法: ......Rust认识到,计算从1到n的数字的和有一种更简单的方法:总和始终等于n *(n + 1)/ 2。 当然,这是一个相当著名的等式,但编译器如何识别它呢?我猜这是在LLVM优化中...