diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2020-11-17 11:51:40 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-11-17 11:51:40 +0000 |
commit | fcd513df9aa83f30dbd1c34d13c8a0972702ffa1 (patch) | |
tree | 9aaaa1efe74624d302c4b128d8fa3fc30a03f80c | |
parent | f6da5ecb058cbdcbf8f8efc2d7dcdf9b7bc3a4fa (diff) | |
download | gcc-fcd513df9aa83f30dbd1c34d13c8a0972702ffa1.zip gcc-fcd513df9aa83f30dbd1c34d13c8a0972702ffa1.tar.gz gcc-fcd513df9aa83f30dbd1c34d13c8a0972702ffa1.tar.bz2 |
PR97693: Specify required vectype in vectorizable_call
The vectorizable_call part of r11-1143 dropped the required
vectype when moving from vect_get_vec_def_for_operand to
vect_get_vec_defs_for_operand. This caused an ICE on the
testcase for SVE, because we ended up with a non-predicate
value being passed to a predicate input.
AFAICT this was the only instance of that happening. The types
seemed to get carried forward for all the other converted calls.
gcc/
PR tree-optimization/97693
* tree-vect-stmts.c (vectorizable_call): Pass the required vectype
to vect_get_vec_defs_for_operand.
gcc/testsuite/
PR tree-optimization/97693
* gcc.dg/vect/pr97693.c: New test.
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr97693.c | 15 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 3 |
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr97693.c b/gcc/testsuite/gcc.dg/vect/pr97693.c new file mode 100644 index 0000000..4da44c7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr97693.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ + +extern short a[]; +int b; +short c, d; +unsigned e() { + if (c) + return c; + return d; +} +void f() { + for (unsigned g = b; g; g += 6) + for (_Bool h = 0; h < (_Bool)e(); h = 1) + a[g] = 1 / b; +} diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 2c7a8a7..4e535fe 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -3427,7 +3427,8 @@ vectorizable_call (vec_info *vinfo, { vec_defs.quick_push (vNULL); vect_get_vec_defs_for_operand (vinfo, stmt_info, ncopies, - op, &vec_defs[i]); + op, &vec_defs[i], + vectypes[i]); } orig_vargs[i] = vargs[i] = vec_defs[i][j]; } |