URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 297 |
Rev 338 |
/* PR optimization/10955 */
|
/* PR optimization/10955 */
|
/* Originator: <heinrich.brand@fujitsu-siemens.com> */
|
/* Originator: <heinrich.brand@fujitsu-siemens.com> */
|
|
|
/* This used to fail on SPARC32 at -O3 because the loop unroller
|
/* This used to fail on SPARC32 at -O3 because the loop unroller
|
wrongly thought it could eliminate a pseudo in a loop, while
|
wrongly thought it could eliminate a pseudo in a loop, while
|
the pseudo was used outside the loop. */
|
the pseudo was used outside the loop. */
|
|
|
extern void abort(void);
|
extern void abort(void);
|
|
|
#define COMPLEX struct CS
|
#define COMPLEX struct CS
|
|
|
COMPLEX {
|
COMPLEX {
|
long x;
|
long x;
|
long y;
|
long y;
|
};
|
};
|
|
|
|
|
static COMPLEX CCID (COMPLEX x)
|
static COMPLEX CCID (COMPLEX x)
|
{
|
{
|
COMPLEX a;
|
COMPLEX a;
|
|
|
a.x = x.x;
|
a.x = x.x;
|
a.y = x.y;
|
a.y = x.y;
|
|
|
return a;
|
return a;
|
}
|
}
|
|
|
|
|
static COMPLEX CPOW (COMPLEX x, int y)
|
static COMPLEX CPOW (COMPLEX x, int y)
|
{
|
{
|
COMPLEX a;
|
COMPLEX a;
|
a = x;
|
a = x;
|
|
|
while (--y > 0)
|
while (--y > 0)
|
a=CCID(a);
|
a=CCID(a);
|
|
|
return a;
|
return a;
|
}
|
}
|
|
|
|
|
static int c5p (COMPLEX x)
|
static int c5p (COMPLEX x)
|
{
|
{
|
COMPLEX a,b;
|
COMPLEX a,b;
|
a = CPOW (x, 2);
|
a = CPOW (x, 2);
|
b = CCID( CPOW(a,2) );
|
b = CCID( CPOW(a,2) );
|
|
|
return (b.x == b.y);
|
return (b.x == b.y);
|
}
|
}
|
|
|
|
|
int main (void)
|
int main (void)
|
{
|
{
|
COMPLEX x;
|
COMPLEX x;
|
|
|
x.x = -7;
|
x.x = -7;
|
x.y = -7;
|
x.y = -7;
|
|
|
if (!c5p(x))
|
if (!c5p(x))
|
abort();
|
abort();
|
|
|
return 0;
|
return 0;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.