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.
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
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Os" } */
+
+_Accum acc1 (_Accum x)
+{
+ return x << 16;
+}