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-not "xxpermdi" } } */ 7 8 void abort (); 9 10 #define N 4096 11 int ca[N] __attribute__((aligned(16))); 12 int cb[N] __attribute__((aligned(16))); 13 int cc[N] __attribute__((aligned(16))); 14 int cd[N] __attribute__((aligned(16))); 15 foo()16__attribute__((noinline)) void foo () 17 { 18 int i; 19 for (i = 0; i < N; i++) { 20 ca[i] = ((cb[i] + cc[i]) * cd[i]) >> 3; 21 } 22 } 23 init()24__attribute__((noinline)) void init () 25 { 26 int i; 27 for (i = 0; i < N; ++i) { 28 cb[i] = 3 * i - 2048; 29 cc[i] = -5 * i + 93; 30 cd[i] = i % 2 ? 1 : -1; 31 } 32 } 33 main()34int main () 35 { 36 int i; 37 init (); 38 foo (); 39 for (i = 0; i < N; ++i) 40 if (i % 2 == 1 && ca[i] != (-2 * i - 1955) >> 3) 41 abort (); 42 else if (i % 2 == 0 && ca[i] != (1955 + 2 * i) >> 3) 43 abort (); 44 return 0; 45 } 46