URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 298 |
Rev 338 |
/* The problem in this PR was mostly finding a suitable place to insert
|
/* The problem in this PR was mostly finding a suitable place to insert
|
the reciprocals of the function arguments. This test case tries to
|
the reciprocals of the function arguments. This test case tries to
|
test three possible ways of how this may go wrong. */
|
test three possible ways of how this may go wrong. */
|
/* { dg-options "-O2 -ffast-math" } */
|
/* { dg-options "-O2 -ffast-math" } */
|
/* { dg-do compile } */
|
/* { dg-do compile } */
|
|
|
/* The original test case. */
|
/* The original test case. */
|
double
|
double
|
f1 (double a, double b, double c)
|
f1 (double a, double b, double c)
|
{
|
{
|
double y0;
|
double y0;
|
double y1;
|
double y1;
|
|
|
if (a == 0.0)
|
if (a == 0.0)
|
{
|
{
|
y0 = -c / b;
|
y0 = -c / b;
|
return y0;
|
return y0;
|
}
|
}
|
y0 = c / b;
|
y0 = c / b;
|
y1 = a / b;
|
y1 = a / b;
|
return y0 * y1;
|
return y0 * y1;
|
}
|
}
|
|
|
/* Labels may end up in the middle of a block. Also bad. */
|
/* Labels may end up in the middle of a block. Also bad. */
|
double
|
double
|
f2 (double a, double b, double c)
|
f2 (double a, double b, double c)
|
{
|
{
|
double y0;
|
double y0;
|
double y1;
|
double y1;
|
|
|
a_label:
|
a_label:
|
another_label:
|
another_label:
|
if (a == 0.0)
|
if (a == 0.0)
|
{
|
{
|
y0 = -c / b;
|
y0 = -c / b;
|
return y0;
|
return y0;
|
}
|
}
|
y0 = c / b;
|
y0 = c / b;
|
y1 = a / b;
|
y1 = a / b;
|
return y0 * y1;
|
return y0 * y1;
|
}
|
}
|
|
|
/* Uses must still be dominated by their defs. */
|
/* Uses must still be dominated by their defs. */
|
double
|
double
|
f3 (double a, double b, double c)
|
f3 (double a, double b, double c)
|
{
|
{
|
double y0;
|
double y0;
|
double y1;
|
double y1;
|
|
|
y0 = -c / b;
|
y0 = -c / b;
|
if (a == 0.0)
|
if (a == 0.0)
|
{
|
{
|
return y0;
|
return y0;
|
}
|
}
|
y0 = c / b;
|
y0 = c / b;
|
y1 = a / b;
|
y1 = a / b;
|
return y0 * y1;
|
return y0 * y1;
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.