63 lines
776 B
C
63 lines
776 B
C
/* PR optimization/10955 */
|
|
/* Originator: <heinrich.brand@fujitsu-siemens.com> */
|
|
|
|
/* This used to fail on SPARC32 at -O3 because the loop unroller
|
|
wrongly thought it could eliminate a pseudo in a loop, while
|
|
the pseudo was used outside the loop. */
|
|
|
|
extern void abort(void);
|
|
|
|
#define COMPLEX struct CS
|
|
|
|
COMPLEX {
|
|
long x;
|
|
long y;
|
|
};
|
|
|
|
|
|
static COMPLEX CCID (COMPLEX x)
|
|
{
|
|
COMPLEX a;
|
|
|
|
a.x = x.x;
|
|
a.y = x.y;
|
|
|
|
return a;
|
|
}
|
|
|
|
|
|
static COMPLEX CPOW (COMPLEX x, int y)
|
|
{
|
|
COMPLEX a;
|
|
a = x;
|
|
|
|
while (--y > 0)
|
|
a=CCID(a);
|
|
|
|
return a;
|
|
}
|
|
|
|
|
|
static int c5p (COMPLEX x)
|
|
{
|
|
COMPLEX a,b;
|
|
a = CPOW (x, 2);
|
|
b = CCID( CPOW(a,2) );
|
|
|
|
return (b.x == b.y);
|
|
}
|
|
|
|
|
|
int main (void)
|
|
{
|
|
COMPLEX x;
|
|
|
|
x.x = -7;
|
|
x.y = -7;
|
|
|
|
if (!c5p(x))
|
|
abort();
|
|
|
|
return 0;
|
|
}
|