1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O3 --param vect-partial-vector-usage=1" } */
       3  
       4  #define N 0x1100
       5  
       6  #include "reduc_12.c"
       7  
       8  int
       9  main (void)
      10  {
      11    unsigned short x[N];
      12    for (int i = 0; i < N; ++i)
      13      x[i] = (i + 1) * (i + 2);
      14  
      15    if (add_loop (x, 0, 10) != 10
      16        || add_loop (x, 11, 42) != 614
      17        || add_loop (x, 0x100, 84) != 22100
      18        || add_loop (x, 0xfff, 20) != 20500
      19        || max_loop (x, 0, 10) != 10
      20        || max_loop (x, 11, 131) != 132
      21        || max_loop (x, 11, 133) != 133
      22        || max_loop (x, 0x100, 65279) != 65280
      23        || max_loop (x, 0x100, 65281) != 65281
      24        || max_loop (x, 0xfff, 65503) != 65504
      25        || max_loop (x, 0xfff, 65505) != 65505
      26        || or_loop (x, 0, 0x71) != 0x71
      27        || or_loop (x, 11, 0) != 0xfe
      28        || or_loop (x, 11, 0xb3c) != 0xbfe
      29        || or_loop (x, 0x80, 0) != 0x7ffe
      30        || or_loop (x, 0x80, 1) != 0x7fff
      31        || or_loop (x, 0xb4, 0) != 0x7ffe
      32        || or_loop (x, 0xb4, 1) != 0x7fff
      33        || or_loop (x, 0xb5, 0) != 0xfffe
      34        || or_loop (x, 0xb5, 1) != 0xffff
      35        || eor_loop (x, 0, 0x3e) != 0x3e
      36        || eor_loop (x, 11, 0) != 0xe8
      37        || eor_loop (x, 11, 0x1ff) != 0x117
      38        || eor_loop (x, 0x100, 0) != 0xcf00
      39        || eor_loop (x, 0x100, 0xeee) != 0xc1ee
      40        || eor_loop (x, 0xfff, 0) != 0xa000
      41        || eor_loop (x, 0xfff, 0x8888) != 0x2888)
      42      __builtin_abort ();
      43  
      44    for (int i = 0; i < N; ++i)
      45      x[i] = ~x[i];
      46  
      47    if (min_loop (x, 0, 10000) != 10000
      48        || min_loop (x, 11, 65404) != 65403
      49        || min_loop (x, 11, 65402) != 65402
      50        || min_loop (x, 0x100, 256) != 255
      51        || min_loop (x, 0x100, 254) != 254
      52        || min_loop (x, 0xfff, 32) != 31
      53        || min_loop (x, 0xfff, 30) != 30
      54        || and_loop (x, 0, 0x1234) != 0x1234
      55        || and_loop (x, 11, 0xffff) != 0xff01
      56        || and_loop (x, 11, 0xcdef) != 0xcd01
      57        || and_loop (x, 0x80, 0xffff) != 0x8001
      58        || and_loop (x, 0x80, 0xfffe) != 0x8000
      59        || and_loop (x, 0xb4, 0xffff) != 0x8001
      60        || and_loop (x, 0xb4, 0xfffe) != 0x8000
      61        || and_loop (x, 0xb5, 0xffff) != 1
      62        || and_loop (x, 0xb5, 0xfffe) != 0)
      63      __builtin_abort ();
      64  
      65    return 0;
      66  }