This fixes another case where we use the wrong memory constraint.  See
the analysis in the PR.  The rule for operand predicate and
constraints is simply that the union of all constraints must exactly
match the operand predicate.

Bootstrapped and regression tested powerpc64-linux and
powerpc64le-linux.  OK for mainline and active branches?

Note that I didn't see the bootstrap miscompares reported in the PR,
so perhaps there is some other issue to fix besides this one..

        PR target/61231
        * config/rs6000/rs6000.c (mem_operand_gpr): Handle SImode.
        * config/rs6000/rs6000.md (extendsidi2_lfiwax, extendsidi2_nocell):
        Use "Y" constraint rather than "m".

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 210661)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -6124,7 +6127,8 @@ mem_operand_gpr (rtx op, enum machine_mode mode)
     return false;
 
   extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD;
-  gcc_assert (extra >= 0);
+  if (extra < 0)
+    extra = 0;
 
   if (GET_CODE (addr) == LO_SUM)
     /* For lo_sum addresses, we must allow any offset except one that
Index: gcc/config/rs6000/rs6000.md
===================================================================
--- gcc/config/rs6000/rs6000.md (revision 210661)
+++ gcc/config/rs6000/rs6000.md (working copy)
@@ -745,7 +745,7 @@
 
 (define_insn "*extendsidi2_lfiwax"
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,??wm,!wl,!wu")
-       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r,r,Z,Z")))]
+       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r,r,Z,Z")))]
   "TARGET_POWERPC64 && TARGET_LFIWAX"
   "@
    lwa%U1%X1 %0,%1
@@ -758,7 +758,7 @@
 
 (define_insn "*extendsidi2_nocell"
   [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
-       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
+       (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r")))]
   "TARGET_POWERPC64 && rs6000_gen_cell_microcode && !TARGET_LFIWAX"
   "@
    lwa%U1%X1 %0,%1

-- 
Alan Modra
Australia Development Lab, IBM

Reply via email to