blob: 6effb77e20e5ea3decf8dd39f8bf1e7f8cc07740 [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
#define REGISTER register
#if defined __arm__
# define REG1 asm("r4")
#elif defined __i386__
# define REG1 asm("ebx")
#elif defined __mips__
# define REG1 asm("s0")
#elif defined __x86_64__
# define REG1 asm("rbp")
#else
# undef REGISTER
# define REGISTER
# define REG1
#endif
REGISTER long data_0 REG1;
long data_3;
long foo(long data, long v)
{
long i;
long t, u;
if (data)
i = data_0 + data_3;
else {
v = 2;
i = 5;
}
t = data_0 + data_3;
u = i;
return v * t * u;
}
/* We should not eliminate global register variable when it is the RHS of
a single assignment. So the number of loads from data_0 has to match
that of the number of adds (we hoist data_0 + data_3 above the
if (data) and eliminate the useless copy). */
/* { dg-final { scan-tree-dump-times "= data_0;" 1 "optimized" { target { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } */
/* { dg-final { scan-tree-dump-times " \\+ " 1 "optimized" { target { ! { arm*-*-* i?86-*-* mips*-*-* x86_64-*-* } } } } } */