On Thu, 29 Feb 2024, Jakub Jelinek wrote: > On Thu, Feb 29, 2024 at 11:16:54AM +0100, Richard Biener wrote: > > That said, the quick experiment shows this isn't anything for stage4. > > The earlier the vector lowering is moved in the pass list, the higher > are the possibilities that match.pd or some other optimization reintroduces > unsupportable vector operations into the IL. > > Guess your patch looks reasonable.
Pushed. Thanks, Richard. > > > PR middle-end/114070 > > > * match.pd ((c ? a : b) op d --> c ? (a op d) : (b op d)): > > > Allow the folding if before lowering and the current IL > > > isn't supported with vcond_mask. > > > --- > > > gcc/match.pd | 18 +++++++++++++++--- > > > 1 file changed, 15 insertions(+), 3 deletions(-) > > > > > > diff --git a/gcc/match.pd b/gcc/match.pd > > > index f3fffd8dec2..4edba7c84fb 100644 > > > --- a/gcc/match.pd > > > +++ b/gcc/match.pd > > > @@ -5153,7 +5153,13 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > > > (op (vec_cond:s @0 @1 @2) (vec_cond:s @0 @3 @4)) > > > (if (TREE_CODE_CLASS (op) != tcc_comparison > > > || types_match (type, TREE_TYPE (@1)) > > > - || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)) > > > + || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK) > > > + || (optimize_vectors_before_lowering_p () > > > + /* The following is optimistic on the side of non-support, we are > > > + missing the legacy vcond{,u,eq} cases. Do this only when > > > + lowering will be able to fixup.. */ > > > + && !expand_vec_cond_expr_p (TREE_TYPE (@1), > > > + TREE_TYPE (@0), ERROR_MARK))) > > > (vec_cond @0 (op! @1 @3) (op! @2 @4)))) > > > > > > /* (c ? a : b) op d --> c ? (a op d) : (b op d) */ > > > @@ -5161,13 +5167,19 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) > > > (op (vec_cond:s @0 @1 @2) @3) > > > (if (TREE_CODE_CLASS (op) != tcc_comparison > > > || types_match (type, TREE_TYPE (@1)) > > > - || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)) > > > + || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK) > > > + || (optimize_vectors_before_lowering_p () > > > + && !expand_vec_cond_expr_p (TREE_TYPE (@1), > > > + TREE_TYPE (@0), ERROR_MARK))) > > > (vec_cond @0 (op! @1 @3) (op! @2 @3)))) > > > (simplify > > > (op @3 (vec_cond:s @0 @1 @2)) > > > (if (TREE_CODE_CLASS (op) != tcc_comparison > > > || types_match (type, TREE_TYPE (@1)) > > > - || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK)) > > > + || expand_vec_cond_expr_p (type, TREE_TYPE (@0), ERROR_MARK) > > > + || (optimize_vectors_before_lowering_p () > > > + && !expand_vec_cond_expr_p (TREE_TYPE (@1), > > > + TREE_TYPE (@0), ERROR_MARK))) > > > (vec_cond @0 (op! @3 @1) (op! @3 @2))))) > > > > > > #if GIMPLE > > > > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)