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