On Wed, Mar 4, 2026 at 4:45 AM Andrew Pinski <[email protected]> wrote: > > The problem here is we try calling find_widening_optab_handler_and_mode > with to_mode=E_USAmode and from_mode=E_UHQmode. This causes an ICE (with > checking only). > The fix is to reject the case where the mode classes are different in > convert_plusminus_to_widen > before even trying to deal with the modes. > > Bootstrapped and tested on x86_64-linux-gnu.
OK. > PR tree-optimization/119568 > > gcc/ChangeLog: > > * tree-ssa-math-opts.cc (convert_plusminus_to_widen): Reject different > mode classes. > > Signed-off-by: Andrew Pinski <[email protected]> > --- > gcc/tree-ssa-math-opts.cc | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc > index bb67dca560b..cd3fd2fc8fb 100644 > --- a/gcc/tree-ssa-math-opts.cc > +++ b/gcc/tree-ssa-math-opts.cc > @@ -2982,6 +2982,11 @@ convert_plusminus_to_widen (gimple_stmt_iterator *gsi, > gimple *stmt, > if (to_mode == from_mode) > return false; > > + /* For fixed point types, the mode classes could be different > + so reject that case. */ > + if (GET_MODE_CLASS (from_mode) != GET_MODE_CLASS (to_mode)) > + return false; > + > from_unsigned1 = TYPE_UNSIGNED (type1); > from_unsigned2 = TYPE_UNSIGNED (type2); > optype = type1; > -- > 2.43.0 >
