Hi,

This change:

+2014-12-05 Martin Jambor mjam...@suse.cz
+

    PR ipa/64192
        ipa-prop.c (ipa_compute_jump_functions_for_edge): Convert alignment
    from bits to bytes after checking they are byte-aligned.
    +

causes this regression on AArch64.

FAIL: gcc.target/aarch64/vect-movi.c scan-assembler movi\\tv[0-9]+.4s, 0xab, msl 16 FAIL: gcc.target/aarch64/vect-movi.c scan-assembler movi\\tv[0-9]+.4s, 0xab, msl 8 FAIL: gcc.target/aarch64/vect-movi.c scan-assembler mvni\\tv[0-9]+.4s, 0xab, msl 16 FAIL: gcc.target/aarch64/vect-movi.c scan-assembler mvni\\tv[0-9]+.4s, 0xab, msl 8

It causes AArch64 vector cost model to vectorize the loops in the test case with a VF = 2 on A53/default and VF = 4 for A57.

A53/default:
movi v0.2s, 0xab, msl 8
str d0, [x0]
str d0, [x0, 8]
str d0, [x0, 16]
str d0, [x0, 24]
str d0, [x0, 32]
str d0, [x0, 40]
str d0, [x0, 48]
str d0, [x0, 56]

vs. A57

    movi v0.4s, 0xab, msl 8
    str q0, [x0]
    str q0, [x0, 16]
    str q0, [x0, 32]
    str q0, [x0, 48]


But the test case isn't checking for a per-core optimized code, just whether we vectorize for MOVI or not. So, this patch improves reg exp to make sure the compiler vectorizes the code for either vectorization factor.

OK for trunk?

Thanks,
Tejas.

Changelog:

gcc/testsuite:

        * gcc.target/aarch64/vect-movi.c: Check for vectorization for
        64-bit and 128-bit.
diff --git a/gcc/testsuite/gcc.target/aarch64/vect-movi.c 
b/gcc/testsuite/gcc.target/aarch64/vect-movi.c
index 59a0bd5..d28a71d 100644
--- a/gcc/testsuite/gcc.target/aarch64/vect-movi.c
+++ b/gcc/testsuite/gcc.target/aarch64/vect-movi.c
@@ -10,7 +10,7 @@ movi_msl8 (int *__restrict a)
 {
   int i;
 
-  /* { dg-final { scan-assembler "movi\\tv\[0-9\]+\.4s, 0xab, msl 8" } } */
+  /* { dg-final { scan-assembler "movi\\tv\[0-9\]+\.\[42\]s, 0xab, msl 8" } } 
*/
   for (i = 0; i < N; i++)
     a[i] = 0xabff;
 }
@@ -20,7 +20,7 @@ movi_msl16 (int *__restrict a)
 {
   int i;
 
-  /* { dg-final { scan-assembler "movi\\tv\[0-9\]+\.4s, 0xab, msl 16" } } */
+  /* { dg-final { scan-assembler "movi\\tv\[0-9\]+\.\[42\]s, 0xab, msl 16" } } 
*/
   for (i = 0; i < N; i++)
     a[i] = 0xabffff;
 }
@@ -30,7 +30,7 @@ mvni_msl8 (int *__restrict a)
 {
   int i;
 
-  /* { dg-final { scan-assembler "mvni\\tv\[0-9\]+\.4s, 0xab, msl 8" } } */
+  /* { dg-final { scan-assembler "mvni\\tv\[0-9\]+\.\[42\]s, 0xab, msl 8" } } 
*/
   for (i = 0; i < N; i++)
     a[i] = 0xffff5400;
 }
@@ -40,7 +40,7 @@ mvni_msl16 (int *__restrict a)
 {
   int i;
 
-  /* { dg-final { scan-assembler "mvni\\tv\[0-9\]+\.4s, 0xab, msl 16" } } */
+  /* { dg-final { scan-assembler "mvni\\tv\[0-9\]+\.\[42\]s, 0xab, msl 16" } } 
*/
   for (i = 0; i < N; i++)
     a[i] = 0xff540000;
 }

Reply via email to