aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-10-20 08:14:54 +0200
committerRichard Biener <rguenther@suse.de>2020-10-20 09:03:02 +0200
commita335f6f4ee5cb4f7dbfef52e17bf854ae42c1216 (patch)
treeea2882c844e2c7b779a31391a984fc052ca4ecfd
parent57fa4146eba12b9c51cd9c2f84dc096997578c51 (diff)
downloadgcc-a335f6f4ee5cb4f7dbfef52e17bf854ae42c1216.zip
gcc-a335f6f4ee5cb4f7dbfef52e17bf854ae42c1216.tar.gz
gcc-a335f6f4ee5cb4f7dbfef52e17bf854ae42c1216.tar.bz2
tree-optimization/97496 - avoid SLP externs in patterns
I forgot to guard the promotion to external for the case where the def is in a pattern. 2020-10-20 Richard Biener <rguenther@suse.de> PR tree-optimization/97496 * tree-vect-slp.c (vect_get_and_check_slp_defs): Guard extern promotion with not in pattern. * gcc.dg/vect/bb-slp-pr97496.c: New testcase.
-rw-r--r--gcc/testsuite/gcc.dg/vect/bb-slp-pr97496.c14
-rw-r--r--gcc/tree-vect-slp.c3
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr97496.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr97496.c
new file mode 100644
index 0000000..fa9e980
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr97496.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+int a;
+int b[1024];
+void c(unsigned g) {
+ if (a) {
+ long e = g, d = e;
+ int f = 0;
+ for (; f < 4; f++) {
+ b[f] = d;
+ d >>= 8;
+ }
+ }
+}
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index f36d8d1..0c1447e 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -582,7 +582,8 @@ vect_get_and_check_slp_defs (vec_info *vinfo, unsigned char swap,
continue;
}
- if (is_a <bb_vec_info> (vinfo))
+ if (is_a <bb_vec_info> (vinfo)
+ && !oprnd_info->any_pattern)
{
/* Now for commutative ops we should see whether we can
make the other operand matching. */