------- Comment #6 from sliao at google dot com 2010-01-07 09:18 -------
For the trunk snapshot of 20100102, GCC 4.5.0 indeed removes most of the
redundancy. However, -O1 and -Os still produce an extra instruction, while -O2
doesn't. Do we care about an extra instruction below? Thanks.
The instruction is marked as "redundant" below.
GCC trunk's -Os:
Disassembly of section .text:
00000000 <test>:
0: e59f3024 ldr r3, [pc, #36] ; 2c <test+0x2c>
4: e3a02000 mov r2, #0
8: e5832000 str r2, [r3]
c: e59f301c ldr r3, [pc, #28] ; 30 <test+0x30>
10: e5932000 ldr r2, [r3]
14: e59f3018 ldr r3, [pc, #24] ; 34 <test+0x34>
18: e3520000 cmp r2, #0
1c: 13a02002 movne r2, #2
20: 03a02000 moveq r2, #0 ;redundant
24: e5c32000 strb r2, [r3]
28: e12fff1e bx lr
...
GCC trunk's -O1:
Disassembly of section .text:
00000000 <test>:
0: e3a02000 mov r2, #0
4: e59f3020 ldr r3, [pc, #32] ; 2c <test+0x2c>
8: e5832000 str r2, [r3]
c: e59f301c ldr r3, [pc, #28] ; 30 <test+0x30>
10: e5932000 ldr r2, [r3]
14: e3520000 cmp r2, #0
18: 13a02002 movne r2, #2
1c: 03a02000 moveq r2, #0 ;redundant
20: e59f300c ldr r3, [pc, #12] ; 34 <test+0x34>
24: e5c32000 strb r2, [r3]
28: e12fff1e bx lr
...
Below, GCC trunk's -O2 doesn't produce the redundant instruction.
-O2:
Disassembly of section .text:
00000000 <test>:
0: e59f3020 ldr r3, [pc, #32] ; 28 <test+0x28>
4: e59f2020 ldr r2, [pc, #32] ; 2c <test+0x2c>
8: e5933000 ldr r3, [r3]
c: e3a01000 mov r1, #0
10: e3530000 cmp r3, #0
14: e5821000 str r1, [r2]
18: e59f2010 ldr r2, [pc, #16] ; 30 <test+0x30>
1c: 13a03002 movne r3, #2
20: e5c23000 strb r3, [r2]
24: e12fff1e bx lr
...
--
sliao at google dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jingyu at google dot com,
| |dougkwan at google dot com,
| |carrot at google dot com
Status|RESOLVED |REOPENED
Resolution|WONTFIX |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42494