/* The problem in this PR was mostly finding a suitable place to insert
   the reciprocals of the function arguments.  This test case tries to
   test three possible ways of how this may go wrong.  */
/* { dg-options "-O2 -ffast-math" } */
/* { dg-do compile } */

/* The original test case.  */
double
f1 (double a, double b, double c)
{
  double y0;
  double y1;

  if (a == 0.0)
    {
      y0 = -c / b;
      return y0;
    }
  y0 = c / b;
  y1 = a / b;
  return y0 * y1;
}

/* Labels may end up in the middle of a block.  Also bad.  */
double
f2 (double a, double b, double c)
{
  double y0;
  double y1;

a_label:
another_label:
  if (a == 0.0)
    {
      y0 = -c / b;
      return y0;
    }
  y0 = c / b;
  y1 = a / b;
  return y0 * y1;
}

/* Uses must still be dominated by their defs.  */
double
f3 (double a, double b, double c)
{
  double y0;
  double y1;

  y0 = -c / b;
  if (a == 0.0)
    {
      return y0;
    }
  y0 = c / b;
  y1 = a / b;
  return y0 * y1;
}
