2011-12-23 06:43:09 +01:00
|
|
|
/* { dg-do compile } */
|
2016-07-12 15:32:04 +02:00
|
|
|
/* { dg-options "-O2 -fdump-tree-optimized" } */
|
2011-12-23 06:43:09 +01:00
|
|
|
|
|
|
|
#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;
|
|
|
|
}
|
2016-07-12 15:32:04 +02:00
|
|
|
|
2011-12-23 06:43:09 +01:00
|
|
|
/* We should not eliminate global register variable when it is the RHS of
|
2016-07-12 15:32:04 +02:00
|
|
|
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-*-* } } } } } */
|