(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
vect/
vect-bitfield-read-6.c
       1  /* { dg-require-effective-target vect_int } */
       2  /* { dg-require-effective-target vect_shift } */
       3  
       4  #include <stdarg.h>
       5  #include "tree-vect.h"
       6  
       7  extern void abort(void);
       8  
       9  struct s {
      10      unsigned a : 23; unsigned b : 8;
      11  };
      12  
      13  #define N 32
      14  #define ELT0 {0x7FFFFFUL, 0}
      15  #define ELT1 {0x7FFFFFUL, 1}
      16  #define ELT2 {0x7FFFFFUL, 2}
      17  #define ELT3 {0x7FFFFFUL, 3}
      18  #define RES 48
      19  struct s A[N]
      20    = { ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
      21        ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
      22        ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3,
      23        ELT0, ELT1, ELT2, ELT3, ELT0, ELT1, ELT2, ELT3};
      24  
      25  int __attribute__ ((noipa))
      26  f(struct s *ptr, unsigned n) {
      27      int res = 0;
      28      for (int i = 0; i < n; ++i)
      29        res += ptr[i].b;
      30      return res;
      31  }
      32  
      33  int main (void)
      34  {
      35    check_vect ();
      36  
      37    if (f(&A[0], N) != RES)
      38      abort ();
      39  
      40    return 0;
      41  }
      42  
      43  /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */