1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32d -O3" } */
       3  
       4  #include "riscv_vector.h"
       5  
       6  void f0 (char *x, char * p1, char * p2, char * p3) {
       7    vbool32_t bp1 = *(vbool32_t*)p1;
       8    vbool32_t bp2 = *(vbool32_t*)p2;
       9    vbool32_t bp3 = *(vbool32_t*)p3;
      10    asm volatile ("":::"memory");
      11    *(vbool32_t *)(x + (__riscv_vlenb())) = bp2;  
      12    *(vbool32_t *)(x) = bp1;             
      13    *(vbool32_t *)(x + (__riscv_vlenb())*2) = bp3;
      14  }
      15  
      16  void f1 (char *x, char * p1, char * p2, char * p3) {
      17    vbool32_t bp1 = *(vbool32_t*)p1;
      18    vbool32_t bp2 = *(vbool32_t*)p2;
      19    vbool32_t bp3 = *(vbool32_t*)p3;
      20    asm volatile ("":::"memory");
      21    *(vbool32_t *)(x + (__riscv_vlenb() / 2)) = bp2;  
      22    *(vbool32_t *)(x) = bp1;             
      23    *(vbool32_t *)(x + (__riscv_vlenb() / 2)*2) = bp3;
      24  }
      25  
      26  void f2 (char *x, char * p1, char * p2, char * p3) {
      27    vbool32_t bp1 = *(vbool32_t*)p1;
      28    vbool32_t bp2 = *(vbool32_t*)p2;
      29    vbool32_t bp3 = *(vbool32_t*)p3;
      30    asm volatile ("":::"memory");
      31    *(vbool32_t *)(x + (__riscv_vlenb() / 4)) = bp2;  
      32    *(vbool32_t *)(x) = bp1;             
      33    *(vbool32_t *)(x + (__riscv_vlenb() / 4)*2) = bp3;
      34  }
      35  
      36  void f3 (char *x, char * p1, char * p2, char * p3) {
      37    vbool32_t bp1 = *(vbool32_t*)p1;
      38    vbool32_t bp2 = *(vbool32_t*)p2;
      39    vbool32_t bp3 = *(vbool32_t*)p3;
      40    asm volatile ("":::"memory");
      41    *(vbool32_t *)(x + (__riscv_vlenb() / 4)) = bp2;  
      42    *(vbool32_t *)(x) = bp1;             
      43    *(vbool32_t *)(x + (__riscv_vlenb() / 4)*2) = bp3;
      44  }
      45  
      46  /* { dg-final { scan-assembler-times {vsm\.v} 12 } } */