1/* { dg-do compile } */ 2/* { dg-options "-O2 -fdump-tree-pre-stats" } */ 3 4#define REGISTER register 5 6#if defined __arm__ 7# define REG1 asm("r4") 8#elif defined __i386__ 9# define REG1 asm("ebx") 10#elif defined __mips__ 11# define REG1 asm("s0") 12#elif defined __x86_64__ 13# define REG1 asm("rbp") 14#else 15# undef REGISTER 16# define REGISTER 17# define REG1 18#endif 19 20REGISTER long data_0 REG1; 21long data_3; 22 23long foo(long data, long v) 24{ 25 long i; 26 long t, u; 27 28 if (data) 29 i = data_0 + data_3; 30 else { 31 v = 2; 32 i = 5; 33 } 34 t = data_0 + data_3; 35 u = i; 36 return v * t * u; 37} 38/* We should not eliminate global register variable when it is the RHS of 39 a single assignment. */ 40/* { dg-final { scan-tree-dump-times "Eliminated: 2" 1 "pre" { target { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } */ 41/* { dg-final { scan-tree-dump-times "Eliminated: 3" 1 "pre" { target { ! { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } } */ 42/* { dg-final { cleanup-tree-dump "pre" } } */ 43