diff options
author | Richard Biener <rguenther@suse.de> | 2020-10-20 08:14:54 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-10-20 09:03:02 +0200 |
commit | a335f6f4ee5cb4f7dbfef52e17bf854ae42c1216 (patch) | |
tree | ea2882c844e2c7b779a31391a984fc052ca4ecfd | |
parent | 57fa4146eba12b9c51cd9c2f84dc096997578c51 (diff) | |
download | gcc-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.c | 14 | ||||
-rw-r--r-- | gcc/tree-vect-slp.c | 3 |
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. */ |