https://gcc.gnu.org/g:15b965d6bbb33e1a29ebae58ec167cc20525d43f
commit r16-6756-g15b965d6bbb33e1a29ebae58ec167cc20525d43f Author: Andrew Pinski <[email protected]> Date: Tue Jan 13 15:21:56 2026 -0800 match: Remove redundant type checks from `(T1)(a bit_op (T2)b)` pattern. As mentioned in https://gcc.gnu.org/pipermail/gcc-patches/2026-January/705657.html, there were some redundant checks in this pattern. In the first if, the check for pointer and OFFSET_TYPE is redundant as there is a check for INTEGRAL_TYPE_P before hand. For the second one, the check for INTEGRAL_TYPE_P on the inner most type is not needed as there is a types_match right afterwards Pushed as obvious after bootstra/test on x86_64-linux-gnu. gcc/ChangeLog: * match.pd (`(T1)(a bit_op (T2)b)`): Remove redundant type checks. Signed-off-by: Andrew Pinski <[email protected]> Diff: --- gcc/match.pd | 3 --- 1 file changed, 3 deletions(-) diff --git a/gcc/match.pd b/gcc/match.pd index 400330aae541..91f92b56b03a 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -2320,15 +2320,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) && INTEGRAL_TYPE_P (TREE_TYPE (@0)) && TREE_CODE (@1) != INTEGER_CST && tree_nop_conversion_p (type, TREE_TYPE (@2)) - && !POINTER_TYPE_P (TREE_TYPE (@0)) - && TREE_CODE (TREE_TYPE (@0)) != OFFSET_TYPE && TYPE_PRECISION (TREE_TYPE (@0)) > TYPE_PRECISION (type)) (bitop:type (convert @0) (convert @1)) /* Similar as above, but the outer and inner most types match and it was widening cast; replacing 2 casts with only one. */ (if (GIMPLE && INTEGRAL_TYPE_P (type) - && INTEGRAL_TYPE_P (TREE_TYPE (@0)) && types_match (type, TREE_TYPE (@0)) && TYPE_PRECISION (TREE_TYPE (@2)) > TYPE_PRECISION (type)) (bitop:type @0 (convert @1))))))
