aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-02-28 09:17:20 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-02-28 09:17:20 +0000
commitc7d97b2846c5647a81548caa3264d77c0a595010 (patch)
tree2a955532ce68b68328f58a3dfcbca6d4856dbd07 /gcc
parentd03958cfdfa01c3ad63ac50c190a056f1add4dc0 (diff)
downloadgcc-c7d97b2846c5647a81548caa3264d77c0a595010.zip
gcc-c7d97b2846c5647a81548caa3264d77c0a595010.tar.gz
gcc-c7d97b2846c5647a81548caa3264d77c0a595010.tar.bz2
re PR tree-optimization/79723 (Another case of dropped gs: prefix)
2017-02-28 Richard Biener <rguenther@suse.de> PR tree-optimization/79723 * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): Preserve address-space properly. * gcc.target/i386/pr79723.c: New testcase. From-SVN: r245772
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr79723.c10
-rw-r--r--gcc/tree-vect-stmts.c7
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cd95521..a98a08e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2017-02-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79723
+ * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): Preserve
+ address-space properly.
+
2017-02-28 Thomas Schwinge <thomas@codesourcery.com>
* doc/optinfo.texi (Optimization groups): Fix option used for
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 55edc8a..8c0514c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-28 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/79723
+ * gcc.target/i386/pr79723.c: New testcase.
+
2017-02-27 Pat Haugen <pthaugen@us.ibm.com>
PR target/79544
diff --git a/gcc/testsuite/gcc.target/i386/pr79723.c b/gcc/testsuite/gcc.target/i386/pr79723.c
new file mode 100644
index 0000000..0f1bdee
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr79723.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -msse2 -mno-avx" } */
+
+void memset_pattern_seg_gs(unsigned char * __seg_gs *s, long n)
+{
+ for (long i = 0; i < n; ++i)
+ s[i] = 0;
+}
+
+/* { dg-final { scan-assembler "mov\[au\]p.\[ \t\]\[^,\]+, %gs:" } } */
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index f4b777e..c87f72c 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -8957,6 +8957,7 @@ free_stmt_vec_info (gimple *stmt)
static tree
get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
{
+ tree orig_scalar_type = scalar_type;
machine_mode inner_mode = TYPE_MODE (scalar_type);
machine_mode simd_mode;
unsigned int nbytes = GET_MODE_SIZE (inner_mode);
@@ -9017,6 +9018,12 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size)
&& !INTEGRAL_MODE_P (TYPE_MODE (vectype)))
return NULL_TREE;
+ /* Re-attach the address-space qualifier if we canonicalized the scalar
+ type. */
+ if (TYPE_ADDR_SPACE (orig_scalar_type) != TYPE_ADDR_SPACE (vectype))
+ return build_qualified_type
+ (vectype, KEEP_QUAL_ADDR_SPACE (TYPE_QUALS (orig_scalar_type)));
+
return vectype;
}