mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-09 20:31:36 +08:00
middle-end: ensure that VEC_PERM operands get lowered to the same SSA_NAME. [PR107717]
At the moment when the VEC_PERMs generated by this match.pd rule is generated it creates two different SSA_NAMEs for the folded operand. Because of this it the permute switches from a single operand permute to a two operand permute and the target may no longer support a permute for this. This fixes it by ensuring we generate the same SSA_NAME for both operands. gcc/ChangeLog: PR tree-optimization/107717 * match.pd: Ensure same SSA_NAME. gcc/testsuite/ChangeLog: PR tree-optimization/107717 * gcc.target/aarch64/sve2/pr107717.c: New test.
This commit is contained in:
parent
1bc7efa948
commit
cbe313060c
gcc
@ -8262,7 +8262,7 @@ and,
|
||||
(simplify
|
||||
(op (vec_perm @0 @0 @2) (vec_perm @1 @1 @2))
|
||||
(if (VECTOR_INTEGER_TYPE_P (type))
|
||||
(vec_perm (op @0 @1) (op @0 @1) @2))))
|
||||
(vec_perm (op@3 @0 @1) @3 @2))))
|
||||
|
||||
/* Similar for float arithmetic when permutation constant covers
|
||||
all vector elements. */
|
||||
@ -8301,4 +8301,4 @@ and,
|
||||
}
|
||||
}
|
||||
(if (full_perm_p)
|
||||
(vec_perm (op @0 @1) (op @0 @1) @2))))))
|
||||
(vec_perm (op@3 @0 @1) @3 @2))))))
|
||||
|
8
gcc/testsuite/gcc.target/aarch64/sve2/pr107717.c
Normal file
8
gcc/testsuite/gcc.target/aarch64/sve2/pr107717.c
Normal file
@ -0,0 +1,8 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-additional-options "-O3 -march=armv8-a+sve2" } */
|
||||
|
||||
void foo(int n, char *restrict out, char *restrict in) {
|
||||
for (int i=n; i-->0; ) {
|
||||
out[i] += in[i];
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user