(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
riscv/
rvv/
base/
binop_vx_constraint-132.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32d -O3 -fno-schedule-insns -fno-schedule-insns2" } */
       3  /* { dg-final { check-function-bodies "**" "" } } */
       4  #include "riscv_vector.h"
       5  
       6  /*
       7  ** f1:
       8  **	...
       9  **	vmseq\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+
      10  **	vmseq\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+,v0.t
      11  **	...
      12  **	ret
      13  */
      14  void f1 (void * in, void * in2, void *out, int32_t x)
      15  {
      16      vint32m1_t v = __riscv_vle32_v_i32m1 (in, 4);
      17      vint32m1_t v2 = __riscv_vle32_v_i32m1 (in2, 4);
      18      vbool32_t m3 = __riscv_vmseq_vx_i32m1_b32 (v, 16, 4);
      19      vbool32_t m4 = __riscv_vmseq_vx_i32m1_b32_mu (m3, m3, v2, 16, 4);
      20      __riscv_vsm_v_b32 (out, m4, 4);
      21  }
      22  
      23  /*
      24  ** f2:
      25  **	...
      26  **	vmseq\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+
      27  **	vmseq\.vx\tv[1-9][0-9]?,\s*v[0-9]+,\s*[a-x0-9]+,\s*v0.t
      28  **	...
      29  **	ret
      30  */
      31  void f2 (void * in, void *out, int32_t x)
      32  {
      33      vbool32_t mask = *(vbool32_t*)in;
      34      asm volatile ("":::"memory");
      35      vint32m1_t v = __riscv_vle32_v_i32m1 (in, 4);
      36      vint32m1_t v2 = __riscv_vle32_v_i32m1_m (mask, in, 4);
      37      vbool32_t m3 = __riscv_vmseq_vx_i32m1_b32 (v, 16, 4);
      38      vbool32_t m4 = __riscv_vmseq_vx_i32m1_b32_mu (mask, m3, v2, 16, 4);
      39      __riscv_vsm_v_b32 (out, m4, 4);
      40  }
      41  
      42  /*
      43  ** f3:
      44  **	...
      45  **	vmseq\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+
      46  **	vmseq\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+,\s*v0.t
      47  **	...
      48  **	ret
      49  */
      50  void f3 (void * in, void *out, int32_t x)
      51  {
      52      vbool32_t mask = *(vbool32_t*)in;
      53      asm volatile ("":::"memory");
      54      vint32m1_t v = __riscv_vle32_v_i32m1 (in, 4);
      55      vint32m1_t v2 = __riscv_vle32_v_i32m1_m (mask, in, 4);
      56      vbool32_t m3 = __riscv_vmseq_vx_i32m1_b32 (v, 16, 4);
      57      vbool32_t m4 = __riscv_vmseq_vx_i32m1_b32_m (m3, v2, 16, 4);
      58      __riscv_vsm_v_b32 (out, m4, 4);
      59  }