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:
Richard Biener 2025-02-03 15:27:30 +01:00 committed by Richard Biener
parent a55e14b239
commit 5b46c01c50
2 changed files with 11 additions and 2 deletions

View file

@ -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

View file

@ -0,0 +1,7 @@
/* { dg-do compile } */
/* { dg-options "-Os" } */
_Accum acc1 (_Accum x)
{
return x << 16;
}