(movsf): Only generate stack temporary if used.
authorRichard Kenner <kenner@gcc.gnu.org>
Thu, 23 Jun 1994 23:25:10 +0000 (19:25 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 23 Jun 1994 23:25:10 +0000 (19:25 -0400)
From-SVN: r7552

gcc/config/rs6000/rs6000.md

index 1f2872536059d6dd8ff8ef80183916c4e6134779..747355ade646d8c1c1c7a1a1368d579089b14210 100644 (file)
 
   if (GET_CODE (operands[1]) == REG && REGNO (operands[1]) < 32)
     {
-      rtx stack_slot = assign_stack_temp (SFmode, 4, 0);
-
       /* If this is a store to memory or another integer register do the
         move directly.  Otherwise store to a temporary stack slot and
         load from there into a floating point register.  */
                          operand_subword (operands[1], 0, 0, SFmode));
          DONE;
        }
+      else
+       {
+         rtx stack_slot = assign_stack_temp (SFmode, 4, 0);
 
-      emit_move_insn (stack_slot, operands[1]);
-      emit_move_insn (operands[0], stack_slot);
-      DONE;
+         emit_move_insn (stack_slot, operands[1]);
+         emit_move_insn (operands[0], stack_slot);
+         DONE;
+       }
     }
 
   if (GET_CODE (operands[0]) == MEM)
 
   if (GET_CODE (operands[0]) == REG && REGNO (operands[0]) < 32)
     {
-      rtx stack_slot = assign_stack_temp (SFmode, 4, 0);
-
       if (GET_CODE (operands[1]) == MEM
 #if HOST_FLOAT_FORMAT == TARGET_FLOAT_FORMAT && ! defined(REAL_IS_NOT_DOUBLE)
          || GET_CODE (operands[1]) == CONST_DOUBLE
                          operand_subword (operands[1], 0, 0, SFmode));
          DONE;
        }
+      else
+       {
+         rtx stack_slot = assign_stack_temp (SFmode, 4, 0);
 
-      emit_move_insn (stack_slot, operands[1]);
-      emit_move_insn (operands[0], stack_slot);
-      DONE;
+         emit_move_insn (stack_slot, operands[1]);
+         emit_move_insn (operands[0], stack_slot);
+         DONE;
+       }
     }
 
   if (CONSTANT_P (operands[1]))