mirror of git://gcc.gnu.org/git/gcc.git
179 lines
3.8 KiB
C
179 lines
3.8 KiB
C
/* Testcase derived from gcc.c-torture/execute cmpsf-1.c
|
|
which showed jump threading profile insanities. */
|
|
/* { dg-options "-Ofast -fdump-tree-dom1-all" } */
|
|
|
|
#include <limits.h>
|
|
|
|
void abort();
|
|
extern void exit (int);
|
|
|
|
#define F 140
|
|
#define T 13
|
|
|
|
feq (float x, float y)
|
|
{
|
|
if (x == y)
|
|
return T;
|
|
else
|
|
return F;
|
|
}
|
|
|
|
fne (float x, float y)
|
|
{
|
|
if (x != y)
|
|
return T;
|
|
else
|
|
return F;
|
|
}
|
|
|
|
flt (float x, float y)
|
|
{
|
|
if (x < y)
|
|
return T;
|
|
else
|
|
return F;
|
|
}
|
|
|
|
fge (float x, float y)
|
|
{
|
|
if (x >= y)
|
|
return T;
|
|
else
|
|
return F;
|
|
}
|
|
|
|
fgt (float x, float y)
|
|
{
|
|
if (x > y)
|
|
return T;
|
|
else
|
|
return F;
|
|
}
|
|
|
|
fle (float x, float y)
|
|
{
|
|
if (x <= y)
|
|
return T;
|
|
else
|
|
return F;
|
|
}
|
|
|
|
float args[] =
|
|
{
|
|
0.0F,
|
|
1.0F,
|
|
-1.0F,
|
|
__FLT_MAX__,
|
|
__FLT_MIN__,
|
|
0.0000000000001F,
|
|
123456789.0F,
|
|
-987654321.0F
|
|
};
|
|
|
|
int correct_results[] =
|
|
{
|
|
T, F, F, T, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
T, F, F, T, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
T, F, F, T, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
T, F, F, T, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
T, F, F, T, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
T, F, F, T, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, F, T, T, F,
|
|
T, F, F, T, F, T,
|
|
F, T, F, T, T, F,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
F, T, T, F, F, T,
|
|
T, F, F, T, F, T,
|
|
};
|
|
|
|
void
|
|
test (void)
|
|
{
|
|
int i, j, *res = correct_results;
|
|
|
|
for (i = 0; i < 8; i++)
|
|
{
|
|
float arg0 = args[i];
|
|
for (j = 0; j < 8; j++)
|
|
{
|
|
float arg1 = args[j];
|
|
|
|
if (feq (arg0, arg1) != *res++)
|
|
abort ();
|
|
if (fne (arg0, arg1) != *res++)
|
|
abort ();
|
|
if (flt (arg0, arg1) != *res++)
|
|
abort ();
|
|
if (fge (arg0, arg1) != *res++)
|
|
abort ();
|
|
if (fgt (arg0, arg1) != *res++)
|
|
abort ();
|
|
if (fle (arg0, arg1) != *res++)
|
|
abort ();
|
|
}
|
|
}
|
|
}
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
int i;
|
|
for (i=0; i<100; i++)
|
|
test ();
|
|
exit (0);
|
|
}
|
|
|
|
/* { dg-final-use { scan-tree-dump-not "Invalid sum" "dom1"} } */
|