1  /* Disabling epilogues until we find a better way to deal with scans.  */
       2  /* { dg-additional-options "--param vect-epilogues-nomask=0" } */
       3  /* PR tree-optimization/80631 */
       4  
       5  #include "tree-vect.h"
       6  
       7  int v[8] = { 77, 1, 79, 3, 4, 3, 6, 7 };
       8  
       9  __attribute__((noipa)) void
      10  f1 (void)
      11  {
      12    int k, r = -1;
      13    for (k = 7; k >= 0; k--)
      14      if (v[k] == 77)
      15        r = k;
      16    if (r != 0)
      17      abort ();
      18  }
      19  
      20  __attribute__((noipa)) void
      21  f2 (void)
      22  {
      23    int k, r = 4;
      24    for (k = 7; k >= 0; k--)
      25      if (v[k] == 79)
      26        r = k;
      27    if (r != 2)
      28      abort ();
      29  }
      30  
      31  __attribute__((noipa)) void
      32  f3 (void)
      33  {
      34    int k, r = -17;
      35    for (k = 7; k >= 0; k--)
      36      if (v[k] == 78)
      37        r = k;
      38    if (r != -17)
      39      abort ();
      40  }
      41  
      42  __attribute__((noipa)) void
      43  f4 (void)
      44  {
      45    int k, r = 7;
      46    for (k = 7; k >= 0; k--)
      47      if (v[k] == 78)
      48        r = k;
      49    if (r != 7)
      50      abort ();
      51  }
      52  
      53  __attribute__((noipa)) void
      54  f5 (void)
      55  {
      56    int k, r = -1;
      57    for (k = 7; k >= 0; k--)
      58      if (v[k] == 3)
      59        r = k;
      60    if (r != 3)
      61      abort ();
      62  }
      63  
      64  int
      65  main ()
      66  {
      67    check_vect ();
      68    f1 ();
      69    f2 ();
      70    f3 ();
      71    f4 ();
      72    f5 ();
      73    return 0;
      74  }
      75  
      76  /* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 5 "vect" { target vect_condition } } } */
      77  /* { dg-final { scan-tree-dump-times "condition expression based on integer induction." 5 "vect" { target vect_condition xfail vect_fold_extract_last } } } */
      78  /* { dg-final { scan-tree-dump-times "optimizing condition reduction with FOLD_EXTRACT_LAST" 5 "vect" { target { { ! vect_multiple_sizes } && vect_fold_extract_last } } } } */
      79  /* { dg-final { scan-tree-dump "optimizing condition reduction with FOLD_EXTRACT_LAST" "vect" { target { vect_multiple_sizes && vect_fold_extract_last } } } } */