blob: 0f13619106b7a341e200e4e3a018c821c634cd75 [file] [log] [blame]
/* { dg-do run } */
/* { dg-options "-O2" } */
extern void abort (void);
/* This series of tests looks for the optimization:
x = (a >= b) + c + d
=>
cmp a, b
adc x, c, d
*/
unsigned long
ltu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
{
return (a < b) + c + d;
}
unsigned long
gtu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
{
return (a > b) + c + d;
}
unsigned long
leu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
{
return (a <= b) + c + d;
}
unsigned long
geu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
{
return (a >= b) + c + d;
}
unsigned long
equ_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
{
return (a == b) + c + d;
}
unsigned long
neu_add (unsigned long a, unsigned long b, unsigned long c, unsigned long d)
{
return (a != b) + c + d;
}
long
lt_add ( long a, long b, long c, long d)
{
return (a < b) + c + d;
}
long
gt_add ( long a, long b, long c, long d)
{
return (a > b) + c + d;
}
long
le_add ( long a, long b, long c, long d)
{
return (a <= b) + c + d;
}
long
ge_add ( long a, long b, long c, long d)
{
return (a >= b) + c + d;
}
long
eq_add ( long a, long b, long c, long d)
{
return (a == b) + c + d;
}
long
ne_add ( long a, long b, long c, long d)
{
return (a != b) + c + d;
}
int
main ()
{
if (ltu_add(1,2,3,4) != 8)
{
abort();
}
if (ltu_add(2,2,3,4) != 7)
{
abort();
}
if (ltu_add(3,2,3,4) != 7)
{
abort();
}
if (gtu_add(2,1,3,4) != 8)
{
abort();
}
if (gtu_add(2,2,3,4) != 7)
{
abort();
}
if (gtu_add(1,2,3,4) != 7)
{
abort();
}
if (leu_add(1,2,3,4) != 8)
{
abort();
}
if (leu_add(2,2,3,4) != 8)
{
abort();
}
if (leu_add(3,2,3,4) != 7)
{
abort();
}
if (leu_add(2,1,3,4) != 7)
{
abort();
}
if (geu_add(2,1,3,4) != 8)
{
abort();
}
if (geu_add(2,2,3,4) != 8)
{
abort();
}
if (geu_add(1,2,3,4) != 7)
{
abort();
}
if (equ_add(1,2,3,4) != 7)
{
abort();
}
if (equ_add(2,2,3,4) != 8)
{
abort();
}
if (equ_add(3,2,3,4) != 7)
{
abort();
}
if (neu_add(1,2,3,4) != 8)
{
abort();
}
if (neu_add(2,2,3,4) != 7)
{
abort();
}
if (neu_add(3,2,3,4) != 8)
{
abort();
}
if (lt_add(1,2,3,4) != 8)
{
abort();
}
if (lt_add(2,2,3,4) != 7)
{
abort();
}
if (lt_add(3,2,3,4) != 7)
{
abort();
}
if (gt_add(2,1,3,4) != 8)
{
abort();
}
if (gt_add(2,2,3,4) != 7)
{
abort();
}
if (gt_add(1,2,3,4) != 7)
{
abort();
}
if (le_add(1,2,3,4) != 8)
{
abort();
}
if (le_add(2,2,3,4) != 8)
{
abort();
}
if (le_add(3,2,3,4) != 7)
{
abort();
}
if (le_add(2,1,3,4) != 7)
{
abort();
}
if (ge_add(2,1,3,4) != 8)
{
abort();
}
if (ge_add(2,2,3,4) != 8)
{
abort();
}
if (ge_add(1,2,3,4) != 7)
{
abort();
}
if (eq_add(1,2,3,4) != 7)
{
abort();
}
if (eq_add(2,2,3,4) != 8)
{
abort();
}
if (eq_add(3,2,3,4) != 7)
{
abort();
}
if (ne_add(1,2,3,4) != 8)
{
abort();
}
if (ne_add(2,2,3,4) != 7)
{
abort();
}
if (ne_add(3,2,3,4) != 8)
{
abort();
}
return 0;
}