From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12886 invoked by alias); 1 Nov 2007 21:26:30 -0000 Received: (qmail 12814 invoked by uid 48); 1 Nov 2007 21:26:18 -0000 Date: Thu, 01 Nov 2007 21:26:00 -0000 Message-ID: <20071101212618.12813.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug middle-end/33970] Missed optimization using unsigned char loop variable In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "henning dot m at insightbb dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-11/txt/msg00073.txt.bz2 ------- 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
: 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 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 120: f0 cf rjmp .-32 ; 0x102 00000122 <_exit>: 122: ff cf rjmp .-2 ; 0x122 <_exit> -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33970