mirror of
https://github.com/gcc-mirror/gcc.git
synced 2025-07-23 01:00:40 +00:00
Match: Refine the widen mul check for SAT_MUL pattern
The widen mul will have source type from N-bits to dest type 2N-bits. The previous check only focus on the HOST_WIDE_INT but not working for QI => HI, HI => SI and SI to DImode. Thus, refine the widen mul precision check as dest has twice bits of input. gcc/ChangeLog: * match.pd: Make sure widen mul has twice bitsize of the inputs in SAT_MUL pattern. Signed-off-by: Pan Li <pan2.li@intel.com>
This commit is contained in:
@ -3605,11 +3605,10 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
|
||||
unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
|
||||
unsigned cvt5_prec = TYPE_PRECISION (TREE_TYPE (@5));
|
||||
unsigned cvt6_prec = TYPE_PRECISION (TREE_TYPE (@6));
|
||||
unsigned hw_int_prec = sizeof (HOST_WIDE_INT) * 8;
|
||||
wide_int c2 = wi::to_wide (@2);
|
||||
wide_int max = wi::mask (prec, false, widen_prec);
|
||||
bool c2_is_max_p = wi::eq_p (c2, max);
|
||||
bool widen_mult_p = cvt5_prec == cvt6_prec && hw_int_prec == cvt5_prec;
|
||||
bool widen_mult_p = cvt5_prec == cvt6_prec && widen_prec == cvt6_prec * 2;
|
||||
}
|
||||
(if (widen_prec > prec && c2_is_max_p && widen_mult_p)))))
|
||||
)
|
||||
|
Reference in New Issue
Block a user