add GCC 4.2.3
[openwrt.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                    {