1 /* PR tree-optimization/51987 */
2 /* { dg-do run { target { ! { ia32 } } } } */
3 /* { dg-options "-O3" } */
4 
5 extern void abort (void);
6 union U { unsigned long long l; struct { unsigned int l, h; } i; };
7 
8 __attribute__((noinline, noclone)) void
foo(char * x,char * y)9 foo (char *x, char *y)
10 {
11   int i;
12   for (i = 0; i < 64; i++)
13     {
14       union U u;
15       asm ("movl %1, %k0; salq $32, %0" : "=r" (u.l) : "r" (i));
16       x[i] = u.i.h;
17       union U v;
18       asm ("movl %1, %k0; salq $32, %0" : "=r" (v.l) : "r" (i));
19       y[i] = v.i.h;
20     }
21 }
22 
23 int
main()24 main ()
25 {
26   char a[64], b[64];
27   int i;
28   foo (a, b);
29   for (i = 0; i < 64; i++)
30     if (a[i] != i || b[i] != i)
31       abort ();
32   return 0;
33 }
34