1/* PR tree-optimization/51987 */
2/* { dg-do run { target { ! { ia32 } } } } */
3/* { dg-options "-O3" } */
4
5extern void abort (void);
6union U { unsigned long long l; struct { unsigned int l, h; } i; };
7
8__attribute__((noinline, noclone)) void
9foo (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
23int
24main ()
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