(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-widen-mult-half-u8.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_int } */
       4  /* { dg-additional-options "-fno-ipa-icf" } */
       5  
       6  #include "tree-vect.h"
       7  
       8  #define N 32
       9  #define COEF 32470
      10  
      11  unsigned char in[N];
      12  int out[N];
      13  
      14  __attribute__ ((noinline)) void
      15  foo ()
      16  {
      17    int i;
      18  
      19    for (i = 0; i < N; i++)
      20      out[i] = in[i] * COEF;
      21  }
      22  
      23  __attribute__ ((noinline)) void
      24  bar ()
      25  {
      26    int i;
      27  
      28    for (i = 0; i < N; i++)
      29      out[i] = COEF * in[i];
      30  }
      31  
      32  int main (void)
      33  {
      34    int i;
      35  
      36    check_vect ();
      37  
      38    for (i = 0; i < N; i++)
      39      {
      40        in[i] = i;
      41        __asm__ volatile ("");
      42      }
      43  
      44    foo ();
      45  
      46    for (i = 0; i < N; i++)
      47      if (out[i] != in[i] * COEF)
      48        abort ();
      49  
      50    bar ();
      51  
      52    for (i = 0; i < N; i++)
      53      if (out[i] != in[i] * COEF)
      54        abort ();
      55  
      56    return 0;
      57  }
      58  
      59  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target vect_widen_mult_hi_to_si } } } */
      60  /* { dg-final { scan-tree-dump-times "vect_recog_widen_mult_pattern: detected" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
      61  /* { dg-final { scan-tree-dump-times "pattern recognized" 2 "vect" { target vect_widen_mult_hi_to_si_pattern } } } */
      62