(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
tree-ssa/
pr23234.c
       1  /* The problem in this PR was mostly finding a suitable place to insert
       2     the reciprocals of the function arguments.  This test case tries to
       3     test three possible ways of how this may go wrong.  */
       4  /* { dg-options "-O2 -ffast-math" } */
       5  /* { dg-do compile } */
       6  
       7  /* The original test case.  */
       8  double
       9  f1 (double a, double b, double c)
      10  {
      11    double y0;
      12    double y1;
      13  
      14    if (a == 0.0)
      15      {
      16        y0 = -c / b;
      17        return y0;
      18      }
      19    y0 = c / b;
      20    y1 = a / b;
      21    return y0 * y1;
      22  }
      23  
      24  /* Labels may end up in the middle of a block.  Also bad.  */
      25  double
      26  f2 (double a, double b, double c)
      27  {
      28    double y0;
      29    double y1;
      30  
      31  a_label:
      32  another_label:
      33    if (a == 0.0)
      34      {
      35        y0 = -c / b;
      36        return y0;
      37      }
      38    y0 = c / b;
      39    y1 = a / b;
      40    return y0 * y1;
      41  }
      42  
      43  /* Uses must still be dominated by their defs.  */
      44  double
      45  f3 (double a, double b, double c)
      46  {
      47    double y0;
      48    double y1;
      49  
      50    y0 = -c / b;
      51    if (a == 0.0)
      52      {
      53        return y0;
      54      }
      55    y0 = c / b;
      56    y1 = a / b;
      57    return y0 * y1;
      58  }