https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #59 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, can't we combine --- gcc/match.pd.jj 2021-02-18 16:21:01.000000000 +0100 +++ gcc/match.pd 2021-02-23 12:39:32.801064905 +0100 @@ -3316,7 +3316,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (view_convert @0) (if ((INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type)) && (INTEGRAL_TYPE_P (TREE_TYPE (@0)) || POINTER_TYPE_P (TREE_TYPE (@0))) - && TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (@0))) + && (TYPE_PRECISION (type) == TYPE_PRECISION (TREE_TYPE (@0)) + || (TREE_CODE (type) == BOOLEAN_TYPE + && TREE_CODE (@0) == SSA_NAME + && TREE_CODE (TREE_TYPE (@0)) != BOOLEAN_TYPE + && TYPE_MODE (type) == TYPE_MODE (TREE_TYPE (@0)) + && type_has_mode_precision_p (TREE_TYPE (@0)) + && ssa_name_has_boolean_range (@0)))) (convert @0))) /* Strip inner integral conversions that do not change precision or size, or with expander optimization that will optimize away that masking when expanding NOP_EXPR from integral SSA_NAME with ssa_name_has_boolean_range to bool? Note, on this testcase the NOP_EXPR to bool is optimized away, so the expansion change would make zero difference, so I'll need to test that without the above change and doing the VCE -> NOP optimization during TER or so to see it in action. Anyway, when I did it earlier today, while expansion emitted the AND 1, later optimizations optimized that away again.