This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/33970] Missed optimization using unsigned char loop variable
- From: "henning dot m at insightbb dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Nov 2007 21:26:18 -0000
- Subject: [Bug middle-end/33970] Missed optimization using unsigned char loop variable
- References: <bug-33970-15294@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #6 from henning dot m at insightbb dot com 2007-11-01 21:26 -------
(In reply to comment #5)
> Mike, can you provide additional information as to where the bug is?
>
This is the assembly output I get:
Note that r14,r15 is being reserved for variable x when only a single reg is
needed. Strange enough if call sub2 with (x+1) then only one reg is used and
the code decreases by 12 bytes.
000000e8 <main>:
e8: ef 92 push r14
ea: ff 92 push r15
ec: 1f 93 push r17
ee: cf 93 push r28
f0: df 93 push r29
f2: cd b7 in r28, 0x3d ; 61
f4: de b7 in r29, 0x3e ; 62
f6: 21 97 sbiw r28, 0x01 ; 1
f8: 0f b6 in r0, 0x3f ; 63
fa: f8 94 cli
fc: de bf out 0x3e, r29 ; 62
fe: 0f be out 0x3f, r0 ; 63
100: cd bf out 0x3d, r28 ; 61
102: ee 24 eor r14, r14
104: ff 24 eor r15, r15
106: 19 81 ldd r17, Y+1 ; 0x01
108: 8e 2d mov r24, r14
10a: 0e 94 57 00 call 0xae ; 0xae <sub2>
10e: 18 0f add r17, r24
110: 19 83 std Y+1, r17 ; 0x01
112: 08 94 sec
114: e1 1c adc r14, r1
116: f1 1c adc r15, r1
118: 80 e8 ldi r24, 0x80 ; 128
11a: e8 16 cp r14, r24
11c: f1 04 cpc r15, r1
11e: 99 f7 brne .-26 ; 0x106 <main+0x1e>
120: f0 cf rjmp .-32 ; 0x102 <main+0x1a>
00000122 <_exit>:
122: ff cf rjmp .-2 ; 0x122 <_exit>
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33970