1  /* { dg-do compile } */
       2  /* { dg-options "-march=rv32gcv -mabi=ilp32 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
       3  /* { dg-final { check-function-bodies "**" "" } } */
       4  #include "riscv_vector.h"
       5  
       6  /*
       7  ** f0:
       8  **  ...
       9  **	vmsge\.vi\tv[0-9]+,\s*v[0-9]+,\s*-15
      10  **	vmsge\.vi\tv[0-9]+,\s*v[0-9]+,\s*-15,v0.t
      11  **  ...
      12  **	ret
      13  */
      14  void f0 (void * in, void *out, int64_t x, int n)
      15  {
      16    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      17    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      18    vbool64_t v3 = __riscv_vmsge_vx_i64m1_b64 (v2, -15, 4);
      19    vbool64_t v4 = __riscv_vmsge_vx_i64m1_b64_m (v3, v2, -15, 4);
      20    __riscv_vsm_v_b64 (out + 2, v4, 4);
      21  }
      22  
      23  /*
      24  ** f1:
      25  **  ...
      26  **	vmsge\.vi\tv[0-9]+,\s*v[0-9]+,\s*16
      27  **	vmsge\.vi\tv[0-9]+,\s*v[0-9]+,\s*16,v0.t
      28  **  ...
      29  **	ret
      30  */
      31  void f1 (void * in, void *out, int64_t x, int n)
      32  {
      33    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      34    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      35    vbool64_t v3 = __riscv_vmsge_vx_i64m1_b64 (v2, 16, 4);
      36    vbool64_t v4 = __riscv_vmsge_vx_i64m1_b64_m (v3, v2, 16, 4);
      37    __riscv_vsm_v_b64 (out + 2, v4, 4);
      38  }
      39  
      40  /*
      41  ** f2:
      42  **  ...
      43  **	vmslt\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+
      44  **  vmnot\.m\s+v[0-9]+,\s*v[0-9]+
      45  **	vmslt\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+,v0.t
      46  **	vmxor\.mm\s+v[0-9]+,\s*v[0-9]+,\s*v[0-9]+
      47  **  ...
      48  **	ret
      49  */
      50  void f2 (void * in, void *out, int64_t x, int n)
      51  {
      52    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      53    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      54    vbool64_t v3 = __riscv_vmsge_vx_i64m1_b64 (v2, 17, 4);
      55    vbool64_t v4 = __riscv_vmsge_vx_i64m1_b64_m (v3, v2, 17, 4);
      56    __riscv_vsm_v_b64 (out + 2, v4, 4);
      57  }
      58  
      59  /*
      60  ** f3:
      61  **  ...
      62  **	vmslt\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+
      63  **  vmnot\.m\s+v[0-9]+,\s*v[0-9]+
      64  **	vmslt\.vx\tv[0-9]+,\s*v[0-9]+,\s*[a-x0-9]+,v0.t
      65  **	vmxor\.mm\s+v[0-9]+,\s*v[0-9]+,\s*v[0-9]+
      66  **  ...
      67  **	ret
      68  */
      69  void f3 (void * in, void *out, int64_t x, int n)
      70  {
      71    vint64m1_t v = __riscv_vle64_v_i64m1 (in + 1, 4);
      72    vint64m1_t v2 = __riscv_vle64_v_i64m1_tu (v, in + 2, 4);
      73    vbool64_t v3 = __riscv_vmsge_vx_i64m1_b64 (v2, 0xAAAAAAA, 4);
      74    vbool64_t v4 = __riscv_vmsge_vx_i64m1_b64_m (v3, v2, 0xAAAAAAA, 4);
      75    __riscv_vsm_v_b64 (out + 2, v4, 4);
      76  }