aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-02-23 11:43:51 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-02-23 11:43:51 +0000
commit45f7faf0b5bfab05293808a03e76938572475037 (patch)
tree9070504f6eede14d0f13713f220798a9b6812515 /gcc
parent06393a975477c92e28b034a1a9c557841ea553e9 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79683.c16
-rw-r--r--gcc/tree-vect-stmts.c61
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))