This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/36884] ifcvt poor optimization
- From: "hutchinsonandy at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Jul 2008 02:37:41 -0000
- Subject: [Bug middle-end/36884] ifcvt poor optimization
- References: <bug-36884-16013@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from hutchinsonandy at gcc dot gnu dot org 2008-07-22 02:37 -------
4.2.2 has same issue.
Can someone benchmark -fno-if-conversion for AVR?
Transforms are made independent of target. BRANCH_COST is already 0 for avr.
Here is a related example. This time result is a power of two so it needs a
more complicated shift.
int z;
int foo2(void)
{
if ( ++z >= 0)
return 16;
else
return 0;
}
produces:
24 .LM2:
25 /*DEBUG: 0x0 0 12 */
26 0000 8091 0000 lds r24,z
27 0004 9091 0000 lds r25,(z)+1
28 /*DEBUG: 0x4 4 8 */
29 0008 0196 adiw r24,1
30 /*DEBUG: 0x5 1 12 */
31 000a 9093 0000 sts (z)+1,r25
32 000e 8093 0000 sts z,r24
33 /*DEBUG: 0x9 4 16 */
34 0012 292F mov r18,r25
35 0014 220F lsl r18
36 0016 330B sbc r19,r19
37 0018 2795 ror r18
38 /*DEBUG: 0xd 4 12 */
39 001a 2095 com r18
40 001c 3095 com r19
41 /*DEBUG: 0xf 2 28 */
42 001e 2227 clr r18
43 0020 330F lsl r19
44 0022 221F rol r18
45 0024 3327 clr r19
46 /*DEBUG: 0x13 4 44 */
47 0026 2295 swap r18
48 0028 3295 swap r19
49 002a 307F andi r19,0xf0
50 002c 3227 eor r19,r18
51 002e 207F andi r18,0xf0
52 0030 3227 eor r19,r18
53 .LM3:
54 /*DEBUG: 0x19 6 4 */
55 0032 C901 movw r24,r18
56 /* epilogue start */
57 /*DEBUG: 0x1a 1 4 */
58 0034 0895 ret
If I played around with mode of operands I'm sure I could do worse.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36884