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  
       5  #include <stdarg.h>
       6  #include "tree-vect.h"
       7  
       8  #define N 64
       9  
      10  __attribute__ ((noinline)) int
      11  main1 ()
      12  {
      13    int i;
      14    int ia[N];
      15    int ib[N]= 
      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       1,1,0,0,1,0,1,0,
      20       1,1,0,0,1,0,1,0,
      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    int ic[N] =
      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       1,1,0,0,1,0,1,0,
      30       1,1,0,0,1,0,1,0,
      31       1,1,0,0,1,0,1,0,
      32       1,1,0,0,1,0,1,0};
      33  
      34    char ca[N];
      35    char cb[N] =
      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       1,1,0,0,1,0,1,0,
      41       1,1,0,0,1,0,1,0,
      42       1,1,0,0,1,0,1,0,
      43       1,1,0,0,1,0,1,0};
      44  
      45    char cc[N] =
      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       1,1,0,0,1,0,1,0,
      51       1,1,0,0,1,0,1,0,
      52       1,1,0,0,1,0,1,0,
      53       1,1,0,0,1,0,1,0};
      54  
      55    short sa[N];
      56    short sb[N] =
      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       1,1,0,0,1,0,1,0,
      62       1,1,0,0,1,0,1,0,
      63       1,1,0,0,1,0,1,0,
      64       1,1,0,0,1,0,1,0};
      65  
      66    short sc[N] =
      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       1,1,0,0,1,0,1,0,
      72       1,1,0,0,1,0,1,0,
      73       1,1,0,0,1,0,1,0,
      74       1,1,0,0,1,0,1,0};
      75  
      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  /* The short-cutting || is if-converted using COND_EXPRs rather than
     128     bitwise or.  */
     129  /* { dg-final { scan-tree-dump-times "vectorized 3 loops" 1 "vect" { xfail { ! vect_condition } } } } */
     130  /* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { xfail { ! vect_align_stack_vars } } } } */