entered into RCS
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 31 Jul 1992 12:13:38 +0000 (08:13 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 31 Jul 1992 12:13:38 +0000 (08:13 -0400)
From-SVN: r1731

gcc/cexp.y
gcc/combine.c
gcc/cse.c
gcc/reload.c
gcc/reload1.c
gcc/reorg.c

index e16028bdf94156f5593798f4cacd9bef52eb88d9..6dcbecd3c2a1665539480cf88102bb3ec6b20d9c 100644 (file)
@@ -65,6 +65,8 @@ static int keyword_parsing = 0;
 /* some external tables of character types */
 extern unsigned char is_idstart[], is_idchar[], is_hor_space[];
 
+extern char *xmalloc ();
+
 /* Flag for -pedantic.  */
 extern int pedantic;
 
index ab9b09d1a6207b4fe63e5b77d6f9d1b1cfbe50d0..a2a11a1fa5c520cf67107ff0b9c3d8b60e929991 100644 (file)
@@ -1886,14 +1886,32 @@ try_combine (i3, i2, i1)
       distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed, NULL_RTX),
                        NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
                        NULL_RTX, NULL_RTX);
+
+    /* For I2 and I1, we have to be careful.  If NEWI2PAT exists and sets
+       I2DEST or I1DEST, the death must be somewhere before I2, not I3.  If
+       we passed I3 in that case, it might delete I2.  */
+
     if (i2dest_in_i2src)
-      distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i2dest, NULL_RTX),
-                       NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
-                       NULL_RTX, NULL_RTX);
+      {
+       if (newi2pat && reg_set_p (i2dest, newi2pat))
+         distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i2dest, NULL_RTX),
+                           NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX);
+       else
+         distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i2dest, NULL_RTX),
+                           NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
+                           NULL_RTX, NULL_RTX);
+      }
+
     if (i1dest_in_i1src)
-      distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i1dest, NULL_RTX),
-                       NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
-                       NULL_RTX, NULL_RTX);
+      {
+       if (newi2pat && reg_set_p (i1dest, newi2pat))
+         distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i1dest, NULL_RTX),
+                           NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX);
+       else
+         distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i1dest, NULL_RTX),
+                           NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
+                           NULL_RTX, NULL_RTX);
+      }
 
     distribute_links (i3links);
     distribute_links (i2links);
index e1c320973ed84d0eb0ed15e5d799e8cc1ac3e503..14ef88b4c95239e2f74135524ed5f80082ab2edf 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1998,7 +1998,7 @@ exp_equiv_p (x, y, validate, equal_values)
       return x == y;
 
     case CONST_INT:
-      return XINT (x, 0) == XINT (y, 0);
+      return INTVAL (x) == INTVAL (y);
 
     case LABEL_REF:
     case SYMBOL_REF:
index 3dfcb2db04eb7f2faa5f9bbbd97ce52cebb6568e..381a86ecaec2a9733faa3640054ef8c929c43d8a 100644 (file)
@@ -4153,9 +4153,10 @@ find_reloads_address_1 (x, context, loc, operand, ind_levels)
 
       if (reg_equiv_constant[regno] != 0)
        {
-         push_reload (reg_equiv_constant[regno], NULL_RTX, loc, NULL_PTR,
-                      context ? INDEX_REG_CLASS : BASE_REG_CLASS,
-                      GET_MODE (x), VOIDmode, 0, 0, operand);
+         find_reloads_address_part (reg_equiv_constant[regno], loc, 
+                                    (context ? INDEX_REG_CLASS
+                                     : BASE_REG_CLASS),
+                                    GET_MODE (x), operand, ind_levels);
          return 1;
        }
 
index 46274374ce189bf7b9bfee0ae59ac6df924623de..2c890965432b737306cf62a0d41c2d721fb647b3 100644 (file)
@@ -5673,8 +5673,8 @@ gen_input_reload (reloadreg, in, before_insn)
       if (GET_MODE (loc) != GET_MODE (in))
        in = gen_rtx (REG, GET_MODE (loc), REGNO (in));
 
-      emit_insn_before (gen_move_insn (reloadreg, loc), before_insn);
       emit_insn_before (gen_move_insn (loc, in), before_insn);
+      emit_insn_before (gen_move_insn (reloadreg, loc), before_insn);
     }
 #endif
 
index 778090ef2845a9436d862d60fc2524e423a7bf8a..d95c7344bc18b3113ad1441b6656c03befffbb69 100644 (file)
@@ -1110,6 +1110,8 @@ get_branch_condition (insn, target)
     return gen_rtx (reverse_condition (GET_CODE (XEXP (src, 0))),
                    GET_MODE (XEXP (src, 0)),
                    XEXP (XEXP (src, 0), 0), XEXP (XEXP (src, 0), 1));
+
+  return 0;
 }
 
 /* Return non-zero if CONDITION is more strict than the condition of