1  /* { dg-do run } */
       2  /* { dg-additional-options "-O3 --save-temps" } */
       3  
       4  extern void abort ();
       5  
       6  #define N 8
       7  float in[N] = {1.0, -1.0, -2.0, 3.0, -5.0, -8.0, 13.0, 21.0};
       8  int out[N];
       9  
      10  void
      11  foo (int *i, float *f)
      12  {
      13    i[0] = __builtin_signbit (f[0]);
      14    i[1] = __builtin_signbit (f[1]);
      15  }
      16  
      17  /* { dg-final { scan-assembler-not {-2147483648} } } */
      18  /* { dg-final { scan-assembler {\tushr\tv[0-9]+.2s, v[0-9]+.2s, 31} } } */
      19  
      20  int
      21  main ()
      22  {
      23    int i;
      24  
      25    foo (out, in);
      26    foo (out + 2, in + 2);
      27    foo (out + 4, in + 4);
      28    foo (out + 6, in + 6);
      29  
      30    for (i = 0; i < N; i++)
      31    {
      32      if (in[i] >= 0.0 && out[i])
      33        abort ();
      34      if (in[i] < 0.0 && !out[i])
      35        abort ();
      36    }
      37  
      38    return 0;
      39  }
      40