(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
pr65947-1.c
       1  /* Disabling epilogues until we find a better way to deal with scans.  */
       2  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
       3  /* { dg-require-effective-target vect_condition } */
       4  
       5  #include "tree-vect.h"
       6  
       7  extern void abort (void) __attribute__ ((noreturn));
       8  
       9  #define N 32
      10  
      11  /* Simple condition reduction.  */
      12  
      13  int
      14  condition_reduction (int *a, int min_v)
      15  {
      16    int last = 66; /* High start value.  */
      17  
      18    for (int i = 0; i < N; i++)
      19      if (a[i] < min_v)
      20        last = i;
      21  
      22    return last;
      23  }
      24  
      25  int
      26  main (void)
      27  {
      28    int a[N] = {
      29    11, -12, 13, 14, 15, 16, 17, 18, 19, 20,
      30    1, 2, -3, 4, 5, 6, 7, -8, 9, 10,
      31    21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
      32    31, 32
      33    };
      34  
      35    check_vect ();
      36  
      37    int ret = condition_reduction (a, 1);
      38  
      39    if (ret != 17)
      40      abort ();
      41  
      42    return 0;
      43  }
      44  
      45  /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 2 "vect" } } */
      46  /* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 2 "vect" { target vect_fold_extract_last } } } */
      47  /* { dg-final { scan-tree-dump-times "condition expression based on integer induction." 2 "vect" { target { ! vect_fold_extract_last } } } } */