【发布时间】:2021-06-20 07:25:30
【问题描述】:
我想看看Roslyn如何优化以下sn-p:
代码
public int F(int n) {
++n;
++n;
++n;
++n;
return n;
}
asm
C.F(Int32)
L0000: inc edx
L0002: inc edx
L0004: inc edx
L0006: inc edx
L0008: mov eax, edx
L000a: ret
问题
为什么 Roslyn 不像 MSVC 这样的提前 C 编译器那样优化它? 4 x INC 较慢(4 个周期延迟与 1 甚至假设 mov 消除,并且比吞吐量所需的多 4 个微指令;https://agner.org/optimize/)。
C它的“等价物”:
int
f(void *dummy_this, int n) {
++n;
++n;
++n;
++n;
return n;
}
asm 来自 MSVC 或带有 __attribute__((ms_abi)) 的 GCC,以使用与 C# asm 相同的 Windows x64 调用约定:https://godbolt.org/z/sK6h7KKcn
f:
lea eax, [rdx+4]
ret
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c# assembly x86-64 compiler-optimization roslyn