1  /* PR target/103973 */
       2  /* { dg-do run } */
       3  /* { dg-options "-O2 -ffast-math -save-temps" } */
       4  /* { dg-final { scan-assembler-not "'\t\[v\]?ucomisd" { target { ! ia32 } } } } */
       5  /* { dg-final { scan-assembler-times "\t\[v\]?comisd" 4 { target { ! ia32 } } } } */
       6  
       7  __attribute__((noipa)) int m1 (void) { return -1; }
       8  __attribute__((noipa)) int p0 (void) { return 0; }
       9  __attribute__((noipa)) int p1 (void) { return 1; }
      10  
      11  __attribute__((noipa)) int
      12  foo (double a, double b)
      13  {
      14    if (a == b)
      15      return 0;
      16    if (a < b)
      17      return -1;
      18    return 1;
      19  }
      20  
      21  __attribute__((noipa)) int
      22  bar (double a, double b)
      23  {
      24    if (a == b)
      25      return p0 ();
      26    if (a < b)
      27      return m1 ();
      28    return p1 ();
      29  }
      30  
      31  __attribute__((noipa)) int
      32  baz (double a, double b)
      33  {
      34    if (a == b)
      35      return p0 ();
      36    if (b < a)
      37      return p1 ();
      38    return m1 ();
      39  }
      40  
      41  __attribute__((noipa)) int
      42  qux (double a)
      43  {
      44    if (a != 0.0f)
      45      {
      46        if (a <= 0.0f)
      47  	return -1;
      48        return 1;
      49      }
      50    return 0;
      51  }
      52  
      53  int
      54  main ()
      55  {
      56    double m5 = -5.0f;
      57    double p5 = 5.0f;
      58    double p0 = 0.0f;
      59    if (foo (p5, p5) != 0 || foo (m5, m5) != 0)
      60      __builtin_abort ();
      61    if (foo (m5, p5) != -1 || foo (p5, m5) != 1)
      62      __builtin_abort ();
      63    if (bar (p5, p5) != 0 || bar (m5, m5) != 0)
      64      __builtin_abort ();
      65    if (bar (m5, p5) != -1 || bar (p5, m5) != 1)
      66      __builtin_abort ();
      67    if (baz (p5, p5) != 0 || baz (m5, m5) != 0)
      68      __builtin_abort ();
      69    if (baz (m5, p5) != -1 || baz (p5, m5) != 1)
      70      __builtin_abort ();
      71    if (qux (p0) != 0)
      72      __builtin_abort ();
      73    if (qux (m5) != -1 || qux (p5) != 1)
      74      __builtin_abort ();
      75    return 0;
      76  }