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