widen mult: Fix handling of _Fract mixed with _Fract [PR119568]

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.

	PR tree-optimization/119568

gcc/ChangeLog:

	* tree-ssa-math-opts.cc (convert_plusminus_to_widen): Reject different
	mode classes.

Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
This commit is contained in:
Andrew Pinski
2026-03-03 13:57:47 -08:00
parent 47339c8f8a
commit 4ef3d71a08

View File

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