diff options
author | Jakub Jelinek <jakub@redhat.com> | 2014-01-13 20:16:30 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2014-01-13 20:16:30 +0100 |
commit | 03b9e8e48dfb02c43661102ce25d968dd4b2e09d (patch) | |
tree | a8935188d8ee76dd4822fa129af1cf77d3e9e945 | |
parent | 19e51b409e89cb13f388bf2442e3d00b904dddde (diff) | |
download | gcc-03b9e8e48dfb02c43661102ce25d968dd4b2e09d.zip gcc-03b9e8e48dfb02c43661102ce25d968dd4b2e09d.tar.gz gcc-03b9e8e48dfb02c43661102ce25d968dd4b2e09d.tar.bz2 |
re PR tree-optimization/59617 ([vectorizer] ICE in vectorizable_mask_load_store with AVX-512F's gathers enabled.)
PR target/59617
* config/i386/i386.c (ix86_vectorize_builtin_gather): Uncomment
AVX512F gather builtins.
* tree-vect-stmts.c (vectorizable_mask_load_store): For now punt
on gather decls with INTEGER_TYPE masktype.
(vectorizable_load): For INTEGER_TYPE masktype, put the INTEGER_CST
directly into the builtin rather than hoisting it before loop.
From-SVN: r206585
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 4 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 14 |
3 files changed, 21 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f040a7..15697e5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2014-01-13 Jakub Jelinek <jakub@redhat.com> + PR target/59617 + * config/i386/i386.c (ix86_vectorize_builtin_gather): Uncomment + AVX512F gather builtins. + * tree-vect-stmts.c (vectorizable_mask_load_store): For now punt + on gather decls with INTEGER_TYPE masktype. + (vectorizable_load): For INTEGER_TYPE masktype, put the INTEGER_CST + directly into the builtin rather than hoisting it before loop. + PR tree-optimization/59387 * tree-scalar-evolution.c: Include gimple-fold.h and gimplify-me.h. (scev_const_prop): If folded_casts and type has undefined overflow, diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 52ad5c1..ad48fc8 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -36565,9 +36565,6 @@ ix86_vectorize_builtin_gather (const_tree mem_vectype, case V8SImode: code = si ? IX86_BUILTIN_GATHERSIV8SI : IX86_BUILTIN_GATHERALTDIV8SI; break; -#if 0 - /* FIXME: Commented until vectorizer can work with (mask_type != src_type) - PR59617. */ case V8DFmode: if (TARGET_AVX512F) code = si ? IX86_BUILTIN_GATHER3ALTSIV8DF : IX86_BUILTIN_GATHER3DIV8DF; @@ -36592,7 +36589,6 @@ ix86_vectorize_builtin_gather (const_tree mem_vectype, else return NULL_TREE; break; -#endif default: return NULL_TREE; } diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index eb61598..cdeb457 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -1813,6 +1813,17 @@ vectorizable_mask_load_store (gimple stmt, gimple_stmt_iterator *gsi, "gather index use not simple."); return false; } + + tree arglist = TYPE_ARG_TYPES (TREE_TYPE (gather_decl)); + tree masktype + = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (arglist)))); + if (TREE_CODE (masktype) == INTEGER_TYPE) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "masked gather with integer mask not supported."); + return false; + } } else if (tree_int_cst_compare (nested_in_vect_loop ? STMT_VINFO_DR_STEP (stmt_info) @@ -5761,6 +5772,7 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, { mask = build_int_cst (TREE_TYPE (masktype), -1); mask = build_vector_from_val (masktype, mask); + mask = vect_init_vector (stmt, mask, masktype, NULL); } else if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (masktype))) { @@ -5771,10 +5783,10 @@ vectorizable_load (gimple stmt, gimple_stmt_iterator *gsi, gimple *vec_stmt, real_from_target (&r, tmp, TYPE_MODE (TREE_TYPE (masktype))); mask = build_real (TREE_TYPE (masktype), r); mask = build_vector_from_val (masktype, mask); + mask = vect_init_vector (stmt, mask, masktype, NULL); } else gcc_unreachable (); - mask = vect_init_vector (stmt, mask, masktype, NULL); scale = build_int_cst (scaletype, gather_scale); |