1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fno-ipa-icf -fdump-tree-evrp" } */
       3  
       4  extern void arf (unsigned x, unsigned y);
       5  extern void baz (unsigned x, unsigned y);
       6  
       7  unsigned
       8  f1 (unsigned a, unsigned b)
       9  {
      10    b = a + 1;
      11    if (b < a)
      12      {
      13        arf (a, b);
      14        return 42;
      15      }
      16    baz (a, b);
      17    return b;
      18  }
      19  
      20  
      21  unsigned
      22  f1r (unsigned a, unsigned b)
      23  {
      24    b = a + 1;
      25    if (a < b)
      26      {
      27        baz (a, b);
      28        return 42;
      29      }
      30    arf (a, b);
      31    return b;
      32  }
      33  
      34  unsigned
      35  f1n (unsigned a, unsigned b)
      36  {
      37    b = a + 1;
      38    if (!(b < a))
      39      {
      40        baz (a, b);
      41        return 42;
      42      }
      43    arf (a, b);
      44    return b;
      45  }
      46  
      47  unsigned
      48  f1nr (unsigned a, unsigned b)
      49  {
      50    b = a + 1;
      51    if (!(a < b))
      52      {
      53        arf (a, b);
      54        return 42;
      55      }
      56    baz (a, b);
      57    return b;
      58  }
      59  
      60  
      61  unsigned
      62  f1o (unsigned a, unsigned b)
      63  {
      64    b = a + 1;
      65    if (a < b)
      66      {
      67        baz (a, b);
      68        return 42;
      69      }
      70    arf (a, b);
      71    return b;
      72  }
      73  
      74  unsigned
      75  f1ro (unsigned a, unsigned b)
      76  {
      77    b = a + 1;
      78    if (b < a)
      79      {
      80        arf (a, b);
      81        return 42;
      82      }
      83    baz (a, b);
      84    return b;
      85  }
      86  
      87  unsigned
      88  f1no (unsigned a, unsigned b)
      89  {
      90    b = a + 1;
      91    if (!(a < b))
      92      {
      93        arf (a, b);
      94        return 42;
      95      }
      96    baz (a, b);
      97    return b;
      98  }
      99  
     100  unsigned
     101  f1nro (unsigned a, unsigned b)
     102  {
     103    b = a + 1;
     104    if (!(b < a))
     105      {
     106        baz (a, b);
     107        return 42;
     108      }
     109    arf (a, b);
     110    return b;
     111  }
     112  
     113  
     114  unsigned
     115  f2 (unsigned a, unsigned b)
     116  {
     117    b = a + 1;
     118    if (b <= a)
     119      {
     120        arf (a, b);
     121        return 42;
     122      }
     123    baz (a, b);
     124    return b;
     125  }
     126  
     127  unsigned
     128  f2r (unsigned a, unsigned b)
     129  {
     130    b = a + 1;
     131    if (a <= b)
     132      {
     133        baz (a, b);
     134        return 42;
     135      }
     136    arf (a, b);
     137    return b;
     138  }
     139  
     140  unsigned
     141  f2n (unsigned a, unsigned b)
     142  {
     143    b = a + 1;
     144    if (!(b <= a))
     145      {
     146        baz (a, b);
     147        return 42;
     148      }
     149    arf (a, b);
     150    return b;
     151  }
     152  
     153  unsigned
     154  f2nr (unsigned a, unsigned b)
     155  {
     156    b = a + 1;
     157    if (!(a <= b))
     158      {
     159        arf (a, b);
     160        return 42;
     161      }
     162    baz (a, b);
     163    return b;
     164  }
     165  
     166  
     167  unsigned
     168  f2o (unsigned a, unsigned b)
     169  {
     170    b = a + 1;
     171    if (a <= b)
     172      {
     173        baz (a, b);
     174        return 42;
     175      }
     176    arf (a, b);
     177    return b;
     178  }
     179  
     180  unsigned
     181  f2ro (unsigned a, unsigned b)
     182  {
     183    b = a + 1;
     184    if (b <= a)
     185      {
     186        arf (a, b);
     187        return 42;
     188      }
     189    baz (a, b);
     190    return b;
     191  }
     192  
     193  unsigned
     194  f2no (unsigned a, unsigned b)
     195  {
     196    b = a + 1;
     197    if (!(a <= b))
     198      {
     199        arf (a, b);
     200        return 42;
     201      }
     202    baz (a, b);
     203    return b;
     204  }
     205  
     206  unsigned
     207  f2nro (unsigned a, unsigned b)
     208  {
     209    b = a + 1;
     210    if (!(b <= a))
     211      {
     212        baz (a, b);
     213        return 42;
     214      }
     215    arf (a, b);
     216    return b;
     217  }
     218  
     219  
     220  unsigned
     221  f3 (unsigned a, unsigned b)
     222  {
     223    b = a - 1;
     224    if (b < a)
     225      {
     226        baz (a, b);
     227        return 42;
     228      }
     229    arf (a, b);
     230    return b;
     231  }
     232  
     233  unsigned
     234  f3r (unsigned a, unsigned b)
     235  {
     236    b = a - 1;
     237    if (a < b)
     238      {
     239        arf (a, b);
     240        return 42;
     241      }
     242    baz (a, b);
     243    return b;
     244  }
     245  
     246  unsigned
     247  f3n (unsigned a, unsigned b)
     248  {
     249    b = a - 1;
     250    if (!(b < a))
     251      {
     252        arf (a, b);
     253        return 42;
     254      }
     255    baz (a, b);
     256    return b;
     257  }
     258  
     259  unsigned
     260  f3nr (unsigned a, unsigned b)
     261  {
     262    b = a - 1;
     263    if (!(a < b))
     264      {
     265        baz (a, b);
     266        return 42;
     267      }
     268    arf (a, b);
     269    return b;
     270  }
     271  
     272  
     273  unsigned
     274  f3o (unsigned a, unsigned b)
     275  {
     276    b = a - 1;
     277    if (a < b)
     278      {
     279        arf (a, b);
     280        return 42;
     281      }
     282    baz (a, b);
     283    return b;
     284  }
     285  
     286  unsigned
     287  f3ro (unsigned a, unsigned b)
     288  {
     289    b = a - 1;
     290    if (b < a)
     291      {
     292        baz (a, b);
     293        return 42;
     294      }
     295    arf (a, b);
     296    return b;
     297  }
     298  
     299  unsigned
     300  f3no (unsigned a, unsigned b)
     301  {
     302    b = a - 1;
     303    if (!(a < b))
     304      {
     305        baz (a, b);
     306        return 42;
     307      }
     308    arf (a, b);
     309    return b;
     310  }
     311  
     312  unsigned
     313  f3nro (unsigned a, unsigned b)
     314  {
     315    b = a - 1;
     316    if (!(b < a))
     317      {
     318        arf (a, b);
     319        return 42;
     320      }
     321    baz (a, b);
     322    return b;
     323  }
     324  
     325  
     326  unsigned
     327  f4 (unsigned a, unsigned b)
     328  {
     329    b = a - 1;
     330    if (b <= a)
     331      {
     332        baz (a, b);
     333        return 42;
     334      }
     335    arf (a, b);
     336    return b;
     337  }
     338  
     339  unsigned
     340  f4r (unsigned a, unsigned b)
     341  {
     342    b = a - 1;
     343    if (a <= b)
     344      {
     345        arf (a, b);
     346        return 42;
     347      }
     348    baz (a, b);
     349    return b;
     350  }
     351  
     352  unsigned
     353  f4n (unsigned a, unsigned b)
     354  {
     355    b = a - 1;
     356    if (!(b <= a))
     357      {
     358        arf (a, b);
     359        return 42;
     360      }
     361    baz (a, b);
     362    return b;
     363  }
     364  
     365  unsigned
     366  f4nr (unsigned a, unsigned b)
     367  {
     368    b = a - 1;
     369    if (!(a <= b))
     370      {
     371        baz (a, b);
     372        return 42;
     373      }
     374    arf (a, b);
     375    return b;
     376  }
     377  
     378  
     379  unsigned
     380  f4o (unsigned a, unsigned b)
     381  {
     382    b = a - 1;
     383    if (a <= b)
     384      {
     385        arf (a, b);
     386        return 42;
     387      }
     388    baz (a, b);
     389    return b;
     390  }
     391  
     392  unsigned
     393  f4ro (unsigned a, unsigned b)
     394  {
     395    b = a - 1;
     396    if (b <= a)
     397      {
     398        baz (a, b);
     399        return 42;
     400      }
     401    arf (a, b);
     402    return b;
     403  }
     404  
     405  unsigned
     406  f4no (unsigned a, unsigned b)
     407  {
     408    b = a - 1;
     409    if (!(a <= b))
     410      {
     411        baz (a, b);
     412        return 42;
     413      }
     414    arf (a, b);
     415    return b;
     416  }
     417  
     418  unsigned
     419  f4nro (unsigned a, unsigned b)
     420  {
     421    b = a - 1;
     422    if (!(b <= a))
     423      {
     424        arf (a, b);
     425        return 42;
     426      }
     427    baz (a, b);
     428    return b;
     429  }
     430  
     431  /* All calls to baz should still reference a & b as arguments. */
     432  /* { dg-final { scan-tree-dump-times "baz \\(a_\[0-9\]+\\(D\\), b_\[0-9\]+\\)" 32 "evrp"} } */
     433  
     434  
     435  /* All calls to arf should have constant arguments.  */
     436  /* { dg-final { scan-tree-dump-times "arf \\(\[0-9\]+, \[0-9\]+\\)" 32 "evrp"} } */