From: Richard Sandiford Date: Fri, 29 Nov 2019 14:47:28 +0000 (+0000) Subject: Make vectorizable_operation punt early on codes it doesn't handle X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4177e933b309408e69eb5561fee7a3cc5e6f8899;p=gcc.git Make vectorizable_operation punt early on codes it doesn't handle vectorizable_operation returned false for codes that are handled by vectorizable_shift, but only after it had already done a lot of work. Checking earlier should be more efficient and avoid polluting the logs with duplicate info. Also, there was no such early-out for comparisons or COND_EXPRs. Fixing that avoids a false scan-tree-dump hit with a later patch. 2019-11-29 Richard Sandiford gcc/ * tree-vect-stmts.c (vectorizable_operation): Punt early on codes that are handled elsewhere. From-SVN: r278848 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 92c7622e30b..e557946f697 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2019-11-29 Richard Sandiford + + * tree-vect-stmts.c (vectorizable_operation): Punt early + on codes that are handled elsewhere. + 2019-11-29 Richard Sandiford * doc/sourcebuild.texi (vect_bool_cmp): Document. diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index d5f8031b408..49dcde43b74 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5944,6 +5944,21 @@ vectorizable_operation (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, orig_code = code = gimple_assign_rhs_code (stmt); + /* Shifts are handled in vectorizable_shift. */ + if (code == LSHIFT_EXPR + || code == RSHIFT_EXPR + || code == LROTATE_EXPR + || code == RROTATE_EXPR) + return false; + + /* Comparisons are handled in vectorizable_comparison. */ + if (TREE_CODE_CLASS (code) == tcc_comparison) + return false; + + /* Conditions are handled in vectorizable_condition. */ + if (code == COND_EXPR) + return false; + /* For pointer addition and subtraction, we should use the normal plus and minus for the vector operation. */ if (code == POINTER_PLUS_EXPR) @@ -6068,11 +6083,6 @@ vectorizable_operation (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, gcc_assert (ncopies >= 1); - /* Shifts are handled in vectorizable_shift (). */ - if (code == LSHIFT_EXPR || code == RSHIFT_EXPR || code == LROTATE_EXPR - || code == RROTATE_EXPR) - return false; - /* Supportable by target? */ vec_mode = TYPE_MODE (vectype);