相关疑难解决方法(0)

为什么这段代码比同等的C++/Clang生成更多的程序集?

我写了一个简单的C++函数来检查编译器优化:

bool f1(bool a, bool b) {
    return !a || (a && b);
}
Run Code Online (Sandbox Code Playgroud)

之后我检查了Rust中的等价物:

fn f1(a: bool, b: bool) -> bool {
    !a || (a && b)
}
Run Code Online (Sandbox Code Playgroud)

我用godbolt检查汇编器输出.

C++代码的结果(由clang -O3标志编译)如下:

f1(bool, bool):                                # @f1(bool, bool)
    xor     dil, 1
    or      dil, sil
    mov     eax, edi
    ret
Run Code Online (Sandbox Code Playgroud)

Rust等效的结果要长得多:

example::f1:
  push rbp
  mov rbp, rsp
  mov al, sil
  mov cl, dil
  mov dl, cl
  xor dl, -1
  test dl, 1
  mov byte ptr [rbp - 3], al
  mov byte …
Run Code Online (Sandbox Code Playgroud)

optimization rust llvm-codegen

15
推荐指数
2
解决办法
2145
查看次数

标签 统计

llvm-codegen ×1

optimization ×1

rust ×1