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