On February 15, 2016 7:15:35 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> 
wrote:
>On Mon, Feb 15, 2016 at 06:58:45PM +0100, Richard Biener wrote:
>> We could also force_reg those at expansion or apply
>SHIFT_COUNT_TRUNCATED to those invalid constants there.
>
>Sure, but for force_reg we'd still need the gen_int_mode anyway.
>As for SHIFT_COUNT_TRUNCATED, it should have been applied already from
>the
>caller - expand_shift_1.

But then no out of bound values should remain.  Until we get 256bit ints where 
your workaround wouldn't work either?

Richard.

>> >2016-02-15  Jakub Jelinek  <ja...@redhat.com>
>> >
>> >    PR rtl-optimization/69764
>> >    PR rtl-optimization/69771
>> >    * optabs.c (expand_binop): Ensure for shift optabs invalid
>CONST_INT
>> >    op1 is valid for mode.
>> >
>> >--- gcc/optabs.c.jj 2016-02-12 17:49:25.000000000 +0100
>> >+++ gcc/optabs.c    2016-02-15 16:15:53.983673792 +0100
>> >@@ -1125,6 +1125,12 @@ expand_binop (machine_mode mode, optab b
>> >       op1 = negate_rtx (mode, op1);
>> >       binoptab = add_optab;
>> >     }
>> >+  /* For shifts, constant invalid op1 might be expanded from
>different
>> >+     mode than MODE.  */
>> >+  else if (CONST_INT_P (op1)
>> >+      && shift_optab_p (binoptab)
>> >+      && UINTVAL (op1) >= GET_MODE_BITSIZE (GET_MODE_INNER (mode)))
>> >+    op1 = gen_int_mode (INTVAL (op1), mode);
>> > 
>> >   /* Record where to delete back to if we backtrack.  */
>> >   last = get_last_insn ();
>
>       Jakub


Reply via email to