diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -2332,6 +2332,11 @@ bool isRVVType(unsigned Bitwidth, bool IsFloat) const; + bool isRVVPredicateType() const; + + bool isRVVTupleType() const; + bool isRVVTupleType(unsigned NumGroups) const; + /// Return the implicit lifetime for this type, which must not be dependent. Qualifiers::ObjCLifetime getObjCARCImplicitLifetime() const; @@ -7279,6 +7284,33 @@ return Ret; } +inline bool Type::isRVVPredicateType() const { + bool Ret = false; +#define RVV_PREDICATE_TYPE(Name, Id, SingletonId, NumEls) \ + Ret |= isSpecificBuiltinType(BuiltinType::Id); +#include "clang/Basic/RISCVVTypes.def" + return Ret; +} + +inline bool Type::isRVVTupleType() const { +#define RVV_VECTOR_TYPE(Name, Id, SingletonId, NumEls, ElBits, NF, IsSigned, \ + IsFP) \ + (isSpecificBuiltinType(BuiltinType::Id) && NF != 1) || + return +#include "clang/Basic/RISCVVTypes.def" + false; // end of boolean or operation. +} + +inline bool Type::isRVVTupleType(unsigned NumGroups) const { + bool Ret = false; +#define RVV_VECTOR_TYPE(Name, Id, SingletonId, NumEls, ElBits, NF, IsSigned, \ + IsFP) \ + if (NF == NumGroups) \ + Ret |= isSpecificBuiltinType(BuiltinType::Id); +#include "clang/Basic/RISCVVTypes.def" + return Ret; +} + inline bool Type::isTemplateTypeParmType() const { return isa(CanonicalType); } diff --git a/clang/lib/CodeGen/Targets/RISCV.cpp b/clang/lib/CodeGen/Targets/RISCV.cpp --- a/clang/lib/CodeGen/Targets/RISCV.cpp +++ b/clang/lib/CodeGen/Targets/RISCV.cpp @@ -8,6 +8,7 @@ #include "ABIInfoImpl.h" #include "TargetInfo.h" +#include "llvm/TargetParser/RISCVTargetParser.h" using namespace clang; using namespace clang::CodeGen; @@ -41,6 +42,8 @@ // non-virtual, but computeInfo is virtual, so we overload it. void computeInfo(CGFunctionInfo &FI) const override; + void classifyRVVArgumentType(CGFunctionInfo &FI) const; + ABIArgInfo classifyArgumentType(QualType Ty, bool IsFixed, int &ArgGPRsLeft, int &ArgFPRsLeft) const; ABIArgInfo classifyReturnType(QualType RetTy) const; @@ -92,9 +95,92 @@ int ArgNum = 0; for (auto &ArgInfo : FI.arguments()) { bool IsFixed = ArgNum < NumFixedArgs; + ArgNum++; + + if (ArgInfo.type.getTypePtr()->isRVVType()) + continue; + ArgInfo.info = classifyArgumentType(ArgInfo.type, IsFixed, ArgGPRsLeft, ArgFPRsLeft); - ArgNum++; + } + + classifyRVVArgumentType(FI); +} + +static std::vector +constructRVVArgInfo(CGFunctionInfo &FI) { + std::vector RVVArgInfos; + unsigned ArgIndex = -1; + bool FirstVBool = true; + for (auto &ArgInfo : FI.arguments()) { + ArgIndex++; + const QualType &Ty = ArgInfo.type; + if (!Ty->isRVVType()) + continue; + + // Skip first __rvv_bool*_t type which is assigned to v0, other mask + // type registers are treated as normal vector register with LMUL=1. + if (Ty->isRVVPredicateType()) { + if (!FirstVBool) + RVVArgInfos.push_back({ArgIndex, 1}); + + FirstVBool = false; + continue; + } + + // Calcluate the registers needed for each RVV type. + unsigned ElemSize = Ty->isRVVType(8, false) ? 8 + : Ty->isRVVType(16, false) ? 16 + : Ty->isRVVType(16, true) ? 16 + : Ty->isRVVType(32, false) ? 32 + : Ty->isRVVType(32, true) ? 32 + : 64; + unsigned ElemCount = Ty->isRVVType(1) ? 1 + : Ty->isRVVType(2) ? 2 + : Ty->isRVVType(4) ? 4 + : Ty->isRVVType(8) ? 8 + : Ty->isRVVType(16) ? 16 + : Ty->isRVVType(32) ? 32 + : 64; + unsigned RegsPerGroup = + std::max((ElemSize * ElemCount) / llvm::RISCV::RVVBitsPerBlock, 1U); + + unsigned NumGroups = 1; + if (Ty->isRVVTupleType()) + // Get the number of groups(NF) for each RVV type. + NumGroups = Ty->isRVVTupleType(2) ? 2 + : Ty->isRVVTupleType(3) ? 3 + : Ty->isRVVTupleType(4) ? 4 + : Ty->isRVVTupleType(5) ? 5 + : Ty->isRVVTupleType(6) ? 6 + : Ty->isRVVTupleType(7) ? 7 + : 8; + + RVVArgInfos.push_back({ArgIndex, RegsPerGroup * NumGroups}); + } + + return RVVArgInfos; +} + +void RISCVABIInfo::classifyRVVArgumentType(CGFunctionInfo &FI) const { + auto ArgInfos = FI.arguments(); + + // Set the first mask type register if found. + for (auto &ArgInfo : ArgInfos) { + const QualType &Ty = ArgInfo.type; + if (Ty->isRVVPredicateType()) { + ArgInfo.info = ABIArgInfo::getDirect(); + break; + } + } + + llvm::RISCV::RVVArgDispatcher Dispatcher{constructRVVArgInfo(FI)}; + for (const auto &Info : Dispatcher.getRVVArgInfos()) { + auto &ArgInfo = ArgInfos[Info.ArgIndex]; + if (Info.PassedByReg) + ArgInfo.info = ABIArgInfo::getDirect(); + else + ArgInfo.info = getNaturalAlignIndirect(ArgInfo.type, /*ByVal=*/false); } } diff --git a/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c b/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c new file mode 100644 --- /dev/null +++ b/clang/test/CodeGen/RISCV/riscv-vector-callingconv-llvm-ir.c @@ -0,0 +1,26 @@ +// REQUIRES: riscv-registered-target +// RUN: %clang_cc1 -triple riscv64 -target-feature +v \ +// RUN: -emit-llvm %s -o - | FileCheck -check-prefix=CHECK-LLVM %s + +#include + +// CHECK-LLVM: void @call1( %v0, %v1.coerce0, %v1.coerce1, %v2, %v3) +void call1(vint32m2_t v0, vint32m4x2_t v1, vint32m4_t v2, vint32m1_t v3) {} + +// CHECK-LLVM: void @call2( %v0.coerce0, %v0.coerce1, %v0.coerce2, %v1.coerce0, %v1.coerce1, %v2, ptr noundef %0) +void call2(vint32m1x3_t v0, vint32m4x2_t v1, vint32m4_t v2, vint32m2_t v3) {} + +// CHECK-LLVM: void @call3( %v0.coerce0, %v0.coerce1, ptr noundef %0, %v2.coerce0, %v2.coerce1) +void call3(vint32m4x2_t v0, vint32m1_t v1, vint32m4x2_t v2) {} + +// CHECK-LLVM: void @call4( %v0, ptr noundef %0, %v2) +void call4(vint32m8_t v0, vint32m1_t v1, vint32m8_t v2) {} + +// CHECK-LLVM: void @call5(ptr noundef %0, %v1, ptr noundef %1, %v3) +void call5(vint32m1_t v0, vint32m8_t v1, vint32m1_t v2, vint32m8_t v3) {} + +// CHECK-LLVM: void @call6( %v0, %v1, %v2, %v3) +void call6(vint8mf8_t v0, vint8m8_t v1, vint32m1_t v2, vint8mf8_t v3) {} + +// CHECK-LLVM: void @call7(ptr noundef %0, %v1, %v2, ptr noundef %1) +void call7(vint8mf8_t v0, vint8m8_t v1, vint32m8_t v2, vint8mf8_t v3) {} diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vfnmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_m(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_m(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_m(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_rm(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_rm_m(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vghsh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vghsh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vghsh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vghsh.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vghsh_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vghsh_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vghsh_vv_u32m8(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmacc.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i8m8(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i16m8(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i32m8(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i64m8(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u8m8(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u16m8(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u32m8(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u64m8(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i8m8_m(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i16m8_m(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i32m8_m(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i64m8_m(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u8m8_m(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u16m8_m(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u32m8_m(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u64m8_m(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vmadd.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i8m8(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i16m8(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i32m8(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i64m8(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u8m8(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u16m8(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u32m8(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u64m8(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i8m8_m(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i16m8_m(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i32m8_m(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i64m8_m(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u8m8_m(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u16m8_m(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u32m8_m(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u64m8_m(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsac.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i8m8(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i16m8(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i32m8(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i64m8(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u8m8(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u16m8(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u32m8(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u64m8(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i8m8_m(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i16m8_m(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i32m8_m(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i64m8_m(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u8m8_m(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u16m8_m(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u32m8_m(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u64m8_m(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vnmsub.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i8m8(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i16m8(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i32m8(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i64m8(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u8m8(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u16m8(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u32m8(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u64m8(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i8m8_m(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i16m8_m(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i32m8_m(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i64m8_m(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u8m8_m(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u16m8_m(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u32m8_m(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u64m8_m(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ch.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ch.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ch.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ch.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ch_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ch_vv_u32m8(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ch_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ch_vv_u64m8(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2cl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2cl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2cl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2cl.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2cl_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2cl_vv_u32m8(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2cl_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2cl_vv_u64m8(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ms.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ms.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ms.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vsha2ms.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ms_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ms_vv_u32m8(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ms_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ms_vv_u64m8(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/xsfvcp-xvv.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/xsfvcp-xvv.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/xsfvcp-xvv.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/xsfvcp-xvv.c @@ -95,12 +95,14 @@ // CHECK-RV32-LABEL: @test_sf_vc_vvv_se_u8m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv64i8.nxv64i8.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 1 +// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv64i8.nxv64i8.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) // CHECK-RV32-NEXT: ret void // // CHECK-RV64-LABEL: @test_sf_vc_vvv_se_u8m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv64i8.nxv64i8.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 1 +// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv64i8.nxv64i8.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) // CHECK-RV64-NEXT: ret void // void test_sf_vc_vvv_se_u8m8(vuint8m8_t vd, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { @@ -179,12 +181,14 @@ // CHECK-RV32-LABEL: @test_sf_vc_vvv_se_u16m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv32i16.nxv32i16.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 2 +// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv32i16.nxv32i16.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) // CHECK-RV32-NEXT: ret void // // CHECK-RV64-LABEL: @test_sf_vc_vvv_se_u16m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv32i16.nxv32i16.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 2 +// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv32i16.nxv32i16.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) // CHECK-RV64-NEXT: ret void // void test_sf_vc_vvv_se_u16m8(vuint16m8_t vd, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { @@ -249,12 +253,14 @@ // CHECK-RV32-LABEL: @test_sf_vc_vvv_se_u32m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv16i32.nxv16i32.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 4 +// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv16i32.nxv16i32.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) // CHECK-RV32-NEXT: ret void // // CHECK-RV64-LABEL: @test_sf_vc_vvv_se_u32m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv16i32.nxv16i32.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 4 +// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv16i32.nxv16i32.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) // CHECK-RV64-NEXT: ret void // void test_sf_vc_vvv_se_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { @@ -305,12 +311,14 @@ // CHECK-RV32-LABEL: @test_sf_vc_vvv_se_u64m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv8i64.nxv8i64.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 8 +// CHECK-RV32-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i32.nxv8i64.nxv8i64.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) // CHECK-RV32-NEXT: ret void // // CHECK-RV64-LABEL: @test_sf_vc_vvv_se_u64m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv8i64.nxv8i64.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 8 +// CHECK-RV64-NEXT: call void @llvm.riscv.sf.vc.vvv.se.i64.nxv8i64.nxv8i64.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) // CHECK-RV64-NEXT: ret void // void test_sf_vc_vvv_se_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { @@ -403,13 +411,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_se_u8m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv64i8.i32.nxv64i8.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 1 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv64i8.i32.nxv64i8.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_se_u8m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv64i8.i64.nxv64i8.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv64i8.i64.nxv64i8.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_sf_vc_v_vvv_se_u8m8(vuint8m8_t vd, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_se_u8m8(p27_26, vd, vs2, vs1, vl); @@ -487,13 +497,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_se_u16m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv32i16.i32.nxv32i16.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 2 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv32i16.i32.nxv32i16.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_se_u16m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv32i16.i64.nxv32i16.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv32i16.i64.nxv32i16.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_sf_vc_v_vvv_se_u16m8(vuint16m8_t vd, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_se_u16m8(p27_26, vd, vs2, vs1, vl); @@ -557,13 +569,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_se_u32m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv16i32.i32.nxv16i32.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 4 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv16i32.i32.nxv16i32.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_se_u32m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv16i32.i64.nxv16i32.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv16i32.i64.nxv16i32.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_sf_vc_v_vvv_se_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_se_u32m8(p27_26, vd, vs2, vs1, vl); @@ -613,13 +627,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_se_u64m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv8i64.i32.nxv8i64.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 8 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv8i64.i32.nxv8i64.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_se_u64m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv8i64.i64.nxv8i64.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.se.nxv8i64.i64.nxv8i64.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_sf_vc_v_vvv_se_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_se_u64m8(p27_26, vd, vs2, vs1, vl); @@ -711,13 +727,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_u8m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv64i8.i32.nxv64i8.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 1 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv64i8.i32.nxv64i8.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_u8m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv64i8.i64.nxv64i8.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv64i8.i64.nxv64i8.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_sf_vc_v_vvv_u8m8(vuint8m8_t vd, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_u8m8(p27_26, vd, vs2, vs1, vl); @@ -795,13 +813,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_u16m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv32i16.i32.nxv32i16.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 2 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv32i16.i32.nxv32i16.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_u16m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv32i16.i64.nxv32i16.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv32i16.i64.nxv32i16.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_sf_vc_v_vvv_u16m8(vuint16m8_t vd, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_u16m8(p27_26, vd, vs2, vs1, vl); @@ -865,13 +885,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_u32m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv16i32.i32.nxv16i32.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 4 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv16i32.i32.nxv16i32.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_u32m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv16i32.i64.nxv16i32.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv16i32.i64.nxv16i32.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_sf_vc_v_vvv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_u32m8(p27_26, vd, vs2, vs1, vl); @@ -921,13 +943,15 @@ // CHECK-RV32-LABEL: @test_sf_vc_v_vvv_u64m8( // CHECK-RV32-NEXT: entry: -// CHECK-RV32-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv8i64.i32.nxv8i64.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i32 [[VL:%.*]]) -// CHECK-RV32-NEXT: ret [[TMP0]] +// CHECK-RV32-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 8 +// CHECK-RV32-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv8i64.i32.nxv8i64.i32(i32 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i32 [[VL:%.*]]) +// CHECK-RV32-NEXT: ret [[TMP1]] // // CHECK-RV64-LABEL: @test_sf_vc_v_vvv_u64m8( // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv8i64.i64.nxv8i64.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 [[VL:%.*]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0:%.*]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.sf.vc.v.vvv.nxv8i64.i64.nxv8i64.i64(i64 3, [[VD:%.*]], [[VS2:%.*]], [[VS1]], i64 [[VL:%.*]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_sf_vc_v_vvv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_sf_vc_v_vvv_u64m8(p27_26, vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vfnmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_m(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_m(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_m(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vghsh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vghsh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vghsh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vghsh.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vghsh_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vghsh_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vghsh(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmacc.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vmadd.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsac.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vnmsub.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_m(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_m(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_m(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_m(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_m(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_m(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_m(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_m -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_m(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ch.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ch.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ch.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ch.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ch_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ch(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ch_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ch(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2cl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2cl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2cl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2cl.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2cl_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2cl(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2cl_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2cl(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ms.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ms.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ms.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/overloaded/vsha2ms.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u32m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ms_vv_u32m8(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ms(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u64m8 -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 3) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ms_vv_u64m8(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ms(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaadd.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_vv_i8m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_vv_i16m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_vv_i32m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_vv_i64m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_vv_i8m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_vv_i16m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_vv_i32m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_vv_i64m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_vv_i8m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_vv_i16m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_vv_i32m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_vv_i64m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_vv_i8m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_vv_i16m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_vv_i32m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_vv_i64m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaaddu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaaddu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaaddu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vaaddu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u8m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u16m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u32m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u64m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u8m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u16m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u32m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u64m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u8m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u16m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u32m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u64m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u8m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u16m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u32m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_vv_u64m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadc.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadc_vvm_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, vbool1_t carryin, size_t vl) { return __riscv_vadc_vvm_i8m8_tu(maskedoff, op1, op2, carryin, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadc_vvm_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, vbool2_t carryin, size_t vl) { return __riscv_vadc_vvm_i16m8_tu(maskedoff, op1, op2, carryin, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadc_vvm_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, vbool4_t carryin, size_t vl) { return __riscv_vadc_vvm_i32m8_tu(maskedoff, op1, op2, carryin, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadc_vvm_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, vbool8_t carryin, size_t vl) { return __riscv_vadc_vvm_i64m8_tu(maskedoff, op1, op2, carryin, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadc_vvm_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, vbool1_t carryin, size_t vl) { return __riscv_vadc_vvm_u8m8_tu(maskedoff, op1, op2, carryin, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadc_vvm_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, vbool2_t carryin, size_t vl) { return __riscv_vadc_vvm_u16m8_tu(maskedoff, op1, op2, carryin, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadc_vvm_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, vbool4_t carryin, size_t vl) { return __riscv_vadc_vvm_u32m8_tu(maskedoff, op1, op2, carryin, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadc_vvm_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, vbool8_t carryin, size_t vl) { return __riscv_vadc_vvm_u64m8_tu(maskedoff, op1, op2, carryin, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vadd.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vand.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vand.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vand.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vand.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vandn.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vandn.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vandn.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vandn.c @@ -135,10 +135,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_vv_u8m8_tu(maskedoff, vs2, vs1, vl); @@ -255,10 +256,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_vv_u16m8_tu(maskedoff, vs2, vs1, vl); @@ -355,10 +357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_vv_u32m8_tu(maskedoff, vs2, vs1, vl); @@ -435,10 +438,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_vv_u64m8_tu(maskedoff, vs2, vs1, vl); @@ -575,10 +579,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_vv_u8m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -695,10 +700,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_vv_u16m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -795,10 +801,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_vv_u32m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -875,10 +882,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_vv_u64m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -1015,10 +1023,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_vv_u8m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1135,10 +1144,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_vv_u16m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1235,10 +1245,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_vv_u32m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1315,10 +1326,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_vv_u64m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1455,10 +1467,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_vv_u8m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1575,10 +1588,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_vv_u16m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1675,10 +1689,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_vv_u32m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1755,10 +1770,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_vv_u64m8_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasub.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_vv_i8m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_vv_i16m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_vv_i32m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_vv_i64m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_vv_i8m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_vv_i16m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_vv_i32m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_vv_i64m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_vv_i8m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_vv_i16m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_vv_i32m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_vv_i64m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_vv_i8m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_vv_i16m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_vv_i32m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_vv_i64m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasubu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasubu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasubu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vasubu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_vv_u8m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_vv_u16m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_vv_u32m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_vv_u64m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_vv_u8m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_vv_u16m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_vv_u32m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_vv_u64m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_vv_u8m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_vv_u16m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_vv_u32m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_vv_u64m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_vv_u8m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_vv_u16m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_vv_u32m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_vv_u64m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmul.c @@ -74,10 +74,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_vv_u64m8_tu(maskedoff, vs2, vs1, vl); @@ -154,10 +155,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_vv_u64m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -234,10 +236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_vv_u64m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -314,10 +317,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_vv_u64m8_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmulh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmulh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmulh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vclmulh.c @@ -74,10 +74,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_vv_u64m8_tu(maskedoff, vs2, vs1, vl); @@ -154,10 +155,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_vv_u64m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -234,10 +236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_vv_u64m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -314,10 +317,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_vv_u64m8_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdiv.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdiv.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdiv.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdiv.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdivu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdivu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdivu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vdivu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_vv_f16m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_vv_f32m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_vv_f64m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfdiv.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfdiv.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfdiv.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfdiv.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f16m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f32m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_vv_f64m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmax.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmax.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmax.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmax.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmin.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmin.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmin.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmin.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfmul.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_vv_f16m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_vv_f32m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_vv_f64m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfnmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_rm_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_rm_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_rm_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f16m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f32m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_vv_f64m8_rm_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnj.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnj.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnj.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnj.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjn.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjn.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjn.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjn.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjx.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjx.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjx.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsgnjx.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_vv_f16m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_vv_f32m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_vv_f64m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwadd.c @@ -188,10 +188,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_tu(maskedoff, op1, op2, vl); @@ -348,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_tu(maskedoff, op1, op2, vl); @@ -548,10 +550,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +711,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -908,10 +912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1068,10 +1073,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1268,10 +1274,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1428,10 +1435,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1628,10 +1636,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1797,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1988,10 +1998,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2148,10 +2159,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2348,10 +2360,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2508,10 +2521,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2708,10 +2722,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f32m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2868,10 +2883,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_f64m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vfwsub.c @@ -188,10 +188,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_tu(maskedoff, op1, op2, vl); @@ -348,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_tu(maskedoff, op1, op2, vl); @@ -548,10 +550,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +711,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -908,10 +912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1068,10 +1073,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1268,10 +1274,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1428,10 +1435,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1628,10 +1636,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1797,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_rm_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1988,10 +1998,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2148,10 +2159,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_rm_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2348,10 +2360,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2508,10 +2521,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_rm_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2708,10 +2722,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f32m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2868,10 +2883,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_f64m8_rm_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vghsh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vghsh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vghsh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vghsh.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vghsh_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vghsh_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vghsh_vv_u32m8_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmacc.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i8m8_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i16m8_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i32m8_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i64m8_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u8m8_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u16m8_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u32m8_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u64m8_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i8m8_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i16m8_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i32m8_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i64m8_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u8m8_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u16m8_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u32m8_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u64m8_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i8m8_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i16m8_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i32m8_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_i64m8_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u8m8_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u16m8_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u32m8_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_vv_u64m8_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmadd.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i8m8_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i16m8_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i32m8_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i64m8_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u8m8_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u16m8_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u32m8_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u64m8_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i8m8_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i16m8_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i32m8_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i64m8_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u8m8_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u16m8_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u32m8_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u64m8_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i8m8_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i16m8_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i32m8_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_i64m8_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u8m8_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u16m8_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u32m8_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_vv_u64m8_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmax.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmax.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmax.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmax.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmaxu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmaxu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmaxu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmaxu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmerge.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmerge.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmerge.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmerge.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmerge_vvm_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, vbool1_t mask, size_t vl) { return __riscv_vmerge_vvm_i8m8_tu(maskedoff, op1, op2, mask, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmerge_vvm_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, vbool2_t mask, size_t vl) { return __riscv_vmerge_vvm_i16m8_tu(maskedoff, op1, op2, mask, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmerge_vvm_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, vbool4_t mask, size_t vl) { return __riscv_vmerge_vvm_i32m8_tu(maskedoff, op1, op2, mask, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmerge_vvm_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, vbool8_t mask, size_t vl) { return __riscv_vmerge_vvm_i64m8_tu(maskedoff, op1, op2, mask, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmerge_vvm_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, vbool1_t mask, size_t vl) { return __riscv_vmerge_vvm_u8m8_tu(maskedoff, op1, op2, mask, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmerge_vvm_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, vbool2_t mask, size_t vl) { return __riscv_vmerge_vvm_u16m8_tu(maskedoff, op1, op2, mask, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmerge_vvm_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, vbool4_t mask, size_t vl) { return __riscv_vmerge_vvm_u32m8_tu(maskedoff, op1, op2, mask, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmerge_vvm_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, vbool8_t mask, size_t vl) { return __riscv_vmerge_vvm_u64m8_tu(maskedoff, op1, op2, mask, vl); @@ -938,10 +946,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vmerge_vvm_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, vbool2_t mask, size_t vl) { return __riscv_vmerge_vvm_f16m8_tu(maskedoff, op1, op2, mask, vl); @@ -988,10 +997,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vmerge_vvm_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, vbool4_t mask, size_t vl) { return __riscv_vmerge_vvm_f32m8_tu(maskedoff, op1, op2, mask, vl); @@ -1028,10 +1038,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vmerge_vvm_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, vbool8_t mask, size_t vl) { return __riscv_vmerge_vvm_f64m8_tu(maskedoff, op1, op2, mask, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfeq.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfeq.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfeq.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfeq.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfeq_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfeq.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfeq.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfeq_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfeq_vv_f16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfeq_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfeq.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfeq.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfeq_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfeq_vv_f32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfeq_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfeq.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfeq.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfeq_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfeq_vv_f64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfge.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfge.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfge.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfge.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfge_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfge.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfge.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfge_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfge_vv_f16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfge_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfge.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfge.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfge_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfge_vv_f32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfge_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfge.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfge.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfge_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfge_vv_f64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfgt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfgt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfgt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfgt.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfgt_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfgt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfgt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfgt_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfgt_vv_f16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfgt_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfgt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfgt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfgt_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfgt_vv_f32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfgt_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfgt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfgt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfgt_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfgt_vv_f64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfle.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfle.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfle.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfle.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfle_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfle.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfle.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfle_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfle_vv_f16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfle_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfle.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfle.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfle_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfle_vv_f32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfle_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfle.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfle.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfle_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfle_vv_f64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmflt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmflt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmflt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmflt.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmflt_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmflt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmflt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmflt_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmflt_vv_f16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmflt_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmflt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmflt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmflt_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmflt_vv_f32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmflt_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmflt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmflt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmflt_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmflt_vv_f64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfne.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfne.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfne.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmfne.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfne_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfne.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfne.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfne_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfne_vv_f16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfne_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfne.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfne.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfne_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfne_vv_f32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfne_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfne.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfne.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfne_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfne_vv_f64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmin.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmin.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmin.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmin.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vminu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vminu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vminu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vminu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmseq.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmseq.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmseq.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmseq.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmseq_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmseq_vv_i8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmseq_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmseq_vv_i16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmseq_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmseq_vv_i32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmseq_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmseq_vv_i64m8_b8_mu(mask, maskedoff, op1, op2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmseq_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmseq_vv_u8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmseq_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmseq_vv_u16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmseq_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmseq_vv_u32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmseq_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmseq_vv_u64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsge.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsge.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsge.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsge.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsge_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsge_vv_i8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsge_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsge_vv_i16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsge_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsge_vv_i32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsge_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsge_vv_i64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgeu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgeu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgeu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgeu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsgeu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsgeu_vv_u8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsgeu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsgeu_vv_u16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsgeu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsgeu_vv_u32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsgeu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsgeu_vv_u64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgt.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsgt_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsgt_vv_i8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsgt_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsgt_vv_i16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsgt_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsgt_vv_i32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsgt_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsgt_vv_i64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgtu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgtu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgtu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsgtu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsgtu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsgtu_vv_u8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsgtu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsgtu_vv_u16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsgtu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsgtu_vv_u32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsgtu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsgtu_vv_u64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsle.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsle.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsle.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsle.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsle_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsle_vv_i8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsle_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsle_vv_i16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsle_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsle_vv_i32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsle_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsle_vv_i64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsleu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsleu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsleu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsleu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsleu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsleu_vv_u8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsleu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsleu_vv_u16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsleu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsleu_vv_u32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsleu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsleu_vv_u64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmslt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmslt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmslt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmslt.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmslt_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmslt_vv_i8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmslt_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmslt_vv_i16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmslt_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmslt_vv_i32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmslt_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmslt_vv_i64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsltu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsltu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsltu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsltu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsltu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsltu_vv_u8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsltu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsltu_vv_u16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsltu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsltu_vv_u32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsltu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsltu_vv_u64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsne.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsne.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsne.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmsne.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsne_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsne_vv_i8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsne_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsne_vv_i16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsne_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsne_vv_i32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsne_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsne_vv_i64m8_b8_mu(mask, maskedoff, op1, op2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsne_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsne_vv_u8m8_b1_mu(mask, maskedoff, op1, op2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsne_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsne_vv_u16m8_b2_mu(mask, maskedoff, op1, op2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsne_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsne_vv_u32m8_b4_mu(mask, maskedoff, op1, op2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsne_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsne_vv_u64m8_b8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmul.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulh.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhsu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhsu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhsu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhsu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vmulhu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsac.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i8m8_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i16m8_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i32m8_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i64m8_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u8m8_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u16m8_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u32m8_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u64m8_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i8m8_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i16m8_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i32m8_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i64m8_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u8m8_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u16m8_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u32m8_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u64m8_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i8m8_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i16m8_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i32m8_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_i64m8_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u8m8_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u16m8_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u32m8_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_vv_u64m8_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vnmsub.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i8m8_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i16m8_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i32m8_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i64m8_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u8m8_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u16m8_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u32m8_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u64m8_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i8m8_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i16m8_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i32m8_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i64m8_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u8m8_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u16m8_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u32m8_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u64m8_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u8m8_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u16m8_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u32m8_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u64m8_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i8m8_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i16m8_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i32m8_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_i64m8_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u8m8_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u16m8_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u32m8_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_vv_u64m8_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vor.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vor.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vor.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vor.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrem.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrem.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrem.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrem.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vremu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vremu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vremu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vremu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgather.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgather.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgather.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgather.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_f16m8_tu(maskedoff, op1, index, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_f32m8_tu(maskedoff, op1, index, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_f64m8_tu(maskedoff, op1, index, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_i8m8_tu(maskedoff, op1, index, vl); @@ -548,10 +552,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_i16m8_tu(maskedoff, op1, index, vl); @@ -648,10 +653,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_i32m8_tu(maskedoff, op1, index, vl); @@ -728,10 +734,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_i64m8_tu(maskedoff, op1, index, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_u8m8_tu(maskedoff, op1, index, vl); @@ -988,10 +996,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_u16m8_tu(maskedoff, op1, index, vl); @@ -1088,10 +1097,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_u32m8_tu(maskedoff, op1, index, vl); @@ -1168,10 +1178,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_u64m8_tu(maskedoff, op1, index, vl); @@ -1288,10 +1299,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_f16m8_tum(mask, maskedoff, op1, index, vl); @@ -1388,10 +1400,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_f32m8_tum(mask, maskedoff, op1, index, vl); @@ -1468,10 +1481,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_f64m8_tum(mask, maskedoff, op1, index, vl); @@ -1608,10 +1622,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_i8m8_tum(mask, maskedoff, op1, index, vl); @@ -1728,10 +1743,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_i16m8_tum(mask, maskedoff, op1, index, vl); @@ -1828,10 +1844,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_i32m8_tum(mask, maskedoff, op1, index, vl); @@ -1908,10 +1925,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_i64m8_tum(mask, maskedoff, op1, index, vl); @@ -2048,10 +2066,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_u8m8_tum(mask, maskedoff, op1, index, vl); @@ -2168,10 +2187,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_u16m8_tum(mask, maskedoff, op1, index, vl); @@ -2268,10 +2288,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_u32m8_tum(mask, maskedoff, op1, index, vl); @@ -2348,10 +2369,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_u64m8_tum(mask, maskedoff, op1, index, vl); @@ -2468,10 +2490,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_f16m8_tumu(mask, maskedoff, op1, index, vl); @@ -2568,10 +2591,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_f32m8_tumu(mask, maskedoff, op1, index, vl); @@ -2648,10 +2672,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_f64m8_tumu(mask, maskedoff, op1, index, vl); @@ -2788,10 +2813,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_i8m8_tumu(mask, maskedoff, op1, index, vl); @@ -2908,10 +2934,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_i16m8_tumu(mask, maskedoff, op1, index, vl); @@ -3008,10 +3035,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_i32m8_tumu(mask, maskedoff, op1, index, vl); @@ -3088,10 +3116,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_i64m8_tumu(mask, maskedoff, op1, index, vl); @@ -3228,10 +3257,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_u8m8_tumu(mask, maskedoff, op1, index, vl); @@ -3348,10 +3378,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_u16m8_tumu(mask, maskedoff, op1, index, vl); @@ -3448,10 +3479,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_u32m8_tumu(mask, maskedoff, op1, index, vl); @@ -3528,10 +3560,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_u64m8_tumu(mask, maskedoff, op1, index, vl); @@ -3648,10 +3681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_f16m8_mu(mask, maskedoff, op1, index, vl); @@ -3748,10 +3782,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_f32m8_mu(mask, maskedoff, op1, index, vl); @@ -3828,10 +3863,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_f64m8_mu(mask, maskedoff, op1, index, vl); @@ -3968,10 +4004,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_i8m8_mu(mask, maskedoff, op1, index, vl); @@ -4088,10 +4125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_i16m8_mu(mask, maskedoff, op1, index, vl); @@ -4188,10 +4226,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_i32m8_mu(mask, maskedoff, op1, index, vl); @@ -4268,10 +4307,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_i64m8_mu(mask, maskedoff, op1, index, vl); @@ -4408,10 +4448,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_vv_u8m8_mu(mask, maskedoff, op1, index, vl); @@ -4528,10 +4569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_vv_u16m8_mu(mask, maskedoff, op1, index, vl); @@ -4628,10 +4670,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_vv_u32m8_mu(mask, maskedoff, op1, index, vl); @@ -4708,10 +4751,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_vv_u64m8_mu(mask, maskedoff, op1, index, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgatherei16.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgatherei16.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgatherei16.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrgatherei16.c @@ -58,10 +58,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f16m8_tu(maskedoff, op1, op2, vl); @@ -108,10 +109,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f32m8_tu(maskedoff, op1, op2, vl); @@ -148,10 +150,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f64m8_tu(maskedoff, op1, op2, vl); @@ -268,10 +271,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -318,10 +322,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -358,10 +363,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -478,10 +484,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -528,10 +535,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -568,10 +576,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -628,10 +637,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f16m8_tum(mask, maskedoff, op1, op2, vl); @@ -678,10 +688,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f32m8_tum(mask, maskedoff, op1, op2, vl); @@ -718,10 +729,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f64m8_tum(mask, maskedoff, op1, op2, vl); @@ -838,10 +850,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -888,10 +901,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -928,10 +942,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1048,10 +1063,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1098,10 +1114,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1138,10 +1155,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1198,10 +1216,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1248,10 +1267,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1288,10 +1308,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1408,10 +1429,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1458,10 +1480,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1498,10 +1521,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1618,10 +1642,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1668,10 +1693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1708,10 +1734,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1768,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1818,10 +1846,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1858,10 +1887,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_f64m8_mu(mask, maskedoff, op1, op2, vl); @@ -1978,10 +2008,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2028,10 +2059,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -2068,10 +2100,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -2188,10 +2221,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2238,10 +2272,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -2278,10 +2313,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrol.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrol.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrol.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vrol.c @@ -135,10 +135,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_vv_u8m8_tu(maskedoff, vs2, vs1, vl); @@ -255,10 +256,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_vv_u16m8_tu(maskedoff, vs2, vs1, vl); @@ -355,10 +357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_vv_u32m8_tu(maskedoff, vs2, vs1, vl); @@ -435,10 +438,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_vv_u64m8_tu(maskedoff, vs2, vs1, vl); @@ -575,10 +579,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_vv_u8m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -695,10 +700,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_vv_u16m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -795,10 +801,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_vv_u32m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -875,10 +882,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_vv_u64m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -1015,10 +1023,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_vv_u8m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1135,10 +1144,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_vv_u16m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1235,10 +1245,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_vv_u32m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1315,10 +1326,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_vv_u64m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1455,10 +1467,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_vv_u8m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1575,10 +1588,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_vv_u16m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1675,10 +1689,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_vv_u32m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1755,10 +1770,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_vv_u64m8_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vror.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vror.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vror.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vror.c @@ -135,10 +135,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_vv_u8m8_tu(maskedoff, vs2, vs1, vl); @@ -255,10 +256,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_vv_u16m8_tu(maskedoff, vs2, vs1, vl); @@ -355,10 +357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_vv_u32m8_tu(maskedoff, vs2, vs1, vl); @@ -435,10 +438,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_vv_u64m8_tu(maskedoff, vs2, vs1, vl); @@ -575,10 +579,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_vv_u8m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -695,10 +700,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_vv_u16m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -795,10 +801,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_vv_u32m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -875,10 +882,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_vv_u64m8_tum(mask, maskedoff, vs2, vs1, vl); @@ -1015,10 +1023,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_vv_u8m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1135,10 +1144,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_vv_u16m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1235,10 +1245,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_vv_u32m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1315,10 +1326,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_vv_u64m8_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1455,10 +1467,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_vv_u8m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1575,10 +1588,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_vv_u16m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1675,10 +1689,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_vv_u32m8_mu(mask, maskedoff, vs2, vs1, vl); @@ -1755,10 +1770,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_vv_u64m8_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsadd.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsaddu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsaddu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsaddu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsaddu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsbc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsbc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsbc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsbc.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsbc_vvm_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, vbool1_t borrowin, size_t vl) { return __riscv_vsbc_vvm_i8m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsbc_vvm_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, vbool2_t borrowin, size_t vl) { return __riscv_vsbc_vvm_i16m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsbc_vvm_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, vbool4_t borrowin, size_t vl) { return __riscv_vsbc_vvm_i32m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsbc_vvm_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, vbool8_t borrowin, size_t vl) { return __riscv_vsbc_vvm_i64m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsbc_vvm_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, vbool1_t borrowin, size_t vl) { return __riscv_vsbc_vvm_u8m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsbc_vvm_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, vbool2_t borrowin, size_t vl) { return __riscv_vsbc_vvm_u16m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsbc_vvm_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, vbool4_t borrowin, size_t vl) { return __riscv_vsbc_vvm_u32m8_tu(maskedoff, op1, op2, borrowin, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsbc_vvm_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, vbool8_t borrowin, size_t vl) { return __riscv_vsbc_vvm_u64m8_tu(maskedoff, op1, op2, borrowin, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ch.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ch.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ch.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ch.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ch_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ch_vv_u32m8_tu(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ch_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ch_vv_u64m8_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2cl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2cl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2cl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2cl.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2cl_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2cl_vv_u32m8_tu(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2cl_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2cl_vv_u64m8_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ms.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ms.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ms.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsha2ms.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ms_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ms_vv_u32m8_tu(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ms_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ms_vv_u64m8_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsll.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsll.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsll.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsll.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_i8m8_tu(maskedoff, op1, shift, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_i16m8_tu(maskedoff, op1, shift, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_i32m8_tu(maskedoff, op1, shift, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_i64m8_tu(maskedoff, op1, shift, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_u8m8_tu(maskedoff, op1, shift, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_u16m8_tu(maskedoff, op1, shift, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_u32m8_tu(maskedoff, op1, shift, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_u64m8_tu(maskedoff, op1, shift, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_i8m8_tum(mask, maskedoff, op1, shift, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_i16m8_tum(mask, maskedoff, op1, shift, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_i32m8_tum(mask, maskedoff, op1, shift, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_i64m8_tum(mask, maskedoff, op1, shift, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_u8m8_tum(mask, maskedoff, op1, shift, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_u16m8_tum(mask, maskedoff, op1, shift, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_u32m8_tum(mask, maskedoff, op1, shift, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_u64m8_tum(mask, maskedoff, op1, shift, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_i8m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_i16m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_i32m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_i64m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_u8m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_u16m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_u32m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_u64m8_tumu(mask, maskedoff, op1, shift, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_i8m8_mu(mask, maskedoff, op1, shift, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_i16m8_mu(mask, maskedoff, op1, shift, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_i32m8_mu(mask, maskedoff, op1, shift, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_i64m8_mu(mask, maskedoff, op1, shift, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_vv_u8m8_mu(mask, maskedoff, op1, shift, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_vv_u16m8_mu(mask, maskedoff, op1, shift, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_vv_u32m8_mu(mask, maskedoff, op1, shift, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_vv_u64m8_mu(mask, maskedoff, op1, shift, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsm3me.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsm3me.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsm3me.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsm3me.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsm3me_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsm3me.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsm3me.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsm3me_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsm3me_vv_u32m8_tu(maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsmul.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_vv_i8m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_vv_i16m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_vv_i32m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_vv_i64m8_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_vv_i8m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_vv_i16m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_vv_i32m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_vv_i64m8_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_vv_i8m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_vv_i16m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_vv_i32m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_vv_i64m8_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_vv_i8m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_vv_i16m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_vv_i32m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_vv_i64m8_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsra.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsra.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsra.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsra.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_vv_i8m8_tu(maskedoff, op1, shift, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_vv_i16m8_tu(maskedoff, op1, shift, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_vv_i32m8_tu(maskedoff, op1, shift, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_vv_i64m8_tu(maskedoff, op1, shift, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_vv_i8m8_tum(mask, maskedoff, op1, shift, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_vv_i16m8_tum(mask, maskedoff, op1, shift, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_vv_i32m8_tum(mask, maskedoff, op1, shift, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_vv_i64m8_tum(mask, maskedoff, op1, shift, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_vv_i8m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_vv_i16m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_vv_i32m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_vv_i64m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_vv_i8m8_mu(mask, maskedoff, op1, shift, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_vv_i16m8_mu(mask, maskedoff, op1, shift, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_vv_i32m8_mu(mask, maskedoff, op1, shift, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_vv_i64m8_mu(mask, maskedoff, op1, shift, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsrl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsrl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsrl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsrl.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_vv_u8m8_tu(maskedoff, op1, shift, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_vv_u16m8_tu(maskedoff, op1, shift, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_vv_u32m8_tu(maskedoff, op1, shift, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_vv_u64m8_tu(maskedoff, op1, shift, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_vv_u8m8_tum(mask, maskedoff, op1, shift, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_vv_u16m8_tum(mask, maskedoff, op1, shift, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_vv_u32m8_tum(mask, maskedoff, op1, shift, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_vv_u64m8_tum(mask, maskedoff, op1, shift, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_vv_u8m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_vv_u16m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_vv_u32m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_vv_u64m8_tumu(mask, maskedoff, op1, shift, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_vv_u8m8_mu(mask, maskedoff, op1, shift, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_vv_u16m8_mu(mask, maskedoff, op1, shift, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_vv_u32m8_mu(mask, maskedoff, op1, shift, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_vv_u64m8_mu(mask, maskedoff, op1, shift, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssra.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssra.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssra.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssra.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_vv_i8m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_vv_i16m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_vv_i32m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_vv_i64m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_vv_i8m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_vv_i16m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_vv_i32m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_vv_i64m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_vv_i8m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_vv_i16m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_vv_i32m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_vv_i64m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_vv_i8m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_vv_i16m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_vv_i32m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_vv_i64m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssrl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssrl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssrl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssrl.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_vv_u8m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_vv_u16m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_vv_u32m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_vv_u64m8_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_vv_u8m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_vv_u16m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_vv_u32m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_vv_u64m8_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_vv_u8m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_vv_u16m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_vv_u32m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_vv_u64m8_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_vv_u8m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_vv_u16m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_vv_u32m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_vv_u64m8_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssub.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssubu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssubu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssubu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vssubu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vsub.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwadd.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_i16m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_i32m8_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_i64m8_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwaddu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwaddu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwaddu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwaddu.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u16m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u32m8_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u64m8_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsub.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_i16m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_i32m8_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_i64m8_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_i64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsubu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsubu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsubu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vwsubu.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u16m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u32m8_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u64m8_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vxor.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vxor.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vxor.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/non-overloaded/vxor.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_vv_i8m8_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_vv_i16m8_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_vv_i32m8_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_vv_i64m8_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_vv_u8m8_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_vv_u16m8_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_vv_u32m8_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_vv_u64m8_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_vv_i8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_vv_i16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_vv_i32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_vv_i64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_vv_u8m8_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_vv_u16m8_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_vv_u32m8_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_vv_u64m8_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_vv_i8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_vv_i16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_vv_i32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_vv_i64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_vv_u8m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_vv_u16m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_vv_u32m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_vv_u64m8_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_vv_i8m8_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_vv_i16m8_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_vv_i32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_vv_i64m8_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_vv_u8m8_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_vv_u16m8_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_vv_u32m8_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_vv_u64m8_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaadd.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vaadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vaadd_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vaadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vaadd_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vaadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vaadd_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vaadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vaadd_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaaddu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaaddu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaaddu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vaaddu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vaaddu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vaaddu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vaaddu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vaaddu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vaaddu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vaaddu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vaaddu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vaaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vaaddu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vaaddu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadc.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadc_vvm_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, vbool1_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadc_vvm_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, vbool2_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadc_vvm_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, vbool4_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadc_vvm_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, vbool8_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadc_vvm_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, vbool1_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadc_vvm_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, vbool2_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadc_vvm_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, vbool4_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadc_vvm_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[CARRYIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[CARRYIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadc_vvm_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, vbool8_t carryin, size_t vl) { return __riscv_vadc_tu(maskedoff, op1, op2, carryin, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vadd.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vadd_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vadd_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vadd_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vadd_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vadd_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vadd_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vand.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vand.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vand.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vand.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vand_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vand_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vand_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vand_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vand_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vand_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vand_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vand_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vand.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vand_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vand_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vandn.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vandn.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vandn.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vandn.c @@ -135,10 +135,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_tu(maskedoff, vs2, vs1, vl); @@ -255,10 +256,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_tu(maskedoff, vs2, vs1, vl); @@ -355,10 +357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_tu(maskedoff, vs2, vs1, vl); @@ -435,10 +438,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_tu(maskedoff, vs2, vs1, vl); @@ -575,10 +579,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_tum(mask, maskedoff, vs2, vs1, vl); @@ -695,10 +700,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_tum(mask, maskedoff, vs2, vs1, vl); @@ -795,10 +801,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_tum(mask, maskedoff, vs2, vs1, vl); @@ -875,10 +882,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_tum(mask, maskedoff, vs2, vs1, vl); @@ -1015,10 +1023,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1135,10 +1144,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1235,10 +1245,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1315,10 +1326,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1455,10 +1467,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vandn_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vandn_mu(mask, maskedoff, vs2, vs1, vl); @@ -1575,10 +1588,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vandn_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vandn_mu(mask, maskedoff, vs2, vs1, vl); @@ -1675,10 +1689,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vandn_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vandn_mu(mask, maskedoff, vs2, vs1, vl); @@ -1755,10 +1770,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vandn_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vandn.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vandn_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vandn_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasub.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vasub_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vasub_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vasub_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vasub_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vasub_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vasub_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vasub_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vasub_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasubu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasubu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasubu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vasubu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vasubu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vasubu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vasubu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vasubu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vasubu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vasubu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vasubu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vasubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vasubu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vasubu_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmul.c @@ -74,10 +74,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_tu(maskedoff, vs2, vs1, vl); @@ -154,10 +155,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_tum(mask, maskedoff, vs2, vs1, vl); @@ -234,10 +236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_tumu(mask, maskedoff, vs2, vs1, vl); @@ -314,10 +317,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmul_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmul_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmul_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmulh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmulh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmulh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vclmulh.c @@ -74,10 +74,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_tu(maskedoff, vs2, vs1, vl); @@ -154,10 +155,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_tum(mask, maskedoff, vs2, vs1, vl); @@ -234,10 +236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_tumu(mask, maskedoff, vs2, vs1, vl); @@ -314,10 +317,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vclmulh_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vclmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vclmulh_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vclmulh_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdiv.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdiv.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdiv.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdiv.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vdiv_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vdiv_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vdiv_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vdiv_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vdiv_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vdiv_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdiv_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdiv.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vdiv_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vdiv_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdivu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdivu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdivu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vdivu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vdivu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vdivu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vdivu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vdivu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vdivu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vdivu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vdivu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vdivu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vdivu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vdivu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfadd_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfadd_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfadd_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfadd_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfadd_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfadd.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfadd_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfadd_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfdiv.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfdiv.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfdiv.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfdiv.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfdiv_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfdiv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfdiv_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfdiv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfdiv_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfdiv.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfdiv_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfdiv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmacc_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmacc_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmacc_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmacc_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmacc_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmacc_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmacc_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmadd_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmadd_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmadd_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmadd_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmadd_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmadd_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmadd_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmax.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmax.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmax.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmax.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmax_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmax_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmax_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmax_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmax_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmax.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmax_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmax_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmin.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmin.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmin.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmin.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmin_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmin_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmin_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmin_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmin_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmin.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmin_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmin_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsac_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsac_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsac_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsac_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsac_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsac_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsac_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmsub_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfmsub_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmsub_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfmsub_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmsub_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmsub_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfmsub_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfmul.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfmul_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfmul_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfmul_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfmul_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfmul_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfmul.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfmul_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfmul_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmacc.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmacc_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmacc_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmacc_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmacc_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmacc_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmacc.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmacc_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmacc_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmadd.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmadd_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmadd_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmadd_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmadd_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmadd_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmadd.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmadd_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmadd_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsac.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsac_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsac_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsac_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsac_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsac_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsac.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsac_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsac_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfnmsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_tu(vd, vs1, vs2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_tu(vd, vs1, vs2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_tu(vd, vs1, vs2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_tum(mask, vd, vs1, vs2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_tum(mask, vd, vs1, vs2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_tum(mask, vd, vs1, vs2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_mu(mask, vd, vs1, vs2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_mu(mask, vd, vs1, vs2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_mu(mask, vd, vs1, vs2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_tu(vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_tu(vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_tu(vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_tu(vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_tum(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_tumu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv32f16.nxv32f16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfnmsub_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t vd, vfloat16m8_t vs1, vfloat16m8_t vs2, size_t vl) { return __riscv_vfnmsub_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv16f32.nxv16f32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfnmsub_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t vd, vfloat32m8_t vs1, vfloat32m8_t vs2, size_t vl) { return __riscv_vfnmsub_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfnmsub_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfnmsub.mask.nxv8f64.nxv8f64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfnmsub_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t vd, vfloat64m8_t vs1, vfloat64m8_t vs2, size_t vl) { return __riscv_vfnmsub_mu(mask, vd, vs1, vs2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnj.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnj.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnj.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnj.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnj_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnj_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnj_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnj_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnj_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnj.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnj_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnj_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjn.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjn.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjn.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjn.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjn_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjn_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjn_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjn_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjn_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjn.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjn_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjn_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjx.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjx.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjx.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsgnjx.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsgnjx_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsgnjx_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsgnjx_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsgnjx_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsgnjx_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsgnjx.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsgnjx_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsgnjx_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfsub.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_tu(maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_tu(maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_tu(maskedoff, op1, op2, vl); @@ -408,10 +411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_tum(mask, maskedoff, op1, op2, vl); @@ -508,10 +512,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_tum(mask, maskedoff, op1, op2, vl); @@ -588,10 +593,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +714,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_tumu(mask, maskedoff, op1, op2, vl); @@ -808,10 +815,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_tumu(mask, maskedoff, op1, op2, vl); @@ -888,10 +896,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_tumu(mask, maskedoff, op1, op2, vl); @@ -1008,10 +1017,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_mu(mask, maskedoff, op1, op2, vl); @@ -1108,10 +1118,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_mu(mask, maskedoff, op1, op2, vl); @@ -1188,10 +1199,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_mu(mask, maskedoff, op1, op2, vl); @@ -1308,10 +1320,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1408,10 +1421,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1488,10 +1502,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1608,10 +1623,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1708,10 +1724,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1805,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1908,10 +1926,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2008,10 +2027,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2088,10 +2108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2208,10 +2229,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f16m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vfsub_vv_f16m8_rm_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vfsub_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2308,10 +2330,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfsub_vv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vfsub_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2388,10 +2411,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfsub_vv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfsub.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfsub_vv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vfsub_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwadd.c @@ -188,10 +188,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tu(maskedoff, op1, op2, vl); @@ -348,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tu(maskedoff, op1, op2, vl); @@ -548,10 +550,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +711,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tum(mask, maskedoff, op1, op2, vl); @@ -908,10 +912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1068,10 +1073,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1268,10 +1274,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_mu(mask, maskedoff, op1, op2, vl); @@ -1428,10 +1435,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_mu(mask, maskedoff, op1, op2, vl); @@ -1628,10 +1636,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1797,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1988,10 +1998,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2148,10 +2159,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2348,10 +2360,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2508,10 +2521,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2708,10 +2722,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwadd_wv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwadd_wv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2868,10 +2883,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwadd_wv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwadd.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwadd_wv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwadd_wv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vfwsub.c @@ -188,10 +188,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tu(maskedoff, op1, op2, vl); @@ -348,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 7, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tu(maskedoff, op1, op2, vl); @@ -548,10 +550,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tum(mask, maskedoff, op1, op2, vl); @@ -708,10 +711,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tum(mask, maskedoff, op1, op2, vl); @@ -908,10 +912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1068,10 +1073,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1268,10 +1274,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_mu(mask, maskedoff, op1, op2, vl); @@ -1428,10 +1435,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 7, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_mu(mask, maskedoff, op1, op2, vl); @@ -1628,10 +1636,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1788,10 +1797,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tu(maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -1988,10 +1998,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2148,10 +2159,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tum(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2348,10 +2360,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2508,10 +2521,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_tumu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2708,10 +2722,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f32m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv16f32.nxv16f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vfwsub_wv_f32m8_rm_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat16m4_t op2, size_t vl) { return __riscv_vfwsub_wv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); @@ -2868,10 +2883,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vfwsub_wv_f64m8_rm_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vfwsub.w.mask.nxv8f64.nxv8f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vfwsub_wv_f64m8_rm_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat32m4_t op2, size_t vl) { return __riscv_vfwsub_wv_mu(mask, maskedoff, op1, op2, __RISCV_FRM_RNE, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vghsh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vghsh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vghsh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vghsh.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vghsh_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vghsh.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vghsh_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vghsh_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmacc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmacc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmacc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmacc.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmacc_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmacc_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmacc_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmacc_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmacc_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmacc_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmacc_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmacc_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmacc.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmacc_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmacc_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmadd.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmadd_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmadd_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmadd_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmadd_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmadd.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmadd_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vmadd_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmax.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmax.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmax.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmax.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmax_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmax_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmax_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmax_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmax_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmax_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmax_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmax.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmax_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmax_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmaxu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmaxu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmaxu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmaxu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmaxu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmaxu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmaxu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmaxu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmaxu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmaxu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmaxu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmaxu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmaxu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmaxu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmerge.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmerge.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmerge.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmerge.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmerge_vvm_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, vbool1_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmerge_vvm_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, vbool2_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmerge_vvm_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, vbool4_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmerge_vvm_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, vbool8_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmerge_vvm_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, vbool1_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmerge_vvm_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, vbool2_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmerge_vvm_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, vbool4_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmerge_vvm_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, vbool8_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -938,10 +946,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vmerge_vvm_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, vbool2_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -988,10 +997,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vmerge_vvm_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, vbool4_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); @@ -1028,10 +1038,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmerge_vvm_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[MASK:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmerge.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmerge.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vmerge_vvm_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, vbool8_t mask, size_t vl) { return __riscv_vmerge_tu(maskedoff, op1, op2, mask, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfeq.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfeq.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfeq.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfeq.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfeq_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfeq.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfeq.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfeq_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfeq_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfeq_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfeq.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfeq.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfeq_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfeq_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfeq_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfeq.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfeq.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfeq_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfeq_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfge.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfge.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfge.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfge.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfge_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfge.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfge.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfge_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfge_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfge_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfge.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfge.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfge_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfge_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfge_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfge.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfge.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfge_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfge_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfgt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfgt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfgt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfgt.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfgt_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfgt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfgt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfgt_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfgt_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfgt_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfgt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfgt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfgt_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfgt_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfgt_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfgt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfgt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfgt_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfgt_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfle.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfle.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfle.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfle.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfle_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfle.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfle.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfle_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfle_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfle_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfle.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfle.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfle_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfle_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfle_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfle.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfle.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfle_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfle_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmflt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmflt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmflt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmflt.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmflt_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmflt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmflt.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmflt_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmflt_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmflt_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmflt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmflt.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmflt_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmflt_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmflt_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmflt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmflt.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmflt_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmflt_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfne.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfne.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfne.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmfne.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfne_vv_f16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfne.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfne.mask.nxv32f16.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmfne_vv_f16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vfloat16m8_t op1, vfloat16m8_t op2, size_t vl) { return __riscv_vmfne_mu(mask, maskedoff, op1, op2, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfne_vv_f32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfne.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfne.mask.nxv16f32.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmfne_vv_f32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vfloat32m8_t op1, vfloat32m8_t op2, size_t vl) { return __riscv_vmfne_mu(mask, maskedoff, op1, op2, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmfne_vv_f64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmfne.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmfne.mask.nxv8f64.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmfne_vv_f64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vfloat64m8_t op1, vfloat64m8_t op2, size_t vl) { return __riscv_vmfne_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmin.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmin.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmin.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmin.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmin_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmin_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmin_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmin_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmin_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmin_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmin_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmin.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmin_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmin_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vminu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vminu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vminu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vminu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vminu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vminu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vminu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vminu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vminu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vminu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vminu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vminu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vminu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vminu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmseq.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmseq.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmseq.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmseq.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmseq_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmseq_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmseq_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmseq_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmseq_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmseq_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmseq_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmseq_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmseq.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmseq_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmseq_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsge.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsge.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsge.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsge.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsge_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsge_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsge_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsge_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsge_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsge_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsge_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsge.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsge.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsge_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsge_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgeu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgeu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgeu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgeu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsgeu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsgeu_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsgeu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsgeu_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsgeu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsgeu_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgeu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgeu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsgeu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsgeu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgt.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsgt_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsgt_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsgt_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsgt_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsgt_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsgt_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgt_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsgt_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsgt_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgtu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgtu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgtu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsgtu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsgtu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsgtu_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsgtu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsgtu_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsgtu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsgtu_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsgtu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsgtu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsgtu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsgtu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsle.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsle.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsle.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsle.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsle_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsle_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsle_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsle_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsle_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsle_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsle_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsle.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsle.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsle_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsle_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsleu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsleu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsleu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsleu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsleu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsleu_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsleu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsleu_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsleu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsleu_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsleu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsleu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsleu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsleu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsleu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmslt.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmslt.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmslt.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmslt.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmslt_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmslt_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmslt_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmslt_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmslt_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmslt_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmslt_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmslt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmslt.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmslt_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmslt_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsltu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsltu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsltu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsltu.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsltu_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsltu_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsltu_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsltu_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsltu_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsltu_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsltu_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsltu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsltu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsltu_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsltu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsne.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsne.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsne.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmsne.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsne_vv_i8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsne_vv_i16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsne_vv_i32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_i64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsne_vv_i64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u8m8_b1_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool1_t test_vmsne_vv_u8m8_b1_mu(vbool1_t mask, vbool1_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u16m8_b2_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool2_t test_vmsne_vv_u16m8_b2_mu(vbool2_t mask, vbool2_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u32m8_b4_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool4_t test_vmsne_vv_u32m8_b4_mu(vbool4_t mask, vbool4_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmsne_vv_u64m8_b8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], ptr noundef [[TMP0:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[MASKEDOFF:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmsne.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vbool8_t test_vmsne_vv_u64m8_b8_mu(vbool8_t mask, vbool8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmsne_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmul.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmul_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmul_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmul_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmul_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmul_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmul_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmul_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmul_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmul_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmul_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulh.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulh.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulh.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulh.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulh_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vmulh_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulh_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vmulh_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulh_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vmulh_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulh_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulh.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulh_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vmulh_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhsu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhsu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhsu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhsu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vmulhsu_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhsu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vmulhsu_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhsu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vmulhsu_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhsu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhsu_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhsu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vmulhsu_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhsu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vmulhu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vmulhu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vmulhu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vmulhu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vmulhu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vmulhu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vmulhu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vmulhu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vmulhu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vmulhu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vmulhu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsac.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsac.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsac.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsac.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsac_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsac_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsac_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsac_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsac_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsac_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsac_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsac_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsac.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsac_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsac_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vnmsub.c @@ -128,10 +128,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_tu(vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -248,10 +249,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_tu(vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -348,10 +350,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_tu(vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_tu(vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -568,10 +572,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_tu(vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -688,10 +693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_tu(vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -788,10 +794,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_tu(vd, vs1, vs2, vl); @@ -1008,10 +1016,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_tum(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1128,10 +1137,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_tum(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1228,10 +1238,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_tum(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1308,10 +1319,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_tum(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1448,10 +1460,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_tum(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1568,10 +1581,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_tum(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1668,10 +1682,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_tum(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1748,10 +1763,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_tum(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_tum(mask, vd, vs1, vs2, vl); @@ -1888,10 +1904,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2008,10 +2025,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2108,10 +2126,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2188,10 +2207,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2328,10 +2348,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2448,10 +2469,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2548,10 +2570,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2628,10 +2651,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_tumu(mask, vd, vs1, vs2, vl); @@ -2768,10 +2792,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vnmsub_vv_i8m8_mu(vbool1_t mask, vint8m8_t vd, vint8m8_t vs1, vint8m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -2888,10 +2913,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vnmsub_vv_i16m8_mu(vbool2_t mask, vint16m8_t vd, vint16m8_t vs1, vint16m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -2988,10 +3014,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vnmsub_vv_i32m8_mu(vbool4_t mask, vint32m8_t vd, vint32m8_t vs1, vint32m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -3068,10 +3095,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vnmsub_vv_i64m8_mu(vbool8_t mask, vint64m8_t vd, vint64m8_t vs1, vint64m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -3208,10 +3236,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv64i8.nxv64i8.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vnmsub_vv_u8m8_mu(vbool1_t mask, vuint8m8_t vd, vuint8m8_t vs1, vuint8m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -3328,10 +3357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv32i16.nxv32i16.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vnmsub_vv_u16m8_mu(vbool2_t mask, vuint16m8_t vd, vuint16m8_t vs1, vuint16m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -3428,10 +3458,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv16i32.nxv16i32.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vnmsub_vv_u32m8_mu(vbool4_t mask, vuint32m8_t vd, vuint32m8_t vs1, vuint32m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); @@ -3508,10 +3539,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vnmsub_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], [[VS2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[VD:%.*]], [[VS1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vnmsub.mask.nxv8i64.nxv8i64.i64( [[VD]], [[VS1]], [[VS2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vnmsub_vv_u64m8_mu(vbool8_t mask, vuint64m8_t vd, vuint64m8_t vs1, vuint64m8_t vs2, size_t vl) { return __riscv_vnmsub_mu(mask, vd, vs1, vs2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vor.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vor.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vor.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vor.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vor_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vor_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vor_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vor_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vor_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vor_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vor_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vor_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vor_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vor_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrem.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrem.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrem.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrem.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrem_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vrem_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrem_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vrem_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrem_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vrem_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrem_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrem.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrem_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vrem_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vremu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vremu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vremu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vremu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vremu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vremu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vremu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vremu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vremu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vremu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vremu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vremu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vremu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vremu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgather.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgather.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgather.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgather.c @@ -108,10 +108,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -208,10 +209,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -288,10 +290,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -428,10 +431,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -548,10 +552,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -648,10 +653,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -728,10 +734,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -868,10 +875,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -988,10 +996,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -1088,10 +1097,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -1168,10 +1178,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tu(maskedoff, op1, index, vl); @@ -1288,10 +1299,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -1388,10 +1400,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -1468,10 +1481,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -1608,10 +1622,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -1728,10 +1743,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -1828,10 +1844,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -1908,10 +1925,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -2048,10 +2066,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -2168,10 +2187,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -2268,10 +2288,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -2348,10 +2369,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tum(mask, maskedoff, op1, index, vl); @@ -2468,10 +2490,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -2568,10 +2591,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -2648,10 +2672,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -2788,10 +2813,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -2908,10 +2934,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3008,10 +3035,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3088,10 +3116,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3228,10 +3257,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3348,10 +3378,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3448,10 +3479,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3528,10 +3560,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_tumu(mask, maskedoff, op1, index, vl); @@ -3648,10 +3681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgather_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -3748,10 +3782,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgather_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -3828,10 +3863,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgather_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -3968,10 +4004,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vrgather_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4088,10 +4125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgather_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4188,10 +4226,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgather_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4268,10 +4307,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgather_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4408,10 +4448,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrgather_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4528,10 +4569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgather_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4628,10 +4670,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgather_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); @@ -4708,10 +4751,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgather_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[INDEX:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[INDEX:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgather.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[INDEX]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgather_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t index, size_t vl) { return __riscv_vrgather_mu(mask, maskedoff, op1, index, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgatherei16.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgatherei16.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgatherei16.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrgatherei16.c @@ -58,10 +58,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_tu(vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -108,10 +109,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_tu(vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -148,10 +150,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_tu(vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -268,10 +271,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -318,10 +322,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -358,10 +363,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -478,10 +484,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -528,10 +535,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -568,10 +576,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tu(maskedoff, op1, op2, vl); @@ -628,10 +637,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_tum(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -678,10 +688,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_tum(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -718,10 +729,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_tum(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -838,10 +850,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -888,10 +901,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -928,10 +942,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -1048,10 +1063,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -1098,10 +1114,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -1138,10 +1155,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tum(mask, maskedoff, op1, op2, vl); @@ -1198,10 +1216,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_tumu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1248,10 +1267,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_tumu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1288,10 +1308,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_tumu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1408,10 +1429,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1458,10 +1480,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1498,10 +1521,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1618,10 +1642,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1668,10 +1693,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1708,10 +1734,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_tumu(mask, maskedoff, op1, op2, vl); @@ -1768,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32f16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat16m8_t test_vrgatherei16_vv_f16m8_mu(vbool2_t mask, vfloat16m8_t maskedoff, vfloat16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -1818,10 +1846,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16f32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat32m8_t test_vrgatherei16_vv_f32m8_mu(vbool4_t mask, vfloat32m8_t maskedoff, vfloat32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -1858,10 +1887,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_f64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8f64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vfloat64m8_t test_vrgatherei16_vv_f64m8_mu(vbool8_t mask, vfloat64m8_t maskedoff, vfloat64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -1978,10 +2008,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vrgatherei16_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -2028,10 +2059,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vrgatherei16_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -2068,10 +2100,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vrgatherei16_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -2188,10 +2221,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrgatherei16_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -2238,10 +2272,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrgatherei16_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); @@ -2278,10 +2313,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrgatherei16_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrgatherei16_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint16m2_t op2, size_t vl) { return __riscv_vrgatherei16_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrol.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrol.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrol.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vrol.c @@ -135,10 +135,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_tu(maskedoff, vs2, vs1, vl); @@ -255,10 +256,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_tu(maskedoff, vs2, vs1, vl); @@ -355,10 +357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_tu(maskedoff, vs2, vs1, vl); @@ -435,10 +438,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_tu(maskedoff, vs2, vs1, vl); @@ -575,10 +579,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_tum(mask, maskedoff, vs2, vs1, vl); @@ -695,10 +700,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_tum(mask, maskedoff, vs2, vs1, vl); @@ -795,10 +801,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_tum(mask, maskedoff, vs2, vs1, vl); @@ -875,10 +882,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_tum(mask, maskedoff, vs2, vs1, vl); @@ -1015,10 +1023,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1135,10 +1144,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1235,10 +1245,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1315,10 +1326,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1455,10 +1467,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vrol_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vrol_mu(mask, maskedoff, vs2, vs1, vl); @@ -1575,10 +1588,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vrol_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vrol_mu(mask, maskedoff, vs2, vs1, vl); @@ -1675,10 +1689,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vrol_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vrol_mu(mask, maskedoff, vs2, vs1, vl); @@ -1755,10 +1770,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vrol_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vrol.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vrol_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vrol_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vror.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vror.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vror.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vror.c @@ -135,10 +135,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_tu(maskedoff, vs2, vs1, vl); @@ -255,10 +256,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_tu(maskedoff, vs2, vs1, vl); @@ -355,10 +357,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_tu(maskedoff, vs2, vs1, vl); @@ -435,10 +438,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_tu(maskedoff, vs2, vs1, vl); @@ -575,10 +579,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_tum(mask, maskedoff, vs2, vs1, vl); @@ -695,10 +700,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_tum(mask, maskedoff, vs2, vs1, vl); @@ -795,10 +801,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_tum(mask, maskedoff, vs2, vs1, vl); @@ -875,10 +882,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_tum(mask, maskedoff, vs2, vs1, vl); @@ -1015,10 +1023,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1135,10 +1144,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1235,10 +1245,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1315,10 +1326,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_tumu(mask, maskedoff, vs2, vs1, vl); @@ -1455,10 +1467,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vror_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t vs2, vuint8m8_t vs1, size_t vl) { return __riscv_vror_mu(mask, maskedoff, vs2, vs1, vl); @@ -1575,10 +1588,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vror_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t vs2, vuint16m8_t vs1, size_t vl) { return __riscv_vror_mu(mask, maskedoff, vs2, vs1, vl); @@ -1675,10 +1689,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vror_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vror_mu(mask, maskedoff, vs2, vs1, vl); @@ -1755,10 +1770,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vror_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vror.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vror_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vror_mu(mask, maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsadd.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsadd_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsadd_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsadd_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsadd_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsadd_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsadd_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsadd_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsadd.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsadd_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsadd_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsaddu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsaddu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsaddu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsaddu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsaddu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsaddu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsaddu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsaddu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsaddu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsaddu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsaddu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsaddu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsaddu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsaddu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsbc.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsbc.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsbc.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsbc.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsbc_vvm_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, vbool1_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsbc_vvm_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, vbool2_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsbc_vvm_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, vbool4_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsbc_vvm_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, vbool8_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsbc_vvm_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, vbool1_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsbc_vvm_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, vbool2_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsbc_vvm_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, vbool4_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsbc_vvm_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], [[BORROWIN:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsbc.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[BORROWIN]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsbc_vvm_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, vbool8_t borrowin, size_t vl) { return __riscv_vsbc_tu(maskedoff, op1, op2, borrowin, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ch.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ch.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ch.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ch.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ch_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ch_tu(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ch_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ch.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ch_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ch_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2cl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2cl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2cl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2cl.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2cl_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2cl_tu(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2cl_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2cl.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2cl_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2cl_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ms.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ms.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ms.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsha2ms.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv16i32.nxv16i32.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsha2ms_vv_u32m8_tu(vuint32m8_t vd, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsha2ms_tu(vd, vs2, vs1, vl); @@ -94,10 +95,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsha2ms_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[VD:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsha2ms.nxv8i64.nxv8i64.i64( [[VD]], [[VS2]], [[VS1]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsha2ms_vv_u64m8_tu(vuint64m8_t vd, vuint64m8_t vs2, vuint64m8_t vs1, size_t vl) { return __riscv_vsha2ms_tu(vd, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsll.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsll.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsll.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsll.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_tu(maskedoff, op1, shift, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_tum(mask, maskedoff, op1, shift, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_tumu(mask, maskedoff, op1, shift, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsll_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsll_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsll_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsll_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsll_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsll_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsll_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsll_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsll.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsll_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsll_mu(mask, maskedoff, op1, shift, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsm3me.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsm3me.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsm3me.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsm3me.c @@ -54,10 +54,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsm3me_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], [[VS1:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[VS2:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsm3me.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[VS1:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsm3me.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[VS2]], [[VS1]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsm3me_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t vs2, vuint32m8_t vs1, size_t vl) { return __riscv_vsm3me_tu(maskedoff, vs2, vs1, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsmul.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsmul.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsmul.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsmul.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_tu(maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_tum(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_tumu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsmul_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsmul_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsmul_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsmul_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsmul_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsmul_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsmul_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsmul.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsmul_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsmul_mu(mask, maskedoff, op1, op2, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsra.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsra.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsra.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsra.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_tu(maskedoff, op1, shift, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_tu(maskedoff, op1, shift, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_tu(maskedoff, op1, shift, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_tu(maskedoff, op1, shift, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_tum(mask, maskedoff, op1, shift, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_tum(mask, maskedoff, op1, shift, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_tum(mask, maskedoff, op1, shift, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_tum(mask, maskedoff, op1, shift, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_tumu(mask, maskedoff, op1, shift, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_tumu(mask, maskedoff, op1, shift, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_tumu(mask, maskedoff, op1, shift, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_tumu(mask, maskedoff, op1, shift, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsra_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsra_mu(mask, maskedoff, op1, shift, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsra_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsra_mu(mask, maskedoff, op1, shift, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsra_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsra_mu(mask, maskedoff, op1, shift, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsra_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsra_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsra_mu(mask, maskedoff, op1, shift, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsrl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsrl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsrl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsrl.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_tu(maskedoff, op1, shift, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_tu(maskedoff, op1, shift, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_tu(maskedoff, op1, shift, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_tu(maskedoff, op1, shift, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_tum(mask, maskedoff, op1, shift, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_tum(mask, maskedoff, op1, shift, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_tum(mask, maskedoff, op1, shift, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_tum(mask, maskedoff, op1, shift, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_tumu(mask, maskedoff, op1, shift, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_tumu(mask, maskedoff, op1, shift, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_tumu(mask, maskedoff, op1, shift, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_tumu(mask, maskedoff, op1, shift, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsrl_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vsrl_mu(mask, maskedoff, op1, shift, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsrl_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vsrl_mu(mask, maskedoff, op1, shift, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsrl_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vsrl_mu(mask, maskedoff, op1, shift, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsrl_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsrl_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vsrl_mu(mask, maskedoff, op1, shift, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssra.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssra.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssra.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssra.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssra_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssra_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssra_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssra_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssra_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssra_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssra_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssra.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssra_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssra_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssrl.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssrl.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssrl.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssrl.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], i64 0, i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_tu(maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_tum(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_tumu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssrl_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t shift, size_t vl) { return __riscv_vssrl_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssrl_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t shift, size_t vl) { return __riscv_vssrl_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssrl_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t shift, size_t vl) { return __riscv_vssrl_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssrl_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[SHIFT:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[SHIFT:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssrl.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[SHIFT]], [[MASK]], i64 0, i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssrl_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t shift, size_t vl) { return __riscv_vssrl_mu(mask, maskedoff, op1, shift, __RISCV_VXRM_RNU, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssub.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vssub_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vssub_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vssub_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vssub_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vssub_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vssub_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vssub_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vssub_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssubu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssubu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssubu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vssubu.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_tum(mask, maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_tum(mask, maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_tum(mask, maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_tum(mask, maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_tumu(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_tumu(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_tumu(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_tumu(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vssubu_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vssubu_mu(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vssubu_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vssubu_mu(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vssubu_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vssubu_mu(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vssubu_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vssubu.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vssubu_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vssubu_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vsub.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vsub_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vsub_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vsub_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vsub_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vsub_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vsub_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vsub_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vsub_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vsub.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vsub_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vsub_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwadd.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwadd.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwadd.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwadd.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwadd_wv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwadd_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwadd_wv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwadd_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwadd_wv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwadd.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwadd_wv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwadd_wv_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwaddu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwaddu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwaddu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwaddu.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwaddu_wv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwaddu_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwaddu_wv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwaddu_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwaddu_wv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwaddu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwaddu_wv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwaddu_wv_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsub.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsub.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsub.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsub.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vwsub_wv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint8m4_t op2, size_t vl) { return __riscv_vwsub_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vwsub_wv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint16m4_t op2, size_t vl) { return __riscv_vwsub_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsub_wv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsub.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vwsub_wv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint32m4_t op2, size_t vl) { return __riscv_vwsub_wv_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsubu.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsubu.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsubu.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vwsubu.c @@ -227,10 +227,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tu(maskedoff, op1, op2, vl); @@ -427,10 +428,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tu(maskedoff, op1, op2, vl); @@ -587,10 +589,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tu(maskedoff, op1, op2, vl); @@ -827,10 +830,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1027,10 +1031,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1187,10 +1192,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tum(mask, maskedoff, op1, op2, vl); @@ -1427,10 +1433,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1627,10 +1634,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -1787,10 +1795,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_tumu(mask, maskedoff, op1, op2, vl); @@ -2027,10 +2036,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv32i16.nxv32i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vwsubu_wv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint8m4_t op2, size_t vl) { return __riscv_vwsubu_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2227,10 +2237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv16i32.nxv16i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vwsubu_wv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint16m4_t op2, size_t vl) { return __riscv_vwsubu_wv_mu(mask, maskedoff, op1, op2, vl); @@ -2387,10 +2398,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vwsubu_wv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vwsubu.w.mask.nxv8i64.nxv8i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vwsubu_wv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint32m4_t op2, size_t vl) { return __riscv_vwsubu_wv_mu(mask, maskedoff, op1, op2, vl); diff --git a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vxor.c b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vxor.c --- a/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vxor.c +++ b/clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/policy/overloaded/vxor.c @@ -127,10 +127,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_tu(vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -247,10 +248,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_tu(vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -347,10 +349,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_tu(vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -427,10 +430,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_tu(vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -567,10 +571,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_tu(vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -687,10 +692,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_tu(vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -787,10 +793,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_tu(vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -867,10 +874,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_tu -// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], i64 [[VL]]) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_tu(vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_tu(maskedoff, op1, op2, vl); @@ -1007,10 +1015,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_tum(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1127,10 +1136,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_tum(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1227,10 +1237,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_tum(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1307,10 +1318,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_tum(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1447,10 +1459,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_tum(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1567,10 +1580,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_tum(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1667,10 +1681,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_tum(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1747,10 +1762,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_tum -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 2) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_tum(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_tum(mask, maskedoff, op1, op2, vl); @@ -1887,10 +1903,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_tumu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2007,10 +2024,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_tumu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2107,10 +2125,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_tumu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2187,10 +2206,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_tumu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2327,10 +2347,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_tumu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2447,10 +2468,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_tumu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2547,10 +2569,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_tumu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2627,10 +2650,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_tumu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 0) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_tumu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_tumu(mask, maskedoff, op1, op2, vl); @@ -2767,10 +2791,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint8m8_t test_vxor_vv_i8m8_mu(vbool1_t mask, vint8m8_t maskedoff, vint8m8_t op1, vint8m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -2887,10 +2912,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint16m8_t test_vxor_vv_i16m8_mu(vbool2_t mask, vint16m8_t maskedoff, vint16m8_t op1, vint16m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -2987,10 +3013,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint32m8_t test_vxor_vv_i32m8_mu(vbool4_t mask, vint32m8_t maskedoff, vint32m8_t op1, vint32m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -3067,10 +3094,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_i64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vint64m8_t test_vxor_vv_i64m8_mu(vbool8_t mask, vint64m8_t maskedoff, vint64m8_t op1, vint64m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -3207,10 +3235,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u8m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 1 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv64i8.nxv64i8.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint8m8_t test_vxor_vv_u8m8_mu(vbool1_t mask, vuint8m8_t maskedoff, vuint8m8_t op1, vuint8m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -3327,10 +3356,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u16m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 2 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv32i16.nxv32i16.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint16m8_t test_vxor_vv_u16m8_mu(vbool2_t mask, vuint16m8_t maskedoff, vuint16m8_t op1, vuint16m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -3427,10 +3457,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u32m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 4 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv16i32.nxv16i32.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint32m8_t test_vxor_vv_u32m8_mu(vbool4_t mask, vuint32m8_t maskedoff, vuint32m8_t op1, vuint32m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); @@ -3507,10 +3538,11 @@ } // CHECK-RV64-LABEL: define dso_local @test_vxor_vv_u64m8_mu -// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], [[OP2:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { +// CHECK-RV64-SAME: ( [[MASK:%.*]], [[MASKEDOFF:%.*]], [[OP1:%.*]], ptr noundef [[TMP0:%.*]], i64 noundef [[VL:%.*]]) #[[ATTR0]] { // CHECK-RV64-NEXT: entry: -// CHECK-RV64-NEXT: [[TMP0:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) -// CHECK-RV64-NEXT: ret [[TMP0]] +// CHECK-RV64-NEXT: [[OP2:%.*]] = load , ptr [[TMP0]], align 8 +// CHECK-RV64-NEXT: [[TMP1:%.*]] = call @llvm.riscv.vxor.mask.nxv8i64.nxv8i64.i64( [[MASKEDOFF]], [[OP1]], [[OP2]], [[MASK]], i64 [[VL]], i64 1) +// CHECK-RV64-NEXT: ret [[TMP1]] // vuint64m8_t test_vxor_vv_u64m8_mu(vbool8_t mask, vuint64m8_t maskedoff, vuint64m8_t op1, vuint64m8_t op2, size_t vl) { return __riscv_vxor_mu(mask, maskedoff, op1, op2, vl); diff --git a/llvm/include/llvm/TargetParser/RISCVTargetParser.h b/llvm/include/llvm/TargetParser/RISCVTargetParser.h --- a/llvm/include/llvm/TargetParser/RISCVTargetParser.h +++ b/llvm/include/llvm/TargetParser/RISCVTargetParser.h @@ -26,6 +26,33 @@ // We use 64 bits as the known part in the scalable vector types. static constexpr unsigned RVVBitsPerBlock = 64; +class RVVArgDispatcher { +public: + static constexpr unsigned NumArgVRs = 16; + + struct RVVArgInfo { + unsigned ArgIndex; + unsigned RegsNeeded; + bool PassedByReg = false; + }; + + RVVArgDispatcher(std::vector &&Infos) + : RVVArgInfos(std::move(Infos)) { + computeMaxAssignedRegs(); + } + + RVVArgDispatcher(const std::vector &Infos) : RVVArgInfos(Infos) { + computeMaxAssignedRegs(); + } + + std::vector &getRVVArgInfos() { return RVVArgInfos; } + +private: + std::vector RVVArgInfos; + + void computeMaxAssignedRegs(); +}; + bool parseCPU(StringRef CPU, bool IsRV64); bool parseTuneCPU(StringRef CPU, bool IsRV64); StringRef getMArchFromMcpu(StringRef CPU); diff --git a/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp b/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp --- a/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp +++ b/llvm/lib/Target/RISCV/GISel/RISCVCallLowering.cpp @@ -32,6 +32,8 @@ // Whether this is assigning args for a return. bool IsRet; + std::map AllocatedMap; + public: RISCVOutgoingValueAssigner( RISCVTargetLowering::RISCVCCAssignFn *RISCVAssignFn_, bool IsRet) @@ -46,10 +48,10 @@ const DataLayout &DL = MF.getDataLayout(); const RISCVSubtarget &Subtarget = MF.getSubtarget(); + // TODO: Handle vector arguments. return RISCVAssignFn(DL, Subtarget.getTargetABI(), ValNo, ValVT, LocVT, LocInfo, Flags, State, /*IsFixed=*/true, IsRet, - Info.Ty, *Subtarget.getTargetLowering(), - /*FirstMaskArgument=*/std::nullopt); + Info.Ty, *Subtarget.getTargetLowering(), AllocatedMap); } }; @@ -89,6 +91,8 @@ // Whether this is assigning args from a return. bool IsRet; + std::map AllocatedMap; + public: RISCVIncomingValueAssigner( RISCVTargetLowering::RISCVCCAssignFn *RISCVAssignFn_, bool IsRet) @@ -103,10 +107,10 @@ const DataLayout &DL = MF.getDataLayout(); const RISCVSubtarget &Subtarget = MF.getSubtarget(); + // TODO: Handle vector arguments. return RISCVAssignFn(DL, Subtarget.getTargetABI(), ValNo, ValVT, LocVT, LocInfo, Flags, State, /*IsFixed=*/true, IsRet, - Info.Ty, *Subtarget.getTargetLowering(), - /*FirstMaskArgument=*/std::nullopt); + Info.Ty, *Subtarget.getTargetLowering(), AllocatedMap); } }; diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.h b/llvm/lib/Target/RISCV/RISCVISelLowering.h --- a/llvm/lib/Target/RISCV/RISCVISelLowering.h +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.h @@ -815,7 +815,7 @@ ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy, const RISCVTargetLowering &TLI, - std::optional FirstMaskArgument); + std::map &AllocatedMap); private: void analyzeInputArgs(MachineFunction &MF, CCState &CCInfo, @@ -949,13 +949,13 @@ MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy, const RISCVTargetLowering &TLI, - std::optional FirstMaskArgument); + std::map &AllocatedMap); bool CC_RISCV_FastCC(const DataLayout &DL, RISCVABI::ABI ABI, unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy, const RISCVTargetLowering &TLI, - std::optional FirstMaskArgument); + std::map &AllocatedMap); bool CC_RISCV_GHC(unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp --- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp +++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp @@ -15426,7 +15426,7 @@ MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy, const RISCVTargetLowering &TLI, - std::optional FirstMaskArgument) { + std::map &AllocatedMap) { unsigned XLen = DL.getLargestLegalIntTypeSizeInBits(); assert(XLen == 32 || XLen == 64); MVT XLenVT = XLen == 32 ? MVT::i32 : MVT::i64; @@ -15568,7 +15568,7 @@ } // Allocate to a register if possible, or else a stack slot. - Register Reg; + Register Reg = MCRegister(); unsigned StoreSizeBytes = XLen / 8; Align StackAlign = Align(XLen / 8); @@ -15579,7 +15579,8 @@ else if (ValVT == MVT::f64 && !UseGPRForF64) Reg = State.AllocateReg(ArgFPR64s); else if (ValVT.isVector()) { - Reg = allocateRVVReg(ValVT, ValNo, FirstMaskArgument, State, TLI); + if (AllocatedMap.count(ValNo)) + Reg = AllocatedMap[ValNo]; if (!Reg) { // For return values, the vector must be passed fully via registers or // via the stack. @@ -15658,6 +15659,89 @@ return std::nullopt; } +template +static std::vector +constructRVVArgInfo(const SmallVectorImpl &Args, + const RISCVTargetLowering &TLI) { + std::vector RVVArgInfos; + bool FirstVBool = true; + + unsigned NumArgs = Args.size(); + for (unsigned i = 0; i != NumArgs; ++i) { + MVT ArgVT = Args[i].VT; + + // Skip non vector arguments. + if (!ArgVT.isVector()) + continue; + // Skip first mask arguments. + if (ArgVT.getVectorElementType() == MVT::i1 && FirstVBool) { + FirstVBool = false; + continue; + } + + if (ArgVT.isFixedLengthVector()) + ArgVT = TLI.getContainerForFixedLengthVector(ArgVT); + + auto [LMUL, Fractional] = + RISCVVType::decodeVLMUL(RISCVTargetLowering::getLMUL(ArgVT)); + if (ArgVT.getVectorElementType() == MVT::i1 || Fractional) + LMUL = 1; + + RVVArgInfos.push_back({i, LMUL}); + } + + return RVVArgInfos; +} + +template +std::map +allocateRegForRVVArg(RISCV::RVVArgDispatcher &Dispatcher, + const SmallVectorImpl &Args, CCState &State, + const RISCVTargetLowering &TLI) { + using RVVArgInfo = RISCV::RVVArgDispatcher::RVVArgInfo; + + std::map AllocatedMap; + std::vector &RVVArgInfos = Dispatcher.getRVVArgInfos(); + std::optional FirstMaskArgument = preAssignMask(Args); + + // Sort arguments by LMUL to make sure registers are allocated in correct + // order, the order matters here can be proved by the following example. + // Consider a function: void func(vint32m1_t a, vint32m2_t b, vint32m1x2_t c); + // Assume c is split into (vint32m1_t c.0, vint32m1_t c.1) in backend, + // if registers are allocated by order, we get the following mapping: + // + // |v8 |v9 |v10-v11|v12|v13|v14|v15| v16-v19 | v20-v23 | + // | a |c.0| b |c.1| | | | | | + // which is illegal, since c.0 and c.1 should be in consecutive registers. + // + // If we stable_sort the arguments before allocate, we'll have the + // allocated order as: b -> a -> c.0 -> c.1, and the allocated map is: + // | v8-v9 |v10|v11|v12|v13|v14|v15| v16-v19 | v20-v23 | + // | b | a |c.0|c.1| | | | | | + // which is now legal. + // + // Note that LMUL here is RegsNeeded since tuple type is split in backend, + // so each element group can be technically considered as a single argument. + std::stable_sort(RVVArgInfos.begin(), RVVArgInfos.end(), + [](const RVVArgInfo &Info1, const RVVArgInfo &Info2) { + return Info1.RegsNeeded > Info2.RegsNeeded; + }); + + if (FirstMaskArgument) + AllocatedMap[*FirstMaskArgument] = State.AllocateReg(RISCV::V0); + + for (const auto &I : RVVArgInfos) { + MVT ArgVT = Args[I.ArgIndex].VT; + if (ArgVT.isFixedLengthVector()) + ArgVT = TLI.getContainerForFixedLengthVector(ArgVT); + if (I.PassedByReg) + AllocatedMap[I.ArgIndex] = + allocateRVVReg(ArgVT, I.ArgIndex, std::nullopt, State, TLI); + } + + return AllocatedMap; +} + void RISCVTargetLowering::analyzeInputArgs( MachineFunction &MF, CCState &CCInfo, const SmallVectorImpl &Ins, bool IsRet, @@ -15665,9 +15749,8 @@ unsigned NumArgs = Ins.size(); FunctionType *FType = MF.getFunction().getFunctionType(); - std::optional FirstMaskArgument; - if (Subtarget.hasVInstructions()) - FirstMaskArgument = preAssignMask(Ins); + RISCV::RVVArgDispatcher Dispatcher{constructRVVArgInfo(Ins, *this)}; + auto AllocatedMap = allocateRegForRVVArg(Dispatcher, Ins, CCInfo, *this); for (unsigned i = 0; i != NumArgs; ++i) { MVT ArgVT = Ins[i].VT; @@ -15682,7 +15765,7 @@ RISCVABI::ABI ABI = MF.getSubtarget().getTargetABI(); if (Fn(MF.getDataLayout(), ABI, i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, CCInfo, /*IsFixed=*/true, IsRet, ArgTy, *this, - FirstMaskArgument)) { + AllocatedMap)) { LLVM_DEBUG(dbgs() << "InputArg #" << i << " has unhandled type " << ArgVT << '\n'); llvm_unreachable(nullptr); @@ -15696,9 +15779,8 @@ CallLoweringInfo *CLI, RISCVCCAssignFn Fn) const { unsigned NumArgs = Outs.size(); - std::optional FirstMaskArgument; - if (Subtarget.hasVInstructions()) - FirstMaskArgument = preAssignMask(Outs); + RISCV::RVVArgDispatcher Dispatcher{constructRVVArgInfo(Outs, *this)}; + auto AllocatedMap = allocateRegForRVVArg(Dispatcher, Outs, CCInfo, *this); for (unsigned i = 0; i != NumArgs; i++) { MVT ArgVT = Outs[i].VT; @@ -15708,7 +15790,7 @@ RISCVABI::ABI ABI = MF.getSubtarget().getTargetABI(); if (Fn(MF.getDataLayout(), ABI, i, ArgVT, ArgVT, CCValAssign::Full, ArgFlags, CCInfo, Outs[i].IsFixed, IsRet, OrigTy, *this, - FirstMaskArgument)) { + AllocatedMap)) { LLVM_DEBUG(dbgs() << "OutputArg #" << i << " has unhandled type " << ArgVT << "\n"); llvm_unreachable(nullptr); @@ -15883,7 +15965,7 @@ ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy, const RISCVTargetLowering &TLI, - std::optional FirstMaskArgument) { + std::map &AllocatedMap) { // X5 and X6 might be used for save-restore libcall. static const MCPhysReg GPRList[] = { @@ -15968,13 +16050,13 @@ } if (LocVT.isVector()) { - if (unsigned Reg = - allocateRVVReg(ValVT, ValNo, FirstMaskArgument, State, TLI)) { + if (AllocatedMap.count(ValNo)) { // Fixed-length vectors are located in the corresponding scalable-vector // container types. if (ValVT.isFixedLengthVector()) LocVT = TLI.getContainerForFixedLengthVector(LocVT); - State.addLoc(CCValAssign::getReg(ValNo, ValVT, Reg, LocVT, LocInfo)); + State.addLoc(CCValAssign::getReg(ValNo, ValVT, AllocatedMap[ValNo], LocVT, + LocInfo)); } else { // Try and pass the address via a "fast" GPR. if (unsigned GPRReg = State.AllocateReg(GPRList)) { @@ -16601,17 +16683,16 @@ SmallVector RVLocs; CCState CCInfo(CallConv, IsVarArg, MF, RVLocs, Context); - std::optional FirstMaskArgument; - if (Subtarget.hasVInstructions()) - FirstMaskArgument = preAssignMask(Outs); + RISCV::RVVArgDispatcher Dispatcher{constructRVVArgInfo(Outs, *this)}; + auto AllocatedMap = allocateRegForRVVArg(Dispatcher, Outs, CCInfo, *this); for (unsigned i = 0, e = Outs.size(); i != e; ++i) { MVT VT = Outs[i].VT; ISD::ArgFlagsTy ArgFlags = Outs[i].Flags; RISCVABI::ABI ABI = MF.getSubtarget().getTargetABI(); if (RISCV::CC_RISCV(MF.getDataLayout(), ABI, i, VT, VT, CCValAssign::Full, - ArgFlags, CCInfo, /*IsFixed=*/true, /*IsRet=*/true, nullptr, - *this, FirstMaskArgument)) + ArgFlags, CCInfo, /*IsFixed=*/true, /*IsRet=*/true, + nullptr, *this, AllocatedMap)) return false; } return true; diff --git a/llvm/lib/TargetParser/RISCVTargetParser.cpp b/llvm/lib/TargetParser/RISCVTargetParser.cpp --- a/llvm/lib/TargetParser/RISCVTargetParser.cpp +++ b/llvm/lib/TargetParser/RISCVTargetParser.cpp @@ -89,5 +89,41 @@ #include "llvm/TargetParser/RISCVTargetParserDef.inc" } +// Dynamic programming approach for finding the best vector register usages. +// We can deduce the problem to 0/1 knapsack problem with: +// 1. capacity == NumArgVRs +// 2. weight == value == total VRs needed +// This function determines if each RVV argument is passed by register. +void RVVArgDispatcher::computeMaxAssignedRegs() { + unsigned ToBeAssigned = RVVArgInfos.size(); + std::vector> MaxRegs( + ToBeAssigned + 1, std::vector(NumArgVRs + 1, 0)); + + for (unsigned i = 1; i <= ToBeAssigned; ++i) { + unsigned RegsNeeded = RVVArgInfos[i - 1].RegsNeeded; + for (unsigned j = 1; j <= NumArgVRs; ++j) + if (j < RegsNeeded) + MaxRegs[i][j] = MaxRegs[i - 1][j]; + else + MaxRegs[i][j] = std::max(RegsNeeded + MaxRegs[i - 1][j - RegsNeeded], + MaxRegs[i - 1][j]); + } + + // Walk back through MaxRegs to determine which argument is passed by + // register. + unsigned RegsLeft = NumArgVRs; + while (ToBeAssigned--) { + auto &RVVArgInfo = RVVArgInfos[ToBeAssigned]; + if (!RegsLeft || MaxRegs[ToBeAssigned + 1][RegsLeft] == + MaxRegs[ToBeAssigned][RegsLeft]) { + RVVArgInfo.PassedByReg = false; + continue; + } + + RVVArgInfo.PassedByReg = true; + RegsLeft -= RVVArgInfo.RegsNeeded; + } +} + } // namespace RISCV } // namespace llvm diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-calling-conv.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-calling-conv.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-calling-conv.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-calling-conv.ll @@ -964,34 +964,29 @@ define <32 x i32> @split_vector_args(<2 x i32>,<2 x i32>,<2 x i32>,<2 x i32>,<2 x i32>, <32 x i32> %y, <32 x i32> %z) { ; LMULMAX8-LABEL: split_vector_args: ; LMULMAX8: # %bb.0: -; LMULMAX8-NEXT: li a1, 32 -; LMULMAX8-NEXT: vsetvli zero, a1, e32, m8, ta, ma -; LMULMAX8-NEXT: vle32.v v8, (a0) -; LMULMAX8-NEXT: vadd.vv v8, v16, v8 +; LMULMAX8-NEXT: li a0, 32 +; LMULMAX8-NEXT: vsetvli zero, a0, e32, m8, ta, ma +; LMULMAX8-NEXT: vadd.vv v8, v8, v16 ; LMULMAX8-NEXT: ret ; ; LMULMAX4-LABEL: split_vector_args: ; LMULMAX4: # %bb.0: -; LMULMAX4-NEXT: addi a1, a0, 64 ; LMULMAX4-NEXT: vsetivli zero, 16, e32, m4, ta, ma -; LMULMAX4-NEXT: vle32.v v8, (a0) -; LMULMAX4-NEXT: vle32.v v12, (a1) -; LMULMAX4-NEXT: vadd.vv v8, v16, v8 -; LMULMAX4-NEXT: vadd.vv v12, v20, v12 +; LMULMAX4-NEXT: vle32.v v20, (a1) +; LMULMAX4-NEXT: vadd.vv v8, v8, v16 +; LMULMAX4-NEXT: vadd.vv v12, v12, v20 ; LMULMAX4-NEXT: ret ; ; LMULMAX2-LABEL: split_vector_args: ; LMULMAX2: # %bb.0: -; LMULMAX2-NEXT: addi a1, a0, 64 +; LMULMAX2-NEXT: addi a0, a1, 32 ; LMULMAX2-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; LMULMAX2-NEXT: vle32.v v10, (a0) -; LMULMAX2-NEXT: addi a0, a0, 32 -; LMULMAX2-NEXT: vle32.v v12, (a0) -; LMULMAX2-NEXT: vle32.v v24, (a1) -; LMULMAX2-NEXT: vadd.vv v8, v14, v22 -; LMULMAX2-NEXT: vadd.vv v10, v16, v10 -; LMULMAX2-NEXT: vadd.vv v12, v18, v12 -; LMULMAX2-NEXT: vadd.vv v14, v20, v24 +; LMULMAX2-NEXT: vle32.v v20, (a1) +; LMULMAX2-NEXT: vle32.v v22, (a0) +; LMULMAX2-NEXT: vadd.vv v8, v8, v16 +; LMULMAX2-NEXT: vadd.vv v10, v10, v18 +; LMULMAX2-NEXT: vadd.vv v12, v12, v20 +; LMULMAX2-NEXT: vadd.vv v14, v14, v22 ; LMULMAX2-NEXT: ret ; ; LMULMAX1-LABEL: split_vector_args: @@ -1022,65 +1017,70 @@ define <32 x i32> @call_split_vector_args(ptr %pa, ptr %pb) { ; LMULMAX8-LABEL: call_split_vector_args: ; LMULMAX8: # %bb.0: -; LMULMAX8-NEXT: addi sp, sp, -256 -; LMULMAX8-NEXT: .cfi_def_cfa_offset 256 -; LMULMAX8-NEXT: sd ra, 248(sp) # 8-byte Folded Spill -; LMULMAX8-NEXT: sd s0, 240(sp) # 8-byte Folded Spill +; LMULMAX8-NEXT: addi sp, sp, -48 +; LMULMAX8-NEXT: .cfi_def_cfa_offset 48 +; LMULMAX8-NEXT: sd ra, 40(sp) # 8-byte Folded Spill ; LMULMAX8-NEXT: .cfi_offset ra, -8 -; LMULMAX8-NEXT: .cfi_offset s0, -16 -; LMULMAX8-NEXT: addi s0, sp, 256 -; LMULMAX8-NEXT: .cfi_def_cfa s0, 0 -; LMULMAX8-NEXT: andi sp, sp, -128 ; LMULMAX8-NEXT: vsetivli zero, 2, e32, mf2, ta, ma -; LMULMAX8-NEXT: vle32.v v8, (a0) +; LMULMAX8-NEXT: vle32.v v16, (a0) ; LMULMAX8-NEXT: li a0, 32 ; LMULMAX8-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; LMULMAX8-NEXT: vle32.v v16, (a1) -; LMULMAX8-NEXT: mv a1, sp +; LMULMAX8-NEXT: vle32.v v8, (a1) ; LMULMAX8-NEXT: mv a0, sp -; LMULMAX8-NEXT: vse32.v v16, (a1) -; LMULMAX8-NEXT: vmv1r.v v9, v8 -; LMULMAX8-NEXT: vmv1r.v v10, v8 -; LMULMAX8-NEXT: vmv1r.v v11, v8 -; LMULMAX8-NEXT: vmv1r.v v12, v8 +; LMULMAX8-NEXT: vsetivli zero, 2, e32, mf2, ta, ma +; LMULMAX8-NEXT: vse32.v v16, (a0) +; LMULMAX8-NEXT: addi a0, sp, 8 +; LMULMAX8-NEXT: vse32.v v16, (a0) +; LMULMAX8-NEXT: addi a0, sp, 16 +; LMULMAX8-NEXT: vse32.v v16, (a0) +; LMULMAX8-NEXT: addi a0, sp, 24 +; LMULMAX8-NEXT: vse32.v v16, (a0) +; LMULMAX8-NEXT: addi a5, sp, 32 +; LMULMAX8-NEXT: addi a0, sp, 32 +; LMULMAX8-NEXT: addi a1, sp, 24 +; LMULMAX8-NEXT: addi a2, sp, 16 +; LMULMAX8-NEXT: addi a3, sp, 8 +; LMULMAX8-NEXT: mv a4, sp +; LMULMAX8-NEXT: vse32.v v16, (a5) +; LMULMAX8-NEXT: vmv8r.v v16, v8 ; LMULMAX8-NEXT: call split_vector_args@plt -; LMULMAX8-NEXT: addi sp, s0, -256 -; LMULMAX8-NEXT: ld ra, 248(sp) # 8-byte Folded Reload -; LMULMAX8-NEXT: ld s0, 240(sp) # 8-byte Folded Reload -; LMULMAX8-NEXT: addi sp, sp, 256 +; LMULMAX8-NEXT: ld ra, 40(sp) # 8-byte Folded Reload +; LMULMAX8-NEXT: addi sp, sp, 48 ; LMULMAX8-NEXT: ret ; ; LMULMAX4-LABEL: call_split_vector_args: ; LMULMAX4: # %bb.0: -; LMULMAX4-NEXT: addi sp, sp, -256 -; LMULMAX4-NEXT: .cfi_def_cfa_offset 256 -; LMULMAX4-NEXT: sd ra, 248(sp) # 8-byte Folded Spill -; LMULMAX4-NEXT: sd s0, 240(sp) # 8-byte Folded Spill +; LMULMAX4-NEXT: addi sp, sp, -128 +; LMULMAX4-NEXT: .cfi_def_cfa_offset 128 +; LMULMAX4-NEXT: sd ra, 120(sp) # 8-byte Folded Spill +; LMULMAX4-NEXT: sd s0, 112(sp) # 8-byte Folded Spill ; LMULMAX4-NEXT: .cfi_offset ra, -8 ; LMULMAX4-NEXT: .cfi_offset s0, -16 -; LMULMAX4-NEXT: addi s0, sp, 256 +; LMULMAX4-NEXT: addi s0, sp, 128 ; LMULMAX4-NEXT: .cfi_def_cfa s0, 0 ; LMULMAX4-NEXT: andi sp, sp, -128 ; LMULMAX4-NEXT: vsetivli zero, 2, e32, mf2, ta, ma -; LMULMAX4-NEXT: vle32.v v8, (a0) +; LMULMAX4-NEXT: vle32.v v20, (a0) ; LMULMAX4-NEXT: vsetivli zero, 16, e32, m4, ta, ma -; LMULMAX4-NEXT: vle32.v v16, (a1) +; LMULMAX4-NEXT: vle32.v v8, (a1) ; LMULMAX4-NEXT: addi a0, a1, 64 -; LMULMAX4-NEXT: vle32.v v20, (a0) -; LMULMAX4-NEXT: addi a0, sp, 64 -; LMULMAX4-NEXT: vse32.v v20, (a0) -; LMULMAX4-NEXT: mv a1, sp +; LMULMAX4-NEXT: vle32.v v12, (a0) ; LMULMAX4-NEXT: mv a0, sp -; LMULMAX4-NEXT: vse32.v v16, (a1) -; LMULMAX4-NEXT: vmv1r.v v9, v8 -; LMULMAX4-NEXT: vmv1r.v v10, v8 -; LMULMAX4-NEXT: vmv1r.v v11, v8 -; LMULMAX4-NEXT: vmv1r.v v12, v8 +; LMULMAX4-NEXT: vse32.v v12, (a0) +; LMULMAX4-NEXT: addi a2, sp, 104 +; LMULMAX4-NEXT: vsetivli zero, 2, e32, mf2, ta, ma +; LMULMAX4-NEXT: addi a0, sp, 104 +; LMULMAX4-NEXT: mv a1, sp +; LMULMAX4-NEXT: vse32.v v20, (a2) +; LMULMAX4-NEXT: vmv1r.v v21, v20 +; LMULMAX4-NEXT: vmv1r.v v22, v20 +; LMULMAX4-NEXT: vmv1r.v v23, v20 +; LMULMAX4-NEXT: vmv4r.v v16, v8 ; LMULMAX4-NEXT: call split_vector_args@plt -; LMULMAX4-NEXT: addi sp, s0, -256 -; LMULMAX4-NEXT: ld ra, 248(sp) # 8-byte Folded Reload -; LMULMAX4-NEXT: ld s0, 240(sp) # 8-byte Folded Reload -; LMULMAX4-NEXT: addi sp, sp, 256 +; LMULMAX4-NEXT: addi sp, s0, -128 +; LMULMAX4-NEXT: ld ra, 120(sp) # 8-byte Folded Reload +; LMULMAX4-NEXT: ld s0, 112(sp) # 8-byte Folded Reload +; LMULMAX4-NEXT: addi sp, sp, 128 ; LMULMAX4-NEXT: ret ; ; LMULMAX2-LABEL: call_split_vector_args: @@ -1095,27 +1095,29 @@ ; LMULMAX2-NEXT: .cfi_def_cfa s0, 0 ; LMULMAX2-NEXT: andi sp, sp, -128 ; LMULMAX2-NEXT: vsetivli zero, 2, e32, mf2, ta, ma -; LMULMAX2-NEXT: vle32.v v8, (a0) +; LMULMAX2-NEXT: vle32.v v20, (a0) ; LMULMAX2-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; LMULMAX2-NEXT: vle32.v v14, (a1) +; LMULMAX2-NEXT: vle32.v v8, (a1) ; LMULMAX2-NEXT: addi a0, a1, 32 -; LMULMAX2-NEXT: vle32.v v16, (a0) +; LMULMAX2-NEXT: vle32.v v10, (a0) ; LMULMAX2-NEXT: addi a0, a1, 64 -; LMULMAX2-NEXT: vle32.v v18, (a0) +; LMULMAX2-NEXT: vle32.v v12, (a0) ; LMULMAX2-NEXT: addi a0, a1, 96 -; LMULMAX2-NEXT: vle32.v v20, (a0) -; LMULMAX2-NEXT: addi a0, sp, 64 -; LMULMAX2-NEXT: vse32.v v20, (a0) +; LMULMAX2-NEXT: vle32.v v14, (a0) ; LMULMAX2-NEXT: addi a0, sp, 32 -; LMULMAX2-NEXT: vse32.v v18, (a0) -; LMULMAX2-NEXT: mv a1, sp +; LMULMAX2-NEXT: vse32.v v14, (a0) ; LMULMAX2-NEXT: mv a0, sp -; LMULMAX2-NEXT: vse32.v v16, (a1) -; LMULMAX2-NEXT: vmv1r.v v9, v8 -; LMULMAX2-NEXT: vmv1r.v v10, v8 -; LMULMAX2-NEXT: vmv1r.v v11, v8 -; LMULMAX2-NEXT: vmv1r.v v12, v8 -; LMULMAX2-NEXT: vmv.v.v v22, v14 +; LMULMAX2-NEXT: vse32.v v12, (a0) +; LMULMAX2-NEXT: addi a2, sp, 104 +; LMULMAX2-NEXT: vsetivli zero, 2, e32, mf2, ta, ma +; LMULMAX2-NEXT: addi a0, sp, 104 +; LMULMAX2-NEXT: mv a1, sp +; LMULMAX2-NEXT: vse32.v v20, (a2) +; LMULMAX2-NEXT: vmv1r.v v21, v20 +; LMULMAX2-NEXT: vmv1r.v v22, v20 +; LMULMAX2-NEXT: vmv1r.v v23, v20 +; LMULMAX2-NEXT: vmv2r.v v16, v8 +; LMULMAX2-NEXT: vmv2r.v v18, v10 ; LMULMAX2-NEXT: call split_vector_args@plt ; LMULMAX2-NEXT: addi sp, s0, -128 ; LMULMAX2-NEXT: ld ra, 120(sp) # 8-byte Folded Reload diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert-subvector-shuffle.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert-subvector-shuffle.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert-subvector-shuffle.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-insert-subvector-shuffle.ll @@ -169,7 +169,8 @@ ; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma ; CHECK-NEXT: vid.v v9 ; CHECK-NEXT: vsetivli zero, 2, e32, m1, tu, ma -; CHECK-NEXT: vadd.vv v8, v10, v9 +; CHECK-NEXT: vadd.vv v10, v8, v9 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %v3 = add <8 x i32> %v2, %v4 = shufflevector <8 x i32> %v3, <8 x i32> poison, <4 x i32> @@ -182,9 +183,10 @@ ; CHECK-LABEL: insert_subvector_vp_add_v4i32_v8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; CHECK-NEXT: vadd.vi v10, v10, 1, v0.t +; CHECK-NEXT: vadd.vi v8, v8, 1, v0.t ; CHECK-NEXT: vsetivli zero, 2, e32, m1, tu, ma -; CHECK-NEXT: vmv.v.v v8, v10 +; CHECK-NEXT: vmv.v.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %v3 = call <8 x i32> @llvm.vp.add.v8i32(<8 x i32> %v2, <8 x i32> , <8 x i1> %mask, i32 8) %v4 = shufflevector <8 x i32> %v3, <8 x i32> poison, <4 x i32> diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-gather.ll @@ -2493,20 +2493,18 @@ ; RV32-LABEL: mgather_baseidx_v8i8_v8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf4 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i8_v8i32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf8 v12, v8 +; RV64V-NEXT: vsext.vf8 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8i32: @@ -2516,32 +2514,32 @@ ; RV64ZVE32F-NEXT: andi a2, a1, 1 ; RV64ZVE32F-NEXT: beqz a2, .LBB35_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vmv.s.x v8, a2 ; RV64ZVE32F-NEXT: .LBB35_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB35_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB35_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e8, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB35_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -2554,85 +2552,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB35_9 ; RV64ZVE32F-NEXT: .LBB35_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB35_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB35_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB35_16 ; RV64ZVE32F-NEXT: .LBB35_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB35_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB35_6 ; RV64ZVE32F-NEXT: .LBB35_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB35_7 ; RV64ZVE32F-NEXT: .LBB35_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB35_8 ; RV64ZVE32F-NEXT: j .LBB35_9 ; RV64ZVE32F-NEXT: .LBB35_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB35_11 ; RV64ZVE32F-NEXT: .LBB35_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: lw a0, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a0 +; RV64ZVE32F-NEXT: vmv.s.x v10, a0 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %ptrs = getelementptr inbounds i32, ptr %base, <8 x i8> %idxs %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru) @@ -2643,20 +2639,18 @@ ; RV32-LABEL: mgather_baseidx_sext_v8i8_v8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf4 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8i32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf8 v12, v8 +; RV64V-NEXT: vsext.vf8 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8i32: @@ -2666,32 +2660,32 @@ ; RV64ZVE32F-NEXT: andi a2, a1, 1 ; RV64ZVE32F-NEXT: beqz a2, .LBB36_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vmv.s.x v8, a2 ; RV64ZVE32F-NEXT: .LBB36_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB36_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB36_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e8, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB36_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -2704,85 +2698,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB36_9 ; RV64ZVE32F-NEXT: .LBB36_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB36_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB36_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB36_16 ; RV64ZVE32F-NEXT: .LBB36_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB36_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB36_6 ; RV64ZVE32F-NEXT: .LBB36_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB36_7 ; RV64ZVE32F-NEXT: .LBB36_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB36_8 ; RV64ZVE32F-NEXT: j .LBB36_9 ; RV64ZVE32F-NEXT: .LBB36_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB36_11 ; RV64ZVE32F-NEXT: .LBB36_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: lw a0, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a0 +; RV64ZVE32F-NEXT: vmv.s.x v10, a0 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = sext <8 x i8> %idxs to <8 x i32> %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs @@ -2794,20 +2786,18 @@ ; RV32-LABEL: mgather_baseidx_zext_v8i8_v8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vzext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vzext.vf4 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8i32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vzext.vf8 v12, v8 +; RV64V-NEXT: vzext.vf8 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8i32: @@ -2817,20 +2807,20 @@ ; RV64ZVE32F-NEXT: andi a2, a1, 1 ; RV64ZVE32F-NEXT: beqz a2, .LBB37_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vmv.s.x v8, a2 ; RV64ZVE32F-NEXT: .LBB37_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB37_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 @@ -2838,13 +2828,13 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB37_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e8, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB37_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -2857,29 +2847,28 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB37_9 ; RV64ZVE32F-NEXT: .LBB37_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB37_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB37_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB37_16 ; RV64ZVE32F-NEXT: .LBB37_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB37_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 @@ -2887,38 +2876,38 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB37_6 ; RV64ZVE32F-NEXT: .LBB37_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB37_7 ; RV64ZVE32F-NEXT: .LBB37_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB37_8 ; RV64ZVE32F-NEXT: j .LBB37_9 ; RV64ZVE32F-NEXT: .LBB37_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 @@ -2926,22 +2915,21 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB37_11 ; RV64ZVE32F-NEXT: .LBB37_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: andi a1, a1, 255 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: lw a0, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a0 +; RV64ZVE32F-NEXT: vmv.s.x v10, a0 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = zext <8 x i8> %idxs to <8 x i32> %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs @@ -2953,20 +2941,18 @@ ; RV32-LABEL: mgather_baseidx_v8i16_v8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf2 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i16_v8i32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf4 v12, v8 +; RV64V-NEXT: vsext.vf4 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16_v8i32: @@ -2977,32 +2963,32 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB38_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load ; RV64ZVE32F-NEXT: vsetvli zero, zero, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vmv.s.x v8, a2 ; RV64ZVE32F-NEXT: .LBB38_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB38_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB38_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e16, m1, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB38_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -3015,85 +3001,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB38_9 ; RV64ZVE32F-NEXT: .LBB38_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB38_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB38_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB38_16 ; RV64ZVE32F-NEXT: .LBB38_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB38_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB38_6 ; RV64ZVE32F-NEXT: .LBB38_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB38_7 ; RV64ZVE32F-NEXT: .LBB38_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB38_8 ; RV64ZVE32F-NEXT: j .LBB38_9 ; RV64ZVE32F-NEXT: .LBB38_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB38_11 ; RV64ZVE32F-NEXT: .LBB38_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: lw a0, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a0 +; RV64ZVE32F-NEXT: vmv.s.x v10, a0 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %ptrs = getelementptr inbounds i32, ptr %base, <8 x i16> %idxs %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru) @@ -3104,20 +3088,18 @@ ; RV32-LABEL: mgather_baseidx_sext_v8i16_v8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf2 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8i32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf4 v12, v8 +; RV64V-NEXT: vsext.vf4 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8i32: @@ -3128,32 +3110,32 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB39_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load ; RV64ZVE32F-NEXT: vsetvli zero, zero, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vmv.s.x v8, a2 ; RV64ZVE32F-NEXT: .LBB39_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB39_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB39_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e16, m1, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB39_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -3166,85 +3148,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB39_9 ; RV64ZVE32F-NEXT: .LBB39_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB39_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB39_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB39_16 ; RV64ZVE32F-NEXT: .LBB39_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB39_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB39_6 ; RV64ZVE32F-NEXT: .LBB39_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB39_7 ; RV64ZVE32F-NEXT: .LBB39_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a2 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vmv.s.x v10, a2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB39_8 ; RV64ZVE32F-NEXT: j .LBB39_9 ; RV64ZVE32F-NEXT: .LBB39_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: lw a2, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a2 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB39_11 ; RV64ZVE32F-NEXT: .LBB39_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: lw a0, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a0 +; RV64ZVE32F-NEXT: vmv.s.x v10, a0 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = sext <8 x i16> %idxs to <8 x i32> %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs @@ -3256,20 +3236,18 @@ ; RV32-LABEL: mgather_baseidx_zext_v8i16_v8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vzext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vzext.vf2 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8i32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vzext.vf4 v12, v8 +; RV64V-NEXT: vzext.vf4 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8i32: @@ -3282,20 +3260,20 @@ ; RV64ZVE32F-NEXT: beqz a3, .LBB40_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load ; RV64ZVE32F-NEXT: vsetvli zero, zero, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 ; RV64ZVE32F-NEXT: lw a3, 0(a3) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v10, a3 +; RV64ZVE32F-NEXT: vmv.s.x v8, a3 ; RV64ZVE32F-NEXT: .LBB40_2: # %else ; RV64ZVE32F-NEXT: andi a3, a2, 2 ; RV64ZVE32F-NEXT: beqz a3, .LBB40_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a3, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a3, v11 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -3303,13 +3281,13 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a3 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB40_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e16, m1, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a3, a2, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a3, .LBB40_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a3, a2, 8 @@ -3322,29 +3300,28 @@ ; RV64ZVE32F-NEXT: beqz a3, .LBB40_9 ; RV64ZVE32F-NEXT: .LBB40_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 ; RV64ZVE32F-NEXT: lw a3, 0(a3) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a3 +; RV64ZVE32F-NEXT: vmv.s.x v10, a3 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB40_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a3, a2, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a3, .LBB40_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a2, a2, -128 ; RV64ZVE32F-NEXT: bnez a2, .LBB40_16 ; RV64ZVE32F-NEXT: .LBB40_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB40_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -3352,13 +3329,13 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a3 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a3, a2, 8 ; RV64ZVE32F-NEXT: beqz a3, .LBB40_6 ; RV64ZVE32F-NEXT: .LBB40_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -3366,24 +3343,24 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a3 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a3, a2, 16 ; RV64ZVE32F-NEXT: beqz a3, .LBB40_7 ; RV64ZVE32F-NEXT: .LBB40_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a3, v9 +; RV64ZVE32F-NEXT: vmv.x.s a3, v11 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 ; RV64ZVE32F-NEXT: lw a3, 0(a3) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a3 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vmv.s.x v10, a3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a3, a2, 32 ; RV64ZVE32F-NEXT: bnez a3, .LBB40_8 ; RV64ZVE32F-NEXT: j .LBB40_9 ; RV64ZVE32F-NEXT: .LBB40_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -3391,22 +3368,21 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vmv.s.x v12, a3 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a2, a2, -128 ; RV64ZVE32F-NEXT: beqz a2, .LBB40_11 ; RV64ZVE32F-NEXT: .LBB40_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: and a1, a2, a1 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: lw a0, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vmv.s.x v8, a0 +; RV64ZVE32F-NEXT: vmv.s.x v10, a0 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = zext <8 x i16> %idxs to <8 x i32> %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs @@ -3679,8 +3655,7 @@ ; RV32V-LABEL: mgather_v4i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 4, e64, m2, ta, mu -; RV32V-NEXT: vluxei32.v v10, (zero), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v10 +; RV32V-NEXT: vluxei32.v v8, (zero), v10, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_v4i64: @@ -3808,8 +3783,7 @@ ; RV32V-LABEL: mgather_truemask_v4i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 4, e64, m2, ta, ma -; RV32V-NEXT: vluxei32.v v10, (zero), v8 -; RV32V-NEXT: vmv.v.v v8, v10 +; RV32V-NEXT: vluxei32.v v8, (zero), v10 ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_truemask_v4i64: @@ -3937,7 +3911,6 @@ define <4 x i64> @mgather_falsemask_v4i64(<4 x ptr> %ptrs, <4 x i64> %passthru) { ; RV32V-LABEL: mgather_falsemask_v4i64: ; RV32V: # %bb.0: -; RV32V-NEXT: vmv2r.v v8, v10 ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_falsemask_v4i64: @@ -3986,8 +3959,7 @@ ; RV32V-LABEL: mgather_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (zero), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (zero), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_v8i64: @@ -4224,20 +4196,18 @@ ; RV32V-LABEL: mgather_baseidx_v8i8_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf4 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf4 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i8_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf8 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf8 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_v8i8_v8i64: @@ -4498,20 +4468,18 @@ ; RV32V-LABEL: mgather_baseidx_sext_v8i8_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf4 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf4 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf8 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf8 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8i64: @@ -4773,20 +4741,18 @@ ; RV32V-LABEL: mgather_baseidx_zext_v8i8_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vzext.vf4 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vzext.vf4 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vzext.vf8 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vzext.vf8 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8i64: @@ -5056,20 +5022,18 @@ ; RV32V-LABEL: mgather_baseidx_v8i16_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf2 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf2 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i16_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf4 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf4 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_v8i16_v8i64: @@ -5331,20 +5295,18 @@ ; RV32V-LABEL: mgather_baseidx_sext_v8i16_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf2 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf2 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf4 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf4 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8i64: @@ -5607,20 +5569,18 @@ ; RV32V-LABEL: mgather_baseidx_zext_v8i16_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vzext.vf2 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vzext.vf2 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vzext.vf4 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vzext.vf4 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8i64: @@ -5893,19 +5853,17 @@ ; RV32V-LABEL: mgather_baseidx_v8i32_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsll.vi v8, v8, 3 +; RV32V-NEXT: vsll.vi v12, v12, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i32_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf2 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf2 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_v8i32_v8i64: @@ -6166,19 +6124,17 @@ ; RV32V-LABEL: mgather_baseidx_sext_v8i32_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsll.vi v8, v8, 3 +; RV32V-NEXT: vsll.vi v12, v12, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i32_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf2 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf2 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i32_v8i64: @@ -6440,19 +6396,17 @@ ; RV32V-LABEL: mgather_baseidx_zext_v8i32_v8i64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsll.vi v8, v8, 3 +; RV32V-NEXT: vsll.vi v12, v12, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i32_v8i64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vzext.vf2 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vzext.vf2 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i32_v8i64: @@ -8296,20 +8250,18 @@ ; RV32-LABEL: mgather_baseidx_v8i8_v8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf4 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i8_v8f32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf8 v12, v8 +; RV64V-NEXT: vsext.vf8 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8f32: @@ -8319,32 +8271,32 @@ ; RV64ZVE32F-NEXT: andi a2, a1, 1 ; RV64ZVE32F-NEXT: beqz a2, .LBB74_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 ; RV64ZVE32F-NEXT: .LBB74_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB74_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB74_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e8, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB74_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -8357,85 +8309,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB74_9 ; RV64ZVE32F-NEXT: .LBB74_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB74_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB74_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB74_16 ; RV64ZVE32F-NEXT: .LBB74_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB74_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB74_6 ; RV64ZVE32F-NEXT: .LBB74_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB74_7 ; RV64ZVE32F-NEXT: .LBB74_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB74_8 ; RV64ZVE32F-NEXT: j .LBB74_9 ; RV64ZVE32F-NEXT: .LBB74_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB74_11 ; RV64ZVE32F-NEXT: .LBB74_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: flw fa5, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %ptrs = getelementptr inbounds float, ptr %base, <8 x i8> %idxs %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru) @@ -8446,20 +8396,18 @@ ; RV32-LABEL: mgather_baseidx_sext_v8i8_v8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf4 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8f32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf8 v12, v8 +; RV64V-NEXT: vsext.vf8 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8f32: @@ -8469,32 +8417,32 @@ ; RV64ZVE32F-NEXT: andi a2, a1, 1 ; RV64ZVE32F-NEXT: beqz a2, .LBB75_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 ; RV64ZVE32F-NEXT: .LBB75_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB75_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB75_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e8, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB75_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -8507,85 +8455,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB75_9 ; RV64ZVE32F-NEXT: .LBB75_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB75_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB75_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB75_16 ; RV64ZVE32F-NEXT: .LBB75_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB75_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB75_6 ; RV64ZVE32F-NEXT: .LBB75_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB75_7 ; RV64ZVE32F-NEXT: .LBB75_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB75_8 ; RV64ZVE32F-NEXT: j .LBB75_9 ; RV64ZVE32F-NEXT: .LBB75_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB75_11 ; RV64ZVE32F-NEXT: .LBB75_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: flw fa5, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = sext <8 x i8> %idxs to <8 x i32> %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs @@ -8597,20 +8543,18 @@ ; RV32-LABEL: mgather_baseidx_zext_v8i8_v8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vzext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vzext.vf4 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8f32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vzext.vf8 v12, v8 +; RV64V-NEXT: vzext.vf8 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8f32: @@ -8620,20 +8564,20 @@ ; RV64ZVE32F-NEXT: andi a2, a1, 1 ; RV64ZVE32F-NEXT: beqz a2, .LBB76_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 ; RV64ZVE32F-NEXT: .LBB76_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB76_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 @@ -8641,13 +8585,13 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB76_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e8, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB76_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -8660,29 +8604,28 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB76_9 ; RV64ZVE32F-NEXT: .LBB76_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB76_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e8, mf4, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB76_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB76_16 ; RV64ZVE32F-NEXT: .LBB76_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB76_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 @@ -8690,38 +8633,38 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB76_6 ; RV64ZVE32F-NEXT: .LBB76_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB76_7 ; RV64ZVE32F-NEXT: .LBB76_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB76_8 ; RV64ZVE32F-NEXT: j .LBB76_9 ; RV64ZVE32F-NEXT: .LBB76_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: andi a2, a2, 255 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 @@ -8729,22 +8672,21 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB76_11 ; RV64ZVE32F-NEXT: .LBB76_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e8, mf4, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: andi a1, a1, 255 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: flw fa5, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = zext <8 x i8> %idxs to <8 x i32> %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs @@ -8756,20 +8698,18 @@ ; RV32-LABEL: mgather_baseidx_v8i16_v8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf2 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i16_v8f32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf4 v12, v8 +; RV64V-NEXT: vsext.vf4 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16_v8f32: @@ -8780,32 +8720,32 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB77_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load ; RV64ZVE32F-NEXT: vsetvli zero, zero, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 ; RV64ZVE32F-NEXT: .LBB77_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB77_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB77_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e16, m1, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB77_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -8818,85 +8758,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB77_9 ; RV64ZVE32F-NEXT: .LBB77_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB77_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB77_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB77_16 ; RV64ZVE32F-NEXT: .LBB77_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB77_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB77_6 ; RV64ZVE32F-NEXT: .LBB77_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB77_7 ; RV64ZVE32F-NEXT: .LBB77_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB77_8 ; RV64ZVE32F-NEXT: j .LBB77_9 ; RV64ZVE32F-NEXT: .LBB77_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB77_11 ; RV64ZVE32F-NEXT: .LBB77_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: flw fa5, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %ptrs = getelementptr inbounds float, ptr %base, <8 x i16> %idxs %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru) @@ -8907,20 +8845,18 @@ ; RV32-LABEL: mgather_baseidx_sext_v8i16_v8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vsext.vf2 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8f32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vsext.vf4 v12, v8 +; RV64V-NEXT: vsext.vf4 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8f32: @@ -8931,32 +8867,32 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB78_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load ; RV64ZVE32F-NEXT: vsetvli zero, zero, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 ; RV64ZVE32F-NEXT: .LBB78_2: # %else ; RV64ZVE32F-NEXT: andi a2, a1, 2 ; RV64ZVE32F-NEXT: beqz a2, .LBB78_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB78_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e16, m1, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB78_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a2, a1, 8 @@ -8969,85 +8905,83 @@ ; RV64ZVE32F-NEXT: beqz a2, .LBB78_9 ; RV64ZVE32F-NEXT: .LBB78_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB78_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a2, a1, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a2, .LBB78_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: bnez a1, .LBB78_16 ; RV64ZVE32F-NEXT: .LBB78_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB78_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a2, a1, 8 ; RV64ZVE32F-NEXT: beqz a2, .LBB78_6 ; RV64ZVE32F-NEXT: .LBB78_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a2, a1, 16 ; RV64ZVE32F-NEXT: beqz a2, .LBB78_7 ; RV64ZVE32F-NEXT: .LBB78_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a2, v9 +; RV64ZVE32F-NEXT: vmv.x.s a2, v11 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a2, a1, 32 ; RV64ZVE32F-NEXT: bnez a2, .LBB78_8 ; RV64ZVE32F-NEXT: j .LBB78_9 ; RV64ZVE32F-NEXT: .LBB78_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: slli a2, a2, 2 ; RV64ZVE32F-NEXT: add a2, a0, a2 ; RV64ZVE32F-NEXT: flw fa5, 0(a2) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a1, a1, -128 ; RV64ZVE32F-NEXT: beqz a1, .LBB78_11 ; RV64ZVE32F-NEXT: .LBB78_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a1, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a1, v10 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: flw fa5, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = sext <8 x i16> %idxs to <8 x i32> %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs @@ -9059,20 +8993,18 @@ ; RV32-LABEL: mgather_baseidx_zext_v8i16_v8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu -; RV32-NEXT: vzext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 2 -; RV32-NEXT: vluxei32.v v10, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vzext.vf2 v12, v10 +; RV32-NEXT: vsll.vi v10, v12, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v10, v0.t ; RV32-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8f32: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, ma -; RV64V-NEXT: vzext.vf4 v12, v8 +; RV64V-NEXT: vzext.vf4 v12, v10 ; RV64V-NEXT: vsll.vi v12, v12, 2 ; RV64V-NEXT: vsetvli zero, zero, e32, m2, ta, mu -; RV64V-NEXT: vluxei64.v v10, (a0), v12, v0.t -; RV64V-NEXT: vmv.v.v v8, v10 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8f32: @@ -9085,20 +9017,20 @@ ; RV64ZVE32F-NEXT: beqz a3, .LBB79_2 ; RV64ZVE32F-NEXT: # %bb.1: # %cond.load ; RV64ZVE32F-NEXT: vsetvli zero, zero, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 ; RV64ZVE32F-NEXT: flw fa5, 0(a3) ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 ; RV64ZVE32F-NEXT: .LBB79_2: # %else ; RV64ZVE32F-NEXT: andi a3, a2, 2 ; RV64ZVE32F-NEXT: beqz a3, .LBB79_4 ; RV64ZVE32F-NEXT: # %bb.3: # %cond.load1 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a3, v9 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a3, v11 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -9106,13 +9038,13 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 1 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 1 ; RV64ZVE32F-NEXT: .LBB79_4: # %else2 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e16, m1, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v9, v8, 4 +; RV64ZVE32F-NEXT: vslidedown.vi v11, v10, 4 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a3, a2, 4 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 2 ; RV64ZVE32F-NEXT: bnez a3, .LBB79_12 ; RV64ZVE32F-NEXT: # %bb.5: # %else5 ; RV64ZVE32F-NEXT: andi a3, a2, 8 @@ -9125,29 +9057,28 @@ ; RV64ZVE32F-NEXT: beqz a3, .LBB79_9 ; RV64ZVE32F-NEXT: .LBB79_8: # %cond.load13 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 1 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 1 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 ; RV64ZVE32F-NEXT: flw fa5, 0(a3) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 6, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 5 ; RV64ZVE32F-NEXT: .LBB79_9: # %else14 ; RV64ZVE32F-NEXT: vsetivli zero, 2, e16, mf2, ta, ma ; RV64ZVE32F-NEXT: andi a3, a2, 64 -; RV64ZVE32F-NEXT: vslidedown.vi v8, v9, 2 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v11, 2 ; RV64ZVE32F-NEXT: bnez a3, .LBB79_15 ; RV64ZVE32F-NEXT: # %bb.10: # %else17 ; RV64ZVE32F-NEXT: andi a2, a2, -128 ; RV64ZVE32F-NEXT: bnez a2, .LBB79_16 ; RV64ZVE32F-NEXT: .LBB79_11: # %else20 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 ; RV64ZVE32F-NEXT: ret ; RV64ZVE32F-NEXT: .LBB79_12: # %cond.load4 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -9155,13 +9086,13 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 3, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 2 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 2 ; RV64ZVE32F-NEXT: andi a3, a2, 8 ; RV64ZVE32F-NEXT: beqz a3, .LBB79_6 ; RV64ZVE32F-NEXT: .LBB79_13: # %cond.load7 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -9169,24 +9100,24 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 4, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 3 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 3 ; RV64ZVE32F-NEXT: andi a3, a2, 16 ; RV64ZVE32F-NEXT: beqz a3, .LBB79_7 ; RV64ZVE32F-NEXT: .LBB79_14: # %cond.load10 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vmv.x.s a3, v9 +; RV64ZVE32F-NEXT: vmv.x.s a3, v11 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 ; RV64ZVE32F-NEXT: flw fa5, 0(a3) ; RV64ZVE32F-NEXT: vsetivli zero, 5, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 4 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 4 ; RV64ZVE32F-NEXT: andi a3, a2, 32 ; RV64ZVE32F-NEXT: bnez a3, .LBB79_8 ; RV64ZVE32F-NEXT: j .LBB79_9 ; RV64ZVE32F-NEXT: .LBB79_15: # %cond.load16 -; RV64ZVE32F-NEXT: vmv.x.s a3, v8 +; RV64ZVE32F-NEXT: vmv.x.s a3, v10 ; RV64ZVE32F-NEXT: and a3, a3, a1 ; RV64ZVE32F-NEXT: slli a3, a3, 2 ; RV64ZVE32F-NEXT: add a3, a0, a3 @@ -9194,22 +9125,21 @@ ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma ; RV64ZVE32F-NEXT: vfmv.s.f v12, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 7, e32, m2, tu, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v12, 6 +; RV64ZVE32F-NEXT: vslideup.vi v8, v12, 6 ; RV64ZVE32F-NEXT: andi a2, a2, -128 ; RV64ZVE32F-NEXT: beqz a2, .LBB79_11 ; RV64ZVE32F-NEXT: .LBB79_16: # %cond.load19 ; RV64ZVE32F-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64ZVE32F-NEXT: vslidedown.vi v8, v8, 1 -; RV64ZVE32F-NEXT: vmv.x.s a2, v8 +; RV64ZVE32F-NEXT: vslidedown.vi v10, v10, 1 +; RV64ZVE32F-NEXT: vmv.x.s a2, v10 ; RV64ZVE32F-NEXT: and a1, a2, a1 ; RV64ZVE32F-NEXT: slli a1, a1, 2 ; RV64ZVE32F-NEXT: add a0, a0, a1 ; RV64ZVE32F-NEXT: flw fa5, 0(a0) ; RV64ZVE32F-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; RV64ZVE32F-NEXT: vfmv.s.f v8, fa5 +; RV64ZVE32F-NEXT: vfmv.s.f v10, fa5 ; RV64ZVE32F-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64ZVE32F-NEXT: vslideup.vi v10, v8, 7 -; RV64ZVE32F-NEXT: vmv2r.v v8, v10 +; RV64ZVE32F-NEXT: vslideup.vi v8, v10, 7 ; RV64ZVE32F-NEXT: ret %eidxs = zext <8 x i16> %idxs to <8 x i32> %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs @@ -9470,8 +9400,7 @@ ; RV32V-LABEL: mgather_v4f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 4, e64, m2, ta, mu -; RV32V-NEXT: vluxei32.v v10, (zero), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v10 +; RV32V-NEXT: vluxei32.v v8, (zero), v10, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_v4f64: @@ -9577,8 +9506,7 @@ ; RV32V-LABEL: mgather_truemask_v4f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 4, e64, m2, ta, ma -; RV32V-NEXT: vluxei32.v v10, (zero), v8 -; RV32V-NEXT: vmv.v.v v8, v10 +; RV32V-NEXT: vluxei32.v v8, (zero), v10 ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_truemask_v4f64: @@ -9684,7 +9612,6 @@ define <4 x double> @mgather_falsemask_v4f64(<4 x ptr> %ptrs, <4 x double> %passthru) { ; RV32V-LABEL: mgather_falsemask_v4f64: ; RV32V: # %bb.0: -; RV32V-NEXT: vmv2r.v v8, v10 ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_falsemask_v4f64: @@ -9717,8 +9644,7 @@ ; RV32V-LABEL: mgather_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (zero), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (zero), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_v8f64: @@ -9904,20 +9830,18 @@ ; RV32V-LABEL: mgather_baseidx_v8i8_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf4 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf4 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i8_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf8 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf8 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_v8i8_v8f64: @@ -10119,20 +10043,18 @@ ; RV32V-LABEL: mgather_baseidx_sext_v8i8_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf4 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf4 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf8 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf8 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8f64: @@ -10335,20 +10257,18 @@ ; RV32V-LABEL: mgather_baseidx_zext_v8i8_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vzext.vf4 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vzext.vf4 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vzext.vf8 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vzext.vf8 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8f64: @@ -10559,20 +10479,18 @@ ; RV32V-LABEL: mgather_baseidx_v8i16_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf2 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf2 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i16_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf4 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf4 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_v8i16_v8f64: @@ -10775,20 +10693,18 @@ ; RV32V-LABEL: mgather_baseidx_sext_v8i16_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsext.vf2 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vsext.vf2 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf4 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf4 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8f64: @@ -10992,20 +10908,18 @@ ; RV32V-LABEL: mgather_baseidx_zext_v8i16_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vzext.vf2 v10, v8 -; RV32V-NEXT: vsll.vi v8, v10, 3 +; RV32V-NEXT: vzext.vf2 v14, v12 +; RV32V-NEXT: vsll.vi v12, v14, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vzext.vf4 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vzext.vf4 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8f64: @@ -11219,19 +11133,17 @@ ; RV32V-LABEL: mgather_baseidx_v8i32_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsll.vi v8, v8, 3 +; RV32V-NEXT: vsll.vi v12, v12, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_v8i32_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf2 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf2 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_v8i32_v8f64: @@ -11433,19 +11345,17 @@ ; RV32V-LABEL: mgather_baseidx_sext_v8i32_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsll.vi v8, v8, 3 +; RV32V-NEXT: vsll.vi v12, v12, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_sext_v8i32_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vsext.vf2 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vsext.vf2 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i32_v8f64: @@ -11648,19 +11558,17 @@ ; RV32V-LABEL: mgather_baseidx_zext_v8i32_v8f64: ; RV32V: # %bb.0: ; RV32V-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV32V-NEXT: vsll.vi v8, v8, 3 +; RV32V-NEXT: vsll.vi v12, v12, 3 ; RV32V-NEXT: vsetvli zero, zero, e64, m4, ta, mu -; RV32V-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32V-NEXT: vmv.v.v v8, v12 +; RV32V-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32V-NEXT: ret ; ; RV64V-LABEL: mgather_baseidx_zext_v8i32_v8f64: ; RV64V: # %bb.0: ; RV64V-NEXT: vsetivli zero, 8, e64, m4, ta, mu -; RV64V-NEXT: vzext.vf2 v16, v8 -; RV64V-NEXT: vsll.vi v8, v16, 3 -; RV64V-NEXT: vluxei64.v v12, (a0), v8, v0.t -; RV64V-NEXT: vmv.v.v v8, v12 +; RV64V-NEXT: vzext.vf2 v16, v12 +; RV64V-NEXT: vsll.vi v12, v16, 3 +; RV64V-NEXT: vluxei64.v v8, (a0), v12, v0.t ; RV64V-NEXT: ret ; ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i32_v8f64: diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-masked-scatter.ll @@ -270,7 +270,7 @@ ; RV64-LABEL: mscatter_v4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v4i8: @@ -330,7 +330,7 @@ ; RV64-LABEL: mscatter_truemask_v4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_truemask_v4i8: @@ -396,13 +396,13 @@ ; RV32-LABEL: mscatter_v8i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e8, mf2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_v8i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 8, e8, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v8i8: @@ -817,7 +817,7 @@ ; RV64-LABEL: mscatter_v4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v4i16: @@ -877,7 +877,7 @@ ; RV64-LABEL: mscatter_truemask_v4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_truemask_v4i16: @@ -943,13 +943,13 @@ ; RV32-LABEL: mscatter_v8i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_v8i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 8, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v8i16: @@ -1725,7 +1725,7 @@ ; RV64-LABEL: mscatter_v4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v4i32: @@ -1785,7 +1785,7 @@ ; RV64-LABEL: mscatter_truemask_v4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_truemask_v4i32: @@ -1857,7 +1857,7 @@ ; RV64-LABEL: mscatter_v8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v8i32: @@ -6072,7 +6072,7 @@ ; RV64-LABEL: mscatter_v4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v4f16: @@ -6132,7 +6132,7 @@ ; RV64-LABEL: mscatter_truemask_v4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_truemask_v4f16: @@ -6198,13 +6198,13 @@ ; RV32-LABEL: mscatter_v8f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetivli zero, 8, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_v8f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 8, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v8f16: @@ -6926,7 +6926,7 @@ ; RV64-LABEL: mscatter_v4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v4f32: @@ -6986,7 +6986,7 @@ ; RV64-LABEL: mscatter_truemask_v4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_truemask_v4f32: @@ -7058,7 +7058,7 @@ ; RV64-LABEL: mscatter_v8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetivli zero, 8, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret ; ; RV64ZVE32F-LABEL: mscatter_v8f32: diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-peephole-vmerge-vops.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-peephole-vmerge-vops.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-peephole-vmerge-vops.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-peephole-vmerge-vops.ll @@ -89,7 +89,8 @@ ; CHECK-LABEL: vpmerge_vpsitofp: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement <8 x i1> poison, i1 true, i32 0 %mask = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer @@ -119,7 +120,8 @@ ; CHECK-LABEL: vpmerge_vptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 0, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement <8 x i1> poison, i1 true, i32 0 %mask = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer @@ -149,7 +151,8 @@ ; CHECK-LABEL: vpmerge_vpfptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement <8 x i1> poison, i1 true, i32 0 %mask = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer @@ -273,7 +276,8 @@ ; CHECK-LABEL: vpselect_vpsitofp: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement <8 x i1> poison, i1 true, i32 0 %mask = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer @@ -301,7 +305,8 @@ ; CHECK-LABEL: vpselect_vptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement <8 x i1> poison, i1 true, i32 0 %mask = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer @@ -329,7 +334,8 @@ ; CHECK-LABEL: vpselect_vpfptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement <8 x i1> poison, i1 true, i32 0 %mask = shufflevector <8 x i1> %splat, <8 x i1> poison, <8 x i32> zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-unaligned.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-unaligned.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-unaligned.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-unaligned.ll @@ -342,9 +342,9 @@ ; RV64-SLOW-NEXT: ret ; RV64-SLOW-NEXT: .LBB6_5: # %cond.store ; RV64-SLOW-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64-SLOW-NEXT: vmv.x.s a1, v8 +; RV64-SLOW-NEXT: vmv.x.s a1, v10 ; RV64-SLOW-NEXT: vsetivli zero, 1, e64, m1, ta, ma -; RV64-SLOW-NEXT: vmv.x.s a2, v10 +; RV64-SLOW-NEXT: vmv.x.s a2, v8 ; RV64-SLOW-NEXT: srli a3, a1, 8 ; RV64-SLOW-NEXT: sb a3, 1(a2) ; RV64-SLOW-NEXT: sb a1, 0(a2) @@ -352,11 +352,11 @@ ; RV64-SLOW-NEXT: beqz a1, .LBB6_2 ; RV64-SLOW-NEXT: .LBB6_6: # %cond.store1 ; RV64-SLOW-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64-SLOW-NEXT: vslidedown.vi v9, v8, 1 -; RV64-SLOW-NEXT: vmv.x.s a1, v9 +; RV64-SLOW-NEXT: vslidedown.vi v11, v10, 1 +; RV64-SLOW-NEXT: vmv.x.s a1, v11 ; RV64-SLOW-NEXT: vsetivli zero, 1, e64, m1, ta, ma -; RV64-SLOW-NEXT: vslidedown.vi v9, v10, 1 -; RV64-SLOW-NEXT: vmv.x.s a2, v9 +; RV64-SLOW-NEXT: vslidedown.vi v11, v8, 1 +; RV64-SLOW-NEXT: vmv.x.s a2, v11 ; RV64-SLOW-NEXT: srli a3, a1, 8 ; RV64-SLOW-NEXT: sb a3, 1(a2) ; RV64-SLOW-NEXT: sb a1, 0(a2) @@ -364,10 +364,10 @@ ; RV64-SLOW-NEXT: beqz a1, .LBB6_3 ; RV64-SLOW-NEXT: .LBB6_7: # %cond.store3 ; RV64-SLOW-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64-SLOW-NEXT: vslidedown.vi v9, v8, 2 -; RV64-SLOW-NEXT: vmv.x.s a1, v9 +; RV64-SLOW-NEXT: vslidedown.vi v11, v10, 2 +; RV64-SLOW-NEXT: vmv.x.s a1, v11 ; RV64-SLOW-NEXT: vsetvli zero, zero, e64, m2, ta, ma -; RV64-SLOW-NEXT: vslidedown.vi v12, v10, 2 +; RV64-SLOW-NEXT: vslidedown.vi v12, v8, 2 ; RV64-SLOW-NEXT: vmv.x.s a2, v12 ; RV64-SLOW-NEXT: sb a1, 0(a2) ; RV64-SLOW-NEXT: srli a1, a1, 8 @@ -376,10 +376,10 @@ ; RV64-SLOW-NEXT: beqz a0, .LBB6_4 ; RV64-SLOW-NEXT: .LBB6_8: # %cond.store5 ; RV64-SLOW-NEXT: vsetivli zero, 1, e16, mf2, ta, ma -; RV64-SLOW-NEXT: vslidedown.vi v8, v8, 3 -; RV64-SLOW-NEXT: vmv.x.s a0, v8 +; RV64-SLOW-NEXT: vslidedown.vi v10, v10, 3 +; RV64-SLOW-NEXT: vmv.x.s a0, v10 ; RV64-SLOW-NEXT: vsetvli zero, zero, e64, m2, ta, ma -; RV64-SLOW-NEXT: vslidedown.vi v8, v10, 3 +; RV64-SLOW-NEXT: vslidedown.vi v8, v8, 3 ; RV64-SLOW-NEXT: vmv.x.s a1, v8 ; RV64-SLOW-NEXT: sb a0, 0(a1) ; RV64-SLOW-NEXT: srli a0, a0, 8 @@ -395,7 +395,7 @@ ; RV64-FAST-LABEL: mscatter_v4i16_align1: ; RV64-FAST: # %bb.0: ; RV64-FAST-NEXT: vsetivli zero, 4, e16, mf2, ta, ma -; RV64-FAST-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-FAST-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-FAST-NEXT: ret call void @llvm.masked.scatter.v4i16.v4p0(<4 x i16> %val, <4 x ptr> %ptrs, i32 1, <4 x i1> %m) ret void diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vpscatter.ll @@ -109,7 +109,7 @@ ; RV64-LABEL: vpscatter_v4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v4i8.v4p0(<4 x i8> %val, <4 x ptr> %ptrs, <4 x i1> %m, i32 %evl) ret void @@ -125,7 +125,7 @@ ; RV64-LABEL: vpscatter_truemask_v4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement <4 x i1> poison, i1 1, i32 0 %mtrue = shufflevector <4 x i1> %mhead, <4 x i1> poison, <4 x i32> zeroinitializer @@ -139,13 +139,13 @@ ; RV32-LABEL: vpscatter_v8i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e8, mf2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_v8i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v8i8.v8p0(<8 x i8> %val, <8 x ptr> %ptrs, <8 x i1> %m, i32 %evl) ret void @@ -248,7 +248,7 @@ ; RV64-LABEL: vpscatter_v3i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v3i16.v3p0(<3 x i16> %val, <3 x ptr> %ptrs, <3 x i1> %m, i32 %evl) ret void @@ -264,7 +264,7 @@ ; RV64-LABEL: vpscatter_truemask_v3i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement <3 x i1> poison, i1 1, i32 0 %mtrue = shufflevector <3 x i1> %mhead, <3 x i1> poison, <3 x i32> zeroinitializer @@ -284,7 +284,7 @@ ; RV64-LABEL: vpscatter_v4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v4i16.v4p0(<4 x i16> %val, <4 x ptr> %ptrs, <4 x i1> %m, i32 %evl) ret void @@ -300,7 +300,7 @@ ; RV64-LABEL: vpscatter_truemask_v4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement <4 x i1> poison, i1 1, i32 0 %mtrue = shufflevector <4 x i1> %mhead, <4 x i1> poison, <4 x i32> zeroinitializer @@ -314,13 +314,13 @@ ; RV32-LABEL: vpscatter_v8i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_v8i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v8i16.v8p0(<8 x i16> %val, <8 x ptr> %ptrs, <8 x i1> %m, i32 %evl) ret void @@ -470,7 +470,7 @@ ; RV64-LABEL: vpscatter_v4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v4i32.v4p0(<4 x i32> %val, <4 x ptr> %ptrs, <4 x i1> %m, i32 %evl) ret void @@ -486,7 +486,7 @@ ; RV64-LABEL: vpscatter_truemask_v4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement <4 x i1> poison, i1 1, i32 0 %mtrue = shufflevector <4 x i1> %mhead, <4 x i1> poison, <4 x i32> zeroinitializer @@ -506,7 +506,7 @@ ; RV64-LABEL: vpscatter_v8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v8i32.v8p0(<8 x i32> %val, <8 x ptr> %ptrs, <8 x i1> %m, i32 %evl) ret void @@ -1010,7 +1010,7 @@ ; RV64-LABEL: vpscatter_v4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v4f16.v4p0(<4 x half> %val, <4 x ptr> %ptrs, <4 x i1> %m, i32 %evl) ret void @@ -1026,7 +1026,7 @@ ; RV64-LABEL: vpscatter_truemask_v4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement <4 x i1> poison, i1 1, i32 0 %mtrue = shufflevector <4 x i1> %mhead, <4 x i1> poison, <4 x i32> zeroinitializer @@ -1040,13 +1040,13 @@ ; RV32-LABEL: vpscatter_v8f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_v8f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v8f16.v8p0(<8 x half> %val, <8 x ptr> %ptrs, <8 x i1> %m, i32 %evl) ret void @@ -1175,7 +1175,7 @@ ; RV64-LABEL: vpscatter_v4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v4f32.v4p0(<4 x float> %val, <4 x ptr> %ptrs, <4 x i1> %m, i32 %evl) ret void @@ -1191,7 +1191,7 @@ ; RV64-LABEL: vpscatter_truemask_v4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10 +; RV64-NEXT: vsoxei64.v v10, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement <4 x i1> poison, i1 1, i32 0 %mtrue = shufflevector <4 x i1> %mhead, <4 x i1> poison, <4 x i32> zeroinitializer @@ -1211,7 +1211,7 @@ ; RV64-LABEL: vpscatter_v8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.v8f32.v8p0(<8 x float> %val, <8 x ptr> %ptrs, <8 x i1> %m, i32 %evl) ret void diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vselect-vp.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vselect-vp.ll --- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vselect-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-vselect-vp.ll @@ -158,22 +158,20 @@ ; CHECK-NEXT: sub sp, sp, a2 ; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb ; CHECK-NEXT: addi a2, sp, 16 -; CHECK-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill -; CHECK-NEXT: vmv1r.v v2, v8 +; CHECK-NEXT: vs8r.v v8, (a2) # Unknown-size Folded Spill ; CHECK-NEXT: vmv1r.v v1, v0 ; CHECK-NEXT: li a2, 128 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma -; CHECK-NEXT: vle8.v v24, (a0) +; CHECK-NEXT: vlm.v v0, (a0) ; CHECK-NEXT: addi a0, a1, 128 -; CHECK-NEXT: vle8.v v8, (a0) +; CHECK-NEXT: vle8.v v24, (a0) ; CHECK-NEXT: addi a0, a3, -128 ; CHECK-NEXT: sltu a4, a3, a0 ; CHECK-NEXT: addi a4, a4, -1 -; CHECK-NEXT: vle8.v v16, (a1) +; CHECK-NEXT: vle8.v v8, (a1) ; CHECK-NEXT: and a0, a4, a0 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma -; CHECK-NEXT: vmv1r.v v0, v2 -; CHECK-NEXT: vmerge.vvm v24, v8, v24, v0 +; CHECK-NEXT: vmerge.vvm v16, v24, v16, v0 ; CHECK-NEXT: bltu a3, a2, .LBB11_2 ; CHECK-NEXT: # %bb.1: ; CHECK-NEXT: li a3, 128 @@ -181,9 +179,8 @@ ; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma ; CHECK-NEXT: vmv1r.v v0, v1 ; CHECK-NEXT: addi a0, sp, 16 -; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload -; CHECK-NEXT: vmerge.vvm v8, v16, v8, v0 -; CHECK-NEXT: vmv8r.v v16, v24 +; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload +; CHECK-NEXT: vmerge.vvm v8, v8, v24, v0 ; CHECK-NEXT: csrr a0, vlenb ; CHECK-NEXT: slli a0, a0, 3 ; CHECK-NEXT: add sp, sp, a0 @@ -199,51 +196,27 @@ ; CHECK-NEXT: addi sp, sp, -16 ; CHECK-NEXT: .cfi_def_cfa_offset 16 ; CHECK-NEXT: csrr a2, vlenb -; CHECK-NEXT: li a3, 24 -; CHECK-NEXT: mul a2, a2, a3 +; CHECK-NEXT: slli a2, a2, 3 ; CHECK-NEXT: sub sp, sp, a2 -; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb +; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb ; CHECK-NEXT: li a2, 128 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma -; CHECK-NEXT: vle8.v v24, (a0) -; CHECK-NEXT: csrr a0, vlenb -; CHECK-NEXT: slli a0, a0, 3 -; CHECK-NEXT: add a0, sp, a0 -; CHECK-NEXT: addi a0, a0, 16 -; CHECK-NEXT: vs8r.v v24, (a0) # Unknown-size Folded Spill +; CHECK-NEXT: vlm.v v1, (a0) ; CHECK-NEXT: addi a0, a1, 128 ; CHECK-NEXT: vle8.v v24, (a0) -; CHECK-NEXT: csrr a0, vlenb -; CHECK-NEXT: slli a0, a0, 4 -; CHECK-NEXT: add a0, sp, a0 -; CHECK-NEXT: addi a0, a0, 16 -; CHECK-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill -; CHECK-NEXT: vmv1r.v v9, v0 -; CHECK-NEXT: vle8.v v16, (a1) ; CHECK-NEXT: addi a0, sp, 16 -; CHECK-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill +; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill +; CHECK-NEXT: vmv1r.v v2, v0 +; CHECK-NEXT: vle8.v v8, (a1) ; CHECK-NEXT: vsetivli zero, 1, e8, m8, ta, ma -; CHECK-NEXT: vmv1r.v v0, v8 -; CHECK-NEXT: csrr a0, vlenb -; CHECK-NEXT: slli a0, a0, 3 -; CHECK-NEXT: add a0, sp, a0 -; CHECK-NEXT: addi a0, a0, 16 -; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload -; CHECK-NEXT: vmerge.vvm v24, v24, v16, v0 +; CHECK-NEXT: vmv1r.v v0, v1 +; CHECK-NEXT: vmerge.vvm v16, v24, v16, v0 ; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma -; CHECK-NEXT: vmv1r.v v0, v9 -; CHECK-NEXT: csrr a0, vlenb -; CHECK-NEXT: slli a0, a0, 4 -; CHECK-NEXT: add a0, sp, a0 -; CHECK-NEXT: addi a0, a0, 16 -; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload -; CHECK-NEXT: addi a0, sp, 16 -; CHECK-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload -; CHECK-NEXT: vmerge.vvm v8, v16, v8, v0 -; CHECK-NEXT: vmv8r.v v16, v24 +; CHECK-NEXT: vmv1r.v v0, v2 +; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload +; CHECK-NEXT: vmerge.vvm v8, v8, v24, v0 ; CHECK-NEXT: csrr a0, vlenb -; CHECK-NEXT: li a1, 24 -; CHECK-NEXT: mul a0, a0, a1 +; CHECK-NEXT: slli a0, a0, 3 ; CHECK-NEXT: add sp, sp, a0 ; CHECK-NEXT: addi sp, sp, 16 ; CHECK-NEXT: ret diff --git a/llvm/test/CodeGen/RISCV/rvv/mgather-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/mgather-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/mgather-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/mgather-sdnode.ll @@ -473,21 +473,19 @@ ; RV32-LABEL: mgather_baseidx_nxv8i8_nxv8i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 +; RV32-NEXT: vsext.vf4 v12, v10 ; RV32-NEXT: vadd.vv v12, v12, v12 ; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV32-NEXT: vluxei32.v v10, (a0), v12, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i8_nxv8i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v10 ; RV64-NEXT: vadd.vv v16, v16, v16 ; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV64-NEXT: vluxei64.v v10, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v10 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds i16, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8i16.nxv8p0( %ptrs, i32 2, %m, %passthru) @@ -498,21 +496,19 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i8_nxv8i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 +; RV32-NEXT: vsext.vf4 v12, v10 ; RV32-NEXT: vadd.vv v12, v12, v12 ; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV32-NEXT: vluxei32.v v10, (a0), v12, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i8_nxv8i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v10 ; RV64-NEXT: vadd.vv v16, v16, v16 ; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV64-NEXT: vluxei64.v v10, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v10 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds i16, ptr %base, %eidxs @@ -524,10 +520,9 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i8_nxv8i16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma -; CHECK-NEXT: vwaddu.vv v12, v8, v8 +; CHECK-NEXT: vwaddu.vv v12, v10, v10 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; CHECK-NEXT: vluxei16.v v10, (a0), v12, v0.t -; CHECK-NEXT: vmv.v.v v8, v10 +; CHECK-NEXT: vluxei16.v v8, (a0), v12, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds i16, ptr %base, %eidxs @@ -719,20 +714,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i8_nxv8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf4 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf4 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i8_nxv8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds i32, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8i32.nxv8p0( %ptrs, i32 4, %m, %passthru) @@ -743,20 +736,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i8_nxv8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf4 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf4 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i8_nxv8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds i32, ptr %base, %eidxs @@ -768,11 +759,10 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i8_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vsll.vi v8, v10, 2 +; CHECK-NEXT: vzext.vf2 v14, v12 +; CHECK-NEXT: vsll.vi v12, v14, 2 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; CHECK-NEXT: vluxei16.v v12, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v12 +; CHECK-NEXT: vluxei16.v v8, (a0), v12, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds i32, ptr %base, %eidxs @@ -784,20 +774,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i16_nxv8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf2 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf2 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i16_nxv8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf4 v16, v8 +; RV64-NEXT: vsext.vf4 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds i32, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8i32.nxv8p0( %ptrs, i32 4, %m, %passthru) @@ -808,20 +796,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i16_nxv8i32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf2 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf2 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i16_nxv8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf4 v16, v8 +; RV64-NEXT: vsext.vf4 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds i32, ptr %base, %eidxs @@ -833,10 +819,9 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i16_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vzext.vf2 v16, v8 -; CHECK-NEXT: vsll.vi v8, v16, 2 -; CHECK-NEXT: vluxei32.v v12, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v12 +; CHECK-NEXT: vzext.vf2 v16, v12 +; CHECK-NEXT: vsll.vi v12, v16, 2 +; CHECK-NEXT: vluxei32.v v8, (a0), v12, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds i32, ptr %base, %eidxs @@ -893,8 +878,7 @@ ; RV32-LABEL: mgather_nxv2i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; RV32-NEXT: vluxei32.v v10, (zero), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vluxei32.v v8, (zero), v10, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv2i64: @@ -913,8 +897,7 @@ ; RV32-LABEL: mgather_nxv4i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; RV32-NEXT: vluxei32.v v12, (zero), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vluxei32.v v8, (zero), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv4i64: @@ -931,8 +914,7 @@ ; RV32-LABEL: mgather_truemask_nxv4i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV32-NEXT: vluxei32.v v12, (zero), v8 -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vluxei32.v v8, (zero), v12 ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_truemask_nxv4i64: @@ -947,10 +929,14 @@ } define @mgather_falsemask_nxv4i64( %ptrs, %passthru) { -; CHECK-LABEL: mgather_falsemask_nxv4i64: -; CHECK: # %bb.0: -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret +; RV32-LABEL: mgather_falsemask_nxv4i64: +; RV32: # %bb.0: +; RV32-NEXT: ret +; +; RV64-LABEL: mgather_falsemask_nxv4i64: +; RV64: # %bb.0: +; RV64-NEXT: vmv4r.v v8, v12 +; RV64-NEXT: ret %v = call @llvm.masked.gather.nxv4i64.nxv4p0( %ptrs, i32 8, zeroinitializer, %passthru) ret %v } @@ -961,8 +947,7 @@ ; RV32-LABEL: mgather_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (zero), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (zero), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv8i64: @@ -979,20 +964,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i8_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf4 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i8_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf8 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf8 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds i64, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8i64.nxv8p0( %ptrs, i32 8, %m, %passthru) @@ -1003,20 +986,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i8_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf4 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i8_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf8 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf8 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds i64, ptr %base, %eidxs @@ -1028,11 +1009,10 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i8_nxv8i64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vsll.vi v8, v10, 3 +; CHECK-NEXT: vzext.vf2 v18, v16 +; CHECK-NEXT: vsll.vi v16, v18, 3 ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; CHECK-NEXT: vluxei16.v v16, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v16 +; CHECK-NEXT: vluxei16.v v8, (a0), v16, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds i64, ptr %base, %eidxs @@ -1044,20 +1024,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i16_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf2 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i16_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf4 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf4 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds i64, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8i64.nxv8p0( %ptrs, i32 8, %m, %passthru) @@ -1068,20 +1046,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i16_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf2 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i16_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf4 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf4 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds i64, ptr %base, %eidxs @@ -1093,11 +1069,10 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i16_nxv8i64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; CHECK-NEXT: vzext.vf2 v12, v8 -; CHECK-NEXT: vsll.vi v8, v12, 3 +; CHECK-NEXT: vzext.vf2 v20, v16 +; CHECK-NEXT: vsll.vi v16, v20, 3 ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; CHECK-NEXT: vluxei32.v v16, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v16 +; CHECK-NEXT: vluxei32.v v8, (a0), v16, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds i64, ptr %base, %eidxs @@ -1109,19 +1084,17 @@ ; RV32-LABEL: mgather_baseidx_nxv8i32_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsll.vi v8, v8, 3 +; RV32-NEXT: vsll.vi v16, v16, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i32_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf2 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf2 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds i64, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8i64.nxv8p0( %ptrs, i32 8, %m, %passthru) @@ -1132,19 +1105,17 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i32_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsll.vi v8, v8, 3 +; RV32-NEXT: vsll.vi v16, v16, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i32_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf2 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf2 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds i64, ptr %base, %eidxs @@ -1156,19 +1127,17 @@ ; RV32-LABEL: mgather_baseidx_zext_nxv8i32_nxv8i64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsll.vi v8, v8, 3 +; RV32-NEXT: vsll.vi v16, v16, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_zext_nxv8i32_nxv8i64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vzext.vf2 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vzext.vf2 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds i64, ptr %base, %eidxs @@ -1209,17 +1178,17 @@ ; RV32: # %bb.0: ; RV32-NEXT: vl8re64.v v24, (a0) ; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (zero), v8, v0.t +; RV32-NEXT: vluxei32.v v8, (zero), v16, v0.t ; RV32-NEXT: csrr a0, vlenb ; RV32-NEXT: srli a2, a0, 3 ; RV32-NEXT: vsetvli a3, zero, e8, mf4, ta, ma ; RV32-NEXT: vslidedown.vx v0, v0, a2 ; RV32-NEXT: vsetvli a2, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v24, (zero), v12, v0.t +; RV32-NEXT: vluxei32.v v24, (zero), v20, v0.t ; RV32-NEXT: slli a0, a0, 3 ; RV32-NEXT: add a0, a1, a0 ; RV32-NEXT: vs8r.v v24, (a0) -; RV32-NEXT: vs8r.v v16, (a1) +; RV32-NEXT: vs8r.v v8, (a1) ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv16i64: @@ -1384,21 +1353,19 @@ ; RV32-LABEL: mgather_baseidx_nxv8i8_nxv8f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 +; RV32-NEXT: vsext.vf4 v12, v10 ; RV32-NEXT: vadd.vv v12, v12, v12 ; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV32-NEXT: vluxei32.v v10, (a0), v12, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i8_nxv8f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v10 ; RV64-NEXT: vadd.vv v16, v16, v16 ; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV64-NEXT: vluxei64.v v10, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v10 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds half, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8f16.nxv8p0( %ptrs, i32 2, %m, %passthru) @@ -1409,21 +1376,19 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i8_nxv8f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 +; RV32-NEXT: vsext.vf4 v12, v10 ; RV32-NEXT: vadd.vv v12, v12, v12 ; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV32-NEXT: vluxei32.v v10, (a0), v12, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i8_nxv8f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v10 ; RV64-NEXT: vadd.vv v16, v16, v16 ; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; RV64-NEXT: vluxei64.v v10, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v10 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds half, ptr %base, %eidxs @@ -1435,10 +1400,9 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i8_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma -; CHECK-NEXT: vwaddu.vv v12, v8, v8 +; CHECK-NEXT: vwaddu.vv v12, v10, v10 ; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu -; CHECK-NEXT: vluxei16.v v10, (a0), v12, v0.t -; CHECK-NEXT: vmv.v.v v8, v10 +; CHECK-NEXT: vluxei16.v v8, (a0), v12, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds half, ptr %base, %eidxs @@ -1586,20 +1550,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i8_nxv8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf4 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf4 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i8_nxv8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds float, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8f32.nxv8p0( %ptrs, i32 4, %m, %passthru) @@ -1610,20 +1572,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i8_nxv8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf4 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf4 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i8_nxv8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf8 v16, v8 +; RV64-NEXT: vsext.vf8 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds float, ptr %base, %eidxs @@ -1635,11 +1595,10 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i8_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vsll.vi v8, v10, 2 +; CHECK-NEXT: vzext.vf2 v14, v12 +; CHECK-NEXT: vsll.vi v12, v14, 2 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; CHECK-NEXT: vluxei16.v v12, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v12 +; CHECK-NEXT: vluxei16.v v8, (a0), v12, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds float, ptr %base, %eidxs @@ -1651,20 +1610,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i16_nxv8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf2 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf2 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i16_nxv8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf4 v16, v8 +; RV64-NEXT: vsext.vf4 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds float, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8f32.nxv8p0( %ptrs, i32 4, %m, %passthru) @@ -1675,20 +1632,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i16_nxv8f32: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; RV32-NEXT: vsext.vf2 v16, v8 -; RV32-NEXT: vsll.vi v8, v16, 2 -; RV32-NEXT: vluxei32.v v12, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vsext.vf2 v16, v12 +; RV32-NEXT: vsll.vi v12, v16, 2 +; RV32-NEXT: vluxei32.v v8, (a0), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i16_nxv8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma -; RV64-NEXT: vsext.vf4 v16, v8 +; RV64-NEXT: vsext.vf4 v16, v12 ; RV64-NEXT: vsll.vi v16, v16, 2 ; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, mu -; RV64-NEXT: vluxei64.v v12, (a0), v16, v0.t -; RV64-NEXT: vmv.v.v v8, v12 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds float, ptr %base, %eidxs @@ -1700,10 +1655,9 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i16_nxv8f32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu -; CHECK-NEXT: vzext.vf2 v16, v8 -; CHECK-NEXT: vsll.vi v8, v16, 2 -; CHECK-NEXT: vluxei32.v v12, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v12 +; CHECK-NEXT: vzext.vf2 v16, v12 +; CHECK-NEXT: vsll.vi v12, v16, 2 +; CHECK-NEXT: vluxei32.v v8, (a0), v12, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds float, ptr %base, %eidxs @@ -1760,8 +1714,7 @@ ; RV32-LABEL: mgather_nxv2f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m2, ta, mu -; RV32-NEXT: vluxei32.v v10, (zero), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v10 +; RV32-NEXT: vluxei32.v v8, (zero), v10, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv2f64: @@ -1780,8 +1733,7 @@ ; RV32-LABEL: mgather_nxv4f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, mu -; RV32-NEXT: vluxei32.v v12, (zero), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vluxei32.v v8, (zero), v12, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv4f64: @@ -1798,8 +1750,7 @@ ; RV32-LABEL: mgather_truemask_nxv4f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m4, ta, ma -; RV32-NEXT: vluxei32.v v12, (zero), v8 -; RV32-NEXT: vmv.v.v v8, v12 +; RV32-NEXT: vluxei32.v v8, (zero), v12 ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_truemask_nxv4f64: @@ -1814,10 +1765,14 @@ } define @mgather_falsemask_nxv4f64( %ptrs, %passthru) { -; CHECK-LABEL: mgather_falsemask_nxv4f64: -; CHECK: # %bb.0: -; CHECK-NEXT: vmv4r.v v8, v12 -; CHECK-NEXT: ret +; RV32-LABEL: mgather_falsemask_nxv4f64: +; RV32: # %bb.0: +; RV32-NEXT: ret +; +; RV64-LABEL: mgather_falsemask_nxv4f64: +; RV64: # %bb.0: +; RV64-NEXT: vmv4r.v v8, v12 +; RV64-NEXT: ret %v = call @llvm.masked.gather.nxv4f64.nxv4p0( %ptrs, i32 8, zeroinitializer, %passthru) ret %v } @@ -1828,8 +1783,7 @@ ; RV32-LABEL: mgather_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (zero), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (zero), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_nxv8f64: @@ -1846,20 +1800,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i8_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf4 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i8_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf8 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf8 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds double, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8f64.nxv8p0( %ptrs, i32 8, %m, %passthru) @@ -1870,20 +1822,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i8_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf4 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf4 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i8_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf8 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf8 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds double, ptr %base, %eidxs @@ -1895,11 +1845,10 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i8_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma -; CHECK-NEXT: vzext.vf2 v10, v8 -; CHECK-NEXT: vsll.vi v8, v10, 3 +; CHECK-NEXT: vzext.vf2 v18, v16 +; CHECK-NEXT: vsll.vi v16, v18, 3 ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; CHECK-NEXT: vluxei16.v v16, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v16 +; CHECK-NEXT: vluxei16.v v8, (a0), v16, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds double, ptr %base, %eidxs @@ -1911,20 +1860,18 @@ ; RV32-LABEL: mgather_baseidx_nxv8i16_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf2 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i16_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf4 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf4 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds double, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8f64.nxv8p0( %ptrs, i32 8, %m, %passthru) @@ -1935,20 +1882,18 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i16_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsext.vf2 v12, v8 -; RV32-NEXT: vsll.vi v8, v12, 3 +; RV32-NEXT: vsext.vf2 v20, v16 +; RV32-NEXT: vsll.vi v16, v20, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i16_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf4 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf4 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds double, ptr %base, %eidxs @@ -1960,11 +1905,10 @@ ; CHECK-LABEL: mgather_baseidx_zext_nxv8i16_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; CHECK-NEXT: vzext.vf2 v12, v8 -; CHECK-NEXT: vsll.vi v8, v12, 3 +; CHECK-NEXT: vzext.vf2 v20, v16 +; CHECK-NEXT: vsll.vi v16, v20, 3 ; CHECK-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; CHECK-NEXT: vluxei32.v v16, (a0), v8, v0.t -; CHECK-NEXT: vmv.v.v v8, v16 +; CHECK-NEXT: vluxei32.v v8, (a0), v16, v0.t ; CHECK-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds double, ptr %base, %eidxs @@ -1976,19 +1920,17 @@ ; RV32-LABEL: mgather_baseidx_nxv8i32_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsll.vi v8, v8, 3 +; RV32-NEXT: vsll.vi v16, v16, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_nxv8i32_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf2 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf2 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %ptrs = getelementptr inbounds double, ptr %base, %idxs %v = call @llvm.masked.gather.nxv8f64.nxv8p0( %ptrs, i32 8, %m, %passthru) @@ -1999,19 +1941,17 @@ ; RV32-LABEL: mgather_baseidx_sext_nxv8i32_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsll.vi v8, v8, 3 +; RV32-NEXT: vsll.vi v16, v16, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_sext_nxv8i32_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vsext.vf2 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vsext.vf2 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = sext %idxs to %ptrs = getelementptr inbounds double, ptr %base, %eidxs @@ -2023,19 +1963,17 @@ ; RV32-LABEL: mgather_baseidx_zext_nxv8i32_nxv8f64: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; RV32-NEXT: vsll.vi v8, v8, 3 +; RV32-NEXT: vsll.vi v16, v16, 3 ; RV32-NEXT: vsetvli zero, zero, e64, m8, ta, mu -; RV32-NEXT: vluxei32.v v16, (a0), v8, v0.t -; RV32-NEXT: vmv.v.v v8, v16 +; RV32-NEXT: vluxei32.v v8, (a0), v16, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mgather_baseidx_zext_nxv8i32_nxv8f64: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, mu -; RV64-NEXT: vzext.vf2 v24, v8 -; RV64-NEXT: vsll.vi v8, v24, 3 -; RV64-NEXT: vluxei64.v v16, (a0), v8, v0.t -; RV64-NEXT: vmv.v.v v8, v16 +; RV64-NEXT: vzext.vf2 v24, v16 +; RV64-NEXT: vsll.vi v16, v24, 3 +; RV64-NEXT: vluxei64.v v8, (a0), v16, v0.t ; RV64-NEXT: ret %eidxs = zext %idxs to %ptrs = getelementptr inbounds double, ptr %base, %eidxs diff --git a/llvm/test/CodeGen/RISCV/rvv/mscatter-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/mscatter-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/mscatter-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/mscatter-sdnode.ll @@ -34,7 +34,7 @@ ; RV64-LABEL: mscatter_nxv2i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv2i8.nxv2p0( %val, %ptrs, i32 1, %m) ret void @@ -51,8 +51,8 @@ ; RV64-LABEL: mscatter_nxv2i16_truncstore_nxv2i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e8, mf4, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vnsrl.wi v10, v10, 0 +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret %tval = trunc %val to call void @llvm.masked.scatter.nxv2i8.nxv2p0( %tval, %ptrs, i32 1, %m) @@ -72,10 +72,10 @@ ; RV64-LABEL: mscatter_nxv2i32_truncstore_nxv2i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, mf2, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 +; RV64-NEXT: vnsrl.wi v10, v10, 0 ; RV64-NEXT: vsetvli zero, zero, e8, mf4, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vnsrl.wi v10, v10, 0 +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret %tval = trunc %val to call void @llvm.masked.scatter.nxv2i8.nxv2p0( %tval, %ptrs, i32 1, %m) @@ -115,13 +115,13 @@ ; RV32-LABEL: mscatter_nxv4i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_nxv4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv4i8.nxv4p0( %val, %ptrs, i32 1, %m) ret void @@ -131,13 +131,13 @@ ; RV32-LABEL: mscatter_truemask_nxv4i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10 +; RV32-NEXT: vsoxei32.v v10, (zero), v8 ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_truemask_nxv4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e8, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -159,13 +159,13 @@ ; RV32-LABEL: mscatter_nxv8i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e8, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v12, v0.t +; RV32-NEXT: vsoxei32.v v12, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_nxv8i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e8, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv8i8.nxv8p0( %val, %ptrs, i32 1, %m) ret void @@ -222,7 +222,7 @@ ; RV64-LABEL: mscatter_nxv2i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv2i16.nxv2p0( %val, %ptrs, i32 2, %m) ret void @@ -239,8 +239,8 @@ ; RV64-LABEL: mscatter_nxv2i32_truncstore_nxv2i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, mf2, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vnsrl.wi v10, v10, 0 +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret %tval = trunc %val to call void @llvm.masked.scatter.nxv2i16.nxv2p0( %tval, %ptrs, i32 2, %m) @@ -276,13 +276,13 @@ ; RV32-LABEL: mscatter_nxv4i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_nxv4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv4i16.nxv4p0( %val, %ptrs, i32 2, %m) ret void @@ -292,13 +292,13 @@ ; RV32-LABEL: mscatter_truemask_nxv4i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10 +; RV32-NEXT: vsoxei32.v v10, (zero), v8 ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_truemask_nxv4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -320,13 +320,13 @@ ; RV32-LABEL: mscatter_nxv8i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v12, v0.t +; RV32-NEXT: vsoxei32.v v12, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_nxv8i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv8i16.nxv8p0( %val, %ptrs, i32 2, %m) ret void @@ -444,7 +444,7 @@ ; RV64-LABEL: mscatter_nxv2i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv2i32.nxv2p0( %val, %ptrs, i32 4, %m) ret void @@ -481,7 +481,7 @@ ; RV64-LABEL: mscatter_nxv4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv4i32.nxv4p0( %val, %ptrs, i32 4, %m) ret void @@ -497,7 +497,7 @@ ; RV64-LABEL: mscatter_truemask_nxv4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -525,7 +525,7 @@ ; RV64-LABEL: mscatter_nxv8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv8i32.nxv8p0( %val, %ptrs, i32 4, %m) ret void @@ -1005,7 +1005,7 @@ ; RV64-LABEL: mscatter_nxv2f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv2f16.nxv2p0( %val, %ptrs, i32 2, %m) ret void @@ -1017,13 +1017,13 @@ ; RV32-LABEL: mscatter_nxv4f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_nxv4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv4f16.nxv4p0( %val, %ptrs, i32 2, %m) ret void @@ -1033,13 +1033,13 @@ ; RV32-LABEL: mscatter_truemask_nxv4f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10 +; RV32-NEXT: vsoxei32.v v10, (zero), v8 ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_truemask_nxv4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -1061,13 +1061,13 @@ ; RV32-LABEL: mscatter_nxv8f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v12, v0.t +; RV32-NEXT: vsoxei32.v v12, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: mscatter_nxv8f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv8f16.nxv8p0( %val, %ptrs, i32 2, %m) ret void @@ -1185,7 +1185,7 @@ ; RV64-LABEL: mscatter_nxv2f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv2f32.nxv2p0( %val, %ptrs, i32 4, %m) ret void @@ -1203,7 +1203,7 @@ ; RV64-LABEL: mscatter_nxv4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv4f32.nxv4p0( %val, %ptrs, i32 4, %m) ret void @@ -1219,7 +1219,7 @@ ; RV64-LABEL: mscatter_truemask_nxv4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -1247,7 +1247,7 @@ ; RV64-LABEL: mscatter_nxv8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.masked.scatter.nxv8f32.nxv8p0( %val, %ptrs, i32 4, %m) ret void diff --git a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll --- a/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll +++ b/llvm/test/CodeGen/RISCV/rvv/rvv-peephole-vmerge-vops.ll @@ -103,7 +103,8 @@ ; CHECK-LABEL: vpmerge_vpsitofp: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -133,7 +134,8 @@ ; CHECK-LABEL: vpmerge_vptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 0, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -163,7 +165,8 @@ ; CHECK-LABEL: vpmerge_vpfptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -257,7 +260,8 @@ ; CHECK-LABEL: vpmerge_vluxei: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a2, e32, m1, tu, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %1 = zext i32 %vl to i64 %a = call @llvm.riscv.vluxei.nxv2i32.nxv2i64( undef, * %p, %idx, i64 %1) @@ -410,7 +414,8 @@ ; CHECK-LABEL: vpmerge_sitofp: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %a = sitofp %x to %b = call @llvm.vp.merge.nxv2f32( %m, %a, %passthru, i32 %vl) @@ -434,7 +439,8 @@ ; CHECK-LABEL: vpmerge_fptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %a = fptrunc %x to %b = call @llvm.vp.merge.nxv2f32( %m, %a, %passthru, i32 %vl) @@ -458,7 +464,8 @@ ; CHECK-LABEL: vpmerge_trunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, tu, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 0, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret %a = trunc %x to %b = call @llvm.vp.merge.nxv2i32( %m, %a, %passthru, i32 %vl) @@ -560,7 +567,8 @@ ; CHECK-LABEL: vpselect_vpsitofp: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -588,7 +596,8 @@ ; CHECK-LABEL: vpselect_vptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -616,7 +625,8 @@ ; CHECK-LABEL: vpselect_vpfptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %mask = shufflevector %splat, poison, zeroinitializer @@ -705,7 +715,8 @@ ; CHECK-LABEL: vpselect_vluxei: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a2, e32, m1, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %1 = zext i32 %vl to i64 %a = call @llvm.riscv.vluxei.nxv2i32.nxv2i64( undef, * %p, %idx, i64 %1) @@ -874,7 +885,8 @@ ; CHECK-LABEL: vpselect_sitofp: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %a = sitofp %x to %b = call @llvm.vp.select.nxv2f32( %m, %a, %passthru, i32 %vl) @@ -898,7 +910,8 @@ ; CHECK-LABEL: vpselect_fptrunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %a = fptrunc %x to %b = call @llvm.vp.select.nxv2f32( %m, %a, %passthru, i32 %vl) @@ -922,7 +935,8 @@ ; CHECK-LABEL: vpselect_trunc: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret %a = trunc %x to %b = call @llvm.vp.select.nxv2i32( %m, %a, %passthru, i32 %vl) diff --git a/llvm/test/CodeGen/RISCV/rvv/vfcopysign-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/vfcopysign-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfcopysign-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfcopysign-sdnode.ll @@ -710,18 +710,18 @@ ; ZVFH-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; ZVFH-NEXT: vfncvt.f.f.w v10, v12 -; ZVFH-NEXT: vfsgnj.vv v8, v8, v10 +; ZVFH-NEXT: vfncvt.f.f.w v14, v8 +; ZVFH-NEXT: vfsgnj.vv v8, v12, v14 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v8 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfsgnj.vv v12, v12, v16 +; ZVFHMIN-NEXT: vfsgnj.vv v12, v8, v16 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 ; ZVFHMIN-NEXT: ret @@ -764,18 +764,18 @@ ; ZVFH-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; ZVFH-NEXT: vfncvt.f.f.w v10, v12 -; ZVFH-NEXT: vfsgnjn.vv v8, v8, v10 +; ZVFH-NEXT: vfncvt.f.f.w v14, v8 +; ZVFH-NEXT: vfsgnjn.vv v8, v12, v14 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 -; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v8 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfneg.v v8, v12 +; ZVFHMIN-NEXT: vfneg.v v8, v8 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v8 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12 @@ -830,20 +830,20 @@ ; ZVFH-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f64: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; ZVFH-NEXT: vfncvt.rod.f.f.w v12, v16 +; ZVFH-NEXT: vfncvt.rod.f.f.w v20, v8 ; ZVFH-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFH-NEXT: vfncvt.f.f.w v10, v12 -; ZVFH-NEXT: vfsgnj.vv v8, v8, v10 +; ZVFH-NEXT: vfncvt.f.f.w v8, v20 +; ZVFH-NEXT: vfsgnj.vv v8, v16, v8 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfcopysign_exttrunc_vv_nxv8f16_nxv8f64: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.rod.f.f.w v12, v16 +; ZVFHMIN-NEXT: vfncvt.rod.f.f.w v20, v8 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v20 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfsgnj.vv v12, v12, v16 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma @@ -892,28 +892,28 @@ ; ZVFH-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f64: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; ZVFH-NEXT: vfncvt.rod.f.f.w v12, v16 +; ZVFH-NEXT: vfncvt.rod.f.f.w v20, v8 ; ZVFH-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFH-NEXT: vfncvt.f.f.w v10, v12 -; ZVFH-NEXT: vfsgnjn.vv v8, v8, v10 +; ZVFH-NEXT: vfncvt.f.f.w v8, v20 +; ZVFH-NEXT: vfsgnjn.vv v8, v16, v8 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfcopynsign_exttrunc_vv_nxv8f16_nxv8f64: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v16 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.rod.f.f.w v8, v16 +; ZVFHMIN-NEXT: vfncvt.rod.f.f.w v16, v8 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v16, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfneg.v v8, v8 +; ZVFHMIN-NEXT: vfneg.v v8, v12 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v16, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v8 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v12 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfsgnj.vv v12, v12, v8 +; ZVFHMIN-NEXT: vfsgnj.vv v12, v20, v8 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12 ; ZVFHMIN-NEXT: ret @@ -1577,8 +1577,8 @@ ; CHECK-LABEL: vfcopysign_exttrunc_vv_nxv8f32_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; CHECK-NEXT: vfncvt.f.f.w v12, v16 -; CHECK-NEXT: vfsgnj.vv v8, v8, v12 +; CHECK-NEXT: vfncvt.f.f.w v20, v8 +; CHECK-NEXT: vfsgnj.vv v8, v16, v20 ; CHECK-NEXT: ret %e = fptrunc %vs to %r = call @llvm.copysign.nxv8f32( %vm, %e) @@ -1605,8 +1605,8 @@ ; CHECK-LABEL: vfcopynsign_exttrunc_vv_nxv8f32_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; CHECK-NEXT: vfncvt.f.f.w v12, v16 -; CHECK-NEXT: vfsgnjn.vv v8, v8, v12 +; CHECK-NEXT: vfncvt.f.f.w v20, v8 +; CHECK-NEXT: vfsgnjn.vv v8, v16, v20 ; CHECK-NEXT: ret %n = fneg %vs %eneg = fptrunc %n to diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-f.ll @@ -135,8 +135,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.f.w.mask.nxv4f16.nxv4f32( @@ -182,8 +183,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.f.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.f.w.mask.nxv8f16.nxv8f32( @@ -229,8 +231,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.f.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.f.w.mask.nxv16f16.nxv16f32( @@ -323,8 +326,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.f.w.mask.nxv2f32.nxv2f64( @@ -370,8 +374,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.f.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.f.w.mask.nxv4f32.nxv4f64( @@ -417,8 +422,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.f.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.f.w.mask.nxv8f32.nxv8f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-x.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-x.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-x.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-x.ll @@ -132,8 +132,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.x.w.mask.nxv4f16.nxv4i32( @@ -179,8 +180,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.x.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.f.x.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.x.w.mask.nxv8f16.nxv8i32( @@ -226,8 +228,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.x.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.f.x.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.x.w.mask.nxv16f16.nxv16i32( @@ -320,8 +323,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.x.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.x.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.x.w.mask.nxv2f32.nxv2i64( @@ -367,8 +371,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.x.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.f.x.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.x.w.mask.nxv4f32.nxv4i64( @@ -414,8 +419,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.x.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.f.x.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.x.w.mask.nxv8f32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-xu.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-xu.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-xu.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-f-xu.ll @@ -132,8 +132,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.xu.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.xu.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.xu.w.mask.nxv4f16.nxv4i32( @@ -179,8 +180,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.xu.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.f.xu.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.xu.w.mask.nxv8f16.nxv8i32( @@ -226,8 +228,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.xu.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.f.xu.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.xu.w.mask.nxv16f16.nxv16i32( @@ -320,8 +323,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.xu.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.f.xu.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.xu.w.mask.nxv2f32.nxv2i64( @@ -367,8 +371,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.xu.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.f.xu.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.xu.w.mask.nxv4f32.nxv4i64( @@ -414,8 +419,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.f.xu.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.f.xu.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.f.xu.w.mask.nxv8f32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-rod-f-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-rod-f-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-rod-f-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-rod-f-f.ll @@ -124,7 +124,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rod.f.f.w_nxv4f16_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vfncvt.rod.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rod.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rod.f.f.w.mask.nxv4f16.nxv4f32( @@ -168,7 +169,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rod.f.f.w_nxv8f16_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vfncvt.rod.f.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rod.f.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rod.f.f.w.mask.nxv8f16.nxv8f32( @@ -212,7 +214,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rod.f.f.w_nxv16f16_nxv16f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vfncvt.rod.f.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rod.f.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rod.f.f.w.mask.nxv16f16.nxv16f32( @@ -300,7 +303,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rod.f.f.w_nxv2f32_nxv2f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.rod.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rod.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rod.f.f.w.mask.nxv2f32.nxv2f64( @@ -344,7 +348,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rod.f.f.w_nxv4f32_nxv4f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vfncvt.rod.f.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rod.f.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rod.f.f.w.mask.nxv4f32.nxv4f64( @@ -388,7 +393,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rod.f.f.w_nxv8f32_nxv8f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vfncvt.rod.f.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rod.f.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rod.f.f.w.mask.nxv8f32.nxv8f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-x-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-x-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-x-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-x-f.ll @@ -168,7 +168,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv8i8_nxv8f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv8i8.nxv8f16( @@ -212,7 +213,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv16i8_nxv16f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv16i8.nxv16f16( @@ -256,7 +258,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv32i8_nxv32f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv32i8.nxv32f16( @@ -388,7 +391,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv4i16_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv4i16.nxv4f32( @@ -432,7 +436,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv8i16_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv8i16.nxv8f32( @@ -476,7 +481,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv16i16_nxv16f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv16i16.nxv16f32( @@ -564,7 +570,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv2i32_nxv2f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv2i32.nxv2f64( @@ -608,7 +615,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv4i32_nxv4f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv4i32.nxv4f64( @@ -652,7 +660,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.x.f.w_nxv8i32_nxv8f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.x.f.w.mask.nxv8i32.nxv8f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-xu-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-xu-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-xu-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-rtz-xu-f.ll @@ -168,7 +168,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv8i8_nxv8f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv8i8.nxv8f16( @@ -212,7 +213,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv16i8_nxv16f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv16i8.nxv16f16( @@ -256,7 +258,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv32i8_nxv32f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv32i8.nxv32f16( @@ -388,7 +391,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv4i16_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv4i16.nxv4f32( @@ -432,7 +436,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv8i16_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv8i16.nxv8f32( @@ -476,7 +481,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv16i16_nxv16f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv16i16.nxv16f32( @@ -564,7 +570,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv2i32_nxv2f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv2i32.nxv2f64( @@ -608,7 +615,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv4i32_nxv4f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv4i32.nxv4f64( @@ -652,7 +660,8 @@ ; CHECK-LABEL: intrinsic_vfncvt_mask_rtz.xu.f.w_nxv8i32_nxv8f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.rtz.xu.f.w.mask.nxv8i32.nxv8f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-x-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-x-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-x-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-x-f.ll @@ -179,8 +179,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.x.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv8i8.nxv8f16( @@ -226,8 +227,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.x.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv16i8.nxv16f16( @@ -273,8 +275,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.x.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv32i8.nxv32f16( @@ -414,8 +417,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.x.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv4i16.nxv4f32( @@ -461,8 +465,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.x.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv8i16.nxv8f32( @@ -508,8 +513,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.x.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv16i16.nxv16f32( @@ -602,8 +608,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.x.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv2i32.nxv2f64( @@ -649,8 +656,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.x.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv4i32.nxv4f64( @@ -696,8 +704,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.x.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.x.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.x.f.w.mask.nxv8i32.nxv8f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvt-xu-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvt-xu-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvt-xu-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvt-xu-f.ll @@ -179,8 +179,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv8i8.nxv8f16( @@ -226,8 +227,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv16i8.nxv16f16( @@ -273,8 +275,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv32i8.nxv32f16( @@ -414,8 +417,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv4i16.nxv4f32( @@ -461,8 +465,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv8i16.nxv8f32( @@ -508,8 +513,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv16i16.nxv16f32( @@ -602,8 +608,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v10, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv2i32.nxv2f64( @@ -649,8 +656,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v12, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv4i32.nxv4f64( @@ -696,8 +704,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfncvt.xu.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvt.xu.f.w v16, v8, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvt.xu.f.w.mask.nxv8i32.nxv8f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfncvtbf16-f-f.ll b/llvm/test/CodeGen/RISCV/rvv/vfncvtbf16-f-f.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfncvtbf16-f-f.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfncvtbf16-f-f.ll @@ -121,7 +121,8 @@ ; CHECK-LABEL: intrinsic_vfncvtbf16_mask_f.f.w_nxv4bf16_nxv4f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10, v0.t +; CHECK-NEXT: vfncvtbf16.f.f.w v10, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvtbf16.f.f.w.mask.nxv4bf16.nxv4f32( @@ -164,7 +165,8 @@ ; CHECK-LABEL: intrinsic_vfncvtbf16_mask_f.f.w_nxv8bf16_nxv8f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12, v0.t +; CHECK-NEXT: vfncvtbf16.f.f.w v12, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvtbf16.f.f.w.mask.nxv8bf16.nxv8f32( @@ -207,7 +209,8 @@ ; CHECK-LABEL: intrinsic_vfncvtbf16_mask_f.f.w_nxv16bf16_nxv16f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16, v0.t +; CHECK-NEXT: vfncvtbf16.f.f.w v16, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfncvtbf16.f.f.w.mask.nxv16bf16.nxv16f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfredmax.ll b/llvm/test/CodeGen/RISCV/rvv/vfredmax.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfredmax.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfredmax.ll @@ -152,7 +152,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv4f16_nxv8f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v10, v9 +; CHECK-NEXT: vfredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv4f16.nxv8f16( @@ -175,7 +176,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv4f16_nxv8f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv4f16.nxv8f16.nxv8i1( @@ -198,7 +200,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv4f16_nxv16f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v12, v9 +; CHECK-NEXT: vfredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv4f16.nxv16f16( @@ -221,7 +224,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv4f16_nxv16f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv4f16.nxv16f16.nxv16i1( @@ -244,7 +248,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv4f16_nxv32f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v16, v9 +; CHECK-NEXT: vfredmax.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv4f16.nxv32f16( @@ -267,7 +272,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv4f16_nxv32f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredmax.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv4f16.nxv32f16.nxv32i1( @@ -382,7 +388,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv2f32_nxv4f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v10, v9 +; CHECK-NEXT: vfredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv2f32.nxv4f32( @@ -405,7 +412,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv2f32_nxv4f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv2f32.nxv4f32.nxv4i1( @@ -428,7 +436,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv2f32_nxv8f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v12, v9 +; CHECK-NEXT: vfredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv2f32.nxv8f32( @@ -451,7 +460,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv2f32_nxv8f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv2f32.nxv8f32.nxv8i1( @@ -474,7 +484,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv2f32_nxv16f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v16, v9 +; CHECK-NEXT: vfredmax.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv2f32.nxv16f32( @@ -497,7 +508,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv2f32_nxv16f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredmax.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv2f32.nxv16f32.nxv16i1( @@ -566,7 +578,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv1f64_nxv2f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v10, v9 +; CHECK-NEXT: vfredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv1f64.nxv2f64( @@ -589,7 +602,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv1f64_nxv2f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv1f64.nxv2f64.nxv2i1( @@ -612,7 +626,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv1f64_nxv4f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v12, v9 +; CHECK-NEXT: vfredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv1f64.nxv4f64( @@ -635,7 +650,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv1f64_nxv4f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv1f64.nxv4f64.nxv4i1( @@ -658,7 +674,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_vs_nxv1f64_nxv8f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v16, v9 +; CHECK-NEXT: vfredmax.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.nxv1f64.nxv8f64( @@ -681,7 +698,8 @@ ; CHECK-LABEL: intrinsic_vfredmax_mask_vs_nxv1f64_nxv8f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vfredmax.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredmax.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmax.mask.nxv1f64.nxv8f64.nxv8i1( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfredmin.ll b/llvm/test/CodeGen/RISCV/rvv/vfredmin.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfredmin.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfredmin.ll @@ -152,7 +152,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv4f16_nxv8f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v10, v9 +; CHECK-NEXT: vfredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv4f16.nxv8f16( @@ -175,7 +176,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv4f16_nxv8f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv4f16.nxv8f16.nxv8i1( @@ -198,7 +200,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv4f16_nxv16f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v12, v9 +; CHECK-NEXT: vfredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv4f16.nxv16f16( @@ -221,7 +224,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv4f16_nxv16f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv4f16.nxv16f16.nxv16i1( @@ -244,7 +248,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv4f16_nxv32f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v16, v9 +; CHECK-NEXT: vfredmin.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv4f16.nxv32f16( @@ -267,7 +272,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv4f16_nxv32f16_nxv4f16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredmin.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv4f16.nxv32f16.nxv32i1( @@ -382,7 +388,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv2f32_nxv4f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v10, v9 +; CHECK-NEXT: vfredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv2f32.nxv4f32( @@ -405,7 +412,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv2f32_nxv4f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv2f32.nxv4f32.nxv4i1( @@ -428,7 +436,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv2f32_nxv8f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v12, v9 +; CHECK-NEXT: vfredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv2f32.nxv8f32( @@ -451,7 +460,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv2f32_nxv8f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv2f32.nxv8f32.nxv8i1( @@ -474,7 +484,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv2f32_nxv16f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v16, v9 +; CHECK-NEXT: vfredmin.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv2f32.nxv16f32( @@ -497,7 +508,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv2f32_nxv16f32_nxv2f32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredmin.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv2f32.nxv16f32.nxv16i1( @@ -566,7 +578,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv1f64_nxv2f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v10, v9 +; CHECK-NEXT: vfredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv1f64.nxv2f64( @@ -589,7 +602,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv1f64_nxv2f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv1f64.nxv2f64.nxv2i1( @@ -612,7 +626,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv1f64_nxv4f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v12, v9 +; CHECK-NEXT: vfredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv1f64.nxv4f64( @@ -635,7 +650,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv1f64_nxv4f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv1f64.nxv4f64.nxv4i1( @@ -658,7 +674,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_vs_nxv1f64_nxv8f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v16, v9 +; CHECK-NEXT: vfredmin.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.nxv1f64.nxv8f64( @@ -681,7 +698,8 @@ ; CHECK-LABEL: intrinsic_vfredmin_mask_vs_nxv1f64_nxv8f64_nxv1f64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vfredmin.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredmin.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredmin.mask.nxv1f64.nxv8f64.nxv8i1( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfredosum.ll b/llvm/test/CodeGen/RISCV/rvv/vfredosum.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfredosum.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfredosum.ll @@ -165,8 +165,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v10, v9 +; CHECK-NEXT: vfredosum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv4f16.nxv8f16( @@ -190,8 +191,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredosum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv4f16.nxv8f16.nxv8i1( @@ -215,8 +217,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v12, v9 +; CHECK-NEXT: vfredosum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv4f16.nxv16f16( @@ -240,8 +243,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredosum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv4f16.nxv16f16.nxv16i1( @@ -265,8 +269,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v16, v9 +; CHECK-NEXT: vfredosum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv4f16.nxv32f16( @@ -290,8 +295,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredosum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv4f16.nxv32f16.nxv32i1( @@ -415,8 +421,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v10, v9 +; CHECK-NEXT: vfredosum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv2f32.nxv4f32( @@ -440,8 +447,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredosum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv2f32.nxv4f32.nxv4i1( @@ -465,8 +473,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v12, v9 +; CHECK-NEXT: vfredosum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv2f32.nxv8f32( @@ -490,8 +499,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredosum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv2f32.nxv8f32.nxv8i1( @@ -515,8 +525,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v16, v9 +; CHECK-NEXT: vfredosum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv2f32.nxv16f32( @@ -540,8 +551,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredosum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv2f32.nxv16f32.nxv16i1( @@ -615,8 +627,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v10, v9 +; CHECK-NEXT: vfredosum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv1f64.nxv2f64( @@ -640,8 +653,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredosum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv1f64.nxv2f64.nxv2i1( @@ -665,8 +679,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v12, v9 +; CHECK-NEXT: vfredosum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv1f64.nxv4f64( @@ -690,8 +705,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredosum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv1f64.nxv4f64.nxv4i1( @@ -715,8 +731,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v16, v9 +; CHECK-NEXT: vfredosum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.nxv1f64.nxv8f64( @@ -740,8 +757,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredosum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredosum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredosum.mask.nxv1f64.nxv8f64.nxv8i1( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfredusum.ll b/llvm/test/CodeGen/RISCV/rvv/vfredusum.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfredusum.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfredusum.ll @@ -165,8 +165,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v10, v9 +; CHECK-NEXT: vfredusum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv4f16.nxv8f16( @@ -190,8 +191,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredusum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv4f16.nxv8f16.nxv8i1( @@ -215,8 +217,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v12, v9 +; CHECK-NEXT: vfredusum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv4f16.nxv16f16( @@ -240,8 +243,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredusum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv4f16.nxv16f16.nxv16i1( @@ -265,8 +269,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v16, v9 +; CHECK-NEXT: vfredusum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv4f16.nxv32f16( @@ -290,8 +295,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredusum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv4f16.nxv32f16.nxv32i1( @@ -415,8 +421,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v10, v9 +; CHECK-NEXT: vfredusum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv2f32.nxv4f32( @@ -440,8 +447,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredusum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv2f32.nxv4f32.nxv4i1( @@ -465,8 +473,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v12, v9 +; CHECK-NEXT: vfredusum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv2f32.nxv8f32( @@ -490,8 +499,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredusum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv2f32.nxv8f32.nxv8i1( @@ -515,8 +525,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v16, v9 +; CHECK-NEXT: vfredusum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv2f32.nxv16f32( @@ -540,8 +551,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredusum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv2f32.nxv16f32.nxv16i1( @@ -615,8 +627,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v10, v9 +; CHECK-NEXT: vfredusum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv1f64.nxv2f64( @@ -640,8 +653,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfredusum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv1f64.nxv2f64.nxv2i1( @@ -665,8 +679,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v12, v9 +; CHECK-NEXT: vfredusum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv1f64.nxv4f64( @@ -690,8 +705,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfredusum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv1f64.nxv4f64.nxv4i1( @@ -715,8 +731,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v16, v9 +; CHECK-NEXT: vfredusum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.nxv1f64.nxv8f64( @@ -740,8 +757,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfredusum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfredusum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfredusum.mask.nxv1f64.nxv8f64.nxv8i1( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwadd.w.ll b/llvm/test/CodeGen/RISCV/rvv/vfwadd.w.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwadd.w.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwadd.w.ll @@ -1291,9 +1291,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwadd.wv v12, v10, v8 +; CHECK-NEXT: vfwadd.wv v8, v8, v10 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv2r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.nxv4f32.nxv4f16( @@ -1310,9 +1309,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwadd.wv v16, v12, v8 +; CHECK-NEXT: vfwadd.wv v8, v8, v12 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv4r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.nxv8f32.nxv8f16( @@ -1348,9 +1346,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwadd.wv v12, v10, v8 +; CHECK-NEXT: vfwadd.wv v8, v8, v10 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv2r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.nxv2f64.nxv2f32( @@ -1367,9 +1364,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwadd.wv v16, v12, v8 +; CHECK-NEXT: vfwadd.wv v8, v8, v12 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv4r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.nxv4f64.nxv4f32( @@ -1386,9 +1382,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwadd.wv v24, v16, v8 +; CHECK-NEXT: vfwadd.wv v8, v8, v16 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv8r.v v8, v24 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwadd.w.nxv8f64.nxv8f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwmacc-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vfwmacc-vp.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwmacc-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwmacc-vp.ll @@ -452,17 +452,16 @@ ; ZVFH-LABEL: vfmacc_vv_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmacc.vv v10, v8, v9, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmacc.vv v8, v10, v11, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vv_nxv4f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfmadd.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f32.nxv4f16( %a, %m, i32 %evl) @@ -475,18 +474,16 @@ ; ZVFH-LABEL: vfmacc_vv_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmacc.vv v10, v8, v9 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmacc.vv v8, v10, v11 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vv_nxv4f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v12, v14, v10 -; ZVFHMIN-NEXT: vmv.v.v v8, v12 +; ZVFHMIN-NEXT: vfmacc.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -500,8 +497,7 @@ ; ZVFH-LABEL: vfmacc_vf_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmacc.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmacc.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vf_nxv4f32: @@ -512,10 +508,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v8, v12, v10, v0.t +; ZVFHMIN-NEXT: vfmadd.vv v10, v12, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v10 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -529,8 +526,7 @@ ; ZVFH-LABEL: vfmacc_vf_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmacc.vf v10, fa0, v8 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmacc.vf v8, fa0, v10 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vf_nxv4f32_unmasked: @@ -539,12 +535,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v8, v12, v10 +; ZVFHMIN-NEXT: vfmacc.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -566,17 +562,16 @@ ; ZVFH-LABEL: vfmacc_vv_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmacc.vv v12, v8, v10, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmacc.vv v8, v12, v14, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vv_nxv8f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfmadd.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f32.nxv8f16( %a, %m, i32 %evl) @@ -589,18 +584,16 @@ ; ZVFH-LABEL: vfmacc_vv_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmacc.vv v12, v8, v10 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmacc.vv v8, v12, v14 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vv_nxv8f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v16, v20, v12 -; ZVFHMIN-NEXT: vmv.v.v v8, v16 +; ZVFHMIN-NEXT: vfmacc.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -614,8 +607,7 @@ ; ZVFH-LABEL: vfmacc_vf_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmacc.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmacc.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vf_nxv8f32: @@ -626,10 +618,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v8, v16, v12, v0.t +; ZVFHMIN-NEXT: vfmadd.vv v12, v16, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -643,8 +636,7 @@ ; ZVFH-LABEL: vfmacc_vf_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmacc.vf v12, fa0, v8 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmacc.vf v8, fa0, v12 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vf_nxv8f32_unmasked: @@ -653,12 +645,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v8, v16, v12 +; ZVFHMIN-NEXT: vfmacc.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -680,8 +672,7 @@ ; ZVFH-LABEL: vfmacc_vv_nxv16f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwmacc.vv v16, v8, v12, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwmacc.vv v8, v16, v20, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vv_nxv16f32: @@ -693,14 +684,14 @@ ; ZVFHMIN-NEXT: sub sp, sp, a1 ; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb ; ZVFHMIN-NEXT: addi a1, sp, 16 -; ZVFHMIN-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill +; ZVFHMIN-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma ; ZVFHMIN-NEXT: addi a0, sp, 16 -; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload -; ZVFHMIN-NEXT: vfmadd.vv v24, v16, v8, v0.t +; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload +; ZVFHMIN-NEXT: vfmadd.vv v24, v8, v16, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v24 ; ZVFHMIN-NEXT: csrr a0, vlenb ; ZVFHMIN-NEXT: slli a0, a0, 3 @@ -717,18 +708,16 @@ ; ZVFH-LABEL: vfmacc_vv_nxv16f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwmacc.vv v16, v8, v12 -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwmacc.vv v8, v16, v20 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vv_nxv16f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v24, v0, v16 -; ZVFHMIN-NEXT: vmv.v.v v8, v24 +; ZVFHMIN-NEXT: vfmacc.vv v8, v24, v0 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -742,8 +731,7 @@ ; ZVFH-LABEL: vfmacc_vf_nxv16f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwmacc.vf v16, fa0, v8, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwmacc.vf v8, fa0, v16, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vf_nxv16f32: @@ -754,10 +742,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v4, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v8, v24, v16, v0.t +; ZVFHMIN-NEXT: vfmadd.vv v16, v24, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -771,8 +760,7 @@ ; ZVFH-LABEL: vfmacc_vf_nxv16f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwmacc.vf v16, fa0, v8 -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwmacc.vf v8, fa0, v16 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfmacc_vf_nxv16f32_unmasked: @@ -781,12 +769,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v0, v24 +; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v0 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfmadd.vv v8, v24, v16 +; ZVFHMIN-NEXT: vfmacc.vv v8, v24, v0 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -874,8 +862,7 @@ ; CHECK-LABEL: vfmacc_vv_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwmacc.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwmacc.vv v8, v10, v11, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv2f64.nxv2f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv2f64.nxv2f32( %b, %m, i32 %evl) @@ -887,8 +874,7 @@ ; CHECK-LABEL: vfmacc_vv_nxv2f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwmacc.vv v10, v8, v9 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwmacc.vv v8, v10, v11 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -902,8 +888,7 @@ ; CHECK-LABEL: vfmacc_vf_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwmacc.vf v10, fa0, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwmacc.vf v8, fa0, v10, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -917,8 +902,7 @@ ; CHECK-LABEL: vfmacc_vf_nxv2f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwmacc.vf v10, fa0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwmacc.vf v8, fa0, v10 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -940,8 +924,7 @@ ; CHECK-LABEL: vfmacc_vv_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwmacc.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwmacc.vv v8, v12, v14, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f64.nxv4f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv4f64.nxv4f32( %b, %m, i32 %evl) @@ -953,8 +936,7 @@ ; CHECK-LABEL: vfmacc_vv_nxv4f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwmacc.vv v12, v8, v10 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwmacc.vv v8, v12, v14 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -968,8 +950,7 @@ ; CHECK-LABEL: vfmacc_vf_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwmacc.vf v12, fa0, v8, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwmacc.vf v8, fa0, v12, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -983,8 +964,7 @@ ; CHECK-LABEL: vfmacc_vf_nxv4f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwmacc.vf v12, fa0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwmacc.vf v8, fa0, v12 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1006,8 +986,7 @@ ; CHECK-LABEL: vfmacc_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwmacc.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwmacc.vv v8, v16, v20, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f64.nxv8f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv8f64.nxv8f32( %b, %m, i32 %evl) @@ -1019,8 +998,7 @@ ; CHECK-LABEL: vfmacc_vv_nxv8f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwmacc.vv v16, v8, v12 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwmacc.vv v8, v16, v20 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1034,8 +1012,7 @@ ; CHECK-LABEL: vfmacc_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwmacc.vf v16, fa0, v8, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwmacc.vf v8, fa0, v16, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1049,8 +1026,7 @@ ; CHECK-LABEL: vfmacc_vf_nxv8f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwmacc.vf v16, fa0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwmacc.vf v8, fa0, v16 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1104,11 +1080,10 @@ ; CHECK-LABEL: vfmacc_vv_nxv2f64_nxv2f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; CHECK-NEXT: vfwcvt.f.f.v v8, v9, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v10, v11, v0.t ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; CHECK-NEXT: vfwmacc.vv v10, v12, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwmacc.vv v8, v12, v10, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv2f64.nxv2f16( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv2f64.nxv2f16( %b, %m, i32 %evl) @@ -1120,11 +1095,10 @@ ; CHECK-LABEL: vfmacc_vv_nxv2f64_nxv2f16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8 -; CHECK-NEXT: vfwcvt.f.f.v v8, v9 +; CHECK-NEXT: vfwcvt.f.f.v v12, v10 +; CHECK-NEXT: vfwcvt.f.f.v v10, v11 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; CHECK-NEXT: vfwmacc.vv v10, v12, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwmacc.vv v8, v12, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1140,11 +1114,10 @@ ; CHECK-LABEL: vfmacc_vv_nxv4f64_nxv4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v10, v8, v0.t -; CHECK-NEXT: vfwcvt.f.f.v v16, v9, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v14, v12, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v16, v13, v0.t ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; CHECK-NEXT: vfwmacc.vv v12, v10, v16, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwmacc.vv v8, v14, v16, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f64.nxv4f16( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv4f64.nxv4f16( %b, %m, i32 %evl) @@ -1156,11 +1129,10 @@ ; CHECK-LABEL: vfmacc_vv_nxv4f64_nxv4f16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v10, v8 -; CHECK-NEXT: vfwcvt.f.f.v v16, v9 +; CHECK-NEXT: vfwcvt.f.f.v v14, v12 +; CHECK-NEXT: vfwcvt.f.f.v v16, v13 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; CHECK-NEXT: vfwmacc.vv v12, v10, v16 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwmacc.vv v8, v14, v16 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1176,11 +1148,10 @@ ; CHECK-LABEL: vfmacc_vv_nxv8f64_nxv8f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; CHECK-NEXT: vfwcvt.f.f.v v24, v10, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v20, v16, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v24, v18, v0.t ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; CHECK-NEXT: vfwmacc.vv v16, v12, v24, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwmacc.vv v8, v20, v24, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f64.nxv8f16( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv8f64.nxv8f16( %b, %m, i32 %evl) @@ -1192,11 +1163,10 @@ ; CHECK-LABEL: vfmacc_vv_nxv8f64_nxv8f16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8 -; CHECK-NEXT: vfwcvt.f.f.v v24, v10 +; CHECK-NEXT: vfwcvt.f.f.v v20, v16 +; CHECK-NEXT: vfwcvt.f.f.v v24, v18 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; CHECK-NEXT: vfwmacc.vv v16, v12, v24 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwmacc.vv v8, v20, v24 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwmsac-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vfwmsac-vp.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwmsac-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwmsac-vp.ll @@ -365,17 +365,16 @@ ; ZVFH-LABEL: vmfsac_vv_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmsac.vv v10, v8, v9, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmsac.vv v8, v10, v11, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vv_nxv4f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfmsub.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f32.nxv4f16( %a, %m, i32 %evl) @@ -389,18 +388,16 @@ ; ZVFH-LABEL: vmfsac_vv_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmsac.vv v10, v8, v9 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmsac.vv v8, v10, v11 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vv_nxv4f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v12, v14, v10 -; ZVFHMIN-NEXT: vmv.v.v v8, v12 +; ZVFHMIN-NEXT: vfmsac.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -415,8 +412,7 @@ ; ZVFH-LABEL: vmfsac_vf_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmsac.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmsac.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vf_nxv4f32: @@ -427,10 +423,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v8, v12, v10, v0.t +; ZVFHMIN-NEXT: vfmsub.vv v10, v12, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v10 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -447,8 +444,7 @@ ; ZVFH-LABEL: vmfsac_vf_nxv4f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmsac.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmsac.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vf_nxv4f32_commute: @@ -457,12 +453,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v9, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfmsub.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 @@ -478,8 +474,7 @@ ; ZVFH-LABEL: vmfsac_vf_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwmsac.vf v10, fa0, v8 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwmsac.vf v8, fa0, v10 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vf_nxv4f32_unmasked: @@ -488,12 +483,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v8, v12, v10 +; ZVFHMIN-NEXT: vfmsac.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -514,17 +509,16 @@ ; ZVFH-LABEL: vmfsac_vv_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmsac.vv v12, v8, v10, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmsac.vv v8, v12, v14, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vv_nxv8f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfmsub.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f32.nxv8f16( %a, %m, i32 %evl) @@ -538,18 +532,16 @@ ; ZVFH-LABEL: vmfsac_vv_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmsac.vv v12, v8, v10 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmsac.vv v8, v12, v14 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vv_nxv8f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v16, v20, v12 -; ZVFHMIN-NEXT: vmv.v.v v8, v16 +; ZVFHMIN-NEXT: vfmsac.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -564,8 +556,7 @@ ; ZVFH-LABEL: vmfsac_vf_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmsac.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmsac.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vf_nxv8f32: @@ -576,10 +567,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v8, v16, v12, v0.t +; ZVFHMIN-NEXT: vfmsub.vv v12, v16, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -596,8 +588,7 @@ ; ZVFH-LABEL: vmfsac_vf_nxv8f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmsac.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmsac.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vf_nxv8f32_commute: @@ -606,12 +597,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfmsub.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 @@ -627,8 +618,7 @@ ; ZVFH-LABEL: vmfsac_vf_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwmsac.vf v12, fa0, v8 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwmsac.vf v8, fa0, v12 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vmfsac_vf_nxv8f32_unmasked: @@ -637,12 +627,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfmsub.vv v8, v16, v12 +; ZVFHMIN-NEXT: vfmsac.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwnmacc-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vfwnmacc-vp.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwnmacc-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwnmacc-vp.ll @@ -430,17 +430,16 @@ ; ZVFH-LABEL: vfnmacc_vv_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmacc.vv v8, v10, v11, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vv_nxv4f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vv_nxv4f32: @@ -464,18 +463,16 @@ ; ZVFH-LABEL: vfnmacc_vv_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmacc.vv v10, v8, v9 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmacc.vv v8, v10, v11 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vv_nxv4f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v10 -; ZVFHMIN-NEXT: vmv.v.v v8, v12 +; ZVFHMIN-NEXT: vfnmacc.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vv_nxv4f32_unmasked: ; ZFHMIN: # %bb.0: @@ -500,8 +497,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv4f32: @@ -512,10 +508,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v12, v10, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v10, v12, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v10 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv4f32: ; ZFHMIN: # %bb.0: @@ -545,8 +542,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv4f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv4f32_commute: @@ -555,12 +551,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v9, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv4f32_commute: @@ -591,8 +587,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v10, fa0, v8 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v10 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv4f32_unmasked: @@ -601,12 +596,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v12, v10 +; ZVFHMIN-NEXT: vfnmacc.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv4f32_unmasked: ; ZFHMIN: # %bb.0: @@ -641,17 +636,16 @@ ; ZVFH-LABEL: vfnmacc_vv_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmacc.vv v12, v8, v10, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmacc.vv v8, v12, v14, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vv_nxv8f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vv_nxv8f32: @@ -675,18 +669,16 @@ ; ZVFH-LABEL: vfnmacc_vv_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmacc.vv v12, v8, v10 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmacc.vv v8, v12, v14 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vv_nxv8f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v12 -; ZVFHMIN-NEXT: vmv.v.v v8, v16 +; ZVFHMIN-NEXT: vfnmacc.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vv_nxv8f32_unmasked: ; ZFHMIN: # %bb.0: @@ -711,8 +703,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv8f32: @@ -723,10 +714,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v16, v12, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v12, v16, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv8f32: ; ZFHMIN: # %bb.0: @@ -756,8 +748,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv8f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv8f32_commute: @@ -766,12 +757,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv8f32_commute: @@ -802,8 +793,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v12, fa0, v8 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v12 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv8f32_unmasked: @@ -812,12 +802,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v16, v12 +; ZVFHMIN-NEXT: vfnmacc.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv8f32_unmasked: ; ZFHMIN: # %bb.0: @@ -852,8 +842,7 @@ ; ZVFH-LABEL: vfnmacc_vv_nxv16f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmacc.vv v16, v8, v12, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmacc.vv v8, v16, v20, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vv_nxv16f32: @@ -865,14 +854,14 @@ ; ZVFHMIN-NEXT: sub sp, sp, a1 ; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb ; ZVFHMIN-NEXT: addi a1, sp, 16 -; ZVFHMIN-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill +; ZVFHMIN-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma ; ZVFHMIN-NEXT: addi a0, sp, 16 -; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload -; ZVFHMIN-NEXT: vfnmadd.vv v24, v16, v8, v0.t +; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload +; ZVFHMIN-NEXT: vfnmadd.vv v24, v8, v16, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v24 ; ZVFHMIN-NEXT: csrr a0, vlenb ; ZVFHMIN-NEXT: slli a0, a0, 3 @@ -914,18 +903,16 @@ ; ZVFH-LABEL: vfnmacc_vv_nxv16f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmacc.vv v16, v8, v12 -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmacc.vv v8, v16, v20 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vv_nxv16f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v24, v0, v16 -; ZVFHMIN-NEXT: vmv.v.v v8, v24 +; ZVFHMIN-NEXT: vfnmacc.vv v8, v24, v0 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vv_nxv16f32_unmasked: ; ZFHMIN: # %bb.0: @@ -950,8 +937,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv16f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v16, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv16f32: @@ -962,10 +948,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v4, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v24, v16, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v16, v24, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv16f32: ; ZFHMIN: # %bb.0: @@ -995,23 +982,22 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv16f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v16, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv16f32_commute: ; ZVFHMIN: # %bb.0: -; ZVFHMIN-NEXT: vmv4r.v v24, v8 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfmv.v.f v8, fa5 +; ZVFHMIN-NEXT: vfmv.v.f v24, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v8 +; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v24, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v4, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v4, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v24, v16, v0.t +; ZVFHMIN-NEXT: vfnmadd.vv v24, v16, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v24 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv16f32_commute: ; ZFHMIN: # %bb.0: @@ -1041,8 +1027,7 @@ ; ZVFH-LABEL: vfnmacc_vf_nxv16f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmacc.vf v16, fa0, v8 -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmacc.vf v8, fa0, v16 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmacc_vf_nxv16f32_unmasked: @@ -1051,12 +1036,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v0, v24 +; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v0 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmadd.vv v8, v24, v16 +; ZVFHMIN-NEXT: vfnmacc.vv v8, v24, v0 ; ZVFHMIN-NEXT: ret ; ZFHMIN-LABEL: vfnmacc_vf_nxv16f32_unmasked: ; ZFHMIN: # %bb.0: @@ -1181,8 +1166,7 @@ ; CHECK-LABEL: vfnmacc_vv_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vv v8, v10, v11, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv2f64.nxv2f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv2f64.nxv2f32( %b, %m, i32 %evl) @@ -1196,8 +1180,7 @@ ; CHECK-LABEL: vfnmacc_vv_nxv2f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vv v10, v8, v9 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vv v8, v10, v11 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1213,8 +1196,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v10, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1231,8 +1213,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv2f64_commute: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vf v10, fa0, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v10, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1248,8 +1229,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv2f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vf v10, fa0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v10 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1271,8 +1251,7 @@ ; CHECK-LABEL: vfnmacc_vv_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vv v8, v12, v14, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f64.nxv4f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv4f64.nxv4f32( %b, %m, i32 %evl) @@ -1286,8 +1265,7 @@ ; CHECK-LABEL: vfnmacc_vv_nxv4f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vv v12, v8, v10 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vv v8, v12, v14 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1303,8 +1281,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v12, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1321,8 +1298,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv4f64_commute: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vf v12, fa0, v8, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v12, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1338,8 +1314,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv4f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vf v12, fa0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v12 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1361,8 +1336,7 @@ ; CHECK-LABEL: vfnmacc_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vv v8, v16, v20, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f64.nxv8f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv8f64.nxv8f32( %b, %m, i32 %evl) @@ -1376,8 +1350,7 @@ ; CHECK-LABEL: vfnmacc_vv_nxv8f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vv v16, v8, v12 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vv v8, v16, v20 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1393,8 +1366,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v16, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1411,8 +1383,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv8f64_commute: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vf v16, fa0, v8, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v16, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1428,8 +1399,7 @@ ; CHECK-LABEL: vfnmacc_vf_nxv8f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vf v16, fa0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vf v8, fa0, v16 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1489,11 +1459,10 @@ ; CHECK-LABEL: vfnmacc_vv_nxv2f64_nxv2f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; CHECK-NEXT: vfwcvt.f.f.v v8, v9, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v10, v11, v0.t ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vv v10, v12, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vv v8, v12, v10, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv2f64.nxv2f16( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv2f64.nxv2f16( %b, %m, i32 %evl) @@ -1507,11 +1476,10 @@ ; CHECK-LABEL: vfnmacc_vv_nxv2f64_nxv2f16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8 -; CHECK-NEXT: vfwcvt.f.f.v v8, v9 +; CHECK-NEXT: vfwcvt.f.f.v v12, v10 +; CHECK-NEXT: vfwcvt.f.f.v v10, v11 ; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma -; CHECK-NEXT: vfwnmacc.vv v10, v12, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmacc.vv v8, v12, v10 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1529,11 +1497,10 @@ ; CHECK-LABEL: vfnmacc_vv_nxv4f64_nxv4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v10, v8, v0.t -; CHECK-NEXT: vfwcvt.f.f.v v16, v9, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v14, v12, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v16, v13, v0.t ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vv v12, v10, v16, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vv v8, v14, v16, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f64.nxv4f16( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv4f64.nxv4f16( %b, %m, i32 %evl) @@ -1547,11 +1514,10 @@ ; CHECK-LABEL: vfnmacc_vv_nxv4f64_nxv4f16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v10, v8 -; CHECK-NEXT: vfwcvt.f.f.v v16, v9 +; CHECK-NEXT: vfwcvt.f.f.v v14, v12 +; CHECK-NEXT: vfwcvt.f.f.v v16, v13 ; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; CHECK-NEXT: vfwnmacc.vv v12, v10, v16 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmacc.vv v8, v14, v16 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1569,11 +1535,10 @@ ; CHECK-LABEL: vfnmacc_vv_nxv8f64_nxv4f16: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; CHECK-NEXT: vfwcvt.f.f.v v24, v10, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v20, v16, v0.t +; CHECK-NEXT: vfwcvt.f.f.v v24, v18, v0.t ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vv v16, v12, v24, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vv v8, v20, v24, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f64.nxv8f16( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv8f64.nxv8f16( %b, %m, i32 %evl) @@ -1587,11 +1552,10 @@ ; CHECK-LABEL: vfnmacc_vv_nxv8f64_nxv4f16_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vfwcvt.f.f.v v12, v8 -; CHECK-NEXT: vfwcvt.f.f.v v24, v10 +; CHECK-NEXT: vfwcvt.f.f.v v20, v16 +; CHECK-NEXT: vfwcvt.f.f.v v24, v18 ; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; CHECK-NEXT: vfwnmacc.vv v16, v12, v24 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmacc.vv v8, v20, v24 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwnmsac-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vfwnmsac-vp.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwnmsac-vp.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwnmsac-vp.ll @@ -306,17 +306,16 @@ ; ZVFH-LABEL: vfnmsac_vv_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmsac.vv v10, v8, v9, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmsac.vv v8, v10, v11, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vv_nxv4f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f32.nxv4f16( %a, %m, i32 %evl) @@ -330,18 +329,16 @@ ; ZVFH-LABEL: vfnmsac_vv_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmsac.vv v10, v8, v9 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmsac.vv v8, v10, v11 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vv_nxv4f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v9 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v12, v14, v10 -; ZVFHMIN-NEXT: vmv.v.v v8, v12 +; ZVFHMIN-NEXT: vfnmsac.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -356,8 +353,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv4f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32: @@ -368,10 +364,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v12, v10, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v10, v12, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v10 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -386,8 +383,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv4f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v10, fa0, v8, v0.t -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v10, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32_commute: @@ -396,12 +392,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v9, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v9, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v12, v14, v10, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v12, v14, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 @@ -417,8 +413,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv4f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v10, fa0, v8 -; ZVFH-NEXT: vmv2r.v v8, v10 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v10 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv4f32_unmasked: @@ -427,12 +422,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m2, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v12 +; ZVFHMIN-NEXT: vfncvt.f.f.w v11, v12 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v14 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v14, v11 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v12, v10 +; ZVFHMIN-NEXT: vfnmsac.vv v8, v12, v14 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -453,17 +448,16 @@ ; ZVFH-LABEL: vfnmsac_vv_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmsac.vv v12, v8, v10, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmsac.vv v8, v12, v14, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vv_nxv8f32: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f32.nxv8f16( %a, %m, i32 %evl) @@ -477,18 +471,16 @@ ; ZVFH-LABEL: vfnmsac_vv_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmsac.vv v12, v8, v10 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmsac.vv v8, v12, v14 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vv_nxv8f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v16, v20, v12 -; ZVFHMIN-NEXT: vmv.v.v v8, v16 +; ZVFHMIN-NEXT: vfnmsac.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -503,8 +495,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv8f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32: @@ -515,10 +506,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v16, v12, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v12, v16, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v12 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -533,8 +525,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv8f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v12, fa0, v8, v0.t -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v12, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32_commute: @@ -543,12 +534,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v10, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v16, v20, v12, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v16, v20, v8, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 @@ -564,8 +555,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv8f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v12, fa0, v8 -; ZVFH-NEXT: vmv4r.v v8, v12 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v12 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv8f32_unmasked: @@ -574,12 +564,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m4, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v16, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v16 +; ZVFHMIN-NEXT: vfncvt.f.f.w v14, v16 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v20 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v20, v14 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v16, v12 +; ZVFHMIN-NEXT: vfnmsac.vv v8, v16, v20 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -600,8 +590,7 @@ ; ZVFH-LABEL: vfnmsac_vv_nxv16f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmsac.vv v16, v8, v12, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmsac.vv v8, v16, v20, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vv_nxv16f32: @@ -613,14 +602,14 @@ ; ZVFHMIN-NEXT: sub sp, sp, a1 ; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb ; ZVFHMIN-NEXT: addi a1, sp, 16 -; ZVFHMIN-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill +; ZVFHMIN-NEXT: vs8r.v v8, (a1) # Unknown-size Folded Spill ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma ; ZVFHMIN-NEXT: addi a0, sp, 16 -; ZVFHMIN-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload -; ZVFHMIN-NEXT: vfnmsub.vv v24, v16, v8, v0.t +; ZVFHMIN-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload +; ZVFHMIN-NEXT: vfnmsub.vv v24, v8, v16, v0.t ; ZVFHMIN-NEXT: vmv.v.v v8, v24 ; ZVFHMIN-NEXT: csrr a0, vlenb ; ZVFHMIN-NEXT: slli a0, a0, 3 @@ -638,18 +627,16 @@ ; ZVFH-LABEL: vfnmsac_vv_nxv16f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmsac.vv v16, v8, v12 -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmsac.vv v8, v16, v20 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vv_nxv16f32_unmasked: ; ZVFHMIN: # %bb.0: ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v24, v0, v16 -; ZVFHMIN-NEXT: vmv.v.v v8, v24 +; ZVFHMIN-NEXT: vfnmsac.vv v8, v24, v0 ; ZVFHMIN-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -664,8 +651,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv16f32: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v16, fa0, v8, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v16, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32: @@ -676,10 +662,11 @@ ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma ; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v4, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v4, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v24, v16, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v16, v24, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v16 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -694,23 +681,22 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv16f32_commute: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v16, fa0, v8, v0.t -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v16, v0.t ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32_commute: ; ZVFHMIN: # %bb.0: -; ZVFHMIN-NEXT: vmv4r.v v24, v8 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0 ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfmv.v.f v8, fa5 +; ZVFHMIN-NEXT: vfmv.v.f v24, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v8 +; ZVFHMIN-NEXT: vfncvt.f.f.w v4, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v24, v0.t -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v4, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16, v0.t +; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v4, v0.t ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v24, v16, v0.t +; ZVFHMIN-NEXT: vfnmsub.vv v24, v16, v8, v0.t +; ZVFHMIN-NEXT: vmv.v.v v8, v24 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -725,8 +711,7 @@ ; ZVFH-LABEL: vfnmsac_vf_nxv16f32_unmasked: ; ZVFH: # %bb.0: ; ZVFH-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFH-NEXT: vfwnmsac.vf v16, fa0, v8 -; ZVFH-NEXT: vmv8r.v v8, v16 +; ZVFH-NEXT: vfwnmsac.vf v8, fa0, v16 ; ZVFH-NEXT: ret ; ; ZVFHMIN-LABEL: vfnmsac_vf_nxv16f32_unmasked: @@ -735,12 +720,12 @@ ; ZVFHMIN-NEXT: vsetvli a1, zero, e32, m8, ta, ma ; ZVFHMIN-NEXT: vfmv.v.f v24, fa5 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfncvt.f.f.w v0, v24 +; ZVFHMIN-NEXT: vfncvt.f.f.w v20, v24 ; ZVFHMIN-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8 -; ZVFHMIN-NEXT: vfwcvt.f.f.v v8, v0 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16 +; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v20 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma -; ZVFHMIN-NEXT: vfnmsub.vv v8, v24, v16 +; ZVFHMIN-NEXT: vfnmsac.vv v8, v24, v0 ; ZVFHMIN-NEXT: ret %elt.head = insertelement poison, half %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -845,8 +830,7 @@ ; CHECK-LABEL: vfnmsac_vv_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmsac.vv v10, v8, v9, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmsac.vv v8, v10, v11, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv2f64.nxv2f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv2f64.nxv2f32( %b, %m, i32 %evl) @@ -859,8 +843,7 @@ ; CHECK-LABEL: vfnmsac_vv_nxv2f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmsac.vv v10, v8, v9 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmsac.vv v8, v10, v11 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -875,8 +858,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv2f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmsac.vf v10, fa0, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v10, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -891,8 +873,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv2f64_commute: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmsac.vf v10, fa0, v8, v0.t -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v10, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -907,8 +888,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv2f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vfwnmsac.vf v10, fa0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v10 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -929,8 +909,7 @@ ; CHECK-LABEL: vfnmsac_vv_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmsac.vv v12, v8, v10, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmsac.vv v8, v12, v14, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv4f64.nxv4f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv4f64.nxv4f32( %b, %m, i32 %evl) @@ -943,8 +922,7 @@ ; CHECK-LABEL: vfnmsac_vv_nxv4f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmsac.vv v12, v8, v10 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmsac.vv v8, v12, v14 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -959,8 +937,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv4f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmsac.vf v12, fa0, v8, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v12, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -975,8 +952,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv4f64_commute: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmsac.vf v12, fa0, v8, v0.t -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v12, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -991,8 +967,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv4f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vfwnmsac.vf v12, fa0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v12 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1013,8 +988,7 @@ ; CHECK-LABEL: vfnmsac_vv_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmsac.vv v16, v8, v12, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmsac.vv v8, v16, v20, v0.t ; CHECK-NEXT: ret %aext = call @llvm.vp.fpext.nxv8f64.nxv8f32( %a, %m, i32 %evl) %bext = call @llvm.vp.fpext.nxv8f64.nxv8f32( %b, %m, i32 %evl) @@ -1027,8 +1001,7 @@ ; CHECK-LABEL: vfnmsac_vv_nxv8f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmsac.vv v16, v8, v12 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmsac.vv v8, v16, v20 ; CHECK-NEXT: ret %splat = insertelement poison, i1 -1, i32 0 %allones = shufflevector %splat, poison, zeroinitializer @@ -1043,8 +1016,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv8f64: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmsac.vf v16, fa0, v8, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v16, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1059,8 +1031,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv8f64_commute: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmsac.vf v16, fa0, v8, v0.t -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v16, v0.t ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer @@ -1075,8 +1046,7 @@ ; CHECK-LABEL: vfnmsac_vf_nxv8f64_unmasked: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vfwnmsac.vf v16, fa0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vfwnmsac.vf v8, fa0, v16 ; CHECK-NEXT: ret %elt.head = insertelement poison, float %b, i32 0 %vb = shufflevector %elt.head, poison, zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwredosum.ll b/llvm/test/CodeGen/RISCV/rvv/vfwredosum.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwredosum.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwredosum.ll @@ -165,8 +165,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v10, v9 +; CHECK-NEXT: vfwredosum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.nxv2f32.nxv8f16( @@ -190,8 +191,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfwredosum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.mask.nxv2f32.nxv8f16.nxv2f32( @@ -215,8 +217,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v12, v9 +; CHECK-NEXT: vfwredosum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.nxv2f32.nxv16f16( @@ -240,8 +243,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfwredosum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.mask.nxv2f32.nxv16f16.nxv2f32( @@ -265,8 +269,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v16, v9 +; CHECK-NEXT: vfwredosum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.nxv2f32.nxv32f16( @@ -290,8 +295,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfwredosum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.mask.nxv2f32.nxv32f16( @@ -415,8 +421,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v10, v9 +; CHECK-NEXT: vfwredosum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.nxv1f64.nxv4f32( @@ -440,8 +447,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfwredosum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.mask.nxv1f64.nxv4f32.nxv1f64( @@ -465,8 +473,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v12, v9 +; CHECK-NEXT: vfwredosum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.nxv1f64.nxv8f32( @@ -490,8 +499,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfwredosum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.mask.nxv1f64.nxv8f32.nxv1f64( @@ -515,8 +525,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v16, v9 +; CHECK-NEXT: vfwredosum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.nxv1f64.nxv16f32( @@ -540,8 +551,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredosum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfwredosum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredosum.mask.nxv1f64.nxv16f32.nxv1f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwredusum.ll b/llvm/test/CodeGen/RISCV/rvv/vfwredusum.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwredusum.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwredusum.ll @@ -165,8 +165,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v10, v9 +; CHECK-NEXT: vfwredusum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.nxv2f32.nxv8f16( @@ -190,8 +191,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfwredusum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.mask.nxv2f32.nxv8f16.nxv2f32( @@ -215,8 +217,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v12, v9 +; CHECK-NEXT: vfwredusum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.nxv2f32.nxv16f16( @@ -240,8 +243,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfwredusum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.mask.nxv2f32.nxv16f16.nxv2f32( @@ -265,8 +269,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v16, v9 +; CHECK-NEXT: vfwredusum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.nxv2f32.nxv32f16( @@ -290,8 +295,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfwredusum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.mask.nxv2f32.nxv32f16( @@ -415,8 +421,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v10, v9 +; CHECK-NEXT: vfwredusum.vs v10, v8, v11 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.nxv1f64.nxv4f32( @@ -440,8 +447,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vfwredusum.vs v10, v8, v11, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.mask.nxv1f64.nxv4f32.nxv1f64( @@ -465,8 +473,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v12, v9 +; CHECK-NEXT: vfwredusum.vs v12, v8, v13 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.nxv1f64.nxv8f32( @@ -490,8 +499,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vfwredusum.vs v12, v8, v13, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.mask.nxv1f64.nxv8f32.nxv1f64( @@ -515,8 +525,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v16, v9 +; CHECK-NEXT: vfwredusum.vs v16, v8, v17 ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.nxv1f64.nxv16f32( @@ -540,8 +551,9 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwredusum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vfwredusum.vs v16, v8, v17, v0.t ; CHECK-NEXT: fsrm a0 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwredusum.mask.nxv1f64.nxv16f32.nxv1f64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vfwsub.w.ll b/llvm/test/CodeGen/RISCV/rvv/vfwsub.w.ll --- a/llvm/test/CodeGen/RISCV/rvv/vfwsub.w.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vfwsub.w.ll @@ -1291,9 +1291,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwsub.wv v12, v10, v8 +; CHECK-NEXT: vfwsub.wv v8, v8, v10 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv2r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.nxv4f32.nxv4f16( @@ -1310,9 +1309,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwsub.wv v16, v12, v8 +; CHECK-NEXT: vfwsub.wv v8, v8, v12 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv4r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.nxv8f32.nxv8f16( @@ -1348,9 +1346,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwsub.wv v12, v10, v8 +; CHECK-NEXT: vfwsub.wv v8, v8, v10 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv2r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.nxv2f64.nxv2f32( @@ -1367,9 +1364,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwsub.wv v16, v12, v8 +; CHECK-NEXT: vfwsub.wv v8, v8, v12 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv4r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.nxv4f64.nxv4f32( @@ -1386,9 +1382,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma ; CHECK-NEXT: fsrmi a0, 0 -; CHECK-NEXT: vfwsub.wv v24, v16, v8 +; CHECK-NEXT: vfwsub.wv v8, v8, v16 ; CHECK-NEXT: fsrm a0 -; CHECK-NEXT: vmv8r.v v8, v24 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vfwsub.w.nxv8f64.nxv8f32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vloxei-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vloxei-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vloxei-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vloxei-rv64.ll @@ -87,7 +87,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv2i8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv2i8.nxv2i64( @@ -135,7 +136,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4i8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4i8.nxv4i64( @@ -183,7 +185,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8i8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8i8.nxv8i64( @@ -279,7 +282,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv2i16_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv2i16.nxv2i64( @@ -327,7 +331,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4i16_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4i16.nxv4i64( @@ -375,7 +380,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8i16_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8i16.nxv8i64( @@ -471,7 +477,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv2i32_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv2i32.nxv2i64( @@ -519,7 +526,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4i32_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4i32.nxv4i64( @@ -567,7 +575,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8i32_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8i32.nxv8i64( @@ -851,7 +860,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv2f16_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv2f16.nxv2i64( @@ -899,7 +909,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4f16_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4f16.nxv4i64( @@ -947,7 +958,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8f16_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8f16.nxv8i64( @@ -1043,7 +1055,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv2f32_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv2f32.nxv2i64( @@ -1091,7 +1104,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4f32_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4f32.nxv4i64( @@ -1139,7 +1153,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8f32_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: vloxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8f32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vloxei.ll b/llvm/test/CodeGen/RISCV/rvv/vloxei.ll --- a/llvm/test/CodeGen/RISCV/rvv/vloxei.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vloxei.ll @@ -135,7 +135,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4i8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4i8.nxv4i32( @@ -183,7 +184,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8i8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8i8.nxv8i32( @@ -231,7 +233,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv16i8_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv16i8.nxv16i32( @@ -375,7 +378,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4i16_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4i16.nxv4i32( @@ -423,7 +427,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8i16_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8i16.nxv8i32( @@ -471,7 +476,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv16i16_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv16i16.nxv16i32( @@ -1042,7 +1048,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv4f16_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv4f16.nxv4i32( @@ -1090,7 +1097,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8f16_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8f16.nxv8i32( @@ -1138,7 +1146,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv16f16_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: vloxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv16f16.nxv16i32( @@ -1757,7 +1766,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv8i8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vloxei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv8i8.nxv8i16( @@ -1805,7 +1815,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv16i8_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vloxei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv16i8.nxv16i16( @@ -1853,7 +1864,8 @@ ; CHECK-LABEL: intrinsic_vloxei_mask_v_nxv32i8_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: vloxei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vloxei16.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vloxei.mask.nxv32i8.nxv32i16( diff --git a/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv32.ll @@ -79,7 +79,9 @@ define @test_vloxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -813,7 +815,9 @@ define @test_vloxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vloxseg2ei16.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -871,7 +875,9 @@ define @test_vloxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -900,10 +906,11 @@ define @test_vloxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg3ei16.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -961,10 +968,11 @@ define @test_vloxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg3ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -991,12 +999,12 @@ define @test_vloxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg4ei16.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -1056,11 +1064,12 @@ define @test_vloxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -1850,7 +1859,9 @@ define @test_vloxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -1941,10 +1952,11 @@ define @test_vloxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2037,12 +2049,12 @@ define @test_vloxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2137,14 +2149,13 @@ define @test_vloxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2241,15 +2252,14 @@ define @test_vloxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2348,16 +2358,15 @@ define @test_vloxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2458,17 +2467,16 @@ define @test_vloxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3258,7 +3266,9 @@ define @test_vloxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -3349,10 +3359,11 @@ define @test_vloxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3445,12 +3456,12 @@ define @test_vloxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3477,7 +3488,9 @@ define @test_vloxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vloxseg2ei16.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -3535,7 +3548,9 @@ define @test_vloxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -3564,10 +3579,11 @@ define @test_vloxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg3ei16.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3625,10 +3641,11 @@ define @test_vloxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3655,12 +3672,12 @@ define @test_vloxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg4ei16.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3720,11 +3737,12 @@ define @test_vloxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3751,14 +3769,13 @@ define @test_vloxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg5ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3819,12 +3836,13 @@ define @test_vloxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3851,15 +3869,14 @@ define @test_vloxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg6ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3921,14 +3938,14 @@ define @test_vloxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3955,16 +3972,15 @@ define @test_vloxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg7ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4027,16 +4043,15 @@ define @test_vloxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4063,17 +4078,16 @@ define @test_vloxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg8ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4137,17 +4151,16 @@ define @test_vloxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4319,7 +4332,9 @@ define @test_vloxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -4410,10 +4425,11 @@ define @test_vloxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4506,12 +4522,12 @@ define @test_vloxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4606,14 +4622,13 @@ define @test_vloxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4710,15 +4725,14 @@ define @test_vloxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4817,16 +4831,15 @@ define @test_vloxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4927,17 +4940,16 @@ define @test_vloxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -5669,7 +5681,9 @@ define @test_vloxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu ; CHECK-NEXT: vloxseg2ei16.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -7474,7 +7488,9 @@ define @test_vloxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -10468,7 +10484,9 @@ define @test_vloxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -10559,10 +10577,11 @@ define @test_vloxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -10655,12 +10674,12 @@ define @test_vloxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11111,7 +11130,9 @@ define @test_vloxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -11202,10 +11223,11 @@ define @test_vloxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11298,12 +11320,12 @@ define @test_vloxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11398,14 +11420,13 @@ define @test_vloxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11502,15 +11523,14 @@ define @test_vloxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11609,16 +11629,15 @@ define @test_vloxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11719,17 +11738,16 @@ define @test_vloxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) diff --git a/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vloxseg-rv64.ll @@ -79,7 +79,9 @@ define @test_vloxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -166,7 +168,9 @@ define @test_vloxseg2_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -286,10 +290,11 @@ define @test_vloxseg3_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -413,12 +418,12 @@ define @test_vloxseg4_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -478,7 +483,9 @@ define @test_vloxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vloxseg2ei16.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -536,7 +543,9 @@ define @test_vloxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -565,10 +574,11 @@ define @test_vloxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg3ei16.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -626,10 +636,11 @@ define @test_vloxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg3ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -656,12 +667,12 @@ define @test_vloxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg4ei16.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -721,11 +732,12 @@ define @test_vloxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2690,7 +2702,9 @@ define @test_vloxseg2_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -2719,7 +2733,9 @@ define @test_vloxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -2810,10 +2826,11 @@ define @test_vloxseg3_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg3ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2840,10 +2857,11 @@ define @test_vloxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2936,11 +2954,12 @@ define @test_vloxseg4_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2967,12 +2986,12 @@ define @test_vloxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2999,7 +3018,9 @@ define @test_vloxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -3057,7 +3078,9 @@ define @test_vloxseg2_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -3115,10 +3138,11 @@ define @test_vloxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3176,10 +3200,11 @@ define @test_vloxseg3_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i8.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3237,12 +3262,12 @@ define @test_vloxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3302,11 +3327,12 @@ define @test_vloxseg4_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3366,14 +3392,13 @@ define @test_vloxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3434,12 +3459,13 @@ define @test_vloxseg5_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3500,15 +3526,14 @@ define @test_vloxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3570,14 +3595,14 @@ define @test_vloxseg6_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3639,16 +3664,15 @@ define @test_vloxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3711,16 +3735,15 @@ define @test_vloxseg7_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3783,17 +3806,16 @@ define @test_vloxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3857,17 +3879,16 @@ define @test_vloxseg8_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -4958,7 +4979,9 @@ define @test_vloxseg2_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -5080,10 +5103,11 @@ define @test_vloxseg3_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv2i32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5209,12 +5233,12 @@ define @test_vloxseg4_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5343,14 +5367,13 @@ define @test_vloxseg5_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5482,15 +5505,14 @@ define @test_vloxseg6_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5625,16 +5647,15 @@ define @test_vloxseg7_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5772,17 +5793,16 @@ define @test_vloxseg8_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5809,7 +5829,9 @@ define @test_vloxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vloxseg2ei16.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -5867,7 +5889,9 @@ define @test_vloxseg2_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -5896,7 +5920,9 @@ define @test_vloxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -5925,10 +5951,11 @@ define @test_vloxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg3ei16.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5986,10 +6013,11 @@ define @test_vloxseg3_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg3ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i8.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6016,10 +6044,11 @@ define @test_vloxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6046,12 +6075,12 @@ define @test_vloxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg4ei16.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6111,11 +6140,12 @@ define @test_vloxseg4_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6142,11 +6172,12 @@ define @test_vloxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6173,14 +6204,13 @@ define @test_vloxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg5ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6241,12 +6271,13 @@ define @test_vloxseg5_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg5ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6273,12 +6304,13 @@ define @test_vloxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6305,15 +6337,14 @@ define @test_vloxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg6ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6375,13 +6406,14 @@ define @test_vloxseg6_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg6ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6408,14 +6440,14 @@ define @test_vloxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6442,16 +6474,15 @@ define @test_vloxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg7ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6514,14 +6545,15 @@ define @test_vloxseg7_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg7ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6548,16 +6580,15 @@ define @test_vloxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6584,17 +6615,16 @@ define @test_vloxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg8ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6658,15 +6688,16 @@ define @test_vloxseg8_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 +; CHECK-NEXT: vmv1r.v v23, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg8ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6693,17 +6724,16 @@ define @test_vloxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6846,7 +6876,9 @@ define @test_vloxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -6904,7 +6936,9 @@ define @test_vloxseg2_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -6962,10 +6996,11 @@ define @test_vloxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7023,10 +7058,11 @@ define @test_vloxseg3_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4i16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7084,12 +7120,12 @@ define @test_vloxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7149,11 +7185,12 @@ define @test_vloxseg4_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7213,14 +7250,13 @@ define @test_vloxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7281,12 +7317,13 @@ define @test_vloxseg5_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7347,15 +7384,14 @@ define @test_vloxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7417,14 +7453,14 @@ define @test_vloxseg6_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7486,16 +7522,15 @@ define @test_vloxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7558,16 +7593,15 @@ define @test_vloxseg7_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7630,17 +7664,16 @@ define @test_vloxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7704,17 +7737,16 @@ define @test_vloxseg8_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -8805,7 +8837,9 @@ define @test_vloxseg2_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -8927,10 +8961,11 @@ define @test_vloxseg3_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv2i8.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9056,12 +9091,12 @@ define @test_vloxseg4_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9190,14 +9225,13 @@ define @test_vloxseg5_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9329,15 +9363,14 @@ define @test_vloxseg6_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9472,16 +9505,15 @@ define @test_vloxseg7_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9615,21 +9647,20 @@ %1 = extractvalue {,,,,,,,} %0, 1 ret %1 } - -define @test_vloxseg8_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { -; CHECK-LABEL: test_vloxseg8_mask_nxv2i8_nxv2i64: -; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 + +define @test_vloxseg8_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { +; CHECK-LABEL: test_vloxseg8_mask_nxv2i8_nxv2i64: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9714,7 +9745,9 @@ define @test_vloxseg2_mask_nxv8i32_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -9772,7 +9805,9 @@ define @test_vloxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu ; CHECK-NEXT: vloxseg2ei16.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -9917,7 +9952,9 @@ define @test_vloxseg2_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -10039,10 +10076,11 @@ define @test_vloxseg3_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv2i16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10168,12 +10206,12 @@ define @test_vloxseg4_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10302,14 +10340,13 @@ define @test_vloxseg5_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10441,15 +10478,14 @@ define @test_vloxseg6_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10584,16 +10620,15 @@ define @test_vloxseg7_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10731,17 +10766,16 @@ define @test_vloxseg8_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -11198,7 +11232,9 @@ define @test_vloxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -12370,7 +12406,9 @@ define @test_vloxseg2_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -12492,10 +12530,11 @@ define @test_vloxseg3_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv2f32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -12621,12 +12660,12 @@ define @test_vloxseg4_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -12755,14 +12794,13 @@ define @test_vloxseg5_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -12894,15 +12932,14 @@ define @test_vloxseg6_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -13037,16 +13074,15 @@ define @test_vloxseg7_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -13184,17 +13220,16 @@ define @test_vloxseg8_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15159,7 +15194,9 @@ define @test_vloxseg2_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -15188,7 +15225,9 @@ define @test_vloxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -15279,10 +15318,11 @@ define @test_vloxseg3_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg3ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8f16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15309,10 +15349,11 @@ define @test_vloxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15405,11 +15446,12 @@ define @test_vloxseg4_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8f16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15436,12 +15478,12 @@ define @test_vloxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15526,7 +15568,9 @@ define @test_vloxseg2_mask_nxv8f32_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -15956,7 +16000,9 @@ define @test_vloxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vloxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -16014,7 +16060,9 @@ define @test_vloxseg2_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -16072,10 +16120,11 @@ define @test_vloxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16133,10 +16182,11 @@ define @test_vloxseg3_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4f16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16194,12 +16244,12 @@ define @test_vloxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16259,11 +16309,12 @@ define @test_vloxseg4_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16323,14 +16374,13 @@ define @test_vloxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16391,12 +16441,13 @@ define @test_vloxseg5_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16457,15 +16508,14 @@ define @test_vloxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16527,14 +16577,14 @@ define @test_vloxseg6_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16596,16 +16646,15 @@ define @test_vloxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16668,16 +16717,15 @@ define @test_vloxseg7_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16740,17 +16788,16 @@ define @test_vloxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16814,17 +16861,16 @@ define @test_vloxseg8_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16975,7 +17021,9 @@ define @test_vloxseg2_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -17097,10 +17145,11 @@ define @test_vloxseg3_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vloxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv2f16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17226,12 +17275,12 @@ define @test_vloxseg4_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vloxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17360,14 +17409,13 @@ define @test_vloxseg5_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg5_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vloxseg5.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17499,15 +17547,14 @@ define @test_vloxseg6_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg6_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vloxseg6.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17642,16 +17689,15 @@ define @test_vloxseg7_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg7_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vloxseg7.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17789,17 +17835,16 @@ define @test_vloxseg8_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg8_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vloxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vloxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vloxseg8.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17884,7 +17929,9 @@ define @test_vloxseg2_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg2_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; CHECK-NEXT: vloxseg2ei64.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -18004,10 +18051,11 @@ define @test_vloxseg3_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg3_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vloxseg3ei64.v v6, (a0), v12, v0.t +; CHECK-NEXT: vloxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vloxseg3.mask.nxv4f32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -18131,12 +18179,12 @@ define @test_vloxseg4_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vloxseg4_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vloxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vloxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vloxseg4.mask.nxv4f32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) diff --git a/llvm/test/CodeGen/RISCV/rvv/vluxei-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vluxei-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vluxei-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vluxei-rv64.ll @@ -87,7 +87,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv2i8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv2i8.nxv2i64( @@ -135,7 +136,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4i8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4i8.nxv4i64( @@ -183,7 +185,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8i8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8i8.nxv8i64( @@ -279,7 +282,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv2i16_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv2i16.nxv2i64( @@ -327,7 +331,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4i16_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4i16.nxv4i64( @@ -375,7 +380,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8i16_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8i16.nxv8i64( @@ -471,7 +477,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv2i32_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv2i32.nxv2i64( @@ -519,7 +526,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4i32_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4i32.nxv4i64( @@ -567,7 +575,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8i32_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8i32.nxv8i64( @@ -851,7 +860,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv2f16_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv2f16.nxv2i64( @@ -899,7 +909,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4f16_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4f16.nxv4i64( @@ -947,7 +958,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8f16_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8f16.nxv8i64( @@ -1043,7 +1055,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv2f32_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv2f32.nxv2i64( @@ -1091,7 +1104,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4f32_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4f32.nxv4i64( @@ -1139,7 +1153,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8f32_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: vluxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8f32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vluxei.ll b/llvm/test/CodeGen/RISCV/rvv/vluxei.ll --- a/llvm/test/CodeGen/RISCV/rvv/vluxei.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vluxei.ll @@ -135,7 +135,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4i8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4i8.nxv4i32( @@ -183,7 +184,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8i8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8i8.nxv8i32( @@ -231,7 +233,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv16i8_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv16i8.nxv16i32( @@ -375,7 +378,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4i16_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4i16.nxv4i32( @@ -423,7 +427,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8i16_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8i16.nxv8i32( @@ -471,7 +476,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv16i16_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv16i16.nxv16i32( @@ -1042,7 +1048,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv4f16_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv4f16.nxv4i32( @@ -1090,7 +1097,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8f16_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8f16.nxv8i32( @@ -1138,7 +1146,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv16f16_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: vluxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv16f16.nxv16i32( @@ -1757,7 +1766,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv8i8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vluxei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv8i8.nxv8i16( @@ -1805,7 +1815,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv16i8_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vluxei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv16i8.nxv16i16( @@ -1853,7 +1864,8 @@ ; CHECK-LABEL: intrinsic_vluxei_mask_v_nxv32i8_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: vluxei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vluxei16.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vluxei.mask.nxv32i8.nxv32i16( diff --git a/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv32.ll @@ -79,7 +79,9 @@ define @test_vluxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -813,7 +815,9 @@ define @test_vluxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vluxseg2ei16.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -871,7 +875,9 @@ define @test_vluxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -900,10 +906,11 @@ define @test_vluxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg3ei16.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -961,10 +968,11 @@ define @test_vluxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg3ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -991,12 +999,12 @@ define @test_vluxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg4ei16.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -1056,11 +1064,12 @@ define @test_vluxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -1850,7 +1859,9 @@ define @test_vluxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -1941,10 +1952,11 @@ define @test_vluxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2037,12 +2049,12 @@ define @test_vluxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2137,14 +2149,13 @@ define @test_vluxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2241,15 +2252,14 @@ define @test_vluxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2348,16 +2358,15 @@ define @test_vluxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -2458,17 +2467,16 @@ define @test_vluxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3258,7 +3266,9 @@ define @test_vluxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -3349,10 +3359,11 @@ define @test_vluxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3445,12 +3456,12 @@ define @test_vluxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3477,7 +3488,9 @@ define @test_vluxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vluxseg2ei16.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -3535,7 +3548,9 @@ define @test_vluxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -3564,10 +3579,11 @@ define @test_vluxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg3ei16.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3625,10 +3641,11 @@ define @test_vluxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3655,12 +3672,12 @@ define @test_vluxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg4ei16.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3720,11 +3737,12 @@ define @test_vluxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3751,14 +3769,13 @@ define @test_vluxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg5ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3819,12 +3836,13 @@ define @test_vluxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3851,15 +3869,14 @@ define @test_vluxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg6ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3921,14 +3938,14 @@ define @test_vluxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -3955,16 +3972,15 @@ define @test_vluxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg7ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4027,16 +4043,15 @@ define @test_vluxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4063,17 +4078,16 @@ define @test_vluxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg8ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4137,17 +4151,16 @@ define @test_vluxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4319,7 +4332,9 @@ define @test_vluxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -4410,10 +4425,11 @@ define @test_vluxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4506,12 +4522,12 @@ define @test_vluxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4606,14 +4622,13 @@ define @test_vluxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4710,15 +4725,14 @@ define @test_vluxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4817,16 +4831,15 @@ define @test_vluxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -4927,17 +4940,16 @@ define @test_vluxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -5669,7 +5681,9 @@ define @test_vluxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu ; CHECK-NEXT: vluxseg2ei16.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -7474,7 +7488,9 @@ define @test_vluxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -10468,7 +10484,9 @@ define @test_vluxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -10559,10 +10577,11 @@ define @test_vluxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -10655,12 +10674,12 @@ define @test_vluxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11111,7 +11130,9 @@ define @test_vluxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -11202,10 +11223,11 @@ define @test_vluxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11298,12 +11320,12 @@ define @test_vluxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11398,14 +11420,13 @@ define @test_vluxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11502,15 +11523,14 @@ define @test_vluxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11609,16 +11629,15 @@ define @test_vluxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) @@ -11719,17 +11738,16 @@ define @test_vluxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl, i32 1) diff --git a/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vluxseg-rv64.ll @@ -79,7 +79,9 @@ define @test_vluxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -166,7 +168,9 @@ define @test_vluxseg2_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -286,10 +290,11 @@ define @test_vluxseg3_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -413,12 +418,12 @@ define @test_vluxseg4_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -478,7 +483,9 @@ define @test_vluxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vluxseg2ei16.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -536,7 +543,9 @@ define @test_vluxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -565,10 +574,11 @@ define @test_vluxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg3ei16.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -626,10 +636,11 @@ define @test_vluxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg3ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -656,12 +667,12 @@ define @test_vluxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg4ei16.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei16.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -721,11 +732,12 @@ define @test_vluxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei32.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2690,7 +2702,9 @@ define @test_vluxseg2_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -2719,7 +2733,9 @@ define @test_vluxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -2810,10 +2826,11 @@ define @test_vluxseg3_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg3ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2840,10 +2857,11 @@ define @test_vluxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2936,11 +2954,12 @@ define @test_vluxseg4_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2967,12 +2986,12 @@ define @test_vluxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -2999,7 +3018,9 @@ define @test_vluxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -3057,7 +3078,9 @@ define @test_vluxseg2_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -3115,10 +3138,11 @@ define @test_vluxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3176,10 +3200,11 @@ define @test_vluxseg3_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i8.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3237,12 +3262,12 @@ define @test_vluxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3302,11 +3327,12 @@ define @test_vluxseg4_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3366,14 +3392,13 @@ define @test_vluxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3434,12 +3459,13 @@ define @test_vluxseg5_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3500,15 +3526,14 @@ define @test_vluxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3570,14 +3595,14 @@ define @test_vluxseg6_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3639,16 +3664,15 @@ define @test_vluxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3711,16 +3735,15 @@ define @test_vluxseg7_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3783,17 +3806,16 @@ define @test_vluxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -3857,17 +3879,16 @@ define @test_vluxseg8_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -4958,7 +4979,9 @@ define @test_vluxseg2_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -5080,10 +5103,11 @@ define @test_vluxseg3_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv2i32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5209,12 +5233,12 @@ define @test_vluxseg4_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5343,14 +5367,13 @@ define @test_vluxseg5_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5482,15 +5505,14 @@ define @test_vluxseg6_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5625,16 +5647,15 @@ define @test_vluxseg7_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5772,17 +5793,16 @@ define @test_vluxseg8_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5809,7 +5829,9 @@ define @test_vluxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vluxseg2ei16.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -5867,7 +5889,9 @@ define @test_vluxseg2_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -5896,7 +5920,9 @@ define @test_vluxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -5925,10 +5951,11 @@ define @test_vluxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg3ei16.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -5986,10 +6013,11 @@ define @test_vluxseg3_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg3ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i8.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6016,10 +6044,11 @@ define @test_vluxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6046,12 +6075,12 @@ define @test_vluxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg4ei16.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6111,11 +6140,12 @@ define @test_vluxseg4_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6142,11 +6172,12 @@ define @test_vluxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6173,14 +6204,13 @@ define @test_vluxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg5ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6241,12 +6271,13 @@ define @test_vluxseg5_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg5ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6273,12 +6304,13 @@ define @test_vluxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6305,15 +6337,14 @@ define @test_vluxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg6ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6375,13 +6406,14 @@ define @test_vluxseg6_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg6ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6408,14 +6440,14 @@ define @test_vluxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6442,16 +6474,15 @@ define @test_vluxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg7ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6514,14 +6545,15 @@ define @test_vluxseg7_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg7ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6548,16 +6580,15 @@ define @test_vluxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6584,17 +6615,16 @@ define @test_vluxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg8ei16.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei16.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6658,15 +6688,16 @@ define @test_vluxseg8_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 +; CHECK-NEXT: vmv1r.v v23, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg8ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v17 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6693,17 +6724,16 @@ define @test_vluxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -6846,7 +6876,9 @@ define @test_vluxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -6904,7 +6936,9 @@ define @test_vluxseg2_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -6962,10 +6996,11 @@ define @test_vluxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7023,10 +7058,11 @@ define @test_vluxseg3_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4i16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7084,12 +7120,12 @@ define @test_vluxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7149,11 +7185,12 @@ define @test_vluxseg4_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7213,14 +7250,13 @@ define @test_vluxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7281,12 +7317,13 @@ define @test_vluxseg5_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7347,15 +7384,14 @@ define @test_vluxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7417,14 +7453,14 @@ define @test_vluxseg6_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7486,16 +7522,15 @@ define @test_vluxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7558,16 +7593,15 @@ define @test_vluxseg7_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7630,17 +7664,16 @@ define @test_vluxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -7704,17 +7737,16 @@ define @test_vluxseg8_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -8805,7 +8837,9 @@ define @test_vluxseg2_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -8927,10 +8961,11 @@ define @test_vluxseg3_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv2i8.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9056,12 +9091,12 @@ define @test_vluxseg4_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9190,14 +9225,13 @@ define @test_vluxseg5_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9329,15 +9363,14 @@ define @test_vluxseg6_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9472,16 +9505,15 @@ define @test_vluxseg7_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9615,21 +9647,20 @@ %1 = extractvalue {,,,,,,,} %0, 1 ret %1 } - -define @test_vluxseg8_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { -; CHECK-LABEL: test_vluxseg8_mask_nxv2i8_nxv2i64: -; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 + +define @test_vluxseg8_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { +; CHECK-LABEL: test_vluxseg8_mask_nxv2i8_nxv2i64: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -9714,7 +9745,9 @@ define @test_vluxseg2_mask_nxv8i32_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -9772,7 +9805,9 @@ define @test_vluxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu ; CHECK-NEXT: vluxseg2ei16.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -9917,7 +9952,9 @@ define @test_vluxseg2_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -10039,10 +10076,11 @@ define @test_vluxseg3_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv2i16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10168,12 +10206,12 @@ define @test_vluxseg4_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10302,14 +10340,13 @@ define @test_vluxseg5_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10441,15 +10478,14 @@ define @test_vluxseg6_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10584,16 +10620,15 @@ define @test_vluxseg7_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -10731,17 +10766,16 @@ define @test_vluxseg8_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -11198,7 +11232,9 @@ define @test_vluxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -12370,7 +12406,9 @@ define @test_vluxseg2_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -12492,10 +12530,11 @@ define @test_vluxseg3_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv2f32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -12621,12 +12660,12 @@ define @test_vluxseg4_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -12755,14 +12794,13 @@ define @test_vluxseg5_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -12894,15 +12932,14 @@ define @test_vluxseg6_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -13037,16 +13074,15 @@ define @test_vluxseg7_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -13184,17 +13220,16 @@ define @test_vluxseg8_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15159,7 +15194,9 @@ define @test_vluxseg2_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v6, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -15188,7 +15225,9 @@ define @test_vluxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -15279,10 +15318,11 @@ define @test_vluxseg3_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg3ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8f16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15309,10 +15349,11 @@ define @test_vluxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15405,11 +15446,12 @@ define @test_vluxseg4_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei64.v v16, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v18 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8f16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15436,12 +15478,12 @@ define @test_vluxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei32.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -15526,7 +15568,9 @@ define @test_vluxseg2_mask_nxv8f32_nxv8i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v4, v8 +; CHECK-NEXT: vmv4r.v v4, v16 +; CHECK-NEXT: vmv8r.v v16, v8 +; CHECK-NEXT: vmv4r.v v8, v4 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v4, (a0), v16, v0.t ; CHECK-NEXT: ret @@ -15956,7 +16000,9 @@ define @test_vluxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vluxseg2ei32.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -16014,7 +16060,9 @@ define @test_vluxseg2_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -16072,10 +16120,11 @@ define @test_vluxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg3ei32.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16133,10 +16182,11 @@ define @test_vluxseg3_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4f16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16194,12 +16244,12 @@ define @test_vluxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg4ei32.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16259,11 +16309,12 @@ define @test_vluxseg4_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16323,14 +16374,13 @@ define @test_vluxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg5ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16391,12 +16441,13 @@ define @test_vluxseg5_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16457,15 +16508,14 @@ define @test_vluxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg6ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16527,14 +16577,14 @@ define @test_vluxseg6_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v7, (a0), v16, v0.t +; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16596,16 +16646,15 @@ define @test_vluxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg7ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16668,16 +16717,15 @@ define @test_vluxseg7_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16740,17 +16788,16 @@ define @test_vluxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg8ei32.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei32.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16814,17 +16861,16 @@ define @test_vluxseg8_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v16, (a0), v12, v0.t -; CHECK-NEXT: vmv1r.v v8, v17 +; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v13 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -16975,7 +17021,9 @@ define @test_vluxseg2_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 +; CHECK-NEXT: vmv1r.v v7, v10 +; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv1r.v v8, v7 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v7, (a0), v10, v0.t ; CHECK-NEXT: ret @@ -17097,10 +17145,11 @@ define @test_vluxseg3_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v7, (a0), v10, v0.t +; CHECK-NEXT: vluxseg3ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv2f16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17226,12 +17275,12 @@ define @test_vluxseg4_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v7, v8 -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v7, (a0), v12, v0.t +; CHECK-NEXT: vluxseg4ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17360,14 +17409,13 @@ define @test_vluxseg5_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg5_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg5ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg5ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,} @llvm.riscv.vluxseg5.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17499,15 +17547,14 @@ define @test_vluxseg6_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg6_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg6ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg6ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,} @llvm.riscv.vluxseg6.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17642,16 +17689,15 @@ define @test_vluxseg7_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg7_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg7ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg7ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,} @llvm.riscv.vluxseg7.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17789,17 +17835,16 @@ define @test_vluxseg8_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg8_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu -; CHECK-NEXT: vluxseg8ei64.v v12, (a0), v10, v0.t -; CHECK-NEXT: vmv1r.v v8, v13 +; CHECK-NEXT: vluxseg8ei64.v v10, (a0), v8, v0.t +; CHECK-NEXT: vmv1r.v v8, v11 ; CHECK-NEXT: ret entry: %0 = tail call {,,,,,,,} @llvm.riscv.vluxseg8.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -17884,7 +17929,9 @@ define @test_vluxseg2_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg2_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 +; CHECK-NEXT: vmv2r.v v6, v12 +; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv2r.v v8, v6 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; CHECK-NEXT: vluxseg2ei64.v v6, (a0), v12, v0.t ; CHECK-NEXT: ret @@ -18004,10 +18051,11 @@ define @test_vluxseg3_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg3_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vluxseg3ei64.v v6, (a0), v12, v0.t +; CHECK-NEXT: vluxseg3ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,} @llvm.riscv.vluxseg3.mask.nxv4f32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) @@ -18131,12 +18179,12 @@ define @test_vluxseg4_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl, %mask) { ; CHECK-LABEL: test_vluxseg4_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v6, v8 -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vluxseg4ei64.v v6, (a0), v16, v0.t +; CHECK-NEXT: vluxseg4ei64.v v12, (a0), v8, v0.t +; CHECK-NEXT: vmv2r.v v8, v14 ; CHECK-NEXT: ret entry: %0 = tail call {,,,} @llvm.riscv.vluxseg4.mask.nxv4f32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl, i64 1) diff --git a/llvm/test/CodeGen/RISCV/rvv/vnclip.ll b/llvm/test/CodeGen/RISCV/rvv/vnclip.ll --- a/llvm/test/CodeGen/RISCV/rvv/vnclip.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vnclip.ll @@ -184,7 +184,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnclip.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i8.nxv8i16.nxv8i8( @@ -233,7 +234,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnclip.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv16i8.nxv16i16.nxv16i8( @@ -282,7 +284,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnclip.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv32i8.nxv32i16.nxv32i8( @@ -427,7 +430,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnclip.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv4i16.nxv4i32.nxv4i16( @@ -476,7 +480,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnclip.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i16.nxv8i32.nxv8i16( @@ -525,7 +530,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnclip.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv16i16.nxv16i32.nxv16i16( @@ -622,7 +628,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnclip.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv2i32.nxv2i64.nxv2i32( @@ -671,7 +678,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnclip.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv4i32.nxv4i64.nxv4i32( @@ -720,7 +728,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnclip.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i32.nxv8i64.nxv8i32( @@ -909,7 +918,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnclip.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i8.nxv8i16( @@ -957,7 +967,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnclip.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv16i8.nxv16i16( @@ -1005,7 +1016,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnclip.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv32i8.nxv32i16( @@ -1147,7 +1159,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnclip.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv4i16.nxv4i32( @@ -1195,7 +1208,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnclip.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i16.nxv8i32( @@ -1243,7 +1257,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnclip.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv16i16.nxv16i32( @@ -1338,7 +1353,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnclip.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv2i32.nxv2i64( @@ -1386,7 +1402,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnclip.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv4i32.nxv4i64( @@ -1434,7 +1451,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnclip.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i32.nxv8i64( @@ -1575,7 +1593,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnclip.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i8.nxv8i16( @@ -1611,7 +1630,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnclip.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv16i8.nxv16i16( @@ -1647,7 +1667,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnclip.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv32i8.nxv32i16( @@ -1753,7 +1774,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnclip.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv4i16.nxv4i32( @@ -1789,7 +1811,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnclip.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i16.nxv8i32( @@ -1825,7 +1848,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnclip.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv16i16.nxv16i32( @@ -1896,7 +1920,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnclip.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv2i32.nxv2i64( @@ -1932,7 +1957,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnclip.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv4i32.nxv4i64( @@ -1968,7 +1994,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclip.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnclip.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclip.mask.nxv8i32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vnclipu.ll b/llvm/test/CodeGen/RISCV/rvv/vnclipu.ll --- a/llvm/test/CodeGen/RISCV/rvv/vnclipu.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vnclipu.ll @@ -184,7 +184,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnclipu.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i8.nxv8i16.nxv8i8( @@ -233,7 +234,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnclipu.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv16i8.nxv16i16.nxv16i8( @@ -282,7 +284,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnclipu.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv32i8.nxv32i16.nxv32i8( @@ -427,7 +430,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnclipu.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv4i16.nxv4i32.nxv4i16( @@ -476,7 +480,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnclipu.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i16.nxv8i32.nxv8i16( @@ -525,7 +530,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnclipu.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv16i16.nxv16i32.nxv16i16( @@ -622,7 +628,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnclipu.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv2i32.nxv2i64.nxv2i32( @@ -671,7 +678,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnclipu.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv4i32.nxv4i64.nxv4i32( @@ -720,7 +728,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnclipu.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i32.nxv8i64.nxv8i32( @@ -909,7 +918,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnclipu.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i8.nxv8i16( @@ -957,7 +967,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnclipu.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv16i8.nxv16i16( @@ -1005,7 +1016,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnclipu.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv32i8.nxv32i16( @@ -1147,7 +1159,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnclipu.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv4i16.nxv4i32( @@ -1195,7 +1208,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnclipu.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i16.nxv8i32( @@ -1243,7 +1257,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnclipu.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv16i16.nxv16i32( @@ -1338,7 +1353,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnclipu.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv2i32.nxv2i64( @@ -1386,7 +1402,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnclipu.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv4i32.nxv4i64( @@ -1434,7 +1451,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnclipu.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i32.nxv8i64( @@ -1575,7 +1593,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnclipu.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i8.nxv8i16( @@ -1611,7 +1630,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnclipu.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv16i8.nxv16i16( @@ -1647,7 +1667,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnclipu.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv32i8.nxv32i16( @@ -1753,7 +1774,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnclipu.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv4i16.nxv4i32( @@ -1789,7 +1811,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnclipu.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i16.nxv8i32( @@ -1825,7 +1848,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnclipu.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv16i16.nxv16i32( @@ -1896,7 +1920,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnclipu.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv2i32.nxv2i64( @@ -1932,7 +1957,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnclipu.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv4i32.nxv4i64( @@ -1968,7 +1994,8 @@ ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu ; CHECK-NEXT: csrwi vxrm, 0 -; CHECK-NEXT: vnclipu.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnclipu.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnclipu.mask.nxv8i32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vnsra.ll b/llvm/test/CodeGen/RISCV/rvv/vnsra.ll --- a/llvm/test/CodeGen/RISCV/rvv/vnsra.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vnsra.ll @@ -180,7 +180,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv8i8_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vnsra.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnsra.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i8.nxv8i16.nxv8i8( @@ -228,7 +229,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv16i8_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vnsra.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnsra.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv16i8.nxv16i16.nxv16i8( @@ -276,7 +278,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv32i8_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vnsra.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnsra.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv32i8.nxv32i16.nxv32i8( @@ -418,7 +421,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv4i16_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vnsra.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnsra.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv4i16.nxv4i32.nxv4i16( @@ -466,7 +470,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv8i16_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vnsra.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnsra.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i16.nxv8i32.nxv8i16( @@ -514,7 +519,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv16i16_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vnsra.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnsra.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv16i16.nxv16i32.nxv16i16( @@ -609,7 +615,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv2i32_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsra.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnsra.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv2i32.nxv2i64.nxv2i32( @@ -657,7 +664,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv4i32_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vnsra.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnsra.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv4i32.nxv4i64.nxv4i32( @@ -705,7 +713,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_wv_nxv8i32_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vnsra.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnsra.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i32.nxv8i64.nxv8i32( @@ -894,7 +903,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vnsra.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnsra.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i8.nxv8i16( @@ -942,7 +952,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vnsra.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnsra.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv16i8.nxv16i16( @@ -990,7 +1001,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: vnsra.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnsra.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv32i8.nxv32i16( @@ -1132,7 +1144,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vnsra.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnsra.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv4i16.nxv4i32( @@ -1180,7 +1193,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vnsra.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnsra.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i16.nxv8i32( @@ -1228,7 +1242,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: vnsra.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnsra.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv16i16.nxv16i32( @@ -1323,7 +1338,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vnsra.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnsra.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv2i32.nxv2i64( @@ -1371,7 +1387,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vnsra.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnsra.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv4i32.nxv4i64( @@ -1419,7 +1436,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vx_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: vnsra.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnsra.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i32.nxv8i64( @@ -1552,7 +1570,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv8i8_nxv8i16_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vnsra.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnsra.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i8.nxv8i16( @@ -1586,7 +1605,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv16i8_nxv16i16_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vnsra.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnsra.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv16i8.nxv16i16( @@ -1620,7 +1640,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv32i8_nxv32i16_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vnsra.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnsra.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv32i8.nxv32i16( @@ -1720,7 +1741,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv4i16_nxv4i32_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vnsra.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnsra.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv4i16.nxv4i32( @@ -1754,7 +1776,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv8i16_nxv8i32_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vnsra.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnsra.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i16.nxv8i32( @@ -1788,7 +1811,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv16i16_nxv16i32_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vnsra.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnsra.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv16i16.nxv16i32( @@ -1855,7 +1879,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv2i32_nxv2i64_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsra.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnsra.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv2i32.nxv2i64( @@ -1889,7 +1914,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv4i32_nxv4i64_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vnsra.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnsra.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv4i32.nxv4i64( @@ -1923,7 +1949,8 @@ ; CHECK-LABEL: intrinsic_vnsra_mask_vi_nxv8i32_nxv8i64_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vnsra.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnsra.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsra.mask.nxv8i32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vnsrl.ll b/llvm/test/CodeGen/RISCV/rvv/vnsrl.ll --- a/llvm/test/CodeGen/RISCV/rvv/vnsrl.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vnsrl.ll @@ -180,7 +180,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv8i8_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnsrl.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16.nxv8i8( @@ -228,7 +229,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv16i8_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnsrl.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16.nxv16i8( @@ -276,7 +278,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv32i8_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnsrl.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16.nxv32i8( @@ -418,7 +421,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv4i16_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnsrl.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32.nxv4i16( @@ -466,7 +470,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv8i16_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnsrl.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32.nxv8i16( @@ -514,7 +519,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv16i16_nxv16i32_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnsrl.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32.nxv16i16( @@ -609,7 +615,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv2i32_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v10, v9, v0.t +; CHECK-NEXT: vnsrl.wv v10, v8, v11, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64.nxv2i32( @@ -657,7 +664,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv4i32_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v12, v10, v0.t +; CHECK-NEXT: vnsrl.wv v12, v8, v14, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64.nxv4i32( @@ -705,7 +713,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_wv_nxv8i32_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vnsrl.wv v8, v16, v12, v0.t +; CHECK-NEXT: vnsrl.wv v16, v8, v20, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64.nxv8i32( @@ -894,7 +903,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnsrl.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16( @@ -942,7 +952,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnsrl.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16( @@ -990,7 +1001,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnsrl.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16( @@ -1132,7 +1144,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnsrl.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32( @@ -1180,7 +1193,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnsrl.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32( @@ -1228,7 +1242,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnsrl.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32( @@ -1323,7 +1338,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v10, a0, v0.t +; CHECK-NEXT: vnsrl.wx v10, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64( @@ -1371,7 +1387,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v12, a0, v0.t +; CHECK-NEXT: vnsrl.wx v12, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64( @@ -1419,7 +1436,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vx_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu -; CHECK-NEXT: vnsrl.wx v8, v16, a0, v0.t +; CHECK-NEXT: vnsrl.wx v16, v8, a0, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64( @@ -1552,7 +1570,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv8i8_nxv8i16_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i8.nxv8i16( @@ -1586,7 +1605,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv16i8_nxv16i16_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnsrl.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv16i8.nxv16i16( @@ -1620,7 +1640,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv32i8_nxv32i16_i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnsrl.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv32i8.nxv32i16( @@ -1720,7 +1741,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv4i16_nxv4i32_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv4i16.nxv4i32( @@ -1754,7 +1776,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv8i16_nxv8i32_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnsrl.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i16.nxv8i32( @@ -1788,7 +1811,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv16i16_nxv16i32_i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnsrl.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv16i16.nxv16i32( @@ -1855,7 +1879,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv2i32_nxv2i64_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v10, 9, v0.t +; CHECK-NEXT: vnsrl.wi v10, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv2i32.nxv2i64( @@ -1889,7 +1914,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv4i32_nxv4i64_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v12, 9, v0.t +; CHECK-NEXT: vnsrl.wi v12, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv4i32.nxv4i64( @@ -1923,7 +1949,8 @@ ; CHECK-LABEL: intrinsic_vnsrl_mask_vi_nxv8i32_nxv8i64_i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu -; CHECK-NEXT: vnsrl.wi v8, v16, 9, v0.t +; CHECK-NEXT: vnsrl.wi v16, v8, 9, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vnsrl.mask.nxv8i32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vpscatter-sdnode.ll @@ -34,7 +34,7 @@ ; RV64-LABEL: vpscatter_nxv2i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv2i8.nxv2p0( %val, %ptrs, %m, i32 %evl) ret void @@ -52,9 +52,9 @@ ; RV64-LABEL: vpscatter_nxv2i16_truncstore_nxv2i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e8, mf4, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 +; RV64-NEXT: vnsrl.wi v10, v10, 0 ; RV64-NEXT: vsetvli zero, a0, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret %tval = trunc %val to call void @llvm.vp.scatter.nxv2i8.nxv2p0( %tval, %ptrs, %m, i32 %evl) @@ -75,11 +75,11 @@ ; RV64-LABEL: vpscatter_nxv2i32_truncstore_nxv2i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e16, mf2, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 +; RV64-NEXT: vnsrl.wi v10, v10, 0 ; RV64-NEXT: vsetvli zero, zero, e8, mf4, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 +; RV64-NEXT: vnsrl.wi v10, v10, 0 ; RV64-NEXT: vsetvli zero, a0, e8, mf4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret %tval = trunc %val to call void @llvm.vp.scatter.nxv2i8.nxv2p0( %tval, %ptrs, %m, i32 %evl) @@ -121,13 +121,13 @@ ; RV32-LABEL: vpscatter_nxv4i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e8, mf2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_nxv4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv4i8.nxv4p0( %val, %ptrs, %m, i32 %evl) ret void @@ -137,13 +137,13 @@ ; RV32-LABEL: vpscatter_truemask_nxv4i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e8, mf2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10 +; RV32-NEXT: vsoxei32.v v10, (zero), v8 ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_truemask_nxv4i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -157,13 +157,13 @@ ; RV32-LABEL: vpscatter_nxv8i8: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v12, v0.t +; RV32-NEXT: vsoxei32.v v12, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_nxv8i8: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv8i8.nxv8p0( %val, %ptrs, %m, i32 %evl) ret void @@ -220,7 +220,7 @@ ; RV64-LABEL: vpscatter_nxv2i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv2i16.nxv2p0( %val, %ptrs, %m, i32 %evl) ret void @@ -238,9 +238,9 @@ ; RV64-LABEL: vpscatter_nxv2i32_truncstore_nxv2i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli a1, zero, e16, mf2, ta, ma -; RV64-NEXT: vnsrl.wi v8, v8, 0 +; RV64-NEXT: vnsrl.wi v10, v10, 0 ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret %tval = trunc %val to call void @llvm.vp.scatter.nxv2i16.nxv2p0( %tval, %ptrs, %m, i32 %evl) @@ -278,13 +278,13 @@ ; RV32-LABEL: vpscatter_nxv4i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_nxv4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv4i16.nxv4p0( %val, %ptrs, %m, i32 %evl) ret void @@ -294,13 +294,13 @@ ; RV32-LABEL: vpscatter_truemask_nxv4i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10 +; RV32-NEXT: vsoxei32.v v10, (zero), v8 ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_truemask_nxv4i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -314,13 +314,13 @@ ; RV32-LABEL: vpscatter_nxv8i16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v12, v0.t +; RV32-NEXT: vsoxei32.v v12, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_nxv8i16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv8i16.nxv8p0( %val, %ptrs, %m, i32 %evl) ret void @@ -447,7 +447,7 @@ ; RV64-LABEL: vpscatter_nxv2i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv2i32.nxv2p0( %val, %ptrs, %m, i32 %evl) ret void @@ -486,7 +486,7 @@ ; RV64-LABEL: vpscatter_nxv4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv4i32.nxv4p0( %val, %ptrs, %m, i32 %evl) ret void @@ -502,7 +502,7 @@ ; RV64-LABEL: vpscatter_truemask_nxv4i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -522,7 +522,7 @@ ; RV64-LABEL: vpscatter_nxv8i32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv8i32.nxv8p0( %val, %ptrs, %m, i32 %evl) ret void @@ -1044,7 +1044,7 @@ ; RV64-LABEL: vpscatter_nxv2f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, mf2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv2f16.nxv2p0( %val, %ptrs, %m, i32 %evl) ret void @@ -1056,13 +1056,13 @@ ; RV32-LABEL: vpscatter_nxv4f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10, v0.t +; RV32-NEXT: vsoxei32.v v10, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_nxv4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv4f16.nxv4p0( %val, %ptrs, %m, i32 %evl) ret void @@ -1072,13 +1072,13 @@ ; RV32-LABEL: vpscatter_truemask_nxv4f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v10 +; RV32-NEXT: vsoxei32.v v10, (zero), v8 ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_truemask_nxv4f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -1092,13 +1092,13 @@ ; RV32-LABEL: vpscatter_nxv8f16: ; RV32: # %bb.0: ; RV32-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; RV32-NEXT: vsoxei32.v v8, (zero), v12, v0.t +; RV32-NEXT: vsoxei32.v v12, (zero), v8, v0.t ; RV32-NEXT: ret ; ; RV64-LABEL: vpscatter_nxv8f16: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv8f16.nxv8p0( %val, %ptrs, %m, i32 %evl) ret void @@ -1225,7 +1225,7 @@ ; RV64-LABEL: vpscatter_nxv2f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v10, v0.t +; RV64-NEXT: vsoxei64.v v10, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv2f32.nxv2p0( %val, %ptrs, %m, i32 %evl) ret void @@ -1243,7 +1243,7 @@ ; RV64-LABEL: vpscatter_nxv4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12, v0.t +; RV64-NEXT: vsoxei64.v v12, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv4f32.nxv4p0( %val, %ptrs, %m, i32 %evl) ret void @@ -1259,7 +1259,7 @@ ; RV64-LABEL: vpscatter_truemask_nxv4f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v12 +; RV64-NEXT: vsoxei64.v v12, (zero), v8 ; RV64-NEXT: ret %mhead = insertelement poison, i1 1, i32 0 %mtrue = shufflevector %mhead, poison, zeroinitializer @@ -1279,7 +1279,7 @@ ; RV64-LABEL: vpscatter_nxv8f32: ; RV64: # %bb.0: ; RV64-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; RV64-NEXT: vsoxei64.v v8, (zero), v16, v0.t +; RV64-NEXT: vsoxei64.v v16, (zero), v8, v0.t ; RV64-NEXT: ret call void @llvm.vp.scatter.nxv8f32.nxv8p0( %val, %ptrs, %m, i32 %evl) ret void diff --git a/llvm/test/CodeGen/RISCV/rvv/vredand.ll b/llvm/test/CodeGen/RISCV/rvv/vredand.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredand.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredand.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9 +; CHECK-NEXT: vredand.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredand.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9 +; CHECK-NEXT: vredand.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredand.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9 +; CHECK-NEXT: vredand.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredand.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9 +; CHECK-NEXT: vredand.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredand.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredand.vs v8, v16, v9 +; CHECK-NEXT: vredand.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredand.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredand.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9 +; CHECK-NEXT: vredand.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredand.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9 +; CHECK-NEXT: vredand.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredand.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredand.vs v8, v16, v9 +; CHECK-NEXT: vredand.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredand.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredand.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9 +; CHECK-NEXT: vredand.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredand.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredand.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9 +; CHECK-NEXT: vredand.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredand.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredand.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredand_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredand.vs v8, v16, v9 +; CHECK-NEXT: vredand.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredand_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredand.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredand.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredand.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredmax.ll b/llvm/test/CodeGen/RISCV/rvv/vredmax.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredmax.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredmax.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9 +; CHECK-NEXT: vredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9 +; CHECK-NEXT: vredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9 +; CHECK-NEXT: vredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9 +; CHECK-NEXT: vredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredmax.vs v8, v16, v9 +; CHECK-NEXT: vredmax.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredmax.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmax.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9 +; CHECK-NEXT: vredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9 +; CHECK-NEXT: vredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredmax.vs v8, v16, v9 +; CHECK-NEXT: vredmax.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredmax.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmax.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9 +; CHECK-NEXT: vredmax.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredmax.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmax.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9 +; CHECK-NEXT: vredmax.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredmax.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmax.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredmax_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredmax.vs v8, v16, v9 +; CHECK-NEXT: vredmax.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredmax_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredmax.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmax.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmax.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredmaxu.ll b/llvm/test/CodeGen/RISCV/rvv/vredmaxu.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredmaxu.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredmaxu.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9 +; CHECK-NEXT: vredmaxu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9 +; CHECK-NEXT: vredmaxu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9 +; CHECK-NEXT: vredmaxu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9 +; CHECK-NEXT: vredmaxu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v16, v9 +; CHECK-NEXT: vredmaxu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9 +; CHECK-NEXT: vredmaxu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9 +; CHECK-NEXT: vredmaxu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v16, v9 +; CHECK-NEXT: vredmaxu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9 +; CHECK-NEXT: vredmaxu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9 +; CHECK-NEXT: vredmaxu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v16, v9 +; CHECK-NEXT: vredmaxu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredmaxu_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredmaxu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmaxu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmaxu.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredmin.ll b/llvm/test/CodeGen/RISCV/rvv/vredmin.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredmin.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredmin.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9 +; CHECK-NEXT: vredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9 +; CHECK-NEXT: vredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9 +; CHECK-NEXT: vredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9 +; CHECK-NEXT: vredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredmin.vs v8, v16, v9 +; CHECK-NEXT: vredmin.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredmin.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmin.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9 +; CHECK-NEXT: vredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9 +; CHECK-NEXT: vredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredmin.vs v8, v16, v9 +; CHECK-NEXT: vredmin.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredmin.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmin.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9 +; CHECK-NEXT: vredmin.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredmin.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredmin.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9 +; CHECK-NEXT: vredmin.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredmin.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredmin.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredmin_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredmin.vs v8, v16, v9 +; CHECK-NEXT: vredmin.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredmin_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredmin.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredmin.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredmin.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredminu.ll b/llvm/test/CodeGen/RISCV/rvv/vredminu.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredminu.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredminu.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9 +; CHECK-NEXT: vredminu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredminu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9 +; CHECK-NEXT: vredminu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredminu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9 +; CHECK-NEXT: vredminu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredminu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9 +; CHECK-NEXT: vredminu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredminu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredminu.vs v8, v16, v9 +; CHECK-NEXT: vredminu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredminu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredminu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9 +; CHECK-NEXT: vredminu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredminu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9 +; CHECK-NEXT: vredminu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredminu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredminu.vs v8, v16, v9 +; CHECK-NEXT: vredminu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredminu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredminu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9 +; CHECK-NEXT: vredminu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredminu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredminu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9 +; CHECK-NEXT: vredminu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredminu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredminu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredminu_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredminu.vs v8, v16, v9 +; CHECK-NEXT: vredminu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredminu_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredminu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredminu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredminu.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredor.ll b/llvm/test/CodeGen/RISCV/rvv/vredor.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredor.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredor.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9 +; CHECK-NEXT: vredor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9 +; CHECK-NEXT: vredor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9 +; CHECK-NEXT: vredor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9 +; CHECK-NEXT: vredor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredor.vs v8, v16, v9 +; CHECK-NEXT: vredor.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredor.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredor.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9 +; CHECK-NEXT: vredor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9 +; CHECK-NEXT: vredor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredor.vs v8, v16, v9 +; CHECK-NEXT: vredor.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredor.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredor.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9 +; CHECK-NEXT: vredor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9 +; CHECK-NEXT: vredor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredor_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredor.vs v8, v16, v9 +; CHECK-NEXT: vredor.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredor_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredor.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredor.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredor.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredsum.ll b/llvm/test/CodeGen/RISCV/rvv/vredsum.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredsum.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredsum.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9 +; CHECK-NEXT: vredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9 +; CHECK-NEXT: vredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9 +; CHECK-NEXT: vredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9 +; CHECK-NEXT: vredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredsum.vs v8, v16, v9 +; CHECK-NEXT: vredsum.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredsum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredsum.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9 +; CHECK-NEXT: vredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9 +; CHECK-NEXT: vredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredsum.vs v8, v16, v9 +; CHECK-NEXT: vredsum.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredsum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredsum.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9 +; CHECK-NEXT: vredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9 +; CHECK-NEXT: vredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredsum_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredsum.vs v8, v16, v9 +; CHECK-NEXT: vredsum.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredsum_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredsum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredsum.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredsum.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vredxor.ll b/llvm/test/CodeGen/RISCV/rvv/vredxor.ll --- a/llvm/test/CodeGen/RISCV/rvv/vredxor.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vredxor.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9 +; CHECK-NEXT: vredxor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv8i8.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv8i8_nxv16i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredxor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv8i8.nxv16i8( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9 +; CHECK-NEXT: vredxor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv8i8.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv8i8_nxv32i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredxor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv8i8.nxv32i8( @@ -428,7 +432,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9 +; CHECK-NEXT: vredxor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv4i16.nxv8i16( @@ -451,7 +456,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv4i16_nxv8i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredxor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv4i16.nxv8i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9 +; CHECK-NEXT: vredxor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv4i16.nxv16i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv4i16_nxv16i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredxor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv4i16.nxv16i16( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredxor.vs v8, v16, v9 +; CHECK-NEXT: vredxor.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv4i16.nxv32i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv4i16_nxv32i16_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vredxor.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredxor.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv4i16.nxv32i16( @@ -658,7 +668,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9 +; CHECK-NEXT: vredxor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv2i32.nxv4i32( @@ -681,7 +692,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv2i32_nxv4i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredxor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv2i32.nxv4i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9 +; CHECK-NEXT: vredxor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv2i32.nxv8i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv2i32_nxv8i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredxor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv2i32.nxv8i32( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredxor.vs v8, v16, v9 +; CHECK-NEXT: vredxor.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv2i32.nxv16i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv2i32_nxv16i32_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vredxor.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredxor.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv2i32.nxv16i32( @@ -842,7 +858,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9 +; CHECK-NEXT: vredxor.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv1i64.nxv2i64( @@ -865,7 +882,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv1i64_nxv2i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma -; CHECK-NEXT: vredxor.vs v8, v10, v9, v0.t +; CHECK-NEXT: vredxor.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv1i64.nxv2i64( @@ -888,7 +906,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9 +; CHECK-NEXT: vredxor.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv1i64.nxv4i64( @@ -911,7 +930,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv1i64_nxv4i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma -; CHECK-NEXT: vredxor.vs v8, v12, v9, v0.t +; CHECK-NEXT: vredxor.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv1i64.nxv4i64( @@ -934,7 +954,8 @@ ; CHECK-LABEL: intrinsic_vredxor_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredxor.vs v8, v16, v9 +; CHECK-NEXT: vredxor.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.nxv1i64.nxv8i64( @@ -957,7 +978,8 @@ ; CHECK-LABEL: intrinsic_vredxor_mask_vs_nxv1i64_nxv8i64_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma -; CHECK-NEXT: vredxor.vs v8, v16, v9, v0.t +; CHECK-NEXT: vredxor.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vredxor.mask.nxv1i64.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv32.ll @@ -156,8 +156,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; CHECK-NEXT: vrgatherei16.vv v9, v8, v10 -; CHECK-NEXT: vmv.v.v v8, v9 +; CHECK-NEXT: vrgatherei16.vv v11, v10, v8 +; CHECK-NEXT: vmv.v.v v8, v11 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.nxv8i8( @@ -181,7 +181,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t +; CHECK-NEXT: vrgatherei16.vv v10, v11, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i8( @@ -204,8 +205,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vrgatherei16.vv v10, v8, v12 -; CHECK-NEXT: vmv.v.v v8, v10 +; CHECK-NEXT: vrgatherei16.vv v14, v12, v8 +; CHECK-NEXT: vmv.v.v v8, v14 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.nxv16i8( @@ -229,7 +230,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t +; CHECK-NEXT: vrgatherei16.vv v12, v14, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i8( @@ -252,8 +254,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vrgatherei16.vv v12, v8, v16 -; CHECK-NEXT: vmv.v.v v8, v12 +; CHECK-NEXT: vrgatherei16.vv v20, v16, v8 +; CHECK-NEXT: vmv.v.v v8, v20 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.nxv32i8( @@ -277,7 +279,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t +; CHECK-NEXT: vrgatherei16.vv v16, v20, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i8( diff --git a/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vrgatherei16-rv64.ll @@ -156,8 +156,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; CHECK-NEXT: vrgatherei16.vv v9, v8, v10 -; CHECK-NEXT: vmv.v.v v8, v9 +; CHECK-NEXT: vrgatherei16.vv v11, v10, v8 +; CHECK-NEXT: vmv.v.v v8, v11 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.nxv8i8( @@ -181,7 +181,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv8i8_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu -; CHECK-NEXT: vrgatherei16.vv v8, v9, v10, v0.t +; CHECK-NEXT: vrgatherei16.vv v10, v11, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.mask.nxv8i8( @@ -204,8 +205,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vrgatherei16.vv v10, v8, v12 -; CHECK-NEXT: vmv.v.v v8, v10 +; CHECK-NEXT: vrgatherei16.vv v14, v12, v8 +; CHECK-NEXT: vmv.v.v v8, v14 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.nxv16i8( @@ -229,7 +230,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv16i8_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu -; CHECK-NEXT: vrgatherei16.vv v8, v10, v12, v0.t +; CHECK-NEXT: vrgatherei16.vv v12, v14, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.mask.nxv16i8( @@ -252,8 +254,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_vv_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vrgatherei16.vv v12, v8, v16 -; CHECK-NEXT: vmv.v.v v8, v12 +; CHECK-NEXT: vrgatherei16.vv v20, v16, v8 +; CHECK-NEXT: vmv.v.v v8, v20 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.nxv32i8( @@ -277,7 +279,8 @@ ; CHECK-LABEL: intrinsic_vrgatherei16_mask_vv_nxv32i8_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu -; CHECK-NEXT: vrgatherei16.vv v8, v12, v16, v0.t +; CHECK-NEXT: vrgatherei16.vv v16, v20, v8, v0.t +; CHECK-NEXT: vmv.v.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vrgatherei16.vv.mask.nxv32i8( diff --git a/llvm/test/CodeGen/RISCV/rvv/vsetvli-regression.ll b/llvm/test/CodeGen/RISCV/rvv/vsetvli-regression.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsetvli-regression.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsetvli-regression.ll @@ -10,10 +10,10 @@ ; CHECK-LABEL: illegal_preserve_vl: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, ma -; CHECK-NEXT: vadd.vv v12, v12, v12 -; CHECK-NEXT: vs4r.v v12, (a0) +; CHECK-NEXT: vadd.vv v8, v8, v8 +; CHECK-NEXT: vs4r.v v8, (a0) ; CHECK-NEXT: vsetivli zero, 1, e32, m1, ta, ma -; CHECK-NEXT: vmv.x.s a0, v8 +; CHECK-NEXT: vmv.x.s a0, v12 ; CHECK-NEXT: ret %index = add %x, %x store %index, * %y diff --git a/llvm/test/CodeGen/RISCV/rvv/vsoxei-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsoxei-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsoxei-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsoxei-rv64.ll @@ -60,7 +60,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv2i8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv2i8.nxv2i64( @@ -83,7 +83,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv2i8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv2i8.nxv2i64( @@ -106,7 +106,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4i8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4i8.nxv4i64( @@ -129,7 +129,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4i8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4i8.nxv4i64( @@ -152,7 +152,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8i8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8i8.nxv8i64( @@ -175,7 +175,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8i8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8i8.nxv8i64( @@ -244,7 +244,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv2i16_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv2i16.nxv2i64( @@ -267,7 +267,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv2i16_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv2i16.nxv2i64( @@ -290,7 +290,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4i16_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4i16.nxv4i64( @@ -313,7 +313,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4i16_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4i16.nxv4i64( @@ -336,7 +336,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8i16_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8i16.nxv8i64( @@ -359,7 +359,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8i16_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8i16.nxv8i64( @@ -428,7 +428,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv2i32_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv2i32.nxv2i64( @@ -451,7 +451,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv2i32_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv2i32.nxv2i64( @@ -474,7 +474,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4i32_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4i32.nxv4i64( @@ -497,7 +497,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4i32_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4i32.nxv4i64( @@ -520,7 +520,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8i32_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8i32.nxv8i64( @@ -543,7 +543,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8i32_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8i32.nxv8i64( @@ -796,7 +796,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv2f16_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv2f16.nxv2i64( @@ -819,7 +819,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv2f16_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv2f16.nxv2i64( @@ -842,7 +842,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4f16_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4f16.nxv4i64( @@ -865,7 +865,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4f16_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4f16.nxv4i64( @@ -888,7 +888,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8f16_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8f16.nxv8i64( @@ -911,7 +911,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8f16_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8f16.nxv8i64( @@ -980,7 +980,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv2f32_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv2f32.nxv2i64( @@ -1003,7 +1003,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv2f32_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv2f32.nxv2i64( @@ -1026,7 +1026,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4f32_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4f32.nxv4i64( @@ -1049,7 +1049,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4f32_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4f32.nxv4i64( @@ -1072,7 +1072,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8f32_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8f32.nxv8i64( @@ -1095,7 +1095,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8f32_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8f32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vsoxei.ll b/llvm/test/CodeGen/RISCV/rvv/vsoxei.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsoxei.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsoxei.ll @@ -106,7 +106,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4i8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4i8.nxv4i32( @@ -129,7 +129,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4i8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4i8.nxv4i32( @@ -152,7 +152,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8i8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8i8.nxv8i32( @@ -175,7 +175,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8i8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8i8.nxv8i32( @@ -198,7 +198,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv16i8_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv16i8.nxv16i32( @@ -221,7 +221,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv16i8_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv16i8.nxv16i32( @@ -336,7 +336,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4i16_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4i16.nxv4i32( @@ -359,7 +359,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4i16_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4i16.nxv4i32( @@ -382,7 +382,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8i16_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8i16.nxv8i32( @@ -405,7 +405,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8i16_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8i16.nxv8i32( @@ -428,7 +428,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv16i16_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv16i16.nxv16i32( @@ -451,7 +451,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv16i16_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv16i16.nxv16i32( @@ -980,7 +980,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv4f16_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv4f16.nxv4i32( @@ -1003,7 +1003,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv4f16_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv4f16.nxv4i32( @@ -1026,7 +1026,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8f16_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8f16.nxv8i32( @@ -1049,7 +1049,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8f16_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8f16.nxv8i32( @@ -1072,7 +1072,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv16f16_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv16f16.nxv16i32( @@ -1095,7 +1095,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv16f16_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv16f16.nxv16i32( @@ -1670,7 +1670,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv8i8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxei16.v v8, (a0), v10 +; CHECK-NEXT: vsoxei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv8i8.nxv8i16( @@ -1693,7 +1693,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv8i8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv8i8.nxv8i16( @@ -1716,7 +1716,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv16i8_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxei16.v v8, (a0), v12 +; CHECK-NEXT: vsoxei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv16i8.nxv16i16( @@ -1739,7 +1739,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv16i8_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv16i8.nxv16i16( @@ -1762,7 +1762,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_v_nxv32i8_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsoxei16.v v8, (a0), v16 +; CHECK-NEXT: vsoxei16.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.nxv32i8.nxv32i16( @@ -1785,7 +1785,7 @@ ; CHECK-LABEL: intrinsic_vsoxei_mask_v_nxv32i8_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsoxei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxei16.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsoxei.mask.nxv32i8.nxv32i16( diff --git a/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv32.ll @@ -66,9 +66,9 @@ define void @test_vsoxseg2_nxv16i16_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, i32 %vl) @@ -78,9 +78,9 @@ define void @test_vsoxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -828,9 +828,9 @@ define void @test_vsoxseg2_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, i32 %vl) @@ -840,9 +840,9 @@ define void @test_vsoxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -884,9 +884,9 @@ define void @test_vsoxseg2_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, i32 %vl) @@ -896,9 +896,9 @@ define void @test_vsoxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -911,11 +911,10 @@ define void @test_vsoxseg3_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -925,11 +924,10 @@ define void @test_vsoxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -973,10 +971,10 @@ define void @test_vsoxseg3_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -986,10 +984,10 @@ define void @test_vsoxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1002,12 +1000,11 @@ define void @test_vsoxseg4_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -1017,12 +1014,11 @@ define void @test_vsoxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1068,11 +1064,11 @@ define void @test_vsoxseg4_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -1082,11 +1078,11 @@ define void @test_vsoxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1892,9 +1888,9 @@ define void @test_vsoxseg2_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, i32 %vl) @@ -1904,9 +1900,9 @@ define void @test_vsoxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1981,11 +1977,10 @@ define void @test_vsoxseg3_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -1995,11 +1990,10 @@ define void @test_vsoxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2078,12 +2072,11 @@ define void @test_vsoxseg4_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2093,12 +2086,11 @@ define void @test_vsoxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2181,13 +2173,12 @@ define void @test_vsoxseg5_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2197,13 +2188,12 @@ define void @test_vsoxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2290,14 +2280,13 @@ define void @test_vsoxseg6_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2307,14 +2296,13 @@ define void @test_vsoxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2405,15 +2393,14 @@ define void @test_vsoxseg7_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2423,15 +2410,14 @@ define void @test_vsoxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2526,16 +2512,15 @@ define void @test_vsoxseg8_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2545,16 +2530,15 @@ define void @test_vsoxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3360,9 +3344,9 @@ define void @test_vsoxseg2_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, i32 %vl) @@ -3372,9 +3356,9 @@ define void @test_vsoxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3449,11 +3433,10 @@ define void @test_vsoxseg3_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3463,11 +3446,10 @@ define void @test_vsoxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3546,12 +3528,11 @@ define void @test_vsoxseg4_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3561,12 +3542,11 @@ define void @test_vsoxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3579,9 +3559,9 @@ define void @test_vsoxseg2_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, i32 %vl) @@ -3591,9 +3571,9 @@ define void @test_vsoxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3635,9 +3615,9 @@ define void @test_vsoxseg2_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, i32 %vl) @@ -3647,9 +3627,9 @@ define void @test_vsoxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3662,11 +3642,10 @@ define void @test_vsoxseg3_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3676,11 +3655,10 @@ define void @test_vsoxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3724,10 +3702,10 @@ define void @test_vsoxseg3_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3737,10 +3715,10 @@ define void @test_vsoxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3753,12 +3731,11 @@ define void @test_vsoxseg4_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3768,12 +3745,11 @@ define void @test_vsoxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3819,11 +3795,11 @@ define void @test_vsoxseg4_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3833,11 +3809,11 @@ define void @test_vsoxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3850,13 +3826,12 @@ define void @test_vsoxseg5_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3866,13 +3841,12 @@ define void @test_vsoxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3920,13 +3894,12 @@ define void @test_vsoxseg5_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3936,13 +3909,12 @@ define void @test_vsoxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3955,14 +3927,13 @@ define void @test_vsoxseg6_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3972,14 +3943,13 @@ define void @test_vsoxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4029,14 +3999,13 @@ define void @test_vsoxseg6_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4046,14 +4015,13 @@ define void @test_vsoxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4066,15 +4034,14 @@ define void @test_vsoxseg7_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4084,15 +4051,14 @@ define void @test_vsoxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4144,15 +4110,14 @@ define void @test_vsoxseg7_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4162,15 +4127,14 @@ define void @test_vsoxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4183,16 +4147,15 @@ define void @test_vsoxseg8_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4202,16 +4165,15 @@ define void @test_vsoxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4265,16 +4227,15 @@ define void @test_vsoxseg8_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4284,16 +4245,15 @@ define void @test_vsoxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4451,9 +4411,9 @@ define void @test_vsoxseg2_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, i32 %vl) @@ -4463,9 +4423,9 @@ define void @test_vsoxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4540,11 +4500,10 @@ define void @test_vsoxseg3_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4554,11 +4513,10 @@ define void @test_vsoxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4637,12 +4595,11 @@ define void @test_vsoxseg4_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4652,12 +4609,11 @@ define void @test_vsoxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4740,13 +4696,12 @@ define void @test_vsoxseg5_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4756,13 +4711,12 @@ define void @test_vsoxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4849,14 +4803,13 @@ define void @test_vsoxseg6_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4866,14 +4819,13 @@ define void @test_vsoxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4964,15 +4916,14 @@ define void @test_vsoxseg7_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4982,15 +4933,14 @@ define void @test_vsoxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -5085,16 +5035,15 @@ define void @test_vsoxseg8_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -5104,16 +5053,15 @@ define void @test_vsoxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -5861,9 +5809,9 @@ define void @test_vsoxseg2_nxv32i8_nxv32i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei16.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, i32 %vl) @@ -5873,9 +5821,9 @@ define void @test_vsoxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei16.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -7724,9 +7672,9 @@ define void @test_vsoxseg2_nxv16f16_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, i32 %vl) @@ -7736,9 +7684,9 @@ define void @test_vsoxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -10836,9 +10784,9 @@ define void @test_vsoxseg2_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, i32 %vl) @@ -10848,9 +10796,9 @@ define void @test_vsoxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -10925,11 +10873,10 @@ define void @test_vsoxseg3_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -10939,11 +10886,10 @@ define void @test_vsoxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11022,12 +10968,11 @@ define void @test_vsoxseg4_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11037,12 +10982,11 @@ define void @test_vsoxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11479,9 +11423,9 @@ define void @test_vsoxseg2_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, i32 %vl) @@ -11491,9 +11435,9 @@ define void @test_vsoxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11568,11 +11512,10 @@ define void @test_vsoxseg3_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11582,11 +11525,10 @@ define void @test_vsoxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11665,12 +11607,11 @@ define void @test_vsoxseg4_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11680,12 +11621,11 @@ define void @test_vsoxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11768,13 +11708,12 @@ define void @test_vsoxseg5_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11784,13 +11723,12 @@ define void @test_vsoxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11877,14 +11815,13 @@ define void @test_vsoxseg6_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11894,14 +11831,13 @@ define void @test_vsoxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11992,15 +11928,14 @@ define void @test_vsoxseg7_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -12010,15 +11945,14 @@ define void @test_vsoxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -12113,16 +12047,15 @@ define void @test_vsoxseg8_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -12132,16 +12065,15 @@ define void @test_vsoxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) diff --git a/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsoxseg-rv64.ll @@ -66,9 +66,9 @@ define void @test_vsoxseg2_nxv16i16_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, i64 %vl) @@ -78,9 +78,9 @@ define void @test_vsoxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -151,9 +151,9 @@ define void @test_vsoxseg2_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i32.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -163,9 +163,9 @@ define void @test_vsoxseg2_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i32.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -269,11 +269,10 @@ define void @test_vsoxseg3_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i32.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -283,11 +282,10 @@ define void @test_vsoxseg3_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -397,12 +395,11 @@ define void @test_vsoxseg4_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -412,12 +409,11 @@ define void @test_vsoxseg4_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -463,9 +459,9 @@ define void @test_vsoxseg2_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, i64 %vl) @@ -475,9 +471,9 @@ define void @test_vsoxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -519,9 +515,9 @@ define void @test_vsoxseg2_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, i64 %vl) @@ -531,9 +527,9 @@ define void @test_vsoxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -546,11 +542,10 @@ define void @test_vsoxseg3_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -560,11 +555,10 @@ define void @test_vsoxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -608,10 +602,10 @@ define void @test_vsoxseg3_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -621,10 +615,10 @@ define void @test_vsoxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -637,12 +631,11 @@ define void @test_vsoxseg4_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -652,12 +645,11 @@ define void @test_vsoxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -703,11 +695,11 @@ define void @test_vsoxseg4_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -717,11 +709,11 @@ define void @test_vsoxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2752,9 +2744,9 @@ define void @test_vsoxseg2_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i16.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -2764,9 +2756,9 @@ define void @test_vsoxseg2_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i16.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2779,9 +2771,9 @@ define void @test_vsoxseg2_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, i64 %vl) @@ -2791,9 +2783,9 @@ define void @test_vsoxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2868,10 +2860,10 @@ define void @test_vsoxseg3_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i16.nxv8i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -2881,10 +2873,10 @@ define void @test_vsoxseg3_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2897,11 +2889,10 @@ define void @test_vsoxseg3_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -2911,11 +2902,10 @@ define void @test_vsoxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2994,11 +2984,11 @@ define void @test_vsoxseg4_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3008,11 +2998,11 @@ define void @test_vsoxseg4_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3025,12 +3015,11 @@ define void @test_vsoxseg4_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3040,12 +3029,11 @@ define void @test_vsoxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3058,9 +3046,9 @@ define void @test_vsoxseg2_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, i64 %vl) @@ -3070,9 +3058,9 @@ define void @test_vsoxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3114,9 +3102,9 @@ define void @test_vsoxseg2_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i8.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -3126,9 +3114,9 @@ define void @test_vsoxseg2_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i8.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3170,11 +3158,10 @@ define void @test_vsoxseg3_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3184,11 +3171,10 @@ define void @test_vsoxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3232,10 +3218,10 @@ define void @test_vsoxseg3_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i8.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3245,10 +3231,10 @@ define void @test_vsoxseg3_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i8.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3292,12 +3278,11 @@ define void @test_vsoxseg4_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3307,12 +3292,11 @@ define void @test_vsoxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3358,11 +3342,11 @@ define void @test_vsoxseg4_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i8.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3372,11 +3356,11 @@ define void @test_vsoxseg4_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3422,13 +3406,12 @@ define void @test_vsoxseg5_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3438,13 +3421,12 @@ define void @test_vsoxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3492,13 +3474,12 @@ define void @test_vsoxseg5_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3508,13 +3489,12 @@ define void @test_vsoxseg5_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3562,14 +3542,13 @@ define void @test_vsoxseg6_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3579,14 +3558,13 @@ define void @test_vsoxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3636,14 +3614,13 @@ define void @test_vsoxseg6_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3653,14 +3630,13 @@ define void @test_vsoxseg6_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3710,15 +3686,14 @@ define void @test_vsoxseg7_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3728,15 +3703,14 @@ define void @test_vsoxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3788,15 +3762,14 @@ define void @test_vsoxseg7_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3806,15 +3779,14 @@ define void @test_vsoxseg7_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3866,16 +3838,15 @@ define void @test_vsoxseg8_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3885,16 +3856,15 @@ define void @test_vsoxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3948,16 +3918,15 @@ define void @test_vsoxseg8_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3967,16 +3936,15 @@ define void @test_vsoxseg8_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5097,9 +5065,9 @@ define void @test_vsoxseg2_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv2i32.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -5109,9 +5077,9 @@ define void @test_vsoxseg2_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv2i32.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5217,11 +5185,10 @@ define void @test_vsoxseg3_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv2i32.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5231,11 +5198,10 @@ define void @test_vsoxseg3_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv2i32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5347,12 +5313,11 @@ define void @test_vsoxseg4_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv2i32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5362,12 +5327,11 @@ define void @test_vsoxseg4_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5485,13 +5449,12 @@ define void @test_vsoxseg5_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5501,13 +5464,12 @@ define void @test_vsoxseg5_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5631,14 +5593,13 @@ define void @test_vsoxseg6_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5648,14 +5609,13 @@ define void @test_vsoxseg6_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5785,15 +5745,14 @@ define void @test_vsoxseg7_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5803,15 +5762,14 @@ define void @test_vsoxseg7_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5947,16 +5905,15 @@ define void @test_vsoxseg8_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5966,16 +5923,15 @@ define void @test_vsoxseg8_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5988,9 +5944,9 @@ define void @test_vsoxseg2_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, i64 %vl) @@ -6000,9 +5956,9 @@ define void @test_vsoxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6044,9 +6000,9 @@ define void @test_vsoxseg2_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i8.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -6056,9 +6012,9 @@ define void @test_vsoxseg2_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i8.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6071,9 +6027,9 @@ define void @test_vsoxseg2_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, i64 %vl) @@ -6083,9 +6039,9 @@ define void @test_vsoxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6098,11 +6054,10 @@ define void @test_vsoxseg3_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6112,11 +6067,10 @@ define void @test_vsoxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6160,10 +6114,10 @@ define void @test_vsoxseg3_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i8.nxv8i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6173,10 +6127,10 @@ define void @test_vsoxseg3_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i8.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6189,10 +6143,10 @@ define void @test_vsoxseg3_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6202,10 +6156,10 @@ define void @test_vsoxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6218,12 +6172,11 @@ define void @test_vsoxseg4_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6233,12 +6186,11 @@ define void @test_vsoxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6284,11 +6236,11 @@ define void @test_vsoxseg4_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i8.nxv8i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6298,11 +6250,11 @@ define void @test_vsoxseg4_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6315,11 +6267,11 @@ define void @test_vsoxseg4_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6329,11 +6281,11 @@ define void @test_vsoxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6346,13 +6298,12 @@ define void @test_vsoxseg5_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6362,13 +6313,12 @@ define void @test_vsoxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6416,12 +6366,12 @@ define void @test_vsoxseg5_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg5ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6431,12 +6381,12 @@ define void @test_vsoxseg5_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6449,13 +6399,12 @@ define void @test_vsoxseg5_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6465,13 +6414,12 @@ define void @test_vsoxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6484,14 +6432,13 @@ define void @test_vsoxseg6_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6501,14 +6448,13 @@ define void @test_vsoxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6558,13 +6504,13 @@ define void @test_vsoxseg6_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6574,13 +6520,13 @@ define void @test_vsoxseg6_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6593,14 +6539,13 @@ define void @test_vsoxseg6_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6610,14 +6555,13 @@ define void @test_vsoxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6630,15 +6574,14 @@ define void @test_vsoxseg7_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6648,15 +6591,14 @@ define void @test_vsoxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6708,14 +6650,14 @@ define void @test_vsoxseg7_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6725,14 +6667,14 @@ define void @test_vsoxseg7_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6745,15 +6687,14 @@ define void @test_vsoxseg7_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6763,15 +6704,14 @@ define void @test_vsoxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6784,16 +6724,15 @@ define void @test_vsoxseg8_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei16.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6803,16 +6742,15 @@ define void @test_vsoxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6866,15 +6804,15 @@ define void @test_vsoxseg8_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 +; CHECK-NEXT: vmv1r.v v23, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6884,15 +6822,15 @@ define void @test_vsoxseg8_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 +; CHECK-NEXT: vmv1r.v v23, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6905,16 +6843,15 @@ define void @test_vsoxseg8_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6924,16 +6861,15 @@ define void @test_vsoxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7062,9 +6998,9 @@ define void @test_vsoxseg2_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, i64 %vl) @@ -7074,9 +7010,9 @@ define void @test_vsoxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7118,9 +7054,9 @@ define void @test_vsoxseg2_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4i16.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -7130,9 +7066,9 @@ define void @test_vsoxseg2_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4i16.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7174,11 +7110,10 @@ define void @test_vsoxseg3_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7188,11 +7123,10 @@ define void @test_vsoxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7236,10 +7170,10 @@ define void @test_vsoxseg3_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4i16.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7249,10 +7183,10 @@ define void @test_vsoxseg3_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4i16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7296,12 +7230,11 @@ define void @test_vsoxseg4_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7311,12 +7244,11 @@ define void @test_vsoxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7362,11 +7294,11 @@ define void @test_vsoxseg4_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4i16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7376,11 +7308,11 @@ define void @test_vsoxseg4_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7426,13 +7358,12 @@ define void @test_vsoxseg5_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7442,13 +7373,12 @@ define void @test_vsoxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7496,13 +7426,12 @@ define void @test_vsoxseg5_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7512,13 +7441,12 @@ define void @test_vsoxseg5_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7566,14 +7494,13 @@ define void @test_vsoxseg6_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7583,14 +7510,13 @@ define void @test_vsoxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7640,14 +7566,13 @@ define void @test_vsoxseg6_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7657,14 +7582,13 @@ define void @test_vsoxseg6_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7714,15 +7638,14 @@ define void @test_vsoxseg7_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7732,15 +7655,14 @@ define void @test_vsoxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7792,15 +7714,14 @@ define void @test_vsoxseg7_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7810,15 +7731,14 @@ define void @test_vsoxseg7_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7870,35 +7790,33 @@ define void @test_vsoxseg8_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) ret void } -define void @test_vsoxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { -; CHECK-LABEL: test_vsoxseg8_mask_nxv4i16_nxv4i32: -; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +define void @test_vsoxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { +; CHECK-LABEL: test_vsoxseg8_mask_nxv4i16_nxv4i32: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7952,16 +7870,15 @@ define void @test_vsoxseg8_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7971,16 +7888,15 @@ define void @test_vsoxseg8_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9101,9 +9017,9 @@ define void @test_vsoxseg2_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv2i8.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -9113,9 +9029,9 @@ define void @test_vsoxseg2_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv2i8.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9221,11 +9137,10 @@ define void @test_vsoxseg3_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv2i8.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9235,11 +9150,10 @@ define void @test_vsoxseg3_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv2i8.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9351,12 +9265,11 @@ define void @test_vsoxseg4_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv2i8.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9366,12 +9279,11 @@ define void @test_vsoxseg4_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9489,13 +9401,12 @@ define void @test_vsoxseg5_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9505,13 +9416,12 @@ define void @test_vsoxseg5_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9635,14 +9545,13 @@ define void @test_vsoxseg6_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9652,14 +9561,13 @@ define void @test_vsoxseg6_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9789,15 +9697,14 @@ define void @test_vsoxseg7_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9807,15 +9714,14 @@ define void @test_vsoxseg7_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9951,16 +9857,15 @@ define void @test_vsoxseg8_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9970,16 +9875,15 @@ define void @test_vsoxseg8_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10050,9 +9954,9 @@ define void @test_vsoxseg2_nxv8i32_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8i32.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -10062,9 +9966,9 @@ define void @test_vsoxseg2_mask_nxv8i32_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8i32.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10106,9 +10010,9 @@ define void @test_vsoxseg2_nxv32i8_nxv32i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei16.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, i64 %vl) @@ -10118,9 +10022,9 @@ define void @test_vsoxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei16.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10249,9 +10153,9 @@ define void @test_vsoxseg2_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv2i16.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -10261,9 +10165,9 @@ define void @test_vsoxseg2_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv2i16.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10369,11 +10273,10 @@ define void @test_vsoxseg3_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv2i16.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10383,11 +10286,10 @@ define void @test_vsoxseg3_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv2i16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10499,12 +10401,11 @@ define void @test_vsoxseg4_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv2i16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10514,12 +10415,11 @@ define void @test_vsoxseg4_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10637,13 +10537,12 @@ define void @test_vsoxseg5_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10653,13 +10552,12 @@ define void @test_vsoxseg5_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10783,14 +10681,13 @@ define void @test_vsoxseg6_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10800,14 +10697,13 @@ define void @test_vsoxseg6_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10937,15 +10833,14 @@ define void @test_vsoxseg7_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10955,15 +10850,14 @@ define void @test_vsoxseg7_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -11099,16 +10993,15 @@ define void @test_vsoxseg8_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -11118,16 +11011,15 @@ define void @test_vsoxseg8_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -11570,9 +11462,9 @@ define void @test_vsoxseg2_nxv16f16_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, i64 %vl) @@ -11582,9 +11474,9 @@ define void @test_vsoxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -12780,9 +12672,9 @@ define void @test_vsoxseg2_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv2f32.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -12792,9 +12684,9 @@ define void @test_vsoxseg2_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv2f32.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -12900,11 +12792,10 @@ define void @test_vsoxseg3_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv2f32.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -12914,11 +12805,10 @@ define void @test_vsoxseg3_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv2f32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13030,12 +12920,11 @@ define void @test_vsoxseg4_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv2f32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13045,12 +12934,11 @@ define void @test_vsoxseg4_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13168,13 +13056,12 @@ define void @test_vsoxseg5_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13184,13 +13071,12 @@ define void @test_vsoxseg5_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13314,14 +13200,13 @@ define void @test_vsoxseg6_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13331,14 +13216,13 @@ define void @test_vsoxseg6_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13468,15 +13352,14 @@ define void @test_vsoxseg7_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13486,15 +13369,14 @@ define void @test_vsoxseg7_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13630,16 +13512,15 @@ define void @test_vsoxseg8_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13648,17 +13529,16 @@ define void @test_vsoxseg8_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv2f32_nxv2i64: -; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15689,9 +15569,9 @@ define void @test_vsoxseg2_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8f16.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -15701,9 +15581,9 @@ define void @test_vsoxseg2_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8f16.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15716,9 +15596,9 @@ define void @test_vsoxseg2_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, i64 %vl) @@ -15728,9 +15608,9 @@ define void @test_vsoxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15805,10 +15685,10 @@ define void @test_vsoxseg3_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8f16.nxv8i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15818,10 +15698,10 @@ define void @test_vsoxseg3_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8f16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15834,11 +15714,10 @@ define void @test_vsoxseg3_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15848,11 +15727,10 @@ define void @test_vsoxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15931,11 +15809,11 @@ define void @test_vsoxseg4_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8f16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15945,11 +15823,11 @@ define void @test_vsoxseg4_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8f16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15962,12 +15840,11 @@ define void @test_vsoxseg4_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15977,12 +15854,11 @@ define void @test_vsoxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16053,9 +15929,9 @@ define void @test_vsoxseg2_nxv8f32_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv8f32.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -16065,9 +15941,9 @@ define void @test_vsoxseg2_mask_nxv8f32_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv8f32.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16481,9 +16357,9 @@ define void @test_vsoxseg2_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, i64 %vl) @@ -16493,9 +16369,9 @@ define void @test_vsoxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16537,9 +16413,9 @@ define void @test_vsoxseg2_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4f16.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -16549,9 +16425,9 @@ define void @test_vsoxseg2_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4f16.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16593,11 +16469,10 @@ define void @test_vsoxseg3_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16607,11 +16482,10 @@ define void @test_vsoxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16655,10 +16529,10 @@ define void @test_vsoxseg3_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4f16.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16668,10 +16542,10 @@ define void @test_vsoxseg3_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4f16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16715,12 +16589,11 @@ define void @test_vsoxseg4_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16730,12 +16603,11 @@ define void @test_vsoxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16781,11 +16653,11 @@ define void @test_vsoxseg4_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4f16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16795,11 +16667,11 @@ define void @test_vsoxseg4_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16845,13 +16717,12 @@ define void @test_vsoxseg5_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16861,13 +16732,12 @@ define void @test_vsoxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16915,13 +16785,12 @@ define void @test_vsoxseg5_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16931,13 +16800,12 @@ define void @test_vsoxseg5_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16985,14 +16853,13 @@ define void @test_vsoxseg6_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17002,14 +16869,13 @@ define void @test_vsoxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17059,14 +16925,13 @@ define void @test_vsoxseg6_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17076,14 +16941,13 @@ define void @test_vsoxseg6_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17133,15 +16997,14 @@ define void @test_vsoxseg7_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17151,15 +17014,14 @@ define void @test_vsoxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17211,15 +17073,14 @@ define void @test_vsoxseg7_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17229,15 +17090,14 @@ define void @test_vsoxseg7_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17289,16 +17149,15 @@ define void @test_vsoxseg8_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17308,16 +17167,15 @@ define void @test_vsoxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17371,16 +17229,15 @@ define void @test_vsoxseg8_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17390,16 +17247,15 @@ define void @test_vsoxseg8_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17540,9 +17396,9 @@ define void @test_vsoxseg2_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv2f16.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -17552,9 +17408,9 @@ define void @test_vsoxseg2_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv2f16.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17660,11 +17516,10 @@ define void @test_vsoxseg3_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv2f16.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17674,11 +17529,10 @@ define void @test_vsoxseg3_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv2f16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17790,12 +17644,11 @@ define void @test_vsoxseg4_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv2f16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17805,12 +17658,11 @@ define void @test_vsoxseg4_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17928,13 +17780,12 @@ define void @test_vsoxseg5_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17944,13 +17795,12 @@ define void @test_vsoxseg5_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg5_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg5.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18074,14 +17924,13 @@ define void @test_vsoxseg6_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18091,14 +17940,13 @@ define void @test_vsoxseg6_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg6_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg6.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18228,15 +18076,14 @@ define void @test_vsoxseg7_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18246,15 +18093,14 @@ define void @test_vsoxseg7_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg7_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg7.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18390,16 +18236,15 @@ define void @test_vsoxseg8_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18409,16 +18254,15 @@ define void @test_vsoxseg8_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg8_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsoxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsoxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg8.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18489,9 +18333,9 @@ define void @test_vsoxseg2_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.nxv4f32.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -18501,9 +18345,9 @@ define void @test_vsoxseg2_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg2_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg2.mask.nxv4f32.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18607,11 +18451,10 @@ define void @test_vsoxseg3_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.nxv4f32.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18621,11 +18464,10 @@ define void @test_vsoxseg3_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg3_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsoxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg3.mask.nxv4f32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18735,12 +18577,11 @@ define void @test_vsoxseg4_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v12 +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.nxv4f32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18750,12 +18591,11 @@ define void @test_vsoxseg4_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsoxseg4_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsoxseg4ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsoxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsoxseg4.mask.nxv4f32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) diff --git a/llvm/test/CodeGen/RISCV/rvv/vsuxei-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsuxei-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsuxei-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsuxei-rv64.ll @@ -60,7 +60,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv2i8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv2i8.nxv2i64( @@ -83,7 +83,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv2i8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv2i8.nxv2i64( @@ -106,7 +106,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4i8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4i8.nxv4i64( @@ -129,7 +129,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4i8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4i8.nxv4i64( @@ -152,7 +152,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8i8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8i8.nxv8i64( @@ -175,7 +175,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8i8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8i8.nxv8i64( @@ -244,7 +244,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv2i16_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv2i16.nxv2i64( @@ -267,7 +267,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv2i16_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv2i16.nxv2i64( @@ -290,7 +290,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4i16_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4i16.nxv4i64( @@ -313,7 +313,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4i16_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4i16.nxv4i64( @@ -336,7 +336,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8i16_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8i16.nxv8i64( @@ -359,7 +359,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8i16_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8i16.nxv8i64( @@ -428,7 +428,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv2i32_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv2i32.nxv2i64( @@ -451,7 +451,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv2i32_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv2i32.nxv2i64( @@ -474,7 +474,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4i32_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4i32.nxv4i64( @@ -497,7 +497,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4i32_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4i32.nxv4i64( @@ -520,7 +520,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8i32_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8i32.nxv8i64( @@ -543,7 +543,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8i32_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8i32.nxv8i64( @@ -796,7 +796,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv2f16_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv2f16.nxv2i64( @@ -819,7 +819,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv2f16_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv2f16.nxv2i64( @@ -842,7 +842,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4f16_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4f16.nxv4i64( @@ -865,7 +865,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4f16_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4f16.nxv4i64( @@ -888,7 +888,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8f16_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8f16.nxv8i64( @@ -911,7 +911,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8f16_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8f16.nxv8i64( @@ -980,7 +980,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv2f32_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv2f32.nxv2i64( @@ -1003,7 +1003,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv2f32_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv2f32.nxv2i64( @@ -1026,7 +1026,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4f32_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4f32.nxv4i64( @@ -1049,7 +1049,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4f32_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4f32.nxv4i64( @@ -1072,7 +1072,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8f32_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8f32.nxv8i64( @@ -1095,7 +1095,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8f32_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8f32.nxv8i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vsuxei.ll b/llvm/test/CodeGen/RISCV/rvv/vsuxei.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsuxei.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsuxei.ll @@ -106,7 +106,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4i8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4i8.nxv4i32( @@ -129,7 +129,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4i8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4i8.nxv4i32( @@ -152,7 +152,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8i8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8i8.nxv8i32( @@ -175,7 +175,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8i8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8i8.nxv8i32( @@ -198,7 +198,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv16i8_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv16i8.nxv16i32( @@ -221,7 +221,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv16i8_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv16i8.nxv16i32( @@ -336,7 +336,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4i16_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4i16.nxv4i32( @@ -359,7 +359,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4i16_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4i16.nxv4i32( @@ -382,7 +382,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8i16_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8i16.nxv8i32( @@ -405,7 +405,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8i16_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8i16.nxv8i32( @@ -428,7 +428,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv16i16_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv16i16.nxv16i32( @@ -451,7 +451,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv16i16_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv16i16.nxv16i32( @@ -980,7 +980,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv4f16_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv4f16.nxv4i32( @@ -1003,7 +1003,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv4f16_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv4f16.nxv4i32( @@ -1026,7 +1026,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8f16_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8f16.nxv8i32( @@ -1049,7 +1049,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8f16_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8f16.nxv8i32( @@ -1072,7 +1072,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv16f16_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv16f16.nxv16i32( @@ -1095,7 +1095,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv16f16_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv16f16.nxv16i32( @@ -1670,7 +1670,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv8i8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxei16.v v8, (a0), v10 +; CHECK-NEXT: vsuxei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv8i8.nxv8i16( @@ -1693,7 +1693,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv8i8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv8i8.nxv8i16( @@ -1716,7 +1716,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv16i8_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxei16.v v8, (a0), v12 +; CHECK-NEXT: vsuxei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv16i8.nxv16i16( @@ -1739,7 +1739,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv16i8_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv16i8.nxv16i16( @@ -1762,7 +1762,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_v_nxv32i8_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsuxei16.v v8, (a0), v16 +; CHECK-NEXT: vsuxei16.v v16, (a0), v8 ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.nxv32i8.nxv32i16( @@ -1785,7 +1785,7 @@ ; CHECK-LABEL: intrinsic_vsuxei_mask_v_nxv32i8_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsuxei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxei16.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: call void @llvm.riscv.vsuxei.mask.nxv32i8.nxv32i16( diff --git a/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv32.ll b/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv32.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv32.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv32.ll @@ -66,9 +66,9 @@ define void @test_vsuxseg2_nxv16i16_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, i32 %vl) @@ -78,9 +78,9 @@ define void @test_vsuxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -828,9 +828,9 @@ define void @test_vsuxseg2_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, i32 %vl) @@ -840,9 +840,9 @@ define void @test_vsuxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -884,9 +884,9 @@ define void @test_vsuxseg2_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, i32 %vl) @@ -896,9 +896,9 @@ define void @test_vsuxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -911,11 +911,10 @@ define void @test_vsuxseg3_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -925,11 +924,10 @@ define void @test_vsuxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -973,10 +971,10 @@ define void @test_vsuxseg3_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -986,10 +984,10 @@ define void @test_vsuxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1002,12 +1000,11 @@ define void @test_vsuxseg4_nxv16i8_nxv16i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -1017,12 +1014,11 @@ define void @test_vsuxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1068,11 +1064,11 @@ define void @test_vsuxseg4_nxv16i8_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -1082,11 +1078,11 @@ define void @test_vsuxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1892,9 +1888,9 @@ define void @test_vsuxseg2_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, i32 %vl) @@ -1904,9 +1900,9 @@ define void @test_vsuxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -1981,11 +1977,10 @@ define void @test_vsuxseg3_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -1995,11 +1990,10 @@ define void @test_vsuxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2078,12 +2072,11 @@ define void @test_vsuxseg4_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2093,12 +2086,11 @@ define void @test_vsuxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2181,13 +2173,12 @@ define void @test_vsuxseg5_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2197,13 +2188,12 @@ define void @test_vsuxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2290,14 +2280,13 @@ define void @test_vsuxseg6_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2307,14 +2296,13 @@ define void @test_vsuxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2405,15 +2393,14 @@ define void @test_vsuxseg7_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2423,15 +2410,14 @@ define void @test_vsuxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -2526,16 +2512,15 @@ define void @test_vsuxseg8_nxv4i16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -2545,16 +2530,15 @@ define void @test_vsuxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3360,9 +3344,9 @@ define void @test_vsuxseg2_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, i32 %vl) @@ -3372,9 +3356,9 @@ define void @test_vsuxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3449,11 +3433,10 @@ define void @test_vsuxseg3_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3463,11 +3446,10 @@ define void @test_vsuxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3546,12 +3528,11 @@ define void @test_vsuxseg4_nxv8i16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3561,12 +3542,11 @@ define void @test_vsuxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3579,9 +3559,9 @@ define void @test_vsuxseg2_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, i32 %vl) @@ -3591,9 +3571,9 @@ define void @test_vsuxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3635,9 +3615,9 @@ define void @test_vsuxseg2_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, i32 %vl) @@ -3647,9 +3627,9 @@ define void @test_vsuxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3662,11 +3642,10 @@ define void @test_vsuxseg3_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3676,11 +3655,10 @@ define void @test_vsuxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3724,10 +3702,10 @@ define void @test_vsuxseg3_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3737,10 +3715,10 @@ define void @test_vsuxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3753,12 +3731,11 @@ define void @test_vsuxseg4_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3768,12 +3745,11 @@ define void @test_vsuxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3819,11 +3795,11 @@ define void @test_vsuxseg4_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3833,11 +3809,11 @@ define void @test_vsuxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3850,13 +3826,12 @@ define void @test_vsuxseg5_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3866,13 +3841,12 @@ define void @test_vsuxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3920,13 +3894,12 @@ define void @test_vsuxseg5_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3936,13 +3909,12 @@ define void @test_vsuxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -3955,14 +3927,13 @@ define void @test_vsuxseg6_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -3972,14 +3943,13 @@ define void @test_vsuxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4029,14 +3999,13 @@ define void @test_vsuxseg6_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4046,14 +4015,13 @@ define void @test_vsuxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4066,15 +4034,14 @@ define void @test_vsuxseg7_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4084,15 +4051,14 @@ define void @test_vsuxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4144,15 +4110,14 @@ define void @test_vsuxseg7_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4162,15 +4127,14 @@ define void @test_vsuxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4183,16 +4147,15 @@ define void @test_vsuxseg8_nxv8i8_nxv8i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4202,16 +4165,15 @@ define void @test_vsuxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4265,16 +4227,15 @@ define void @test_vsuxseg8_nxv8i8_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4284,16 +4245,15 @@ define void @test_vsuxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4451,9 +4411,9 @@ define void @test_vsuxseg2_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, i32 %vl) @@ -4463,9 +4423,9 @@ define void @test_vsuxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4540,11 +4500,10 @@ define void @test_vsuxseg3_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4554,11 +4513,10 @@ define void @test_vsuxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4637,12 +4595,11 @@ define void @test_vsuxseg4_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4652,12 +4609,11 @@ define void @test_vsuxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4740,13 +4696,12 @@ define void @test_vsuxseg5_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4756,13 +4711,12 @@ define void @test_vsuxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4849,14 +4803,13 @@ define void @test_vsuxseg6_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4866,14 +4819,13 @@ define void @test_vsuxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -4964,15 +4916,14 @@ define void @test_vsuxseg7_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -4982,15 +4933,14 @@ define void @test_vsuxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -5085,16 +5035,15 @@ define void @test_vsuxseg8_nxv4i8_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -5104,16 +5053,15 @@ define void @test_vsuxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -5861,9 +5809,9 @@ define void @test_vsuxseg2_nxv32i8_nxv32i16( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei16.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, i32 %vl) @@ -5873,9 +5821,9 @@ define void @test_vsuxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei16.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -7724,9 +7672,9 @@ define void @test_vsuxseg2_nxv16f16_nxv16i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, i32 %vl) @@ -7736,9 +7684,9 @@ define void @test_vsuxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -10836,9 +10784,9 @@ define void @test_vsuxseg2_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, i32 %vl) @@ -10848,9 +10796,9 @@ define void @test_vsuxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -10925,11 +10873,10 @@ define void @test_vsuxseg3_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -10939,11 +10886,10 @@ define void @test_vsuxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11022,12 +10968,11 @@ define void @test_vsuxseg4_nxv8f16_nxv8i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11037,12 +10982,11 @@ define void @test_vsuxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11479,9 +11423,9 @@ define void @test_vsuxseg2_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, i32 %vl) @@ -11491,9 +11435,9 @@ define void @test_vsuxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11568,11 +11512,10 @@ define void @test_vsuxseg3_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11582,11 +11525,10 @@ define void @test_vsuxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11665,12 +11607,11 @@ define void @test_vsuxseg4_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11680,12 +11621,11 @@ define void @test_vsuxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11768,13 +11708,12 @@ define void @test_vsuxseg5_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11784,13 +11723,12 @@ define void @test_vsuxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11877,14 +11815,13 @@ define void @test_vsuxseg6_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -11894,14 +11831,13 @@ define void @test_vsuxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -11992,15 +11928,14 @@ define void @test_vsuxseg7_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -12010,15 +11945,14 @@ define void @test_vsuxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) @@ -12113,16 +12047,15 @@ define void @test_vsuxseg8_nxv4f16_nxv4i32( %val, ptr %base, %index, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i32 %vl) @@ -12132,16 +12065,15 @@ define void @test_vsuxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i32 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i32 %vl) diff --git a/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv64.ll b/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv64.ll --- a/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv64.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vsuxseg-rv64.ll @@ -66,9 +66,9 @@ define void @test_vsuxseg2_nxv16i16_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, i64 %vl) @@ -78,9 +78,9 @@ define void @test_vsuxseg2_mask_nxv16i16_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16i16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16i16.nxv16i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -151,9 +151,9 @@ define void @test_vsuxseg2_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i32.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -163,9 +163,9 @@ define void @test_vsuxseg2_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i32.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -269,11 +269,10 @@ define void @test_vsuxseg3_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i32.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -283,11 +282,10 @@ define void @test_vsuxseg3_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -397,12 +395,11 @@ define void @test_vsuxseg4_nxv4i32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -412,12 +409,11 @@ define void @test_vsuxseg4_mask_nxv4i32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -463,9 +459,9 @@ define void @test_vsuxseg2_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, i64 %vl) @@ -475,9 +471,9 @@ define void @test_vsuxseg2_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16i8.nxv16i16( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -519,9 +515,9 @@ define void @test_vsuxseg2_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, i64 %vl) @@ -531,9 +527,9 @@ define void @test_vsuxseg2_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16i8.nxv16i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -546,11 +542,10 @@ define void @test_vsuxseg3_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -560,11 +555,10 @@ define void @test_vsuxseg3_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv16i8.nxv16i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -608,10 +602,10 @@ define void @test_vsuxseg3_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -621,10 +615,10 @@ define void @test_vsuxseg3_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv16i8.nxv16i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -637,12 +631,11 @@ define void @test_vsuxseg4_nxv16i8_nxv16i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -652,12 +645,11 @@ define void @test_vsuxseg4_mask_nxv16i8_nxv16i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv16i8_nxv16i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv16i8.nxv16i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -703,11 +695,11 @@ define void @test_vsuxseg4_nxv16i8_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -717,11 +709,11 @@ define void @test_vsuxseg4_mask_nxv16i8_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv16i8_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv16i8.nxv16i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2752,9 +2744,9 @@ define void @test_vsuxseg2_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i16.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -2764,9 +2756,9 @@ define void @test_vsuxseg2_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i16.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2779,9 +2771,9 @@ define void @test_vsuxseg2_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, i64 %vl) @@ -2791,9 +2783,9 @@ define void @test_vsuxseg2_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i16.nxv8i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2868,10 +2860,10 @@ define void @test_vsuxseg3_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i16.nxv8i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -2881,10 +2873,10 @@ define void @test_vsuxseg3_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2897,11 +2889,10 @@ define void @test_vsuxseg3_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -2911,11 +2902,10 @@ define void @test_vsuxseg3_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -2994,11 +2984,11 @@ define void @test_vsuxseg4_nxv8i16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3008,11 +2998,11 @@ define void @test_vsuxseg4_mask_nxv8i16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3025,12 +3015,11 @@ define void @test_vsuxseg4_nxv8i16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3040,12 +3029,11 @@ define void @test_vsuxseg4_mask_nxv8i16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3058,9 +3046,9 @@ define void @test_vsuxseg2_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, i64 %vl) @@ -3070,9 +3058,9 @@ define void @test_vsuxseg2_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i8.nxv4i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3114,9 +3102,9 @@ define void @test_vsuxseg2_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i8.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -3126,9 +3114,9 @@ define void @test_vsuxseg2_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i8.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3170,11 +3158,10 @@ define void @test_vsuxseg3_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3184,11 +3171,10 @@ define void @test_vsuxseg3_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i8.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3232,10 +3218,10 @@ define void @test_vsuxseg3_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i8.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3245,10 +3231,10 @@ define void @test_vsuxseg3_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i8.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3292,12 +3278,11 @@ define void @test_vsuxseg4_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3307,12 +3292,11 @@ define void @test_vsuxseg4_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3358,11 +3342,11 @@ define void @test_vsuxseg4_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i8.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3372,11 +3356,11 @@ define void @test_vsuxseg4_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3422,13 +3406,12 @@ define void @test_vsuxseg5_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3438,13 +3421,12 @@ define void @test_vsuxseg5_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3492,13 +3474,12 @@ define void @test_vsuxseg5_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3508,13 +3489,12 @@ define void @test_vsuxseg5_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3562,14 +3542,13 @@ define void @test_vsuxseg6_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3579,14 +3558,13 @@ define void @test_vsuxseg6_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3636,14 +3614,13 @@ define void @test_vsuxseg6_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3653,14 +3630,13 @@ define void @test_vsuxseg6_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3710,15 +3686,14 @@ define void @test_vsuxseg7_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3728,15 +3703,14 @@ define void @test_vsuxseg7_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3788,15 +3762,14 @@ define void @test_vsuxseg7_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3806,15 +3779,14 @@ define void @test_vsuxseg7_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3866,16 +3838,15 @@ define void @test_vsuxseg8_nxv4i8_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3885,16 +3856,15 @@ define void @test_vsuxseg8_mask_nxv4i8_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4i8_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4i8.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -3948,16 +3918,15 @@ define void @test_vsuxseg8_nxv4i8_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -3967,16 +3936,15 @@ define void @test_vsuxseg8_mask_nxv4i8_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4i8_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4i8.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5097,9 +5065,9 @@ define void @test_vsuxseg2_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv2i32.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -5109,9 +5077,9 @@ define void @test_vsuxseg2_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv2i32.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5217,11 +5185,10 @@ define void @test_vsuxseg3_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv2i32.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5231,11 +5198,10 @@ define void @test_vsuxseg3_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv2i32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5347,12 +5313,11 @@ define void @test_vsuxseg4_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv2i32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5362,12 +5327,11 @@ define void @test_vsuxseg4_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5485,13 +5449,12 @@ define void @test_vsuxseg5_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5501,13 +5464,12 @@ define void @test_vsuxseg5_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5631,14 +5593,13 @@ define void @test_vsuxseg6_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5648,14 +5609,13 @@ define void @test_vsuxseg6_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5785,15 +5745,14 @@ define void @test_vsuxseg7_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5803,15 +5762,14 @@ define void @test_vsuxseg7_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5947,16 +5905,15 @@ define void @test_vsuxseg8_nxv2i32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -5966,16 +5923,15 @@ define void @test_vsuxseg8_mask_nxv2i32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv2i32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv2i32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -5988,9 +5944,9 @@ define void @test_vsuxseg2_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, i64 %vl) @@ -6000,9 +5956,9 @@ define void @test_vsuxseg2_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i8.nxv8i16( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6044,9 +6000,9 @@ define void @test_vsuxseg2_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i8.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -6056,9 +6012,9 @@ define void @test_vsuxseg2_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v17, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i8.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6071,9 +6027,9 @@ define void @test_vsuxseg2_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, i64 %vl) @@ -6083,9 +6039,9 @@ define void @test_vsuxseg2_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i8.nxv8i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6098,11 +6054,10 @@ define void @test_vsuxseg3_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6112,11 +6067,10 @@ define void @test_vsuxseg3_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei16.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i8.nxv8i16( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6160,10 +6114,10 @@ define void @test_vsuxseg3_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i8.nxv8i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6173,10 +6127,10 @@ define void @test_vsuxseg3_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i8.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6189,10 +6143,10 @@ define void @test_vsuxseg3_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6202,10 +6156,10 @@ define void @test_vsuxseg3_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8i8.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6218,12 +6172,11 @@ define void @test_vsuxseg4_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6233,12 +6186,11 @@ define void @test_vsuxseg4_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6284,11 +6236,11 @@ define void @test_vsuxseg4_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i8.nxv8i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6298,11 +6250,11 @@ define void @test_vsuxseg4_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6315,11 +6267,11 @@ define void @test_vsuxseg4_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6329,11 +6281,11 @@ define void @test_vsuxseg4_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6346,13 +6298,12 @@ define void @test_vsuxseg5_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6362,13 +6313,12 @@ define void @test_vsuxseg5_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6416,12 +6366,12 @@ define void @test_vsuxseg5_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg5ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6431,12 +6381,12 @@ define void @test_vsuxseg5_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6449,13 +6399,12 @@ define void @test_vsuxseg5_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6465,13 +6414,12 @@ define void @test_vsuxseg5_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6484,14 +6432,13 @@ define void @test_vsuxseg6_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6501,14 +6448,13 @@ define void @test_vsuxseg6_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6558,13 +6504,13 @@ define void @test_vsuxseg6_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6574,13 +6520,13 @@ define void @test_vsuxseg6_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6593,14 +6539,13 @@ define void @test_vsuxseg6_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6610,14 +6555,13 @@ define void @test_vsuxseg6_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6630,15 +6574,14 @@ define void @test_vsuxseg7_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6648,15 +6591,14 @@ define void @test_vsuxseg7_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6708,14 +6650,14 @@ define void @test_vsuxseg7_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6725,14 +6667,14 @@ define void @test_vsuxseg7_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6745,15 +6687,14 @@ define void @test_vsuxseg7_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6763,15 +6704,14 @@ define void @test_vsuxseg7_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6784,16 +6724,15 @@ define void @test_vsuxseg8_nxv8i8_nxv8i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei16.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei16.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6803,16 +6742,15 @@ define void @test_vsuxseg8_mask_nxv8i8_nxv8i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv8i8_nxv8i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei16.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei16.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv8i8.nxv8i16( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6866,15 +6804,15 @@ define void @test_vsuxseg8_nxv8i8_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 +; CHECK-NEXT: vmv1r.v v23, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6884,15 +6822,15 @@ define void @test_vsuxseg8_mask_nxv8i8_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv8i8_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v17, v16 +; CHECK-NEXT: vmv1r.v v18, v16 +; CHECK-NEXT: vmv1r.v v19, v16 +; CHECK-NEXT: vmv1r.v v20, v16 +; CHECK-NEXT: vmv1r.v v21, v16 +; CHECK-NEXT: vmv1r.v v22, v16 +; CHECK-NEXT: vmv1r.v v23, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv8i8.nxv8i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -6905,16 +6843,15 @@ define void @test_vsuxseg8_nxv8i8_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -6924,16 +6861,15 @@ define void @test_vsuxseg8_mask_nxv8i8_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv8i8_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv8i8.nxv8i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7062,9 +6998,9 @@ define void @test_vsuxseg2_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, i64 %vl) @@ -7074,9 +7010,9 @@ define void @test_vsuxseg2_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i16.nxv4i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7118,9 +7054,9 @@ define void @test_vsuxseg2_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4i16.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -7130,9 +7066,9 @@ define void @test_vsuxseg2_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4i16.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7174,11 +7110,10 @@ define void @test_vsuxseg3_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7188,11 +7123,10 @@ define void @test_vsuxseg3_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7236,10 +7170,10 @@ define void @test_vsuxseg3_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4i16.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7249,10 +7183,10 @@ define void @test_vsuxseg3_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4i16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7296,12 +7230,11 @@ define void @test_vsuxseg4_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7311,12 +7244,11 @@ define void @test_vsuxseg4_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7362,11 +7294,11 @@ define void @test_vsuxseg4_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4i16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7376,11 +7308,11 @@ define void @test_vsuxseg4_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7426,13 +7358,12 @@ define void @test_vsuxseg5_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7442,13 +7373,12 @@ define void @test_vsuxseg5_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7496,13 +7426,12 @@ define void @test_vsuxseg5_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7512,13 +7441,12 @@ define void @test_vsuxseg5_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7566,14 +7494,13 @@ define void @test_vsuxseg6_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7583,14 +7510,13 @@ define void @test_vsuxseg6_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7640,14 +7566,13 @@ define void @test_vsuxseg6_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7657,14 +7582,13 @@ define void @test_vsuxseg6_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7714,15 +7638,14 @@ define void @test_vsuxseg7_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7732,15 +7655,14 @@ define void @test_vsuxseg7_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7792,15 +7714,14 @@ define void @test_vsuxseg7_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7810,15 +7731,14 @@ define void @test_vsuxseg7_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7870,35 +7790,33 @@ define void @test_vsuxseg8_nxv4i16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4i16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) ret void } -define void @test_vsuxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { -; CHECK-LABEL: test_vsuxseg8_mask_nxv4i16_nxv4i32: -; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +define void @test_vsuxseg8_mask_nxv4i16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { +; CHECK-LABEL: test_vsuxseg8_mask_nxv4i16_nxv4i32: +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4i16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -7952,16 +7870,15 @@ define void @test_vsuxseg8_nxv4i16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -7971,16 +7888,15 @@ define void @test_vsuxseg8_mask_nxv4i16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4i16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4i16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9101,9 +9017,9 @@ define void @test_vsuxseg2_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv2i8.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -9113,9 +9029,9 @@ define void @test_vsuxseg2_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv2i8.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9221,11 +9137,10 @@ define void @test_vsuxseg3_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv2i8.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9235,11 +9150,10 @@ define void @test_vsuxseg3_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv2i8.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9351,12 +9265,11 @@ define void @test_vsuxseg4_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv2i8.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9366,12 +9279,11 @@ define void @test_vsuxseg4_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9489,13 +9401,12 @@ define void @test_vsuxseg5_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9505,13 +9416,12 @@ define void @test_vsuxseg5_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9635,14 +9545,13 @@ define void @test_vsuxseg6_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9652,14 +9561,13 @@ define void @test_vsuxseg6_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9789,15 +9697,14 @@ define void @test_vsuxseg7_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9807,15 +9714,14 @@ define void @test_vsuxseg7_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -9951,16 +9857,15 @@ define void @test_vsuxseg8_nxv2i8_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -9970,16 +9875,15 @@ define void @test_vsuxseg8_mask_nxv2i8_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv2i8_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv2i8.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10050,9 +9954,9 @@ define void @test_vsuxseg2_nxv8i32_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8i32.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -10062,9 +9966,9 @@ define void @test_vsuxseg2_mask_nxv8i32_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8i32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8i32.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10106,9 +10010,9 @@ define void @test_vsuxseg2_nxv32i8_nxv32i16( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei16.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, i64 %vl) @@ -10118,9 +10022,9 @@ define void @test_vsuxseg2_mask_nxv32i8_nxv32i16( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv32i8_nxv32i16: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei16.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei16.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv32i8.nxv32i16( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10249,9 +10153,9 @@ define void @test_vsuxseg2_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv2i16.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -10261,9 +10165,9 @@ define void @test_vsuxseg2_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv2i16.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10369,11 +10273,10 @@ define void @test_vsuxseg3_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv2i16.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10383,11 +10286,10 @@ define void @test_vsuxseg3_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv2i16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10499,12 +10401,11 @@ define void @test_vsuxseg4_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv2i16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10514,12 +10415,11 @@ define void @test_vsuxseg4_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10637,13 +10537,12 @@ define void @test_vsuxseg5_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10653,13 +10552,12 @@ define void @test_vsuxseg5_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10783,14 +10681,13 @@ define void @test_vsuxseg6_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10800,14 +10697,13 @@ define void @test_vsuxseg6_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -10937,15 +10833,14 @@ define void @test_vsuxseg7_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -10955,15 +10850,14 @@ define void @test_vsuxseg7_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -11099,16 +10993,15 @@ define void @test_vsuxseg8_nxv2i16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -11118,16 +11011,15 @@ define void @test_vsuxseg8_mask_nxv2i16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv2i16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv2i16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -11570,9 +11462,9 @@ define void @test_vsuxseg2_nxv16f16_nxv16i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, i64 %vl) @@ -11582,9 +11474,9 @@ define void @test_vsuxseg2_mask_nxv16f16_nxv16i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv16f16_nxv16i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv16f16.nxv16i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -12780,9 +12672,9 @@ define void @test_vsuxseg2_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv2f32.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -12792,9 +12684,9 @@ define void @test_vsuxseg2_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv2f32.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -12900,11 +12792,10 @@ define void @test_vsuxseg3_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv2f32.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -12914,11 +12805,10 @@ define void @test_vsuxseg3_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv2f32.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13030,12 +12920,11 @@ define void @test_vsuxseg4_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv2f32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13045,12 +12934,11 @@ define void @test_vsuxseg4_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13168,13 +13056,12 @@ define void @test_vsuxseg5_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13184,13 +13071,12 @@ define void @test_vsuxseg5_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13314,14 +13200,13 @@ define void @test_vsuxseg6_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13331,14 +13216,13 @@ define void @test_vsuxseg6_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13468,15 +13352,14 @@ define void @test_vsuxseg7_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13486,15 +13369,14 @@ define void @test_vsuxseg7_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -13630,16 +13512,15 @@ define void @test_vsuxseg8_nxv2f32_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv2f32_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -13648,17 +13529,16 @@ define void @test_vsuxseg8_mask_nxv2f32_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv2f32_nxv2i64: -; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK: # %bb.0: # %entry +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv2f32.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15689,9 +15569,9 @@ define void @test_vsuxseg2_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8f16.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -15701,9 +15581,9 @@ define void @test_vsuxseg2_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v18, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8f16.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15716,9 +15596,9 @@ define void @test_vsuxseg2_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, i64 %vl) @@ -15728,9 +15608,9 @@ define void @test_vsuxseg2_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8f16.nxv8i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15805,10 +15685,10 @@ define void @test_vsuxseg3_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8f16.nxv8i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15818,10 +15698,10 @@ define void @test_vsuxseg3_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8f16.nxv8i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15834,11 +15714,10 @@ define void @test_vsuxseg3_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15848,11 +15727,10 @@ define void @test_vsuxseg3_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv8f16.nxv8i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15931,11 +15809,11 @@ define void @test_vsuxseg4_nxv8f16_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8f16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15945,11 +15823,11 @@ define void @test_vsuxseg4_mask_nxv8f16_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8f16_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv2r.v v12, v8 -; CHECK-NEXT: vmv2r.v v14, v8 +; CHECK-NEXT: vmv2r.v v18, v16 +; CHECK-NEXT: vmv2r.v v20, v16 +; CHECK-NEXT: vmv2r.v v22, v16 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8f16.nxv8i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -15962,12 +15840,11 @@ define void @test_vsuxseg4_nxv8f16_nxv8i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -15977,12 +15854,11 @@ define void @test_vsuxseg4_mask_nxv8f16_nxv8i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv8f16_nxv8i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv8f16.nxv8i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16053,9 +15929,9 @@ define void @test_vsuxseg2_nxv8f32_nxv8i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv8f32.nxv8i64( %val, %val, ptr %base, %index, i64 %vl) @@ -16065,9 +15941,9 @@ define void @test_vsuxseg2_mask_nxv8f32_nxv8i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv8f32_nxv8i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv4r.v v12, v8 +; CHECK-NEXT: vmv4r.v v20, v16 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v16, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv8f32.nxv8i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16481,9 +16357,9 @@ define void @test_vsuxseg2_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, i64 %vl) @@ -16493,9 +16369,9 @@ define void @test_vsuxseg2_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei32.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4f16.nxv4i32( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16537,9 +16413,9 @@ define void @test_vsuxseg2_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4f16.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -16549,9 +16425,9 @@ define void @test_vsuxseg2_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v13, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4f16.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16593,11 +16469,10 @@ define void @test_vsuxseg3_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16607,11 +16482,10 @@ define void @test_vsuxseg3_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei32.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4f16.nxv4i32( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16655,10 +16529,10 @@ define void @test_vsuxseg3_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4f16.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16668,10 +16542,10 @@ define void @test_vsuxseg3_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4f16.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16715,12 +16589,11 @@ define void @test_vsuxseg4_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16730,12 +16603,11 @@ define void @test_vsuxseg4_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16781,11 +16653,11 @@ define void @test_vsuxseg4_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4f16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16795,11 +16667,11 @@ define void @test_vsuxseg4_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16845,13 +16717,12 @@ define void @test_vsuxseg5_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16861,13 +16732,12 @@ define void @test_vsuxseg5_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16915,13 +16785,12 @@ define void @test_vsuxseg5_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -16931,13 +16800,12 @@ define void @test_vsuxseg5_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv1r.v v10, v8 -; CHECK-NEXT: vmv1r.v v11, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv1r.v v12, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -16985,14 +16853,13 @@ define void @test_vsuxseg6_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17002,14 +16869,13 @@ define void @test_vsuxseg6_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17059,14 +16925,13 @@ define void @test_vsuxseg6_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17076,14 +16941,13 @@ define void @test_vsuxseg6_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17133,15 +16997,14 @@ define void @test_vsuxseg7_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17151,15 +17014,14 @@ define void @test_vsuxseg7_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17211,15 +17073,14 @@ define void @test_vsuxseg7_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17229,15 +17090,14 @@ define void @test_vsuxseg7_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17289,16 +17149,15 @@ define void @test_vsuxseg8_nxv4f16_nxv4i32( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17308,16 +17167,15 @@ define void @test_vsuxseg8_mask_nxv4f16_nxv4i32( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4f16_nxv4i32: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei32.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei32.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4f16.nxv4i32( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17371,16 +17229,15 @@ define void @test_vsuxseg8_nxv4f16_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17390,16 +17247,15 @@ define void @test_vsuxseg8_mask_nxv4f16_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv4f16_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 -; CHECK-NEXT: vmv1r.v v20, v8 -; CHECK-NEXT: vmv1r.v v21, v8 -; CHECK-NEXT: vmv1r.v v22, v8 -; CHECK-NEXT: vmv1r.v v23, v8 +; CHECK-NEXT: vmv1r.v v13, v12 +; CHECK-NEXT: vmv1r.v v14, v12 +; CHECK-NEXT: vmv1r.v v15, v12 +; CHECK-NEXT: vmv1r.v v16, v12 +; CHECK-NEXT: vmv1r.v v17, v12 +; CHECK-NEXT: vmv1r.v v18, v12 +; CHECK-NEXT: vmv1r.v v19, v12 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv4f16.nxv4i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17540,9 +17396,9 @@ define void @test_vsuxseg2_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10 +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv2f16.nxv2i64( %val, %val, ptr %base, %index, i64 %vl) @@ -17552,9 +17408,9 @@ define void @test_vsuxseg2_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 +; CHECK-NEXT: vmv1r.v v11, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv2f16.nxv2i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17660,11 +17516,10 @@ define void @test_vsuxseg3_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv2f16.nxv2i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17674,11 +17529,10 @@ define void @test_vsuxseg3_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v9, v8 -; CHECK-NEXT: vmv2r.v v12, v10 -; CHECK-NEXT: vmv1r.v v10, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv2f16.nxv2i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17790,12 +17644,11 @@ define void @test_vsuxseg4_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv2f16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17805,12 +17658,11 @@ define void @test_vsuxseg4_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -17928,13 +17780,12 @@ define void @test_vsuxseg5_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -17944,13 +17795,12 @@ define void @test_vsuxseg5_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg5_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg5ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg5ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg5.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18074,14 +17924,13 @@ define void @test_vsuxseg6_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18091,14 +17940,13 @@ define void @test_vsuxseg6_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg6_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg6ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg6ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg6.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18228,15 +18076,14 @@ define void @test_vsuxseg7_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18246,15 +18093,14 @@ define void @test_vsuxseg7_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg7_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg7ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg7ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg7.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18390,16 +18236,15 @@ define void @test_vsuxseg8_nxv2f16_nxv2i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10 +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18409,16 +18254,15 @@ define void @test_vsuxseg8_mask_nxv2f16_nxv2i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg8_mask_nxv2f16_nxv2i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv1r.v v12, v8 -; CHECK-NEXT: vmv1r.v v13, v8 -; CHECK-NEXT: vmv1r.v v14, v8 -; CHECK-NEXT: vmv1r.v v15, v8 -; CHECK-NEXT: vmv1r.v v16, v8 -; CHECK-NEXT: vmv1r.v v17, v8 -; CHECK-NEXT: vmv1r.v v18, v8 -; CHECK-NEXT: vmv1r.v v19, v8 +; CHECK-NEXT: vmv1r.v v11, v10 +; CHECK-NEXT: vmv1r.v v12, v10 +; CHECK-NEXT: vmv1r.v v13, v10 +; CHECK-NEXT: vmv1r.v v14, v10 +; CHECK-NEXT: vmv1r.v v15, v10 +; CHECK-NEXT: vmv1r.v v16, v10 +; CHECK-NEXT: vmv1r.v v17, v10 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma -; CHECK-NEXT: vsuxseg8ei64.v v12, (a0), v10, v0.t +; CHECK-NEXT: vsuxseg8ei64.v v10, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg8.mask.nxv2f16.nxv2i64( %val, %val, %val, %val, %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18489,9 +18333,9 @@ define void @test_vsuxseg2_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12 +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.nxv4f32.nxv4i64( %val, %val, ptr %base, %index, i64 %vl) @@ -18501,9 +18345,9 @@ define void @test_vsuxseg2_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg2_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 +; CHECK-NEXT: vmv2r.v v14, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg2ei64.v v8, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg2ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg2.mask.nxv4f32.nxv4i64( %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18607,11 +18451,10 @@ define void @test_vsuxseg3_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16 +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.nxv4f32.nxv4i64( %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18621,11 +18464,10 @@ define void @test_vsuxseg3_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg3_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v10, v8 -; CHECK-NEXT: vmv4r.v v16, v12 -; CHECK-NEXT: vmv2r.v v12, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg3ei64.v v8, (a0), v16, v0.t +; CHECK-NEXT: vsuxseg3ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg3.mask.nxv4f32.nxv4i64( %val, %val, %val, ptr %base, %index, %mask, i64 %vl) @@ -18735,12 +18577,11 @@ define void @test_vsuxseg4_nxv4f32_nxv4i64( %val, ptr %base, %index, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v12 +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8 ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.nxv4f32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, i64 %vl) @@ -18750,12 +18591,11 @@ define void @test_vsuxseg4_mask_nxv4f32_nxv4i64( %val, ptr %base, %index, %mask, i64 %vl) { ; CHECK-LABEL: test_vsuxseg4_mask_nxv4f32_nxv4i64: ; CHECK: # %bb.0: # %entry -; CHECK-NEXT: vmv2r.v v16, v8 -; CHECK-NEXT: vmv2r.v v18, v8 -; CHECK-NEXT: vmv2r.v v20, v8 -; CHECK-NEXT: vmv2r.v v22, v8 +; CHECK-NEXT: vmv2r.v v14, v12 +; CHECK-NEXT: vmv2r.v v16, v12 +; CHECK-NEXT: vmv2r.v v18, v12 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma -; CHECK-NEXT: vsuxseg4ei64.v v16, (a0), v12, v0.t +; CHECK-NEXT: vsuxseg4ei64.v v12, (a0), v8, v0.t ; CHECK-NEXT: ret entry: tail call void @llvm.riscv.vsuxseg4.mask.nxv4f32.nxv4i64( %val, %val, %val, %val, ptr %base, %index, %mask, i64 %vl) diff --git a/llvm/test/CodeGen/RISCV/rvv/vwadd.w.ll b/llvm/test/CodeGen/RISCV/rvv/vwadd.w.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwadd.w.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwadd.w.ll @@ -1986,8 +1986,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; CHECK-NEXT: vwadd.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwadd.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv8i16.nxv8i8( @@ -2003,8 +2002,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwadd.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwadd.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv16i16.nxv16i8( @@ -2020,8 +2018,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwadd.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv32i16.nxv32i8( @@ -2071,8 +2068,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vwadd.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwadd.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv4i32.nxv4i16( @@ -2088,8 +2084,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwadd.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwadd.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv8i32.nxv8i16( @@ -2122,8 +2117,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vwadd.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwadd.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv2i64.nxv2i32( @@ -2139,8 +2133,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwadd.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwadd.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv4i64.nxv4i32( @@ -2156,8 +2149,7 @@ ; CHECK-LABEL: intrinsic_vwadd.w_wv_untie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwadd.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwadd.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwadd.w.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwaddu.w.ll b/llvm/test/CodeGen/RISCV/rvv/vwaddu.w.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwaddu.w.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwaddu.w.ll @@ -1982,8 +1982,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; CHECK-NEXT: vwaddu.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwaddu.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv8i16.nxv8i8( @@ -1999,8 +1998,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwaddu.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwaddu.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv16i16.nxv16i8( @@ -2016,8 +2014,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwaddu.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv32i16.nxv32i8( @@ -2067,8 +2064,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vwaddu.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwaddu.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv4i32.nxv4i16( @@ -2084,8 +2080,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwaddu.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwaddu.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv8i32.nxv8i16( @@ -2118,8 +2113,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vwaddu.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwaddu.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv2i64.nxv2i32( @@ -2135,8 +2129,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwaddu.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwaddu.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv4i64.nxv4i32( @@ -2152,8 +2145,7 @@ ; CHECK-LABEL: intrinsic_vwaddu.w_wv_untie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwaddu.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwaddu.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwaddu.w.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwmacc-sdnode.ll b/llvm/test/CodeGen/RISCV/rvv/vwmacc-sdnode.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwmacc-sdnode.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwmacc-sdnode.ll @@ -121,8 +121,7 @@ ; CHECK-LABEL: vwmacc_vv_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmacc.vv v10, v8, v9 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmacc.vv v8, v10, v11 ; CHECK-NEXT: ret %vd = sext %va to %ve = sext %vb to @@ -136,8 +135,7 @@ ; CHECK-LABEL: vwmacc_vx_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmacc.vx v10, a0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmacc.vx v8, a0, v10 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -153,8 +151,7 @@ ; CHECK-LABEL: vwmaccu_vv_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmaccu.vv v10, v8, v9 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmaccu.vv v8, v10, v11 ; CHECK-NEXT: ret %vd = zext %va to %ve = zext %vb to @@ -168,8 +165,7 @@ ; CHECK-LABEL: vwmaccu_vx_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmaccu.vx v10, a0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmaccu.vx v8, a0, v10 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -185,8 +181,7 @@ ; CHECK-LABEL: vwmaccsu_vv_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmaccsu.vv v10, v9, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmaccsu.vv v8, v11, v10 ; CHECK-NEXT: ret %vd = zext %va to %ve = sext %vb to @@ -200,8 +195,7 @@ ; CHECK-LABEL: vwmaccsu_vx_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmaccsu.vx v10, a0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmaccsu.vx v8, a0, v10 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -217,8 +211,7 @@ ; CHECK-LABEL: vwmaccus_vx_nxv2i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma -; CHECK-NEXT: vwmaccus.vx v10, a0, v8 -; CHECK-NEXT: vmv2r.v v8, v10 +; CHECK-NEXT: vwmaccus.vx v8, a0, v10 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -234,8 +227,7 @@ ; CHECK-LABEL: vwmacc_vv_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmacc.vv v12, v8, v10 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmacc.vv v8, v12, v14 ; CHECK-NEXT: ret %vd = sext %va to %ve = sext %vb to @@ -249,8 +241,7 @@ ; CHECK-LABEL: vwmacc_vx_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmacc.vx v12, a0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmacc.vx v8, a0, v12 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -266,8 +257,7 @@ ; CHECK-LABEL: vwmaccu_vv_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmaccu.vv v12, v8, v10 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmaccu.vv v8, v12, v14 ; CHECK-NEXT: ret %vd = zext %va to %ve = zext %vb to @@ -281,8 +271,7 @@ ; CHECK-LABEL: vwmaccu_vx_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmaccu.vx v12, a0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmaccu.vx v8, a0, v12 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -298,8 +287,7 @@ ; CHECK-LABEL: vwmaccsu_vv_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmaccsu.vv v12, v10, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmaccsu.vv v8, v14, v12 ; CHECK-NEXT: ret %vd = zext %va to %ve = sext %vb to @@ -313,8 +301,7 @@ ; CHECK-LABEL: vwmaccsu_vx_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmaccsu.vx v12, a0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmaccsu.vx v8, a0, v12 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -330,8 +317,7 @@ ; CHECK-LABEL: vwmaccus_vx_nxv4i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma -; CHECK-NEXT: vwmaccus.vx v12, a0, v8 -; CHECK-NEXT: vmv4r.v v8, v12 +; CHECK-NEXT: vwmaccus.vx v8, a0, v12 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -347,8 +333,7 @@ ; CHECK-LABEL: vwmacc_vv_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmacc.vv v16, v8, v12 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmacc.vv v8, v16, v20 ; CHECK-NEXT: ret %vd = sext %va to %ve = sext %vb to @@ -362,8 +347,7 @@ ; CHECK-LABEL: vwmacc_vx_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmacc.vx v16, a0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmacc.vx v8, a0, v16 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -379,8 +363,7 @@ ; CHECK-LABEL: vwmaccu_vv_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmaccu.vv v16, v8, v12 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmaccu.vv v8, v16, v20 ; CHECK-NEXT: ret %vd = zext %va to %ve = zext %vb to @@ -394,8 +377,7 @@ ; CHECK-LABEL: vwmaccu_vx_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmaccu.vx v16, a0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmaccu.vx v8, a0, v16 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -411,8 +393,7 @@ ; CHECK-LABEL: vwmaccsu_vv_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmaccsu.vv v16, v12, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmaccsu.vv v8, v20, v16 ; CHECK-NEXT: ret %vd = zext %va to %ve = sext %vb to @@ -426,8 +407,7 @@ ; CHECK-LABEL: vwmaccsu_vx_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmaccsu.vx v16, a0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmaccsu.vx v8, a0, v16 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer @@ -443,8 +423,7 @@ ; CHECK-LABEL: vwmaccus_vx_nxv8i32: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma -; CHECK-NEXT: vwmaccus.vx v16, a0, v8 -; CHECK-NEXT: vmv8r.v v8, v16 +; CHECK-NEXT: vwmaccus.vx v8, a0, v16 ; CHECK-NEXT: ret %head = insertelement poison, i32 %b, i32 0 %splat = shufflevector %head, poison, zeroinitializer diff --git a/llvm/test/CodeGen/RISCV/rvv/vwredsum.ll b/llvm/test/CodeGen/RISCV/rvv/vwredsum.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwredsum.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwredsum.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv4i16_nxv16i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v10, v9 +; CHECK-NEXT: vwredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv4i16.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv4i16_nxv16i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vwredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv4i16.nxv16i8.nxv4i16( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv4i16_nxv32i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v12, v9 +; CHECK-NEXT: vwredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv4i16.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv4i16_nxv32i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vwredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv4i16.nxv32i8.nxv4i16( @@ -290,7 +294,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv4i16_nxv64i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v16, v9 +; CHECK-NEXT: vwredsum.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv4i16.nxv64i8( @@ -313,7 +318,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv4i16_nxv64i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vwredsum.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv4i16.nxv64i8.nxv4i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv2i32_nxv8i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v10, v9 +; CHECK-NEXT: vwredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv2i32.nxv8i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv2i32_nxv8i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vwredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv2i32.nxv8i16.nxv2i32( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv2i32_nxv16i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v12, v9 +; CHECK-NEXT: vwredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv2i32.nxv16i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv2i32_nxv16i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vwredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv2i32.nxv16i16.nxv2i32( @@ -566,7 +576,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv2i32_nxv32i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v16, v9 +; CHECK-NEXT: vwredsum.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv2i32.nxv32i16( @@ -589,7 +600,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv2i32_nxv32i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vwredsum.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv2i32.nxv32i16.nxv2i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv1i64_nxv4i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v10, v9 +; CHECK-NEXT: vwredsum.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv1i64.nxv4i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv1i64_nxv4i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v10, v9, v0.t +; CHECK-NEXT: vwredsum.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv1i64.nxv4i32.nxv1i64( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv1i64_nxv8i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v12, v9 +; CHECK-NEXT: vwredsum.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv1i64.nxv8i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv1i64_nxv8i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v12, v9, v0.t +; CHECK-NEXT: vwredsum.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv1i64.nxv8i32.nxv1i64( @@ -796,7 +812,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_vs_nxv1i64_nxv16i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v16, v9 +; CHECK-NEXT: vwredsum.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.nxv1i64.nxv16i32( @@ -819,7 +836,8 @@ ; CHECK-LABEL: intrinsic_vwredsum_mask_vs_nxv1i64_nxv16i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vwredsum.vs v8, v16, v9, v0.t +; CHECK-NEXT: vwredsum.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsum.mask.nxv1i64.nxv16i32.nxv1i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwredsumu.ll b/llvm/test/CodeGen/RISCV/rvv/vwredsumu.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwredsumu.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwredsumu.ll @@ -198,7 +198,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv4i16_nxv16i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v10, v9 +; CHECK-NEXT: vwredsumu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv4i16.nxv16i8( @@ -221,7 +222,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv4i16_nxv16i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv4i16.nxv16i8.nxv4i16( @@ -244,7 +246,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv4i16_nxv32i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v12, v9 +; CHECK-NEXT: vwredsumu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv4i16.nxv32i8( @@ -267,7 +270,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv4i16_nxv32i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv4i16.nxv32i8.nxv4i16( @@ -290,7 +294,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv4i16_nxv64i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v16, v9 +; CHECK-NEXT: vwredsumu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv4i16.nxv64i8( @@ -313,7 +318,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv4i16_nxv64i8_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv4i16.nxv64i8.nxv4i16( @@ -474,7 +480,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv2i32_nxv8i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v10, v9 +; CHECK-NEXT: vwredsumu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv2i32.nxv8i16( @@ -497,7 +504,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv2i32_nxv8i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv2i32.nxv8i16.nxv2i32( @@ -520,7 +528,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv2i32_nxv16i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v12, v9 +; CHECK-NEXT: vwredsumu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv2i32.nxv16i16( @@ -543,7 +552,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv2i32_nxv16i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv2i32.nxv16i16.nxv2i32( @@ -566,7 +576,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv2i32_nxv32i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v16, v9 +; CHECK-NEXT: vwredsumu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv2i32.nxv32i16( @@ -589,7 +600,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv2i32_nxv32i16_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv2i32.nxv32i16.nxv2i32( @@ -704,7 +716,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv1i64_nxv4i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v10, v9 +; CHECK-NEXT: vwredsumu.vs v10, v8, v11 +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv1i64.nxv4i32( @@ -727,7 +740,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv1i64_nxv4i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v10, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v10, v8, v11, v0.t +; CHECK-NEXT: vmv1r.v v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv1i64.nxv4i32.nxv1i64( @@ -750,7 +764,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv1i64_nxv8i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v12, v9 +; CHECK-NEXT: vwredsumu.vs v12, v8, v13 +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv1i64.nxv8i32( @@ -773,7 +788,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv1i64_nxv8i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v12, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v12, v8, v13, v0.t +; CHECK-NEXT: vmv1r.v v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv1i64.nxv8i32.nxv1i64( @@ -796,7 +812,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_vs_nxv1i64_nxv16i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v16, v9 +; CHECK-NEXT: vwredsumu.vs v16, v8, v17 +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.nxv1i64.nxv16i32( @@ -819,7 +836,8 @@ ; CHECK-LABEL: intrinsic_vwredsumu_mask_vs_nxv1i64_nxv16i32_nxv1i64: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma -; CHECK-NEXT: vwredsumu.vs v8, v16, v9, v0.t +; CHECK-NEXT: vwredsumu.vs v16, v8, v17, v0.t +; CHECK-NEXT: vmv1r.v v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwredsumu.mask.nxv1i64.nxv16i32.nxv1i64( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwsub.w.ll b/llvm/test/CodeGen/RISCV/rvv/vwsub.w.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwsub.w.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwsub.w.ll @@ -1982,8 +1982,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; CHECK-NEXT: vwsub.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwsub.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv8i16.nxv8i8( @@ -1999,8 +1998,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwsub.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwsub.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv16i16.nxv16i8( @@ -2016,8 +2014,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwsub.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv32i16.nxv32i8( @@ -2067,8 +2064,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vwsub.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwsub.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv4i32.nxv4i16( @@ -2084,8 +2080,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwsub.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwsub.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv8i32.nxv8i16( @@ -2118,8 +2113,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vwsub.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwsub.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv2i64.nxv2i32( @@ -2135,8 +2129,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwsub.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwsub.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv4i64.nxv4i32( @@ -2152,8 +2145,7 @@ ; CHECK-LABEL: intrinsic_vwsub.w_wv_untie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwsub.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsub.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsub.w.nxv8i64.nxv8i32( diff --git a/llvm/test/CodeGen/RISCV/rvv/vwsubu.w.ll b/llvm/test/CodeGen/RISCV/rvv/vwsubu.w.ll --- a/llvm/test/CodeGen/RISCV/rvv/vwsubu.w.ll +++ b/llvm/test/CodeGen/RISCV/rvv/vwsubu.w.ll @@ -1982,8 +1982,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv8i16_nxv8i16_nxv8i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma -; CHECK-NEXT: vwsubu.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwsubu.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv8i16.nxv8i8( @@ -1999,8 +1998,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv16i16_nxv16i16_nxv16i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma -; CHECK-NEXT: vwsubu.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwsubu.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv16i16.nxv16i8( @@ -2016,8 +2014,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv32i16_nxv32i16_nxv32i8: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma -; CHECK-NEXT: vwsubu.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv32i16.nxv32i8( @@ -2067,8 +2064,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv4i32_nxv4i32_nxv4i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma -; CHECK-NEXT: vwsubu.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwsubu.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv4i32.nxv4i16( @@ -2084,8 +2080,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv8i32_nxv8i32_nxv8i16: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma -; CHECK-NEXT: vwsubu.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwsubu.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv8i32.nxv8i16( @@ -2118,8 +2113,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv2i64_nxv2i64_nxv2i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma -; CHECK-NEXT: vwsubu.wv v12, v10, v8 -; CHECK-NEXT: vmv2r.v v8, v12 +; CHECK-NEXT: vwsubu.wv v8, v8, v10 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv2i64.nxv2i32( @@ -2135,8 +2129,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv4i64_nxv4i64_nxv4i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma -; CHECK-NEXT: vwsubu.wv v16, v12, v8 -; CHECK-NEXT: vmv4r.v v8, v16 +; CHECK-NEXT: vwsubu.wv v8, v8, v12 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv4i64.nxv4i32( @@ -2152,8 +2145,7 @@ ; CHECK-LABEL: intrinsic_vwsubu.w_wv_untie_nxv8i64_nxv8i64_nxv8i32: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma -; CHECK-NEXT: vwsubu.wv v24, v16, v8 -; CHECK-NEXT: vmv8r.v v8, v24 +; CHECK-NEXT: vwsubu.wv v8, v8, v16 ; CHECK-NEXT: ret entry: %a = call @llvm.riscv.vwsubu.w.nxv8i64.nxv8i32(