1  /* { dg-require-effective-target vect_condition } */
       2  /* { dg-require-effective-target vect_float } */
       3  
       4  #include "tree-vect.h"
       5  
       6  extern void abort (void) __attribute__ ((noreturn));
       7  
       8  #define N 32
       9  
      10  /* Non-integer data types.  */
      11  
      12  float
      13  condition_reduction (float *a, float min_v)
      14  {
      15    float last = 0;
      16  
      17    for (int i = 0; i < N; i++)
      18      if (a[i] < min_v)
      19        last = a[i];
      20  
      21    return last;
      22  }
      23  
      24  int
      25  main (void)
      26  {
      27    float a[N] = {
      28    11.5, 12.2, 13.22, 14.1, 15.2, 16.3, 17, 18.7, 19, 20,
      29    1, 2, 3.3, 4.3333, 5.5, 6.23, 7, 8.63, 9, 10.6,
      30    21, 22.12, 23.55, 24.76, 25, 26, 27.34, 28.765, 29, 30,
      31    31.111, 32.322
      32    };
      33  
      34    check_vect ();
      35  
      36    float ret = condition_reduction (a, 16.7);
      37  
      38    if (ret != (float)10.6)
      39      abort ();
      40  
      41    return 0;
      42  }
      43  
      44  /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" } } */
      45  /* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target vect_fold_extract_last } } } */
      46  /* { dg-final { scan-tree-dump-not "condition expression based on integer induction." "vect" } } */
      47