Do not generate CLOBBERs for non-pseudo regs.
authorNick Clifton <nickc@cygnus.com>
Thu, 17 Dec 1998 14:02:32 +0000 (14:02 +0000)
committerNick Clifton <nickc@gcc.gnu.org>
Thu, 17 Dec 1998 14:02:32 +0000 (14:02 +0000)
From-SVN: r24364

gcc/ChangeLog
gcc/expr.c

index 8982f68d2486b5a30f68a484d410c8a0246725bc..c6a39842b416e7dbaecad15551c7028255b9267f 100644 (file)
@@ -1,3 +1,8 @@
+Thu Dec 17 13:57:23 1998  Nick Clifton  <nickc@cygnus.com>
+
+       * expr.c (emit_move_insn_1): Only emit a clobber if the target
+       is a pseudo register.
+
 Thu Dec 17 13:50:29 1998  Nick Clifton  <nickc@cygnus.com>
 
        * gcse.c: Include expr.h in order to get the prototype for
index 534fac638a7537315559d9fa09b8c2cfba2509b2..e943e53463e9a64469bf41284d92ddf840c0d7fc 100644 (file)
@@ -2593,9 +2593,18 @@ emit_move_insn_1 (x, y)
        }
       else
        {
-         /* Show the output dies here.  */
+         /* Show the output dies here.  This is only necessary for pseudos.  */
          if (x != y)
-           emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+           {
+             rtx reg = x;
+             
+             while (GET_CODE (reg) == SUBREG)
+               reg = SUBREG_REG (reg);
+             
+             if (GET_CODE (reg) == REG
+                 && REGNO (reg) >= FIRST_PSEUDO_REGISTER)
+               emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+           }
 
          emit_insn (GEN_FCN (mov_optab->handlers[(int) submode].insn_code)
                     (gen_realpart (submode, x), gen_realpart (submode, y)));
@@ -2624,9 +2633,18 @@ emit_move_insn_1 (x, y)
        }
 #endif
                             
-      /* Show the output dies here.  */
+      /* Show the output dies here.  This is only necessary for pseudos.  */
       if (x != y)
-        emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+       {
+         rtx reg = x;
+         
+         while (GET_CODE (reg) == SUBREG)
+           reg = SUBREG_REG (reg);
+         
+         if (GET_CODE (reg) == REG
+             && REGNO (reg) >= FIRST_PSEUDO_REGISTER)
+           emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+       }
 
       for (i = 0;
           i < (GET_MODE_SIZE (mode)  + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD;