1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
       3  
       4  #include "riscv_vector.h"
       5  
       6  void
       7  test_vbool32_then_vbool1(int8_t * restrict in, int8_t * restrict out) {
       8      vbool32_t v1 = *(vbool32_t*)in;
       9      vbool1_t v2 = *(vbool1_t*)in;
      10  
      11      *(vbool32_t*)(out + 100) = v1;
      12      *(vbool1_t*)(out + 200) = v2;
      13  }
      14  
      15  void
      16  test_vbool32_then_vbool2(int8_t * restrict in, int8_t * restrict out) {
      17      vbool32_t v1 = *(vbool32_t*)in;
      18      vbool2_t v2 = *(vbool2_t*)in;
      19  
      20      *(vbool32_t*)(out + 100) = v1;
      21      *(vbool2_t*)(out + 200) = v2;
      22  }
      23  
      24  void
      25  test_vbool32_then_vbool4(int8_t * restrict in, int8_t * restrict out) {
      26      vbool32_t v1 = *(vbool32_t*)in;
      27      vbool4_t v2 = *(vbool4_t*)in;
      28  
      29      *(vbool32_t*)(out + 100) = v1;
      30      *(vbool4_t*)(out + 200) = v2;
      31  }
      32  
      33  void
      34  test_vbool32_then_vbool8(int8_t * restrict in, int8_t * restrict out) {
      35      vbool32_t v1 = *(vbool32_t*)in;
      36      vbool8_t v2 = *(vbool8_t*)in;
      37  
      38      *(vbool32_t*)(out + 100) = v1;
      39      *(vbool8_t*)(out + 200) = v2;
      40  }
      41  
      42  void
      43  test_vbool32_then_vbool16(int8_t * restrict in, int8_t * restrict out) {
      44      vbool32_t v1 = *(vbool32_t*)in;
      45      vbool16_t v2 = *(vbool16_t*)in;
      46  
      47      *(vbool32_t*)(out + 100) = v1;
      48      *(vbool16_t*)(out + 200) = v2;
      49  }
      50  
      51  void
      52  test_vbool32_then_vbool64(int8_t * restrict in, int8_t * restrict out) {
      53      vbool32_t v1 = *(vbool32_t*)in;
      54      vbool64_t v2 = *(vbool64_t*)in;
      55  
      56      *(vbool32_t*)(out + 100) = v1;
      57      *(vbool64_t*)(out + 200) = v2;
      58  }
      59  
      60  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf4,\s*ta,\s*ma} 6 } } */
      61  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m8,\s*ta,\s*ma} 1 } } */
      62  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m4,\s*ta,\s*ma} 1 } } */
      63  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m2,\s*ta,\s*ma} 1 } } */
      64  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*m1,\s*ta,\s*ma} 1 } } */
      65  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf2,\s*ta,\s*ma} 1 } } */
      66  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x][0-9]+,\s*zero,\s*e8,\s*mf8,\s*ta,\s*ma} 1 } } */
      67  /* { dg-final { scan-assembler-times {vlm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 12 } } */
      68  /* { dg-final { scan-assembler-times {vsm\.v\s+v[0-9]+,\s*0\([a-x][0-9]+\)} 13 } } */