diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-06-23 19:25:10 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-06-23 19:25:10 -0400 |
commit | f6ba0600ffc9a3035a121b50fffcf90754a342f5 (patch) | |
tree | d12e6ecc5dbc782290129d87c04511e019d02c09 | |
parent | 8c461ea15daf5e66325fe7ed7dd0f8848a585a3d (diff) | |
download | gcc-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.md | 24 |
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])) |