/* { dg-do compile } */
/* { dg-options "-O1 -ffinite-math-only -fno-signed-zeros -fdump-tree-phiopt" } */

float repl1 (float varx)
{
  if (varx < 0.0)
    return 0.0;
  else if (varx > 1.0)
    return 1.0;
  else
    return varx;
}

/* Should be turned to

   varx_4 = MIN_EXPR <1.0e+0, varx_2>;
   varx_5 = MAX_EXPR <varx_4, 0.0>;  */  

/* phiopt1 confused by predictors.  */
/* { dg-final { scan-tree-dump "varx.*MIN_EXPR.*1\\.0" "phiopt1" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump "varx.*MAX_EXPR.*0\\.0" "phiopt1" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump "varx.*MIN_EXPR.*1\\.0" "phiopt2"} } */
/* { dg-final { scan-tree-dump "varx.*MAX_EXPR.*0\\.0" "phiopt2"} } */

float repl2 (float vary)
{
  if (vary > 1.0)
    return 1.0;
  else if (vary < 0.0)
    return 0.0;
  else
    return vary;
}

/* Should be turned to

   vary_4 = MAX_EXPR <0.0, vary_2>;
   vary_5 = MIN_EXPR <vary_4, 1.0e+0>;  */

/* phiopt1 confused by predictors.  */
/* { dg-final { scan-tree-dump "vary.*MAX_EXPR.*0\\.0" "phiopt1" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump "vary.*MIN_EXPR.*1\\.0" "phiopt1" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump "vary.*MAX_EXPR.*0\\.0" "phiopt2"} } */
/* { dg-final { scan-tree-dump "vary.*MIN_EXPR.*1\\.0" "phiopt2"} } */

float repl3 (float varz, float vara, float varb)
{
  if (varz > vara)
    return vara;
  else if (varz < varb)
    return varb;
  else
    return varz;
}

/* Should be turned to

  if (varz_2 > vara_3) goto <L4>; else goto <L1>;

<L1>:;
  vara_6 = MAX_EXPR <varb_5, varz_2>;  */

/* phiopt1 confused by predictors.  */
/* { dg-final { scan-tree-dump "vara.*MAX_EXPR" "phiopt1" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump "if .*varz" "phiopt2"} } */
/* { dg-final { scan-tree-dump "vara.*MAX_EXPR" "phiopt2"} } */
