diff options
author | Richard Biener <rguenther@suse.de> | 2017-02-23 11:43:51 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-02-23 11:43:51 +0000 |
commit | 45f7faf0b5bfab05293808a03e76938572475037 (patch) | |
tree | 9070504f6eede14d0f13713f220798a9b6812515 /gcc | |
parent | 06393a975477c92e28b034a1a9c557841ea553e9 (diff) | |
download | gcc-45f7faf0b5bfab05293808a03e76938572475037.zip gcc-45f7faf0b5bfab05293808a03e76938572475037.tar.gz gcc-45f7faf0b5bfab05293808a03e76938572475037.tar.bz2 |
re PR tree-optimization/79683 (SLP vectorizer drops gs: prefix)
2017-02-23 Richard Biener <rguenther@suse.de>
PR tree-optimization/79683
* tree-vect-stmts.c (vect_analyze_stmt): Do not overwrite
vector types for data-refs.
* gcc.target/i386/pr79683.c: New testcase.
From-SVN: r245679
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr79683.c | 16 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 61 |
4 files changed, 60 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c42011..820f673 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2017-02-23 Richard Biener <rguenther@suse.de> + + PR tree-optimization/79683 + * tree-vect-stmts.c (vect_analyze_stmt): Do not overwrite + vector types for data-refs. + 2017-02-23 Martin Liska <mliska@suse.cz> * params.def (PARAM_MIN_NONDEBUG_INSN_UID): Change default to 0. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d900cc3..95cc1d5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-02-23 Richard Biener <rguenther@suse.de> + + PR tree-optimization/79683 + * gcc.target/i386/pr79683.c: New testcase. + 2017-02-22 Jeff Law <law@redhat.com> PR tree-optimization/79578 diff --git a/gcc/testsuite/gcc.target/i386/pr79683.c b/gcc/testsuite/gcc.target/i386/pr79683.c new file mode 100644 index 0000000..cbd43fd --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr79683.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse2" } */ + +struct s { + __INT64_TYPE__ a; + __INT64_TYPE__ b; +}; +void test(struct s __seg_gs *x) { + x->a += 1; + x->b -= 1; +} + +/* We get the function vectorized, verify the load and store are + address-space qualified. */ +/* { dg-final { scan-assembler-times "padd" 1 } } */ +/* { dg-final { scan-assembler-times "%gs" 2 } } */ diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index bf07efd..5976882 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -8486,37 +8486,42 @@ vect_analyze_stmt (gimple *stmt, bool *need_to_vectorize, slp_tree node) { gcc_assert (PURE_SLP_STMT (stmt_info)); - scalar_type = TREE_TYPE (gimple_get_lhs (stmt)); - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_NOTE, vect_location, - "get vectype for scalar type: "); - dump_generic_expr (MSG_NOTE, TDF_SLIM, scalar_type); - dump_printf (MSG_NOTE, "\n"); - } + /* Memory accesses already got their vector type assigned + in vect_analyze_data_refs. */ + if (! STMT_VINFO_DATA_REF (stmt_info)) + { + scalar_type = TREE_TYPE (gimple_get_lhs (stmt)); + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_NOTE, vect_location, + "get vectype for scalar type: "); + dump_generic_expr (MSG_NOTE, TDF_SLIM, scalar_type); + dump_printf (MSG_NOTE, "\n"); + } - vectype = get_vectype_for_scalar_type (scalar_type); - if (!vectype) - { - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "not SLPed: unsupported data-type "); - dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, - scalar_type); - dump_printf (MSG_MISSED_OPTIMIZATION, "\n"); - } - return false; - } + vectype = get_vectype_for_scalar_type (scalar_type); + if (!vectype) + { + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "not SLPed: unsupported data-type "); + dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, + scalar_type); + dump_printf (MSG_MISSED_OPTIMIZATION, "\n"); + } + return false; + } - if (dump_enabled_p ()) - { - dump_printf_loc (MSG_NOTE, vect_location, "vectype: "); - dump_generic_expr (MSG_NOTE, TDF_SLIM, vectype); - dump_printf (MSG_NOTE, "\n"); - } + if (dump_enabled_p ()) + { + dump_printf_loc (MSG_NOTE, vect_location, "vectype: "); + dump_generic_expr (MSG_NOTE, TDF_SLIM, vectype); + dump_printf (MSG_NOTE, "\n"); + } - STMT_VINFO_VECTYPE (stmt_info) = vectype; + STMT_VINFO_VECTYPE (stmt_info) = vectype; + } } if (STMT_VINFO_RELEVANT_P (stmt_info)) |