Message ID | 20140522001331.GZ5162@bubble.grove.modra.org |
---|---|
State | New |
Headers | show |
On Wed, May 21, 2014 at 8:13 PM, Alan Modra <amodra@gmail.com> wrote: > 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". Okay. Thanks, David
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