1 /* { dg-do compile { target { powerpc64le-*-* } } } */
2 /* { dg-options "-mdejagnu-cpu=power8 -O3" } */
3 /* { dg-final { scan-assembler "lxvd2x" } } */
4 /* { dg-final { scan-assembler "stxvd2x" } } */
5 /* { dg-final { scan-assembler-not "xxpermdi" } } */
6 
7 void abort ();
8 
9 #define N 4096
10 int ca[N] __attribute__((aligned(16)));
11 int cb[N] __attribute__((aligned(16)));
12 int cc[N] __attribute__((aligned(16)));
13 int cd[N] __attribute__((aligned(16)));
14 
foo()15 __attribute__((noinline)) void foo ()
16 {
17   int i;
18   for (i = 0; i < N; i++) {
19     ca[i] = (cb[i] + cc[i]) * cd[i];
20   }
21 }
22 
init()23 __attribute__((noinline)) void init ()
24 {
25   int i;
26   for (i = 0; i < N; ++i) {
27     cb[i] = 3 * i - 2048;
28     cc[i] = -5 * i + 93;
29     cd[i] = i % 2 ? 1 : -1;
30   }
31 }
32 
main()33 int main ()
34 {
35   int i;
36   init ();
37   foo ();
38   for (i = 0; i < N; ++i)
39     if (i % 2 == 1 && ca[i] != -2 * i - 1955)
40       abort ();
41     else if (i % 2 == 0 && ca[i] != 1955 + 2 * i)
42       abort ();
43   return 0;
44 }
45