diff options
author | Tamar Christina <tamar.christina@arm.com> | 2024-09-06 14:05:43 +0100 |
---|---|---|
committer | Tamar Christina <tamar.christina@arm.com> | 2024-09-06 14:05:43 +0100 |
commit | 2c4438d39156493b5b382eb48b1f884ca5ab7ed4 (patch) | |
tree | 82c25d3666eabbe40b1a3b25b29fb1e9340bb5df /gcc | |
parent | 1247fa6e95cdf4a6422ec802f733f1f7ecaa3557 (diff) | |
download | gcc-2c4438d39156493b5b382eb48b1f884ca5ab7ed4.zip gcc-2c4438d39156493b5b382eb48b1f884ca5ab7ed4.tar.gz gcc-2c4438d39156493b5b382eb48b1f884ca5ab7ed4.tar.bz2 |
middle-end: check that the lhs of a COND_EXPR is an SSA_NAME in cond_store recognition [PR116628]
Because the vect_recog_bool_pattern can at the moment still transition
out of GIMPLE and back into GENERIC the vect_recog_cond_store_pattern can
end up using an expression as a mask rather than an SSA_NAME.
This adds an explicit check that we have a mask and not an expression.
gcc/ChangeLog:
PR tree-optimization/116628
* tree-vect-patterns.cc (vect_recog_cond_store_pattern): Add SSA_NAME
check on expression.
gcc/testsuite/ChangeLog:
PR tree-optimization/116628
* gcc.dg/vect/pr116628.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr116628.c | 14 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.cc | 3 |
2 files changed, 17 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/vect/pr116628.c b/gcc/testsuite/gcc.dg/vect/pr116628.c new file mode 100644 index 0000000..4068c65 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr116628.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target vect_float } */ +/* { dg-require-effective-target vect_masked_store } */ +/* { dg-additional-options "-Ofast -march=armv9-a" { target aarch64-*-* } } */ + +typedef float c; +c a[2000], b[0]; +void d() { + for (int e = 0; e < 2000; e++) + if (b[e]) + a[e] = b[e]; +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc index f7c3c62..3a0d4cb 100644 --- a/gcc/tree-vect-patterns.cc +++ b/gcc/tree-vect-patterns.cc @@ -6685,6 +6685,9 @@ vect_recog_cond_store_pattern (vec_info *vinfo, /* Check if the else value matches the original loaded one. */ bool invert = false; tree cmp_ls = gimple_arg (cond_stmt, 0); + if (TREE_CODE (cmp_ls) != SSA_NAME) + return NULL; + tree cond_arg1 = gimple_arg (cond_stmt, 1); tree cond_arg2 = gimple_arg (cond_stmt, 2); |