1 /* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
2 /* { dg-require-effective-target powerpc_p9vector_ok } */
3 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
4 
5 /* Check code generation for direct move for long types.  */
6 
7 void
test(vector double * p)8 test (vector double *p)
9 {
10   vector double v1 = *p;
11   vector double v2;
12   vector double v3;
13   vector double v4;
14 
15   /* Force memory -> FPR load.  */
16   __asm__ (" # reg %x0" : "+d" (v1));
17 
18   /* force VSX -> GPR direct move.  */
19   v2 = v1;
20   __asm__ (" # reg %0" : "+r" (v2));
21 
22   /* Force GPR -> Altivec direct move.  */
23   v3 = v2;
24   __asm__ (" # reg %x0" : "+v" (v3));
25   *p = v3;
26 }
27 
28 /* { dg-final { scan-assembler "mfvsrd"  } } */
29 /* { dg-final { scan-assembler "mfvsrld" } } */
30 /* { dg-final { scan-assembler "mtvsrdd" } } */
31 
32 
33