7a160d6e95bdfea9305ecdafda21bdf77cb36499
[openwrt/svn-archive/archive.git] / toolchain / gcc / patches / 4.2.3 / 905-avr32_fix_folding_machine_reorg_optimizations.patch
1 Index: a/gcc/config/avr32/avr32.c
2 ===================================================================
3 --- a/gcc/config/avr32/avr32.c (revision 31997)
4 +++ b/gcc/config/avr32/avr32.c (working copy)
5 @@ -6323,25 +6323,26 @@
6 /* If used any other place than as a pointer or as the
7 destination register we failed */
8 if (!(single_set (scan)
9 - && GET_CODE (PATTERN (scan)) == SET
10 - && ((MEM_P (SET_DEST (PATTERN (scan)))
11 - && REG_P (XEXP (SET_DEST (PATTERN (scan)), 0))
12 - && REGNO (XEXP (SET_DEST (PATTERN (scan)), 0)) ==
13 - REGNO (reg)) || (MEM_P (SET_SRC (PATTERN (scan)))
14 - &&
15 - REG_P (XEXP
16 - (SET_SRC (PATTERN (scan)),
17 - 0))
18 - &&
19 - REGNO (XEXP
20 - (SET_SRC (PATTERN (scan)),
21 - 0)) == REGNO (reg))))
22 - && !(GET_CODE (PATTERN (scan)) == SET
23 - && REG_P (SET_DEST (PATTERN (scan)))
24 - && !regno_use_in (REGNO (reg),
25 - SET_SRC (PATTERN (scan)))))
26 + && GET_CODE (PATTERN (scan)) == SET
27 + && ((MEM_P (SET_DEST (PATTERN (scan)))
28 + && REG_P (XEXP (SET_DEST (PATTERN (scan)), 0))
29 + && REGNO (XEXP (SET_DEST (PATTERN (scan)), 0)) == REGNO (reg))
30 + || (MEM_P (SET_SRC (PATTERN (scan)))
31 + && REG_P (XEXP (SET_SRC (PATTERN (scan)), 0))
32 + && REGNO (XEXP
33 + (SET_SRC (PATTERN (scan)), 0)) == REGNO (reg))))
34 + && !(GET_CODE (PATTERN (scan)) == SET
35 + && REG_P (SET_DEST (PATTERN (scan)))
36 + && !regno_use_in (REGNO (reg),
37 + SET_SRC (PATTERN (scan)))))
38 break;
39
40 + /* We cannot replace the pointer in TImode insns
41 + as these has a differene addressing mode than the other
42 + memory insns. */
43 + if ( GET_MODE (SET_DEST (PATTERN (scan))) == TImode )
44 + break;
45 +
46 /* Check if register is dead or set in this insn */
47 if (dead_or_set_p (scan, reg))
48 {