rtl-optimization/117611 - ICE in simplify_shift_const_1
The following checks we have a scalar int shift mode before enforcing it. As AVR shows the mode can be a signed _Accum mode as well. PR rtl-optimization/117611 * combine.cc (simplify_shift_const_1): Bail if not scalar int mode. * gcc.dg/fixed-point/pr117611.c: New testcase.
This commit is contained in:
parent
a55e14b239
commit
5b46c01c50
2 changed files with 11 additions and 2 deletions
|
@ -10635,8 +10635,10 @@ simplify_shift_const_1 (enum rtx_code code, machine_mode result_mode,
|
|||
outer_op, outer_const);
|
||||
}
|
||||
|
||||
scalar_int_mode shift_unit_mode
|
||||
= as_a <scalar_int_mode> (GET_MODE_INNER (shift_mode));
|
||||
scalar_int_mode shift_unit_mode;
|
||||
if (!is_a <scalar_int_mode> (GET_MODE_INNER (shift_mode),
|
||||
&shift_unit_mode))
|
||||
return NULL_RTX;
|
||||
|
||||
/* Handle cases where the count is greater than the size of the mode
|
||||
minus 1. For ASHIFT, use the size minus one as the count (this can
|
||||
|
|
7
gcc/testsuite/gcc.dg/fixed-point/pr117611.c
Normal file
7
gcc/testsuite/gcc.dg/fixed-point/pr117611.c
Normal file
|
@ -0,0 +1,7 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-Os" } */
|
||||
|
||||
_Accum acc1 (_Accum x)
|
||||
{
|
||||
return x << 16;
|
||||
}
|
Loading…
Add table
Reference in a new issue