]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/83451 (FAIL: gfortran.dg/matmul_10.f90 -O3 -fomit-frame-pointer -funro...
authorJohn David Anglin <danglin@gcc.gnu.org>
Wed, 14 Mar 2018 23:55:02 +0000 (23:55 +0000)
committerJohn David Anglin <danglin@gcc.gnu.org>
Wed, 14 Mar 2018 23:55:02 +0000 (23:55 +0000)
PR target/83451
* config/pa/pa.c (pa_emit_move_sequence):  Always emit secondary reload
insn for floating-point loads and stores.

From-SVN: r258543

gcc/ChangeLog
gcc/config/pa/pa.c

index 9d3938021ee5fb88029d8a2e0e987741306124dd..f82aae846922310f0d06d5fec1502638219e442e 100644 (file)
@@ -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-12  Jonathan Wakely  <jwakely@redhat.com>
 
        * doc/invoke.texi (-mclflushopt): Fix spelling of option.
index 2ac2025e89d9195611595432e1b77783e1bf70fc..60c8ce19c4f3ed221a3736ba5773aac5a78886bc 100644 (file)
@@ -1719,9 +1719,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))
@@ -1731,10 +1729,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)
@@ -1772,9 +1770,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))
@@ -1784,10 +1780,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,