首页 > 解决方案 > x86-64 GCC 生成将寄存器移动到自身的代码

问题描述

我尝试在 Compiler Explorer 上编译以下代码:

int index(int *arr, unsigned int i) {
    return arr[i];
}

使用x86-64 gcc 11.2,-O2生成以下代码:

index(int*, unsigned int):
    mov     esi, esi
    mov     eax, DWORD PTR [rdi+rsi*4]
    ret

我已经看到了这个答案,它说将寄存器移动到自身是“低效的 NOP”,并被认为是“从非优化编译器生成代码的产物”。

为什么 GCC 会mov esi, esi在此处生成-O2

https://godbolt.org/z/bE4xhc8Tx

标签: cassemblyx86x86-64

解决方案


推荐阅读