diff options
author | John David Anglin <danglin@gcc.gnu.org> | 2018-03-14 23:31:57 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2018-03-14 23:31:57 +0000 |
commit | 82e18598fcb181f6749842a7c41931ebd2f817a8 (patch) | |
tree | e76beaf5065a4802cfb6ae8bbfe2ae693e37d22e | |
parent | 0b3ec8f48f291364676f1e472721391f27995f17 (diff) | |
download | gcc-82e18598fcb181f6749842a7c41931ebd2f817a8.zip gcc-82e18598fcb181f6749842a7c41931ebd2f817a8.tar.gz gcc-82e18598fcb181f6749842a7c41931ebd2f817a8.tar.bz2 |
re PR target/83451 (FAIL: gfortran.dg/matmul_10.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions (ICE))
PR target/83451
* config/pa/pa.c (pa_emit_move_sequence): Always emit secondary reload
insn for floating-point loads and stores.
From-SVN: r258541
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 20 |
2 files changed, 14 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1138d9e..ea4b664 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-03-14 John David Anglin <danglin@gcc.gnu.org> + + PR target/83451 + * config/pa/pa.c (pa_emit_move_sequence): Always emit secondary reload + insn for floating-point loads and stores. + 2018-03-14 Carl Love <cel@us.ibm.com> * config/rs6000/rs6000-c.c: Add macro definitions for diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 13d5777..a32921a 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -1750,9 +1750,7 @@ pa_emit_move_sequence (rtx *operands, machine_mode mode, rtx scratch_reg) } else emit_move_insn (scratch_reg, XEXP (op1, 0)); - emit_insn (gen_rtx_SET (operand0, - replace_equiv_address (op1, scratch_reg))); - return 1; + op1 = replace_equiv_address (op1, scratch_reg); } } else if ((!INT14_OK_STRICT && symbolic_memory_operand (op1, VOIDmode)) @@ -1762,10 +1760,10 @@ pa_emit_move_sequence (rtx *operands, machine_mode mode, rtx scratch_reg) /* Load memory address into SCRATCH_REG. */ scratch_reg = force_mode (word_mode, scratch_reg); emit_move_insn (scratch_reg, XEXP (op1, 0)); - emit_insn (gen_rtx_SET (operand0, - replace_equiv_address (op1, scratch_reg))); - return 1; + op1 = replace_equiv_address (op1, scratch_reg); } + emit_insn (gen_rtx_SET (operand0, op1)); + return 1; } else if (scratch_reg && FP_REG_P (operand1) @@ -1803,9 +1801,7 @@ pa_emit_move_sequence (rtx *operands, machine_mode mode, rtx scratch_reg) } else emit_move_insn (scratch_reg, XEXP (op0, 0)); - emit_insn (gen_rtx_SET (replace_equiv_address (op0, scratch_reg), - operand1)); - return 1; + op0 = replace_equiv_address (op0, scratch_reg); } } else if ((!INT14_OK_STRICT && symbolic_memory_operand (op0, VOIDmode)) @@ -1815,10 +1811,10 @@ pa_emit_move_sequence (rtx *operands, machine_mode mode, rtx scratch_reg) /* Load memory address into SCRATCH_REG. */ scratch_reg = force_mode (word_mode, scratch_reg); emit_move_insn (scratch_reg, XEXP (op0, 0)); - emit_insn (gen_rtx_SET (replace_equiv_address (op0, scratch_reg), - operand1)); - return 1; + op0 = replace_equiv_address (op0, scratch_reg); } + emit_insn (gen_rtx_SET (op0, operand1)); + return 1; } /* Handle secondary reloads for loads of FP registers from constant expressions by forcing the constant into memory. For the most part, |