This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c/18424] New: 3.4.3 ~6x+ performance regression vs 3.3.1, constant trees not being computed.


3.4.3 generates code which may be ~6x+ slower and larger than 3.3.1 @ -0s
as it apparently no longer evaluates constant expression trees in anything
other than simple expressions for some reason, which may result in serious
performance and code size regressions, which should really be fixed if possible.

// 000000c6 <foo>:
int foo ( int a ){
	if (a & (1L << 23))
//  c6:	aa 27       	eor	r26, r26
//  c8:	97 fd       	sbrc	r25, 7
//  ca:	a0 95       	com	r26
//  cc:	ba 2f       	mov	r27, r26
//  ce:	27 e1       	ldi	r18, 0x17	; 23
//  d0:	b6 95       	lsr	r27
//  d2:	a7 95       	ror	r26
//  d4:	97 95       	ror	r25
//  d6:	87 95       	ror	r24
//  d8:	2a 95       	dec	r18
//  da:	d1 f7       	brne	.-12     	; 0xd0
//  dc:	81 70       	andi	r24, 0x01	; 1
//  de:	90 70       	andi	r25, 0x00	; 0
//  e0:	89 2b       	or	r24, r25
//  e2:	19 f0       	breq	.+6      	; 0xea
		return 1; 
//  e4:	81 e0       	ldi	r24, 0x01	; 1
//  e6:	90 e0       	ldi	r25, 0x00	; 0
//  e8:	08 95       	ret
	  else
		return 2 ;
//  ea:	82 e0       	ldi	r24, 0x02	; 2
//  ec:	90 e0       	ldi	r25, 0x00	; 0
}
//  ee:	08 95       	ret
//  f0:	08 95       	ret
// where the second return is odd as well?

vs GCC 3.3.1 @ -0s

// 000000c6 <foo>:
int foo2 ( int a ){
	if (a & (1L << 23))
		return 1; 
	  else
		return 2 ;
}
//  c6:	82 e0       	ldi	r24, 0x02	; 2
//  c8:	90 e0       	ldi	r25, 0x00	; 0
//  ca:	08 95       	ret

(where for referance int targeted to avr is 16-bits wide,
 but the above problem is not likely target sensitive.)

-- 
           Summary: 3.4.3 ~6x+ performance regression vs 3.3.1, constant
                    trees not being computed.
           Product: gcc
           Version: 3.4.3
            Status: UNCONFIRMED
          Severity: critical
          Priority: P1
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: schlie at comcast dot net
                CC: dmixm at marine dot febras dot ru,ericw at evcohs dot
                    com,gcc-bugs at gcc dot gnu dot org
 GCC build triplet: any
  GCC host triplet: any
GCC target triplet: avr-unknown-none


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18424


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]