(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-widen-mult-s16.c
       1  /* { dg-require-effective-target vect_int } */
       2  
       3  #include <stdarg.h>
       4  #include "tree-vect.h"
       5  
       6  #define N 64
       7  
       8  short X[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
       9  short Y[N] __attribute__ ((__aligned__(__BIGGEST_ALIGNMENT__)));
      10  int result[N];
      11  
      12  /* short->int widening-mult */
      13  __attribute__ ((noinline)) int
      14  foo1(int len) {
      15    int i;
      16  
      17    for (i=0; i<len; i++) {
      18      result[i] = X[i] * Y[i];
      19    }
      20  }
      21  
      22  int main (void)
      23  {
      24    int i;
      25  
      26    check_vect ();
      27  
      28    for (i=0; i<N; i++) {
      29      X[i] = i;
      30      Y[i] = 64-i;
      31      __asm__ volatile ("");
      32    }
      33  
      34    foo1 (N);
      35  
      36    for (i=0; i<N; i++) {
      37      if (result[i] != X[i] * Y[i])
      38        abort ();
      39    }
      40    
      41    return 0;
      42  }
      43  
      44  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_widen_mult_hi_to_si } } } */
      45