*** empty log message ***
authorRichard Kenner <kenner@gcc.gnu.org>
Fri, 31 Jul 1992 12:11:54 +0000 (08:11 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Fri, 31 Jul 1992 12:11:54 +0000 (08:11 -0400)
From-SVN: r1730

gcc/combine.c
gcc/final.c
gcc/reload1.c

index b3865ed06d2adb2fa73e05801460e18bf7ffea16..ab9b09d1a6207b4fe63e5b77d6f9d1b1cfbe50d0 100644 (file)
@@ -8095,6 +8095,18 @@ distribute_notes (notes, from_insn, i3, i2, elim_i2, elim_i1)
          if (XEXP (note, 0) == elim_i2 || XEXP (note, 0) == elim_i1)
            break;
 
+         /* If the register is used in both I2 and I3 and it dies in I3, 
+            we might have added another reference to it.  If reg_n_refs
+            was 2, bump it to 3.  This has to be correct since the 
+            register must have been set somewhere.  The reason this is
+            done is because local-alloc.c treats 2 references as a 
+            special case.  */
+
+         if (place == i3 && i2 != 0 && GET_CODE (XEXP (note, 0)) == REG
+             && reg_n_refs[REGNO (XEXP (note, 0))]== 2
+             && reg_referenced_p (XEXP (note, 0), PATTERN (i2)))
+           reg_n_refs[REGNO (XEXP (note, 0))] = 3;
+
          if (place == 0)
            for (tem = prev_nonnote_insn (i3);
                 tem && (GET_CODE (tem) == INSN
index e44f77c1266017a8a8c1fa2a5270591d18896bfa..fb483db9107fdef56c7533b9b99ba8d431346480 100644 (file)
@@ -2078,6 +2078,13 @@ output_operand (x, code)
 {
   if (x && GET_CODE (x) == SUBREG)
     x = alter_subreg (x);
+
+  /* If X is a pseudo-register, abort now rather than writing trash to the
+     assembler file.  */
+
+  if (GET_CODE (x) == REG && REGNO (x) >= FIRST_PSEUDO_REGISTER)
+    abort ();
+
   PRINT_OPERAND (asm_out_file, x, code);
 }
 
index fcf423625f666d3dbd031021d3a8aa266be5d6da..46274374ce189bf7b9bfee0ae59ac6df924623de 100644 (file)
@@ -3321,7 +3321,7 @@ reload_as_needed (first, live_known)
   for (i = 0; i < NUM_ELIMINABLE_REGS; i++)
     {
       INITIAL_ELIMINATION_OFFSET (reg_eliminate[i].from, reg_eliminate[i].to,
-                                 reg_eliminate[i].initial_offset)
+                                 reg_eliminate[i].initial_offset);
       reg_eliminate[i].previous_offset
        = reg_eliminate[i].offset = reg_eliminate[i].initial_offset;
     }