Message ID | a4cad070-02f2-5f65-4abe-a544f609906a@suse.cz |
---|---|
State | New |
Headers | show |
Series | rs6000: assign first operand of VEC_COND_EXPR to a SSA_NAME | expand |
Hi! On Thu, Jun 18, 2020 at 09:44:58AM +0200, Martin Liška wrote: > This breaks quite some powerpc.exp tests. Right now VEC_COND_EXPR expects > first > argument to be a SSA_NAME (or constant) and so the patch fixes that. What does this mean? All context is missing here. Also, is expecting that correct or not? Was that a change? Please explain. > Using the patch, I survive powerpc.exp test-suite. So this patch does *not* break quite some tests, it fixes them instead? Please fix your commit message (and the Subject: even). > diff --git a/gcc/config/rs6000/rs6000-call.c > b/gcc/config/rs6000/rs6000-call.c > index 817a14c9c0d..f613d372a13 100644 > --- a/gcc/config/rs6000/rs6000-call.c > +++ b/gcc/config/rs6000/rs6000-call.c > @@ -10716,14 +10716,16 @@ rs6000_builtin_valid_without_lhs (enum > rs6000_builtins fn_code) > CODE indicates which comparison is to be made. (EQ, GT, ...). > TYPE indicates the type of the result. */ > static tree > -fold_build_vec_cmp (tree_code code, tree type, > - tree arg0, tree arg1) > +fold_build_vec_cmp (tree_code code, tree type, tree arg0, tree arg1, > + gimple_stmt_iterator *gsi) The comment needs changing, explaining what the new arg is. Segher
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c index 817a14c9c0d..f613d372a13 100644 --- a/gcc/config/rs6000/rs6000-call.c +++ b/gcc/config/rs6000/rs6000-call.c @@ -10716,14 +10716,16 @@ rs6000_builtin_valid_without_lhs (enum rs6000_builtins fn_code) CODE indicates which comparison is to be made. (EQ, GT, ...). TYPE indicates the type of the result. */ static tree -fold_build_vec_cmp (tree_code code, tree type, - tree arg0, tree arg1) +fold_build_vec_cmp (tree_code code, tree type, tree arg0, tree arg1, + gimple_stmt_iterator *gsi) { tree cmp_type = truth_type_for (type); tree zero_vec = build_zero_cst (type); tree minus_one_vec = build_minus_one_cst (type); - tree cmp = fold_build2 (code, cmp_type, arg0, arg1); - return fold_build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec); + tree temp = create_tmp_reg_or_ssa_name (cmp_type); + gimple *g = gimple_build_assign (temp, code, arg0, arg1); + gsi_insert_before (gsi, g, GSI_SAME_STMT); + return fold_build3 (VEC_COND_EXPR, type, temp, minus_one_vec, zero_vec); } /* Helper function to handle the in-between steps for the @@ -10734,7 +10736,7 @@ fold_compare_helper (gimple_stmt_iterator *gsi, tree_code code, gimple *stmt) tree arg0 = gimple_call_arg (stmt, 0); tree arg1 = gimple_call_arg (stmt, 1); tree lhs = gimple_call_lhs (stmt); - tree cmp = fold_build_vec_cmp (code, TREE_TYPE (lhs), arg0, arg1); + tree cmp = fold_build_vec_cmp (code, TREE_TYPE (lhs), arg0, arg1, gsi); gimple *g = gimple_build_assign (lhs, cmp); gimple_set_location (g, gimple_location (stmt)); gsi_replace (gsi, g, true);