我试图在不同的目标上执行一堆操作,例如 ARM、Bfin ......但是每次我用 C 编写一个简单的代码然后为每个操作编译它时,它都有 2 个加载和一个存储,这是不必要的对于每个操作。
ldr r2, [fp, #-24]
ldr r3, [fp, #-28]
add r3, r2, r3
str r3, [fp, #-20]
ldr r2, [fp, #-36]
ldr r3, [fp, #-40]
add r3, r2, r3
str r3, [fp, #-32]
ldr r2, [fp, #-44]
ldr r3, [fp, #-48]
add r3, r2, r3
str r3, [fp, #-20]
ldr r3, [fp, #-16]
add r3, r3, #1
str r3, [fp, #-16]
当我打开任何优化选项时,甚至-O1
,它都会简单地计算结果并将其存储在输出中:
subl $24, %esp
movl $4, 4(%esp)
movl $.LC0, (%esp)
无论如何,我可以在不一遍又一遍地获取相同变量的情况下进行操作吗?我试过了gcc -fgcse-lm
,-fgcse-sm
但没有奏效。