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