/* { 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; }