aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-06-23 19:25:10 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-06-23 19:25:10 -0400
commitf6ba0600ffc9a3035a121b50fffcf90754a342f5 (patch)
treed12e6ecc5dbc782290129d87c04511e019d02c09
parent8c461ea15daf5e66325fe7ed7dd0f8848a585a3d (diff)
downloadgcc-f6ba0600ffc9a3035a121b50fffcf90754a342f5.zip
gcc-f6ba0600ffc9a3035a121b50fffcf90754a342f5.tar.gz
gcc-f6ba0600ffc9a3035a121b50fffcf90754a342f5.tar.bz2
(movsf): Only generate stack temporary if used.
From-SVN: r7552
-rw-r--r--gcc/config/rs6000/rs6000.md24
1 files changed, 14 insertions, 10 deletions
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 1f28725..747355a 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -3763,8 +3763,6 @@
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. */
@@ -3779,10 +3777,14 @@
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)
@@ -3790,8 +3792,6 @@
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
@@ -3805,10 +3805,14 @@
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]))