1  /* { dg-require-effective-target vect_int } */
       2  /* { dg-add-options bind_pic_locally } */
       3    
       4  #include <stdarg.h>
       5  #include "tree-vect.h"
       6  
       7  #define N 64
       8  
       9    int ia[N];
      10    int ib[N]= 
      11      {1,1,0,0,1,0,1,0,
      12       1,1,0,0,1,0,1,0,
      13       1,1,0,0,1,0,1,0,
      14       1,1,0,0,1,0,1,0,
      15       1,1,0,0,1,0,1,0,
      16       1,1,0,0,1,0,1,0,
      17       1,1,0,0,1,0,1,0,
      18       1,1,0,0,1,0,1,0};
      19  
      20    int ic[N] =
      21      {1,1,0,0,1,0,1,0,
      22       1,1,0,0,1,0,1,0,
      23       1,1,0,0,1,0,1,0,
      24       1,1,0,0,1,0,1,0,
      25       1,1,0,0,1,0,1,0,
      26       1,1,0,0,1,0,1,0,
      27       1,1,0,0,1,0,1,0,
      28       1,1,0,0,1,0,1,0};
      29  
      30    char ca[N];
      31    char cb[N] =
      32      {1,1,0,0,1,0,1,0,
      33       1,1,0,0,1,0,1,0,
      34       1,1,0,0,1,0,1,0,
      35       1,1,0,0,1,0,1,0,
      36       1,1,0,0,1,0,1,0,
      37       1,1,0,0,1,0,1,0,
      38       1,1,0,0,1,0,1,0,
      39       1,1,0,0,1,0,1,0};
      40  
      41    char cc[N] =
      42      {1,1,0,0,1,0,1,0,
      43       1,1,0,0,1,0,1,0,
      44       1,1,0,0,1,0,1,0,
      45       1,1,0,0,1,0,1,0,
      46       1,1,0,0,1,0,1,0,
      47       1,1,0,0,1,0,1,0,
      48       1,1,0,0,1,0,1,0,
      49       1,1,0,0,1,0,1,0};
      50  
      51    short sa[N];
      52    short sb[N] =
      53      {1,1,0,0,1,0,1,0,
      54       1,1,0,0,1,0,1,0,
      55       1,1,0,0,1,0,1,0,
      56       1,1,0,0,1,0,1,0,
      57       1,1,0,0,1,0,1,0,
      58       1,1,0,0,1,0,1,0,
      59       1,1,0,0,1,0,1,0,
      60       1,1,0,0,1,0,1,0};
      61  
      62    short sc[N] =
      63      {1,1,0,0,1,0,1,0,
      64       1,1,0,0,1,0,1,0,
      65       1,1,0,0,1,0,1,0,
      66       1,1,0,0,1,0,1,0,
      67       1,1,0,0,1,0,1,0,
      68       1,1,0,0,1,0,1,0,
      69       1,1,0,0,1,0,1,0,
      70       1,1,0,0,1,0,1,0};
      71  
      72  __attribute__ ((noinline)) int
      73  main1 ()
      74  {
      75    int i;
      76    /* Check ints.  */
      77  
      78    for (i = 0; i < N; i++)
      79      {
      80        ia[i] = ib[i] & ic[i];
      81      }
      82  
      83    /* check results:  */
      84    for (i = 0; i <N; i++)
      85      {
      86        if (ia[i] != (ib[i] & ic[i]))
      87          abort ();
      88      }
      89  
      90    /* Check chars.  */
      91  
      92    for (i = 0; i < N; i++)
      93      {
      94        ca[i] = cb[i] & cc[i];
      95      }
      96  
      97    /* check results:  */
      98    for (i = 0; i <N; i++)
      99      {
     100        if (ca[i] != (cb[i] & cc[i]))
     101          abort ();
     102      }
     103  
     104    /* Check shorts.  */
     105  
     106    for (i = 0; i < N; i++)
     107      {
     108        sa[i] = sb[i] & sc[i];
     109      }
     110  
     111    /* check results:  */
     112    for (i = 0; i <N; i++)
     113      {
     114        if (sa[i] != (sb[i] & sc[i]))
     115          abort ();
     116      }
     117  
     118    return 0;
     119  }
     120  
     121  int main (void)
     122  {
     123    check_vect ();
     124  
     125    return main1 ();
     126  }
     127  
     128  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail vect_no_bitwise } } } */
     129  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" } } */