xref: /llvm-project/clang/test/CodeGen/AArch64/sve-intrinsics/acle_sve_mls.c (revision 207e5ccceec8d3cc3f32723e78f2a142bc61b07d)
1*207e5cccSFangrui Song // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2*207e5cccSFangrui Song // REQUIRES: aarch64-registered-target
3*207e5cccSFangrui Song // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s
4*207e5cccSFangrui Song // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
5*207e5cccSFangrui Song // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s
6*207e5cccSFangrui Song // RUN: %clang_cc1 -fclang-abi-compat=latest -DSVE_OVERLOADED_FORMS -triple aarch64 -target-feature +sve -disable-O0-optnone -Werror -Wall -emit-llvm -o - -x c++ %s | opt -S -passes=mem2reg,tailcallelim | FileCheck %s -check-prefix=CPP-CHECK
7*207e5cccSFangrui Song // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sve -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
8*207e5cccSFangrui Song // RUN: %clang_cc1 -fclang-abi-compat=latest -triple aarch64 -target-feature +sme -S -disable-O0-optnone -Werror -Wall -o /dev/null %s
9*207e5cccSFangrui Song 
10*207e5cccSFangrui Song #include <arm_sve.h>
11*207e5cccSFangrui Song 
12*207e5cccSFangrui Song #if defined __ARM_FEATURE_SME
13*207e5cccSFangrui Song #define MODE_ATTR __arm_streaming
14*207e5cccSFangrui Song #else
15*207e5cccSFangrui Song #define MODE_ATTR
16*207e5cccSFangrui Song #endif
17*207e5cccSFangrui Song 
18*207e5cccSFangrui Song #ifdef SVE_OVERLOADED_FORMS
19*207e5cccSFangrui Song // A simple used,unused... macro, long enough to represent any SVE builtin.
20*207e5cccSFangrui Song #define SVE_ACLE_FUNC(A1,A2_UNUSED,A3,A4_UNUSED) A1##A3
21*207e5cccSFangrui Song #else
22*207e5cccSFangrui Song #define SVE_ACLE_FUNC(A1,A2,A3,A4) A1##A2##A3##A4
23*207e5cccSFangrui Song #endif
24*207e5cccSFangrui Song 
25*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s8_z(
26*207e5cccSFangrui Song // CHECK-NEXT:  entry:
27*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
28*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
29*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
30*207e5cccSFangrui Song //
31*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z15test_svmls_s8_zu10__SVBool_tu10__SVInt8_tS0_S0_(
32*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
33*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
34*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
35*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
36*207e5cccSFangrui Song //
37*207e5cccSFangrui Song svint8_t test_svmls_s8_z(svbool_t pg, svint8_t op1, svint8_t op2, svint8_t op3) MODE_ATTR
38*207e5cccSFangrui Song {
39*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s8,_z,)(pg, op1, op2, op3);
40*207e5cccSFangrui Song }
41*207e5cccSFangrui Song 
42*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s16_z(
43*207e5cccSFangrui Song // CHECK-NEXT:  entry:
44*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
45*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
46*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
47*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
48*207e5cccSFangrui Song //
49*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s16_zu10__SVBool_tu11__SVInt16_tS0_S0_(
50*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
51*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
52*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
53*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
54*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
55*207e5cccSFangrui Song //
56*207e5cccSFangrui Song svint16_t test_svmls_s16_z(svbool_t pg, svint16_t op1, svint16_t op2, svint16_t op3) MODE_ATTR
57*207e5cccSFangrui Song {
58*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s16,_z,)(pg, op1, op2, op3);
59*207e5cccSFangrui Song }
60*207e5cccSFangrui Song 
61*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s32_z(
62*207e5cccSFangrui Song // CHECK-NEXT:  entry:
63*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
64*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
65*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
66*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
67*207e5cccSFangrui Song //
68*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s32_zu10__SVBool_tu11__SVInt32_tS0_S0_(
69*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
70*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
71*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
72*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
73*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
74*207e5cccSFangrui Song //
75*207e5cccSFangrui Song svint32_t test_svmls_s32_z(svbool_t pg, svint32_t op1, svint32_t op2, svint32_t op3) MODE_ATTR
76*207e5cccSFangrui Song {
77*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s32,_z,)(pg, op1, op2, op3);
78*207e5cccSFangrui Song }
79*207e5cccSFangrui Song 
80*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s64_z(
81*207e5cccSFangrui Song // CHECK-NEXT:  entry:
82*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
83*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
84*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
85*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
86*207e5cccSFangrui Song //
87*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s64_zu10__SVBool_tu11__SVInt64_tS0_S0_(
88*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
89*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
90*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
91*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
92*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
93*207e5cccSFangrui Song //
94*207e5cccSFangrui Song svint64_t test_svmls_s64_z(svbool_t pg, svint64_t op1, svint64_t op2, svint64_t op3) MODE_ATTR
95*207e5cccSFangrui Song {
96*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s64,_z,)(pg, op1, op2, op3);
97*207e5cccSFangrui Song }
98*207e5cccSFangrui Song 
99*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u8_z(
100*207e5cccSFangrui Song // CHECK-NEXT:  entry:
101*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
102*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
103*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
104*207e5cccSFangrui Song //
105*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z15test_svmls_u8_zu10__SVBool_tu11__SVUint8_tS0_S0_(
106*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
107*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
108*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
109*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
110*207e5cccSFangrui Song //
111*207e5cccSFangrui Song svuint8_t test_svmls_u8_z(svbool_t pg, svuint8_t op1, svuint8_t op2, svuint8_t op3) MODE_ATTR
112*207e5cccSFangrui Song {
113*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u8,_z,)(pg, op1, op2, op3);
114*207e5cccSFangrui Song }
115*207e5cccSFangrui Song 
116*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u16_z(
117*207e5cccSFangrui Song // CHECK-NEXT:  entry:
118*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
119*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
120*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
121*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
122*207e5cccSFangrui Song //
123*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u16_zu10__SVBool_tu12__SVUint16_tS0_S0_(
124*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
125*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
126*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
127*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
128*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
129*207e5cccSFangrui Song //
130*207e5cccSFangrui Song svuint16_t test_svmls_u16_z(svbool_t pg, svuint16_t op1, svuint16_t op2, svuint16_t op3) MODE_ATTR
131*207e5cccSFangrui Song {
132*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u16,_z,)(pg, op1, op2, op3);
133*207e5cccSFangrui Song }
134*207e5cccSFangrui Song 
135*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u32_z(
136*207e5cccSFangrui Song // CHECK-NEXT:  entry:
137*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
138*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
139*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
140*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
141*207e5cccSFangrui Song //
142*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u32_zu10__SVBool_tu12__SVUint32_tS0_S0_(
143*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
144*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
145*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
146*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
147*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
148*207e5cccSFangrui Song //
149*207e5cccSFangrui Song svuint32_t test_svmls_u32_z(svbool_t pg, svuint32_t op1, svuint32_t op2, svuint32_t op3) MODE_ATTR
150*207e5cccSFangrui Song {
151*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u32,_z,)(pg, op1, op2, op3);
152*207e5cccSFangrui Song }
153*207e5cccSFangrui Song 
154*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u64_z(
155*207e5cccSFangrui Song // CHECK-NEXT:  entry:
156*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
157*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
158*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
159*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
160*207e5cccSFangrui Song //
161*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u64_zu10__SVBool_tu12__SVUint64_tS0_S0_(
162*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
163*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
164*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
165*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
166*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
167*207e5cccSFangrui Song //
168*207e5cccSFangrui Song svuint64_t test_svmls_u64_z(svbool_t pg, svuint64_t op1, svuint64_t op2, svuint64_t op3) MODE_ATTR
169*207e5cccSFangrui Song {
170*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u64,_z,)(pg, op1, op2, op3);
171*207e5cccSFangrui Song }
172*207e5cccSFangrui Song 
173*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s8_m(
174*207e5cccSFangrui Song // CHECK-NEXT:  entry:
175*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
176*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
177*207e5cccSFangrui Song //
178*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z15test_svmls_s8_mu10__SVBool_tu10__SVInt8_tS0_S0_(
179*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
180*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
181*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
182*207e5cccSFangrui Song //
183*207e5cccSFangrui Song svint8_t test_svmls_s8_m(svbool_t pg, svint8_t op1, svint8_t op2, svint8_t op3) MODE_ATTR
184*207e5cccSFangrui Song {
185*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s8,_m,)(pg, op1, op2, op3);
186*207e5cccSFangrui Song }
187*207e5cccSFangrui Song 
188*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s16_m(
189*207e5cccSFangrui Song // CHECK-NEXT:  entry:
190*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
191*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
192*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
193*207e5cccSFangrui Song //
194*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s16_mu10__SVBool_tu11__SVInt16_tS0_S0_(
195*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
196*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
197*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
198*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
199*207e5cccSFangrui Song //
200*207e5cccSFangrui Song svint16_t test_svmls_s16_m(svbool_t pg, svint16_t op1, svint16_t op2, svint16_t op3) MODE_ATTR
201*207e5cccSFangrui Song {
202*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s16,_m,)(pg, op1, op2, op3);
203*207e5cccSFangrui Song }
204*207e5cccSFangrui Song 
205*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s32_m(
206*207e5cccSFangrui Song // CHECK-NEXT:  entry:
207*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
208*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
209*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
210*207e5cccSFangrui Song //
211*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s32_mu10__SVBool_tu11__SVInt32_tS0_S0_(
212*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
213*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
214*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
215*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
216*207e5cccSFangrui Song //
217*207e5cccSFangrui Song svint32_t test_svmls_s32_m(svbool_t pg, svint32_t op1, svint32_t op2, svint32_t op3) MODE_ATTR
218*207e5cccSFangrui Song {
219*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s32,_m,)(pg, op1, op2, op3);
220*207e5cccSFangrui Song }
221*207e5cccSFangrui Song 
222*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s64_m(
223*207e5cccSFangrui Song // CHECK-NEXT:  entry:
224*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
225*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
226*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
227*207e5cccSFangrui Song //
228*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s64_mu10__SVBool_tu11__SVInt64_tS0_S0_(
229*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
230*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
231*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
232*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
233*207e5cccSFangrui Song //
234*207e5cccSFangrui Song svint64_t test_svmls_s64_m(svbool_t pg, svint64_t op1, svint64_t op2, svint64_t op3) MODE_ATTR
235*207e5cccSFangrui Song {
236*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s64,_m,)(pg, op1, op2, op3);
237*207e5cccSFangrui Song }
238*207e5cccSFangrui Song 
239*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u8_m(
240*207e5cccSFangrui Song // CHECK-NEXT:  entry:
241*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
242*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
243*207e5cccSFangrui Song //
244*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z15test_svmls_u8_mu10__SVBool_tu11__SVUint8_tS0_S0_(
245*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
246*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
247*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
248*207e5cccSFangrui Song //
249*207e5cccSFangrui Song svuint8_t test_svmls_u8_m(svbool_t pg, svuint8_t op1, svuint8_t op2, svuint8_t op3) MODE_ATTR
250*207e5cccSFangrui Song {
251*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u8,_m,)(pg, op1, op2, op3);
252*207e5cccSFangrui Song }
253*207e5cccSFangrui Song 
254*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u16_m(
255*207e5cccSFangrui Song // CHECK-NEXT:  entry:
256*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
257*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
258*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
259*207e5cccSFangrui Song //
260*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u16_mu10__SVBool_tu12__SVUint16_tS0_S0_(
261*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
262*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
263*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
264*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
265*207e5cccSFangrui Song //
266*207e5cccSFangrui Song svuint16_t test_svmls_u16_m(svbool_t pg, svuint16_t op1, svuint16_t op2, svuint16_t op3) MODE_ATTR
267*207e5cccSFangrui Song {
268*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u16,_m,)(pg, op1, op2, op3);
269*207e5cccSFangrui Song }
270*207e5cccSFangrui Song 
271*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u32_m(
272*207e5cccSFangrui Song // CHECK-NEXT:  entry:
273*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
274*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
275*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
276*207e5cccSFangrui Song //
277*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u32_mu10__SVBool_tu12__SVUint32_tS0_S0_(
278*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
279*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
280*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
281*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
282*207e5cccSFangrui Song //
283*207e5cccSFangrui Song svuint32_t test_svmls_u32_m(svbool_t pg, svuint32_t op1, svuint32_t op2, svuint32_t op3) MODE_ATTR
284*207e5cccSFangrui Song {
285*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u32,_m,)(pg, op1, op2, op3);
286*207e5cccSFangrui Song }
287*207e5cccSFangrui Song 
288*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u64_m(
289*207e5cccSFangrui Song // CHECK-NEXT:  entry:
290*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
291*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
292*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
293*207e5cccSFangrui Song //
294*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u64_mu10__SVBool_tu12__SVUint64_tS0_S0_(
295*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
296*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
297*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
298*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
299*207e5cccSFangrui Song //
300*207e5cccSFangrui Song svuint64_t test_svmls_u64_m(svbool_t pg, svuint64_t op1, svuint64_t op2, svuint64_t op3) MODE_ATTR
301*207e5cccSFangrui Song {
302*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u64,_m,)(pg, op1, op2, op3);
303*207e5cccSFangrui Song }
304*207e5cccSFangrui Song 
305*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s8_x(
306*207e5cccSFangrui Song // CHECK-NEXT:  entry:
307*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
308*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
309*207e5cccSFangrui Song //
310*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z15test_svmls_s8_xu10__SVBool_tu10__SVInt8_tS0_S0_(
311*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
312*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
313*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
314*207e5cccSFangrui Song //
315*207e5cccSFangrui Song svint8_t test_svmls_s8_x(svbool_t pg, svint8_t op1, svint8_t op2, svint8_t op3) MODE_ATTR
316*207e5cccSFangrui Song {
317*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s8,_x,)(pg, op1, op2, op3);
318*207e5cccSFangrui Song }
319*207e5cccSFangrui Song 
320*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s16_x(
321*207e5cccSFangrui Song // CHECK-NEXT:  entry:
322*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
323*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
324*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
325*207e5cccSFangrui Song //
326*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s16_xu10__SVBool_tu11__SVInt16_tS0_S0_(
327*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
328*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
329*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
330*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
331*207e5cccSFangrui Song //
332*207e5cccSFangrui Song svint16_t test_svmls_s16_x(svbool_t pg, svint16_t op1, svint16_t op2, svint16_t op3) MODE_ATTR
333*207e5cccSFangrui Song {
334*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s16,_x,)(pg, op1, op2, op3);
335*207e5cccSFangrui Song }
336*207e5cccSFangrui Song 
337*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s32_x(
338*207e5cccSFangrui Song // CHECK-NEXT:  entry:
339*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
340*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
341*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
342*207e5cccSFangrui Song //
343*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s32_xu10__SVBool_tu11__SVInt32_tS0_S0_(
344*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
345*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
346*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
347*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
348*207e5cccSFangrui Song //
349*207e5cccSFangrui Song svint32_t test_svmls_s32_x(svbool_t pg, svint32_t op1, svint32_t op2, svint32_t op3) MODE_ATTR
350*207e5cccSFangrui Song {
351*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s32,_x,)(pg, op1, op2, op3);
352*207e5cccSFangrui Song }
353*207e5cccSFangrui Song 
354*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_s64_x(
355*207e5cccSFangrui Song // CHECK-NEXT:  entry:
356*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
357*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
358*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
359*207e5cccSFangrui Song //
360*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_s64_xu10__SVBool_tu11__SVInt64_tS0_S0_(
361*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
362*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
363*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
364*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
365*207e5cccSFangrui Song //
366*207e5cccSFangrui Song svint64_t test_svmls_s64_x(svbool_t pg, svint64_t op1, svint64_t op2, svint64_t op3) MODE_ATTR
367*207e5cccSFangrui Song {
368*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_s64,_x,)(pg, op1, op2, op3);
369*207e5cccSFangrui Song }
370*207e5cccSFangrui Song 
371*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u8_x(
372*207e5cccSFangrui Song // CHECK-NEXT:  entry:
373*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
374*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
375*207e5cccSFangrui Song //
376*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z15test_svmls_u8_xu10__SVBool_tu11__SVUint8_tS0_S0_(
377*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
378*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[OP3:%.*]])
379*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
380*207e5cccSFangrui Song //
381*207e5cccSFangrui Song svuint8_t test_svmls_u8_x(svbool_t pg, svuint8_t op1, svuint8_t op2, svuint8_t op3) MODE_ATTR
382*207e5cccSFangrui Song {
383*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u8,_x,)(pg, op1, op2, op3);
384*207e5cccSFangrui Song }
385*207e5cccSFangrui Song 
386*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u16_x(
387*207e5cccSFangrui Song // CHECK-NEXT:  entry:
388*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
389*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
390*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
391*207e5cccSFangrui Song //
392*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u16_xu10__SVBool_tu12__SVUint16_tS0_S0_(
393*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
394*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
395*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[OP3:%.*]])
396*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
397*207e5cccSFangrui Song //
398*207e5cccSFangrui Song svuint16_t test_svmls_u16_x(svbool_t pg, svuint16_t op1, svuint16_t op2, svuint16_t op3) MODE_ATTR
399*207e5cccSFangrui Song {
400*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u16,_x,)(pg, op1, op2, op3);
401*207e5cccSFangrui Song }
402*207e5cccSFangrui Song 
403*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u32_x(
404*207e5cccSFangrui Song // CHECK-NEXT:  entry:
405*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
406*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
407*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
408*207e5cccSFangrui Song //
409*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u32_xu10__SVBool_tu12__SVUint32_tS0_S0_(
410*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
411*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
412*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[OP3:%.*]])
413*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
414*207e5cccSFangrui Song //
415*207e5cccSFangrui Song svuint32_t test_svmls_u32_x(svbool_t pg, svuint32_t op1, svuint32_t op2, svuint32_t op3) MODE_ATTR
416*207e5cccSFangrui Song {
417*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u32,_x,)(pg, op1, op2, op3);
418*207e5cccSFangrui Song }
419*207e5cccSFangrui Song 
420*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_u64_x(
421*207e5cccSFangrui Song // CHECK-NEXT:  entry:
422*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
423*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
424*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
425*207e5cccSFangrui Song //
426*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_u64_xu10__SVBool_tu12__SVUint64_tS0_S0_(
427*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
428*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
429*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[OP3:%.*]])
430*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
431*207e5cccSFangrui Song //
432*207e5cccSFangrui Song svuint64_t test_svmls_u64_x(svbool_t pg, svuint64_t op1, svuint64_t op2, svuint64_t op3) MODE_ATTR
433*207e5cccSFangrui Song {
434*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_u64,_x,)(pg, op1, op2, op3);
435*207e5cccSFangrui Song }
436*207e5cccSFangrui Song 
437*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s8_z(
438*207e5cccSFangrui Song // CHECK-NEXT:  entry:
439*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
440*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
441*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
442*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
443*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
444*207e5cccSFangrui Song //
445*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z17test_svmls_n_s8_zu10__SVBool_tu10__SVInt8_tS0_a(
446*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
447*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
448*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
449*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
450*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
451*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
452*207e5cccSFangrui Song //
453*207e5cccSFangrui Song svint8_t test_svmls_n_s8_z(svbool_t pg, svint8_t op1, svint8_t op2, int8_t op3) MODE_ATTR
454*207e5cccSFangrui Song {
455*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s8,_z,)(pg, op1, op2, op3);
456*207e5cccSFangrui Song }
457*207e5cccSFangrui Song 
458*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s16_z(
459*207e5cccSFangrui Song // CHECK-NEXT:  entry:
460*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
461*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
462*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
463*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
464*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
465*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
466*207e5cccSFangrui Song //
467*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s16_zu10__SVBool_tu11__SVInt16_tS0_s(
468*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
469*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
470*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
471*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
472*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
473*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
474*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
475*207e5cccSFangrui Song //
476*207e5cccSFangrui Song svint16_t test_svmls_n_s16_z(svbool_t pg, svint16_t op1, svint16_t op2, int16_t op3) MODE_ATTR
477*207e5cccSFangrui Song {
478*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s16,_z,)(pg, op1, op2, op3);
479*207e5cccSFangrui Song }
480*207e5cccSFangrui Song 
481*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s32_z(
482*207e5cccSFangrui Song // CHECK-NEXT:  entry:
483*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
484*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
485*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
486*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
487*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
488*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
489*207e5cccSFangrui Song //
490*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s32_zu10__SVBool_tu11__SVInt32_tS0_i(
491*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
492*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
493*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
494*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
495*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
496*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
497*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
498*207e5cccSFangrui Song //
499*207e5cccSFangrui Song svint32_t test_svmls_n_s32_z(svbool_t pg, svint32_t op1, svint32_t op2, int32_t op3) MODE_ATTR
500*207e5cccSFangrui Song {
501*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s32,_z,)(pg, op1, op2, op3);
502*207e5cccSFangrui Song }
503*207e5cccSFangrui Song 
504*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s64_z(
505*207e5cccSFangrui Song // CHECK-NEXT:  entry:
506*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
507*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
508*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
509*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
510*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
511*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
512*207e5cccSFangrui Song //
513*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s64_zu10__SVBool_tu11__SVInt64_tS0_l(
514*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
515*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
516*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
517*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
518*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
519*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
520*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
521*207e5cccSFangrui Song //
522*207e5cccSFangrui Song svint64_t test_svmls_n_s64_z(svbool_t pg, svint64_t op1, svint64_t op2, int64_t op3) MODE_ATTR
523*207e5cccSFangrui Song {
524*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s64,_z,)(pg, op1, op2, op3);
525*207e5cccSFangrui Song }
526*207e5cccSFangrui Song 
527*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u8_z(
528*207e5cccSFangrui Song // CHECK-NEXT:  entry:
529*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
530*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
531*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
532*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
533*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
534*207e5cccSFangrui Song //
535*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z17test_svmls_n_u8_zu10__SVBool_tu11__SVUint8_tS0_h(
536*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
537*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
538*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
539*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = select <vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> zeroinitializer
540*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG]], <vscale x 16 x i8> [[TMP0]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
541*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP1]]
542*207e5cccSFangrui Song //
543*207e5cccSFangrui Song svuint8_t test_svmls_n_u8_z(svbool_t pg, svuint8_t op1, svuint8_t op2, uint8_t op3) MODE_ATTR
544*207e5cccSFangrui Song {
545*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u8,_z,)(pg, op1, op2, op3);
546*207e5cccSFangrui Song }
547*207e5cccSFangrui Song 
548*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u16_z(
549*207e5cccSFangrui Song // CHECK-NEXT:  entry:
550*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
551*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
552*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
553*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
554*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
555*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
556*207e5cccSFangrui Song //
557*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u16_zu10__SVBool_tu12__SVUint16_tS0_t(
558*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
559*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
560*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
561*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
562*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> zeroinitializer
563*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[TMP1]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
564*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP2]]
565*207e5cccSFangrui Song //
566*207e5cccSFangrui Song svuint16_t test_svmls_n_u16_z(svbool_t pg, svuint16_t op1, svuint16_t op2, uint16_t op3) MODE_ATTR
567*207e5cccSFangrui Song {
568*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u16,_z,)(pg, op1, op2, op3);
569*207e5cccSFangrui Song }
570*207e5cccSFangrui Song 
571*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u32_z(
572*207e5cccSFangrui Song // CHECK-NEXT:  entry:
573*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
574*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
575*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
576*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
577*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
578*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
579*207e5cccSFangrui Song //
580*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u32_zu10__SVBool_tu12__SVUint32_tS0_j(
581*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
582*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
583*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
584*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
585*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> zeroinitializer
586*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[TMP1]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
587*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP2]]
588*207e5cccSFangrui Song //
589*207e5cccSFangrui Song svuint32_t test_svmls_n_u32_z(svbool_t pg, svuint32_t op1, svuint32_t op2, uint32_t op3) MODE_ATTR
590*207e5cccSFangrui Song {
591*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u32,_z,)(pg, op1, op2, op3);
592*207e5cccSFangrui Song }
593*207e5cccSFangrui Song 
594*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u64_z(
595*207e5cccSFangrui Song // CHECK-NEXT:  entry:
596*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
597*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
598*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
599*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
600*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
601*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
602*207e5cccSFangrui Song //
603*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u64_zu10__SVBool_tu12__SVUint64_tS0_m(
604*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
605*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
606*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
607*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
608*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> zeroinitializer
609*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[TMP1]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
610*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP2]]
611*207e5cccSFangrui Song //
612*207e5cccSFangrui Song svuint64_t test_svmls_n_u64_z(svbool_t pg, svuint64_t op1, svuint64_t op2, uint64_t op3) MODE_ATTR
613*207e5cccSFangrui Song {
614*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u64,_z,)(pg, op1, op2, op3);
615*207e5cccSFangrui Song }
616*207e5cccSFangrui Song 
617*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s8_m(
618*207e5cccSFangrui Song // CHECK-NEXT:  entry:
619*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
620*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
621*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
622*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
623*207e5cccSFangrui Song //
624*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z17test_svmls_n_s8_mu10__SVBool_tu10__SVInt8_tS0_a(
625*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
626*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
627*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
628*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
629*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
630*207e5cccSFangrui Song //
631*207e5cccSFangrui Song svint8_t test_svmls_n_s8_m(svbool_t pg, svint8_t op1, svint8_t op2, int8_t op3) MODE_ATTR
632*207e5cccSFangrui Song {
633*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s8,_m,)(pg, op1, op2, op3);
634*207e5cccSFangrui Song }
635*207e5cccSFangrui Song 
636*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s16_m(
637*207e5cccSFangrui Song // CHECK-NEXT:  entry:
638*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
639*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
640*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
641*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
642*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
643*207e5cccSFangrui Song //
644*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s16_mu10__SVBool_tu11__SVInt16_tS0_s(
645*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
646*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
647*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
648*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
649*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
650*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
651*207e5cccSFangrui Song //
652*207e5cccSFangrui Song svint16_t test_svmls_n_s16_m(svbool_t pg, svint16_t op1, svint16_t op2, int16_t op3) MODE_ATTR
653*207e5cccSFangrui Song {
654*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s16,_m,)(pg, op1, op2, op3);
655*207e5cccSFangrui Song }
656*207e5cccSFangrui Song 
657*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s32_m(
658*207e5cccSFangrui Song // CHECK-NEXT:  entry:
659*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
660*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
661*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
662*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
663*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
664*207e5cccSFangrui Song //
665*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s32_mu10__SVBool_tu11__SVInt32_tS0_i(
666*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
667*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
668*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
669*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
670*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
671*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
672*207e5cccSFangrui Song //
673*207e5cccSFangrui Song svint32_t test_svmls_n_s32_m(svbool_t pg, svint32_t op1, svint32_t op2, int32_t op3) MODE_ATTR
674*207e5cccSFangrui Song {
675*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s32,_m,)(pg, op1, op2, op3);
676*207e5cccSFangrui Song }
677*207e5cccSFangrui Song 
678*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s64_m(
679*207e5cccSFangrui Song // CHECK-NEXT:  entry:
680*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
681*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
682*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
683*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
684*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
685*207e5cccSFangrui Song //
686*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s64_mu10__SVBool_tu11__SVInt64_tS0_l(
687*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
688*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
689*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
690*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
691*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
692*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
693*207e5cccSFangrui Song //
694*207e5cccSFangrui Song svint64_t test_svmls_n_s64_m(svbool_t pg, svint64_t op1, svint64_t op2, int64_t op3) MODE_ATTR
695*207e5cccSFangrui Song {
696*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s64,_m,)(pg, op1, op2, op3);
697*207e5cccSFangrui Song }
698*207e5cccSFangrui Song 
699*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u8_m(
700*207e5cccSFangrui Song // CHECK-NEXT:  entry:
701*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
702*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
703*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
704*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
705*207e5cccSFangrui Song //
706*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z17test_svmls_n_u8_mu10__SVBool_tu11__SVUint8_tS0_h(
707*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
708*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
709*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
710*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
711*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
712*207e5cccSFangrui Song //
713*207e5cccSFangrui Song svuint8_t test_svmls_n_u8_m(svbool_t pg, svuint8_t op1, svuint8_t op2, uint8_t op3) MODE_ATTR
714*207e5cccSFangrui Song {
715*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u8,_m,)(pg, op1, op2, op3);
716*207e5cccSFangrui Song }
717*207e5cccSFangrui Song 
718*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u16_m(
719*207e5cccSFangrui Song // CHECK-NEXT:  entry:
720*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
721*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
722*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
723*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
724*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
725*207e5cccSFangrui Song //
726*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u16_mu10__SVBool_tu12__SVUint16_tS0_t(
727*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
728*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
729*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
730*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
731*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
732*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
733*207e5cccSFangrui Song //
734*207e5cccSFangrui Song svuint16_t test_svmls_n_u16_m(svbool_t pg, svuint16_t op1, svuint16_t op2, uint16_t op3) MODE_ATTR
735*207e5cccSFangrui Song {
736*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u16,_m,)(pg, op1, op2, op3);
737*207e5cccSFangrui Song }
738*207e5cccSFangrui Song 
739*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u32_m(
740*207e5cccSFangrui Song // CHECK-NEXT:  entry:
741*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
742*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
743*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
744*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
745*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
746*207e5cccSFangrui Song //
747*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u32_mu10__SVBool_tu12__SVUint32_tS0_j(
748*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
749*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
750*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
751*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
752*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
753*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
754*207e5cccSFangrui Song //
755*207e5cccSFangrui Song svuint32_t test_svmls_n_u32_m(svbool_t pg, svuint32_t op1, svuint32_t op2, uint32_t op3) MODE_ATTR
756*207e5cccSFangrui Song {
757*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u32,_m,)(pg, op1, op2, op3);
758*207e5cccSFangrui Song }
759*207e5cccSFangrui Song 
760*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u64_m(
761*207e5cccSFangrui Song // CHECK-NEXT:  entry:
762*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
763*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
764*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
765*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
766*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
767*207e5cccSFangrui Song //
768*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u64_mu10__SVBool_tu12__SVUint64_tS0_m(
769*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
770*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
771*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
772*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
773*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
774*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
775*207e5cccSFangrui Song //
776*207e5cccSFangrui Song svuint64_t test_svmls_n_u64_m(svbool_t pg, svuint64_t op1, svuint64_t op2, uint64_t op3) MODE_ATTR
777*207e5cccSFangrui Song {
778*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u64,_m,)(pg, op1, op2, op3);
779*207e5cccSFangrui Song }
780*207e5cccSFangrui Song 
781*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s8_x(
782*207e5cccSFangrui Song // CHECK-NEXT:  entry:
783*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
784*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
785*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
786*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
787*207e5cccSFangrui Song //
788*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z17test_svmls_n_s8_xu10__SVBool_tu10__SVInt8_tS0_a(
789*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
790*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
791*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
792*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
793*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
794*207e5cccSFangrui Song //
795*207e5cccSFangrui Song svint8_t test_svmls_n_s8_x(svbool_t pg, svint8_t op1, svint8_t op2, int8_t op3) MODE_ATTR
796*207e5cccSFangrui Song {
797*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s8,_x,)(pg, op1, op2, op3);
798*207e5cccSFangrui Song }
799*207e5cccSFangrui Song 
800*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s16_x(
801*207e5cccSFangrui Song // CHECK-NEXT:  entry:
802*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
803*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
804*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
805*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
806*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
807*207e5cccSFangrui Song //
808*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s16_xu10__SVBool_tu11__SVInt16_tS0_s(
809*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
810*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
811*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
812*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
813*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
814*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
815*207e5cccSFangrui Song //
816*207e5cccSFangrui Song svint16_t test_svmls_n_s16_x(svbool_t pg, svint16_t op1, svint16_t op2, int16_t op3) MODE_ATTR
817*207e5cccSFangrui Song {
818*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s16,_x,)(pg, op1, op2, op3);
819*207e5cccSFangrui Song }
820*207e5cccSFangrui Song 
821*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s32_x(
822*207e5cccSFangrui Song // CHECK-NEXT:  entry:
823*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
824*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
825*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
826*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
827*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
828*207e5cccSFangrui Song //
829*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s32_xu10__SVBool_tu11__SVInt32_tS0_i(
830*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
831*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
832*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
833*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
834*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
835*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
836*207e5cccSFangrui Song //
837*207e5cccSFangrui Song svint32_t test_svmls_n_s32_x(svbool_t pg, svint32_t op1, svint32_t op2, int32_t op3) MODE_ATTR
838*207e5cccSFangrui Song {
839*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s32,_x,)(pg, op1, op2, op3);
840*207e5cccSFangrui Song }
841*207e5cccSFangrui Song 
842*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_s64_x(
843*207e5cccSFangrui Song // CHECK-NEXT:  entry:
844*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
845*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
846*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
847*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
848*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
849*207e5cccSFangrui Song //
850*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_s64_xu10__SVBool_tu11__SVInt64_tS0_l(
851*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
852*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
853*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
854*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
855*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
856*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
857*207e5cccSFangrui Song //
858*207e5cccSFangrui Song svint64_t test_svmls_n_s64_x(svbool_t pg, svint64_t op1, svint64_t op2, int64_t op3) MODE_ATTR
859*207e5cccSFangrui Song {
860*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_s64,_x,)(pg, op1, op2, op3);
861*207e5cccSFangrui Song }
862*207e5cccSFangrui Song 
863*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u8_x(
864*207e5cccSFangrui Song // CHECK-NEXT:  entry:
865*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
866*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
867*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
868*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
869*207e5cccSFangrui Song //
870*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z17test_svmls_n_u8_xu10__SVBool_tu11__SVUint8_tS0_h(
871*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
872*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 16 x i8> poison, i8 [[OP3:%.*]], i64 0
873*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 16 x i8> [[DOTSPLATINSERT]], <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
874*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 16 x i8> @llvm.aarch64.sve.mls.u.nxv16i8(<vscale x 16 x i1> [[PG:%.*]], <vscale x 16 x i8> [[OP1:%.*]], <vscale x 16 x i8> [[OP2:%.*]], <vscale x 16 x i8> [[DOTSPLAT]])
875*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 16 x i8> [[TMP0]]
876*207e5cccSFangrui Song //
877*207e5cccSFangrui Song svuint8_t test_svmls_n_u8_x(svbool_t pg, svuint8_t op1, svuint8_t op2, uint8_t op3) MODE_ATTR
878*207e5cccSFangrui Song {
879*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u8,_x,)(pg, op1, op2, op3);
880*207e5cccSFangrui Song }
881*207e5cccSFangrui Song 
882*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u16_x(
883*207e5cccSFangrui Song // CHECK-NEXT:  entry:
884*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
885*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
886*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
887*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
888*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
889*207e5cccSFangrui Song //
890*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u16_xu10__SVBool_tu12__SVUint16_tS0_t(
891*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
892*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
893*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x i16> poison, i16 [[OP3:%.*]], i64 0
894*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x i16> [[DOTSPLATINSERT]], <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
895*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x i16> @llvm.aarch64.sve.mls.u.nxv8i16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x i16> [[OP1:%.*]], <vscale x 8 x i16> [[OP2:%.*]], <vscale x 8 x i16> [[DOTSPLAT]])
896*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x i16> [[TMP1]]
897*207e5cccSFangrui Song //
898*207e5cccSFangrui Song svuint16_t test_svmls_n_u16_x(svbool_t pg, svuint16_t op1, svuint16_t op2, uint16_t op3) MODE_ATTR
899*207e5cccSFangrui Song {
900*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u16,_x,)(pg, op1, op2, op3);
901*207e5cccSFangrui Song }
902*207e5cccSFangrui Song 
903*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u32_x(
904*207e5cccSFangrui Song // CHECK-NEXT:  entry:
905*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
906*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
907*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
908*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
909*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
910*207e5cccSFangrui Song //
911*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u32_xu10__SVBool_tu12__SVUint32_tS0_j(
912*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
913*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
914*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x i32> poison, i32 [[OP3:%.*]], i64 0
915*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x i32> [[DOTSPLATINSERT]], <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
916*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x i32> @llvm.aarch64.sve.mls.u.nxv4i32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x i32> [[OP1:%.*]], <vscale x 4 x i32> [[OP2:%.*]], <vscale x 4 x i32> [[DOTSPLAT]])
917*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x i32> [[TMP1]]
918*207e5cccSFangrui Song //
919*207e5cccSFangrui Song svuint32_t test_svmls_n_u32_x(svbool_t pg, svuint32_t op1, svuint32_t op2, uint32_t op3) MODE_ATTR
920*207e5cccSFangrui Song {
921*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u32,_x,)(pg, op1, op2, op3);
922*207e5cccSFangrui Song }
923*207e5cccSFangrui Song 
924*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_u64_x(
925*207e5cccSFangrui Song // CHECK-NEXT:  entry:
926*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
927*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
928*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
929*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
930*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
931*207e5cccSFangrui Song //
932*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_u64_xu10__SVBool_tu12__SVUint64_tS0_m(
933*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
934*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
935*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x i64> poison, i64 [[OP3:%.*]], i64 0
936*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x i64> [[DOTSPLATINSERT]], <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
937*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x i64> @llvm.aarch64.sve.mls.u.nxv2i64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x i64> [[OP1:%.*]], <vscale x 2 x i64> [[OP2:%.*]], <vscale x 2 x i64> [[DOTSPLAT]])
938*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x i64> [[TMP1]]
939*207e5cccSFangrui Song //
940*207e5cccSFangrui Song svuint64_t test_svmls_n_u64_x(svbool_t pg, svuint64_t op1, svuint64_t op2, uint64_t op3) MODE_ATTR
941*207e5cccSFangrui Song {
942*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_u64,_x,)(pg, op1, op2, op3);
943*207e5cccSFangrui Song }
944*207e5cccSFangrui Song 
945*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f16_z(
946*207e5cccSFangrui Song // CHECK-NEXT:  entry:
947*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
948*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> zeroinitializer
949*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[TMP1]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]])
950*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP2]]
951*207e5cccSFangrui Song //
952*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f16_zu10__SVBool_tu13__SVFloat16_tS0_S0_(
953*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
954*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
955*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> zeroinitializer
956*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[TMP1]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]])
957*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP2]]
958*207e5cccSFangrui Song //
959*207e5cccSFangrui Song svfloat16_t test_svmls_f16_z(svbool_t pg, svfloat16_t op1, svfloat16_t op2, svfloat16_t op3) MODE_ATTR
960*207e5cccSFangrui Song {
961*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f16,_z,)(pg, op1, op2, op3);
962*207e5cccSFangrui Song }
963*207e5cccSFangrui Song 
964*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f32_z(
965*207e5cccSFangrui Song // CHECK-NEXT:  entry:
966*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
967*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> zeroinitializer
968*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[TMP1]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]])
969*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP2]]
970*207e5cccSFangrui Song //
971*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f32_zu10__SVBool_tu13__SVFloat32_tS0_S0_(
972*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
973*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
974*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> zeroinitializer
975*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[TMP1]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]])
976*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP2]]
977*207e5cccSFangrui Song //
978*207e5cccSFangrui Song svfloat32_t test_svmls_f32_z(svbool_t pg, svfloat32_t op1, svfloat32_t op2, svfloat32_t op3) MODE_ATTR
979*207e5cccSFangrui Song {
980*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f32,_z,)(pg, op1, op2, op3);
981*207e5cccSFangrui Song }
982*207e5cccSFangrui Song 
983*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f64_z(
984*207e5cccSFangrui Song // CHECK-NEXT:  entry:
985*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
986*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> zeroinitializer
987*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[TMP1]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]])
988*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP2]]
989*207e5cccSFangrui Song //
990*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f64_zu10__SVBool_tu13__SVFloat64_tS0_S0_(
991*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
992*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
993*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> zeroinitializer
994*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[TMP1]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]])
995*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP2]]
996*207e5cccSFangrui Song //
997*207e5cccSFangrui Song svfloat64_t test_svmls_f64_z(svbool_t pg, svfloat64_t op1, svfloat64_t op2, svfloat64_t op3) MODE_ATTR
998*207e5cccSFangrui Song {
999*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f64,_z,)(pg, op1, op2, op3);
1000*207e5cccSFangrui Song }
1001*207e5cccSFangrui Song 
1002*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f16_m(
1003*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1004*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1005*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]])
1006*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1007*207e5cccSFangrui Song //
1008*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f16_mu10__SVBool_tu13__SVFloat16_tS0_S0_(
1009*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1010*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1011*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]])
1012*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1013*207e5cccSFangrui Song //
1014*207e5cccSFangrui Song svfloat16_t test_svmls_f16_m(svbool_t pg, svfloat16_t op1, svfloat16_t op2, svfloat16_t op3) MODE_ATTR
1015*207e5cccSFangrui Song {
1016*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f16,_m,)(pg, op1, op2, op3);
1017*207e5cccSFangrui Song }
1018*207e5cccSFangrui Song 
1019*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f32_m(
1020*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1021*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1022*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]])
1023*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1024*207e5cccSFangrui Song //
1025*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f32_mu10__SVBool_tu13__SVFloat32_tS0_S0_(
1026*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1027*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1028*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]])
1029*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1030*207e5cccSFangrui Song //
1031*207e5cccSFangrui Song svfloat32_t test_svmls_f32_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2, svfloat32_t op3) MODE_ATTR
1032*207e5cccSFangrui Song {
1033*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f32,_m,)(pg, op1, op2, op3);
1034*207e5cccSFangrui Song }
1035*207e5cccSFangrui Song 
1036*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f64_m(
1037*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1038*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1039*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]])
1040*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1041*207e5cccSFangrui Song //
1042*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f64_mu10__SVBool_tu13__SVFloat64_tS0_S0_(
1043*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1044*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1045*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]])
1046*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1047*207e5cccSFangrui Song //
1048*207e5cccSFangrui Song svfloat64_t test_svmls_f64_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2, svfloat64_t op3) MODE_ATTR
1049*207e5cccSFangrui Song {
1050*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f64,_m,)(pg, op1, op2, op3);
1051*207e5cccSFangrui Song }
1052*207e5cccSFangrui Song 
1053*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f16_x(
1054*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1055*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1056*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]])
1057*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1058*207e5cccSFangrui Song //
1059*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f16_xu10__SVBool_tu13__SVFloat16_tS0_S0_(
1060*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1061*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1062*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]])
1063*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1064*207e5cccSFangrui Song //
1065*207e5cccSFangrui Song svfloat16_t test_svmls_f16_x(svbool_t pg, svfloat16_t op1, svfloat16_t op2, svfloat16_t op3) MODE_ATTR
1066*207e5cccSFangrui Song {
1067*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f16,_x,)(pg, op1, op2, op3);
1068*207e5cccSFangrui Song }
1069*207e5cccSFangrui Song 
1070*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f32_x(
1071*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1072*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1073*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]])
1074*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1075*207e5cccSFangrui Song //
1076*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f32_xu10__SVBool_tu13__SVFloat32_tS0_S0_(
1077*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1078*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1079*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]])
1080*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1081*207e5cccSFangrui Song //
1082*207e5cccSFangrui Song svfloat32_t test_svmls_f32_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2, svfloat32_t op3) MODE_ATTR
1083*207e5cccSFangrui Song {
1084*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f32,_x,)(pg, op1, op2, op3);
1085*207e5cccSFangrui Song }
1086*207e5cccSFangrui Song 
1087*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_f64_x(
1088*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1089*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1090*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]])
1091*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1092*207e5cccSFangrui Song //
1093*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z16test_svmls_f64_xu10__SVBool_tu13__SVFloat64_tS0_S0_(
1094*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1095*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1096*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]])
1097*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1098*207e5cccSFangrui Song //
1099*207e5cccSFangrui Song svfloat64_t test_svmls_f64_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2, svfloat64_t op3) MODE_ATTR
1100*207e5cccSFangrui Song {
1101*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_f64,_x,)(pg, op1, op2, op3);
1102*207e5cccSFangrui Song }
1103*207e5cccSFangrui Song 
1104*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f16_z(
1105*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1106*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1107*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[OP3:%.*]], i64 0
1108*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x half> [[DOTSPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1109*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> zeroinitializer
1110*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[TMP1]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[DOTSPLAT]])
1111*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP2]]
1112*207e5cccSFangrui Song //
1113*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f16_zu10__SVBool_tu13__SVFloat16_tS0_Dh(
1114*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1115*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1116*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[OP3:%.*]], i64 0
1117*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x half> [[DOTSPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1118*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> zeroinitializer
1119*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[TMP1]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[DOTSPLAT]])
1120*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP2]]
1121*207e5cccSFangrui Song //
1122*207e5cccSFangrui Song svfloat16_t test_svmls_n_f16_z(svbool_t pg, svfloat16_t op1, svfloat16_t op2, float16_t op3) MODE_ATTR
1123*207e5cccSFangrui Song {
1124*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f16,_z,)(pg, op1, op2, op3);
1125*207e5cccSFangrui Song }
1126*207e5cccSFangrui Song 
1127*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f32_z(
1128*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1129*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1130*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[OP3:%.*]], i64 0
1131*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x float> [[DOTSPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1132*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> zeroinitializer
1133*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[TMP1]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[DOTSPLAT]])
1134*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP2]]
1135*207e5cccSFangrui Song //
1136*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f32_zu10__SVBool_tu13__SVFloat32_tS0_f(
1137*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1138*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1139*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[OP3:%.*]], i64 0
1140*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x float> [[DOTSPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1141*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> zeroinitializer
1142*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[TMP1]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[DOTSPLAT]])
1143*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP2]]
1144*207e5cccSFangrui Song //
1145*207e5cccSFangrui Song svfloat32_t test_svmls_n_f32_z(svbool_t pg, svfloat32_t op1, svfloat32_t op2, float32_t op3) MODE_ATTR
1146*207e5cccSFangrui Song {
1147*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f32,_z,)(pg, op1, op2, op3);
1148*207e5cccSFangrui Song }
1149*207e5cccSFangrui Song 
1150*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f64_z(
1151*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1152*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1153*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[OP3:%.*]], i64 0
1154*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x double> [[DOTSPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1155*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> zeroinitializer
1156*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[TMP1]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[DOTSPLAT]])
1157*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP2]]
1158*207e5cccSFangrui Song //
1159*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f64_zu10__SVBool_tu13__SVFloat64_tS0_d(
1160*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1161*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1162*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[OP3:%.*]], i64 0
1163*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x double> [[DOTSPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1164*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = select <vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> zeroinitializer
1165*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP2:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[TMP1]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[DOTSPLAT]])
1166*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP2]]
1167*207e5cccSFangrui Song //
1168*207e5cccSFangrui Song svfloat64_t test_svmls_n_f64_z(svbool_t pg, svfloat64_t op1, svfloat64_t op2, float64_t op3) MODE_ATTR
1169*207e5cccSFangrui Song {
1170*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f64,_z,)(pg, op1, op2, op3);
1171*207e5cccSFangrui Song }
1172*207e5cccSFangrui Song 
1173*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f16_m(
1174*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1175*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1176*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[OP3:%.*]], i64 0
1177*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x half> [[DOTSPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1178*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[DOTSPLAT]])
1179*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1180*207e5cccSFangrui Song //
1181*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f16_mu10__SVBool_tu13__SVFloat16_tS0_Dh(
1182*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1183*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1184*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[OP3:%.*]], i64 0
1185*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x half> [[DOTSPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1186*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[DOTSPLAT]])
1187*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1188*207e5cccSFangrui Song //
1189*207e5cccSFangrui Song svfloat16_t test_svmls_n_f16_m(svbool_t pg, svfloat16_t op1, svfloat16_t op2, float16_t op3) MODE_ATTR
1190*207e5cccSFangrui Song {
1191*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f16,_m,)(pg, op1, op2, op3);
1192*207e5cccSFangrui Song }
1193*207e5cccSFangrui Song 
1194*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f32_m(
1195*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1196*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1197*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[OP3:%.*]], i64 0
1198*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x float> [[DOTSPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1199*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[DOTSPLAT]])
1200*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1201*207e5cccSFangrui Song //
1202*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f32_mu10__SVBool_tu13__SVFloat32_tS0_f(
1203*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1204*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1205*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[OP3:%.*]], i64 0
1206*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x float> [[DOTSPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1207*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[DOTSPLAT]])
1208*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1209*207e5cccSFangrui Song //
1210*207e5cccSFangrui Song svfloat32_t test_svmls_n_f32_m(svbool_t pg, svfloat32_t op1, svfloat32_t op2, float32_t op3) MODE_ATTR
1211*207e5cccSFangrui Song {
1212*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f32,_m,)(pg, op1, op2, op3);
1213*207e5cccSFangrui Song }
1214*207e5cccSFangrui Song 
1215*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f64_m(
1216*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1217*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1218*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[OP3:%.*]], i64 0
1219*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x double> [[DOTSPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1220*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[DOTSPLAT]])
1221*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1222*207e5cccSFangrui Song //
1223*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f64_mu10__SVBool_tu13__SVFloat64_tS0_d(
1224*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1225*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1226*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[OP3:%.*]], i64 0
1227*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x double> [[DOTSPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1228*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[DOTSPLAT]])
1229*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1230*207e5cccSFangrui Song //
1231*207e5cccSFangrui Song svfloat64_t test_svmls_n_f64_m(svbool_t pg, svfloat64_t op1, svfloat64_t op2, float64_t op3) MODE_ATTR
1232*207e5cccSFangrui Song {
1233*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f64,_m,)(pg, op1, op2, op3);
1234*207e5cccSFangrui Song }
1235*207e5cccSFangrui Song 
1236*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f16_x(
1237*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1238*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1239*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[OP3:%.*]], i64 0
1240*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x half> [[DOTSPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1241*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[DOTSPLAT]])
1242*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1243*207e5cccSFangrui Song //
1244*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f16_xu10__SVBool_tu13__SVFloat16_tS0_Dh(
1245*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1246*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> [[PG:%.*]])
1247*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 8 x half> poison, half [[OP3:%.*]], i64 0
1248*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 8 x half> [[DOTSPLATINSERT]], <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1249*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.u.nxv8f16(<vscale x 8 x i1> [[TMP0]], <vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[DOTSPLAT]])
1250*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP1]]
1251*207e5cccSFangrui Song //
1252*207e5cccSFangrui Song svfloat16_t test_svmls_n_f16_x(svbool_t pg, svfloat16_t op1, svfloat16_t op2, float16_t op3) MODE_ATTR
1253*207e5cccSFangrui Song {
1254*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f16,_x,)(pg, op1, op2, op3);
1255*207e5cccSFangrui Song }
1256*207e5cccSFangrui Song 
1257*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f32_x(
1258*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1259*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1260*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[OP3:%.*]], i64 0
1261*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x float> [[DOTSPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1262*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[DOTSPLAT]])
1263*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1264*207e5cccSFangrui Song //
1265*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f32_xu10__SVBool_tu13__SVFloat32_tS0_f(
1266*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1267*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv4i1(<vscale x 16 x i1> [[PG:%.*]])
1268*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 4 x float> poison, float [[OP3:%.*]], i64 0
1269*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 4 x float> [[DOTSPLATINSERT]], <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
1270*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.u.nxv4f32(<vscale x 4 x i1> [[TMP0]], <vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[DOTSPLAT]])
1271*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
1272*207e5cccSFangrui Song //
1273*207e5cccSFangrui Song svfloat32_t test_svmls_n_f32_x(svbool_t pg, svfloat32_t op1, svfloat32_t op2, float32_t op3) MODE_ATTR
1274*207e5cccSFangrui Song {
1275*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f32,_x,)(pg, op1, op2, op3);
1276*207e5cccSFangrui Song }
1277*207e5cccSFangrui Song 
1278*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_n_f64_x(
1279*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1280*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1281*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[OP3:%.*]], i64 0
1282*207e5cccSFangrui Song // CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x double> [[DOTSPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1283*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[DOTSPLAT]])
1284*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1285*207e5cccSFangrui Song //
1286*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z18test_svmls_n_f64_xu10__SVBool_tu13__SVFloat64_tS0_d(
1287*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1288*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x i1> @llvm.aarch64.sve.convert.from.svbool.nxv2i1(<vscale x 16 x i1> [[PG:%.*]])
1289*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLATINSERT:%.*]] = insertelement <vscale x 2 x double> poison, double [[OP3:%.*]], i64 0
1290*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[DOTSPLAT:%.*]] = shufflevector <vscale x 2 x double> [[DOTSPLATINSERT]], <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
1291*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP1:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.u.nxv2f64(<vscale x 2 x i1> [[TMP0]], <vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[DOTSPLAT]])
1292*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
1293*207e5cccSFangrui Song //
1294*207e5cccSFangrui Song svfloat64_t test_svmls_n_f64_x(svbool_t pg, svfloat64_t op1, svfloat64_t op2, float64_t op3) MODE_ATTR
1295*207e5cccSFangrui Song {
1296*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls,_n_f64,_x,)(pg, op1, op2, op3);
1297*207e5cccSFangrui Song }
1298*207e5cccSFangrui Song 
1299*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_lane_f16(
1300*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1301*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.lane.nxv8f16(<vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]], i32 0)
1302*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP0]]
1303*207e5cccSFangrui Song //
1304*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z19test_svmls_lane_f16u13__SVFloat16_tS_S_(
1305*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1306*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.lane.nxv8f16(<vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]], i32 0)
1307*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP0]]
1308*207e5cccSFangrui Song //
1309*207e5cccSFangrui Song svfloat16_t test_svmls_lane_f16(svfloat16_t op1, svfloat16_t op2, svfloat16_t op3) MODE_ATTR
1310*207e5cccSFangrui Song {
1311*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls_lane,_f16,,)(op1, op2, op3, 0);
1312*207e5cccSFangrui Song }
1313*207e5cccSFangrui Song 
1314*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_lane_f16_1(
1315*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1316*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.lane.nxv8f16(<vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]], i32 7)
1317*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 8 x half> [[TMP0]]
1318*207e5cccSFangrui Song //
1319*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z21test_svmls_lane_f16_1u13__SVFloat16_tS_S_(
1320*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1321*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 8 x half> @llvm.aarch64.sve.fmls.lane.nxv8f16(<vscale x 8 x half> [[OP1:%.*]], <vscale x 8 x half> [[OP2:%.*]], <vscale x 8 x half> [[OP3:%.*]], i32 7)
1322*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 8 x half> [[TMP0]]
1323*207e5cccSFangrui Song //
1324*207e5cccSFangrui Song svfloat16_t test_svmls_lane_f16_1(svfloat16_t op1, svfloat16_t op2, svfloat16_t op3) MODE_ATTR
1325*207e5cccSFangrui Song {
1326*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls_lane,_f16,,)(op1, op2, op3, 7);
1327*207e5cccSFangrui Song }
1328*207e5cccSFangrui Song 
1329*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_lane_f32(
1330*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1331*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.lane.nxv4f32(<vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]], i32 0)
1332*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP0]]
1333*207e5cccSFangrui Song //
1334*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z19test_svmls_lane_f32u13__SVFloat32_tS_S_(
1335*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1336*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.lane.nxv4f32(<vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]], i32 0)
1337*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP0]]
1338*207e5cccSFangrui Song //
1339*207e5cccSFangrui Song svfloat32_t test_svmls_lane_f32(svfloat32_t op1, svfloat32_t op2, svfloat32_t op3) MODE_ATTR
1340*207e5cccSFangrui Song {
1341*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls_lane,_f32,,)(op1, op2, op3, 0);
1342*207e5cccSFangrui Song }
1343*207e5cccSFangrui Song 
1344*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_lane_f32_1(
1345*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1346*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.lane.nxv4f32(<vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]], i32 3)
1347*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 4 x float> [[TMP0]]
1348*207e5cccSFangrui Song //
1349*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z21test_svmls_lane_f32_1u13__SVFloat32_tS_S_(
1350*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1351*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 4 x float> @llvm.aarch64.sve.fmls.lane.nxv4f32(<vscale x 4 x float> [[OP1:%.*]], <vscale x 4 x float> [[OP2:%.*]], <vscale x 4 x float> [[OP3:%.*]], i32 3)
1352*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 4 x float> [[TMP0]]
1353*207e5cccSFangrui Song //
1354*207e5cccSFangrui Song svfloat32_t test_svmls_lane_f32_1(svfloat32_t op1, svfloat32_t op2, svfloat32_t op3) MODE_ATTR
1355*207e5cccSFangrui Song {
1356*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls_lane,_f32,,)(op1, op2, op3, 3);
1357*207e5cccSFangrui Song }
1358*207e5cccSFangrui Song 
1359*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_lane_f64(
1360*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1361*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.lane.nxv2f64(<vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]], i32 0)
1362*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP0]]
1363*207e5cccSFangrui Song //
1364*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z19test_svmls_lane_f64u13__SVFloat64_tS_S_(
1365*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1366*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.lane.nxv2f64(<vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]], i32 0)
1367*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP0]]
1368*207e5cccSFangrui Song //
1369*207e5cccSFangrui Song svfloat64_t test_svmls_lane_f64(svfloat64_t op1, svfloat64_t op2, svfloat64_t op3) MODE_ATTR
1370*207e5cccSFangrui Song {
1371*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls_lane,_f64,,)(op1, op2, op3, 0);
1372*207e5cccSFangrui Song }
1373*207e5cccSFangrui Song 
1374*207e5cccSFangrui Song // CHECK-LABEL: @test_svmls_lane_f64_1(
1375*207e5cccSFangrui Song // CHECK-NEXT:  entry:
1376*207e5cccSFangrui Song // CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.lane.nxv2f64(<vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]], i32 1)
1377*207e5cccSFangrui Song // CHECK-NEXT:    ret <vscale x 2 x double> [[TMP0]]
1378*207e5cccSFangrui Song //
1379*207e5cccSFangrui Song // CPP-CHECK-LABEL: @_Z21test_svmls_lane_f64_1u13__SVFloat64_tS_S_(
1380*207e5cccSFangrui Song // CPP-CHECK-NEXT:  entry:
1381*207e5cccSFangrui Song // CPP-CHECK-NEXT:    [[TMP0:%.*]] = tail call <vscale x 2 x double> @llvm.aarch64.sve.fmls.lane.nxv2f64(<vscale x 2 x double> [[OP1:%.*]], <vscale x 2 x double> [[OP2:%.*]], <vscale x 2 x double> [[OP3:%.*]], i32 1)
1382*207e5cccSFangrui Song // CPP-CHECK-NEXT:    ret <vscale x 2 x double> [[TMP0]]
1383*207e5cccSFangrui Song //
1384*207e5cccSFangrui Song svfloat64_t test_svmls_lane_f64_1(svfloat64_t op1, svfloat64_t op2, svfloat64_t op3) MODE_ATTR
1385*207e5cccSFangrui Song {
1386*207e5cccSFangrui Song   return SVE_ACLE_FUNC(svmls_lane,_f64,,)(op1, op2, op3, 1);
1387*207e5cccSFangrui Song }
1388