1 /* { dg-do run { target sparc*-*-* } } */
2 /* { dg-options "-std=gnu99 -Os" } */
4 /* This is a massively distilled test case based upon
5 mm/memory.c:unmap_vmas() in the Linux kernel when compiled
6 on sparc64 for SMP which uses a global register as the
7 base of the per-cpu variable area.
9 Because of a bug in global register handling in the dataflow
10 code, the loop-invariant pass would move 'expression(regval)'
11 outside of the loop. */
13 extern void exit(int);
14 extern void abort(void);
16 register unsigned long regval __asm__("g6");
18 extern void cond_resched(void);
22 static unsigned long expression(unsigned long v)
26 __asm__("" : "=r" (ret) : "0" (0));
30 void func(unsigned long *pp)
34 for (i = 0; i < 56; i++) {
36 *pp = expression(regval);
40 void __attribute__((noinline)) cond_resched(void)