Use conditional internal functions in if-conversion
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / swaps-p8-15.c
blob172e4bd4cb1499a5101e09915f9fa8655dab6262
1 /* { dg-do compile { target { powerpc64le-*-* } } } */
2 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
3 /* { dg-options "-mcpu=power8 -O3" } */
4 /* { dg-final { scan-assembler "lxvd2x" } } */
5 /* { dg-final { scan-assembler "stxvd2x" } } */
6 /* { dg-final { scan-assembler "xxspltw" } } */
8 /* Currently the analyze_swaps phase cannot optimize this loop because
9 of the presence of an UNSPEC_VSX_CVDPSPN. At such time as this is
10 handled, we need to add a 'scan-assembler-not "xxpermdi"' directive to
11 this test. */
12 #include <altivec.h>
13 void abort();
15 #define N 4096
16 #define M 10000000
17 vector float ca[N][4] = {0};
18 vector float cb[N][4] = {0};
19 vector float cc[N][4] = {0};
21 __attribute__((noinline)) void foo ()
23 int i;
24 for (i = 0; i < N; i++) {
25 cc[i][0] = vec_mul(vec_splats(cb[i][0][0]), ca[i][0]);
26 cc[i][0] = vec_madd(cc[i][0],vec_splats(cb[i][0][1]), ca[i][1]);
27 cc[i][0] = vec_madd(cc[i][0],vec_splats(cb[i][0][2]), ca[i][2]);
28 cc[i][0] = vec_madd(cc[i][0],vec_splats(cb[i][0][3]), ca[i][3]);
30 cc[i][1] = vec_mul(vec_splats(cb[i][1][0]), ca[i][0]);
31 cc[i][1] = vec_madd(cc[i][0],vec_splats(cb[i][1][1]), ca[i][1]);
32 cc[i][1] = vec_madd(cc[i][0],vec_splats(cb[i][1][2]), ca[i][2]);
33 cc[i][1] = vec_madd(cc[i][0],vec_splats(cb[i][1][3]), ca[i][3]);
35 cc[i][2] = vec_mul(vec_splats(cb[i][2][0]), ca[i][0]);
36 cc[i][2] = vec_madd(cc[i][0],vec_splats(cb[i][2][1]), ca[i][1]);
37 cc[i][2] = vec_madd(cc[i][0],vec_splats(cb[i][2][2]), ca[i][2]);
38 cc[i][2] = vec_madd(cc[i][0],vec_splats(cb[i][2][3]), ca[i][3]);
40 cc[i][3] = vec_mul(vec_splats(cb[i][3][0]), ca[i][0]);
41 cc[i][3] = vec_madd(cc[i][0],vec_splats(cb[i][3][1]), ca[i][1]);
42 cc[i][3] = vec_madd(cc[i][0],vec_splats(cb[i][3][2]), ca[i][2]);
43 cc[i][3] = vec_madd(cc[i][0],vec_splats(cb[i][3][3]), ca[i][3]);
47 int main ()
49 foo ();
50 return 0;