[英]Why does gcc create redundant assembly code?
我想研究如何将某些C / C ++功能转换为程序集,并创建了以下文件:
struct foo {
int x;
char y[0];
};
char *bar(struct foo *f)
{
return f->y;
}
然后,我用gcc -S
编译了该代码(并且还尝试了g++ -S
),但是当我查看汇编代码时,我很失望地在bar函数中发现微不足道的冗余,我认为gcc
应该可以优化它:
_bar:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
movq %rdi, -8(%rbp)
movq -8(%rbp), %rax
movabsq $4, %rcx
addq %rcx, %rax
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
popq %rbp
ret
Leh_func_end1:
除其他外,线
movq %rax, -24(%rbp)
movq -24(%rbp), %rax
movq %rax, -16(%rbp)
movq -16(%rbp), %rax
似乎毫无意义地多余。 gcc(可能还有其他编译器)是否有任何理由不能/不对此进行优化?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.