From c17adabd58c2162bf6b7cc24a52740e683030b23 Mon Sep 17 00:00:00 2001 From: Matthew Devereau Date: Mon, 7 Apr 2025 08:35:09 +0000 Subject: [PATCH 1/3] [AArch64][SVE] Instcombine ptrue(all) to splat(i1) SVE Operations such as predicated loads become canonicalized to LLVM masked loads, and doing the same for ptrue(all) creates further optimization opportunities from generic LLVM IR passes. --- ...-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c | 6 +- .../AArch64/sve-intrinsics/acle_sve_rdffr.c | 6 +- .../AArch64/AArch64TargetTransformInfo.cpp | 40 +- .../AArch64/sve-intrinsic-abs-srshl.ll | 3 +- ...sve-intrinsic-comb-all-active-lanes-cvt.ll | 105 +-- .../AArch64/sve-intrinsic-loadstore.ll | 22 +- .../AArch64/sve-intrinsic-opts-cmpne.ll | 72 +-- .../AArch64/sve-intrinsic-strictfp.ll | 18 +- .../sve-intrinsics-combine-to-u-forms.ll | 605 +++++++----------- .../AArch64/sve-intrinsics-ptest.ll | 3 +- .../sve-intrinsics-rdffr-predication.ll | 3 +- 11 files changed, 353 insertions(+), 530 deletions(-) diff --git a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c index bbed683ac1fd7..c3d0541229fac 100644 --- a/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c +++ b/clang/test/CodeGen/AArch64/sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c @@ -52,9 +52,8 @@ vec2048 x2048 = {0, 1, 2, 3, 3 , 2 , 1, 0, 0, 1, 2, 3, 3 , 2 , 1, 0, typedef int8_t vec_int8 __attribute__((vector_size(N / 8))); // CHECK128-LABEL: define{{.*}} <16 x i8> @f2(<16 x i8> noundef %x) // CHECK128-NEXT: entry: -// CHECK128-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) // CHECK128-NEXT: [[CASTSCALABLESVE:%.*]] = tail call @llvm.vector.insert.nxv16i8.v16i8( poison, <16 x i8> [[X:%.*]], i64 0) -// CHECK128-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.asrd.nxv16i8( [[TMP0]], [[CASTSCALABLESVE]], i32 1) +// CHECK128-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.asrd.nxv16i8( splat (i1 true), [[CASTSCALABLESVE]], i32 1) // CHECK128-NEXT: [[CASTFIXEDSVE:%.*]] = tail call <16 x i8> @llvm.vector.extract.v16i8.nxv16i8( [[TMP1]], i64 0) // CHECK128-NEXT: ret <16 x i8> [[CASTFIXEDSVE]] @@ -62,9 +61,8 @@ typedef int8_t vec_int8 __attribute__((vector_size(N / 8))); // CHECK-SAME: ptr dead_on_unwind noalias writable writeonly sret(<[[#div(VBITS,8)]] x i8>) align 16 captures(none) initializes((0, [[#div(VBITS,8)]])) %agg.result, ptr noundef readonly captures(none) %0) // CHECK-NEXT: entry: // CHECK-NEXT: [[X:%.*]] = load <[[#div(VBITS,8)]] x i8>, ptr [[TMP0:%.*]], align 16, [[TBAA6:!tbaa !.*]] -// CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) // CHECK-NEXT: [[CASTSCALABLESVE:%.*]] = tail call @llvm.vector.insert.nxv16i8.v[[#div(VBITS,8)]]i8( poison, <[[#div(VBITS,8)]] x i8> [[X]], i64 0) -// CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.asrd.nxv16i8( [[TMP1]], [[CASTSCALABLESVE]], i32 1) +// CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.asrd.nxv16i8( splat (i1 true), [[CASTSCALABLESVE]], i32 1) // CHECK-NEXT: [[CASTFIXEDSVE:%.*]] = tail call <[[#div(VBITS,8)]] x i8> @llvm.vector.extract.v[[#div(VBITS,8)]]i8.nxv16i8( [[TMP2]], i64 0) // CHECK-NEXT: store <[[#div(VBITS,8)]] x i8> [[CASTFIXEDSVE]], ptr [[AGG_RESULT:%.*]], align 16, [[TBAA6]] // CHECK-NEXT: ret void diff --git a/clang/test/CodeGen/AArch64/sve-intrinsics/acle_sve_rdffr.c b/clang/test/CodeGen/AArch64/sve-intrinsics/acle_sve_rdffr.c index 6bf56bdea505c..ca3480d62725a 100644 --- a/clang/test/CodeGen/AArch64/sve-intrinsics/acle_sve_rdffr.c +++ b/clang/test/CodeGen/AArch64/sve-intrinsics/acle_sve_rdffr.c @@ -7,14 +7,12 @@ // CHECK-LABEL: @test_svrdffr( // CHECK-NEXT: entry: -// CHECK-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -// CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.rdffr.z( [[TMP0]]) +// CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.rdffr.z( splat (i1 true)) // CHECK-NEXT: ret [[TMP1]] // // CPP-CHECK-LABEL: @_Z12test_svrdffrv( // CPP-CHECK-NEXT: entry: -// CPP-CHECK-NEXT: [[TMP0:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.rdffr.z( [[TMP0]]) +// CPP-CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.rdffr.z( splat (i1 true)) // CPP-CHECK-NEXT: ret [[TMP1]] // svbool_t test_svrdffr() diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp index b1d8277182add..73b55a2dcb720 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -1492,9 +1492,17 @@ static bool isAllActivePredicate(Value *Pred) { if (cast(Pred->getType())->getMinNumElements() <= cast(UncastedPred->getType())->getMinNumElements()) Pred = UncastedPred; + if (match(Pred, m_Intrinsic( + m_ConstantInt()))) + return true; + + if (Value *Splat = getSplatValue(Pred)) { + auto ConstIdx = dyn_cast(Splat); + if (ConstIdx->getZExtValue() == 1) + return true; + } - return match(Pred, m_Intrinsic( - m_ConstantInt())); + return false; } // Use SVE intrinsic info to eliminate redundant operands and/or canonicalise @@ -1701,14 +1709,7 @@ static std::optional instCombineSVECmpNE(InstCombiner &IC, IntrinsicInst &II) { LLVMContext &Ctx = II.getContext(); - // Check that the predicate is all active - auto *Pg = dyn_cast(II.getArgOperand(0)); - if (!Pg || Pg->getIntrinsicID() != Intrinsic::aarch64_sve_ptrue) - return std::nullopt; - - const auto PTruePattern = - cast(Pg->getOperand(0))->getZExtValue(); - if (PTruePattern != AArch64SVEPredPattern::all) + if (!isAllActivePredicate(II.getArgOperand(0))) return std::nullopt; // Check that we have a compare of zero.. @@ -2118,8 +2119,7 @@ instCombineSVEVectorBinOp(InstCombiner &IC, IntrinsicInst &II) { auto *OpPredicate = II.getOperand(0); auto BinOpCode = intrinsicIDToBinOpCode(II.getIntrinsicID()); if (BinOpCode == Instruction::BinaryOpsEnd || - !match(OpPredicate, m_Intrinsic( - m_ConstantInt()))) + !isAllActivePredicate(OpPredicate)) return std::nullopt; auto BinOp = IC.Builder.CreateBinOpFMF( BinOpCode, II.getOperand(1), II.getOperand(2), II.getFastMathFlags()); @@ -2641,6 +2641,20 @@ static std::optional instCombineDMB(InstCombiner &IC, return std::nullopt; } +static std::optional instCombinePTrue(InstCombiner &IC, + IntrinsicInst &II) { + IRBuilder<> Builder(&II); + auto Type = cast(II.getType()); + ConstantInt *Pattern; + if (match(II.getOperand(0), m_ConstantInt(Pattern)) && + Pattern->getZExtValue() == AArch64SVEPredPattern::all) { + Value *One = ConstantInt::get(Builder.getInt1Ty(), APInt(1, 1)); + Value *SplatOne = Builder.CreateVectorSplat(Type->getElementCount(), One); + return IC.replaceInstUsesWith(II, SplatOne); + } + return std::nullopt; +} + std::optional AArch64TTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const { @@ -2744,6 +2758,8 @@ AArch64TTIImpl::instCombineIntrinsic(InstCombiner &IC, return instCombineSVEDupqLane(IC, II); case Intrinsic::aarch64_sve_insr: return instCombineSVEInsr(IC, II); + case Intrinsic::aarch64_sve_ptrue: + return instCombinePTrue(IC, II); } return std::nullopt; diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-abs-srshl.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-abs-srshl.ll index 7fb0fbdda0b5d..f71aaa289b89c 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-abs-srshl.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-abs-srshl.ll @@ -42,8 +42,7 @@ define @srshl_abs_positive_merge( %a, @srshl_abs_all_active_pred( %a, %b, %pg2) #0 { ; CHECK-LABEL: @srshl_abs_all_active_pred( -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[ABS:%.*]] = tail call @llvm.aarch64.sve.abs.nxv8i16( [[B:%.*]], [[PG]], [[A:%.*]]) +; CHECK-NEXT: [[ABS:%.*]] = tail call @llvm.aarch64.sve.abs.nxv8i16( [[B:%.*]], splat (i1 true), [[A:%.*]]) ; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.lsl.nxv8i16( [[PG2:%.*]], [[ABS]], splat (i16 2)) ; CHECK-NEXT: ret [[TMP1]] ; diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-comb-all-active-lanes-cvt.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-comb-all-active-lanes-cvt.ll index b8ea4de3d2382..1c5f7464d858a 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-comb-all-active-lanes-cvt.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-comb-all-active-lanes-cvt.ll @@ -5,8 +5,7 @@ target triple = "aarch64-unknown-linux-gnu" define @test_fcvt_bf16_f32_poison( %a, %b) { ; CHECK-LABEL: define @test_fcvt_bf16_f32_poison( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.bf16f32.v2( poison, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.bf16f32.v2( poison, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -17,8 +16,7 @@ define @test_fcvt_bf16_f32_poison( %a define @test_fcvt_bf16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvt_bf16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.bf16f32.v2( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.bf16f32.v2( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -29,8 +27,7 @@ define @test_fcvt_bf16_f32( %a, @test_fcvt_f16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f16f32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f16f32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -41,8 +38,7 @@ define @test_fcvt_f16_f32( %a, @test_fcvt_f16_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f16_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f16f64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f16f64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -53,8 +49,7 @@ define @test_fcvt_f16_f64( %a, @test_fcvt_f32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f32f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f32f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -65,8 +60,7 @@ define @test_fcvt_f32_f16( %a, @test_fcvt_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f32f64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f32f64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -77,8 +71,7 @@ define @test_fcvt_f32_f64( %a, @test_fcvt_f64_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f64_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f64f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f64f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -89,8 +82,7 @@ define @test_fcvt_f64_f16( %a, @test_fcvt_f64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvt_f64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f64f32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvt.f64f32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -101,8 +93,7 @@ define @test_fcvt_f64_f32( %a, @test_fcvtlt_f32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtlt_f32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtlt.f32f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtlt.f32f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -113,8 +104,7 @@ define @test_fcvtlt_f32_f16( %a, @test_fcvtlt_f64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtlt_f64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtlt.f64f32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtlt.f64f32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -125,8 +115,7 @@ define @test_fcvtlt_f64_f32( %a, @test_fcvtnt_bf16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtnt_bf16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtnt.bf16f32.v2( [[A]], [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtnt.bf16f32.v2( [[A]], splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -137,8 +126,7 @@ define @test_fcvtnt_bf16_f32( %a, @test_fcvtnt_f16_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtnt_f16_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtnt.f16f32( [[A]], [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtnt.f16f32( [[A]], splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -149,8 +137,7 @@ define @test_fcvtnt_f16_f32( %a, @test_fcvtnt_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtnt_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtnt.f32f64( [[A]], [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtnt.f32f64( [[A]], splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -161,8 +148,7 @@ define @test_fcvtnt_f32_f64( %a, @test_fcvtx_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtx_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtx.f32f64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtx.f32f64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -173,8 +159,7 @@ define @test_fcvtx_f32_f64( %a, @test_fcvtxnt_f32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtxnt_f32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtxnt.f32f64( [[A]], [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtxnt.f32f64( [[A]], splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -185,8 +170,7 @@ define @test_fcvtxnt_f32_f64( %a, @test_fcvtzs( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.nxv8i16.nxv8f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -197,8 +181,7 @@ define @test_fcvtzs( %a, @test_fcvtzs_i32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i32f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i32f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -209,8 +192,7 @@ define @test_fcvtzs_i32_f16( %a, @test_fcvtzs_i32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i32f64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i32f64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -221,8 +203,7 @@ define @test_fcvtzs_i32_f64( %a, @test_fcvtzs_i64_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i64_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i64f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i64f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -233,8 +214,7 @@ define @test_fcvtzs_i64_f16( %a, @test_fcvtzs_i64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtzs_i64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i64f32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzs.i64f32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -245,8 +225,7 @@ define @test_fcvtzs_i64_f32( %a, @test_fcvtzu( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.nxv8i16.nxv8f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -257,8 +236,7 @@ define @test_fcvtzu( %a, @test_fcvtzu_i32_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i32_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i32f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i32f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -269,8 +247,7 @@ define @test_fcvtzu_i32_f16( %a, @test_fcvtzu_i32_f64( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i32_f64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i32f64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i32f64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -281,8 +258,7 @@ define @test_fcvtzu_i32_f64( %a, @test_fcvtzu_i64_f16( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i64_f16( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i64f16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i64f16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -293,8 +269,7 @@ define @test_fcvtzu_i64_f16( %a, @test_fcvtzu_i64_f32( %a, %b) { ; CHECK-LABEL: define @test_fcvtzu_i64_f32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i64f32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.fcvtzu.i64f32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -305,8 +280,7 @@ define @test_fcvtzu_i64_f32( %a, @test_scvtf( %a, %b) { ; CHECK-LABEL: define @test_scvtf( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.nxv8f16.nxv8i16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -317,8 +291,7 @@ define @test_scvtf( %a, @test_scvtf_f16_i32( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f16_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f16i32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f16i32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -329,8 +302,7 @@ define @test_scvtf_f16_i32( %a, @test_scvtf_f16_i64( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f16_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f16i64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f16i64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -341,8 +313,7 @@ define @test_scvtf_f16_i64( %a, @test_scvtf_f32_i64( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f32_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f32i64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f32i64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -353,8 +324,7 @@ define @test_scvtf_f32_i64( %a, @test_scvtf_f64_i32( %a, %b) { ; CHECK-LABEL: define @test_scvtf_f64_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f64i32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.scvtf.f64i32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -365,8 +335,7 @@ define @test_scvtf_f64_i32( %a, @test_ucvtf( %a, %b) { ; CHECK-LABEL: define @test_ucvtf( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.nxv8f16.nxv8i16( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -377,8 +346,7 @@ define @test_ucvtf( %a, @test_ucvtf_f16_i32( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f16_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f16i32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f16i32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -389,8 +357,7 @@ define @test_ucvtf_f16_i32( %a, @test_ucvtf_f16_i64( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f16_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f16i64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f16i64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -401,8 +368,7 @@ define @test_ucvtf_f16_i64( %a, @test_ucvtf_f32_i64( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f32_i64( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f32i64( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f32i64( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -413,8 +379,7 @@ define @test_ucvtf_f32_i64( %a, @test_ucvtf_f64_i32( %a, %b) { ; CHECK-LABEL: define @test_ucvtf_f64_i32( ; CHECK-SAME: [[A:%.*]], [[B:%.*]]) { -; CHECK-NEXT: [[PG:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f64i32( undef, [[PG]], [[B]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.ucvtf.f64i32( undef, splat (i1 true), [[B]]) ; CHECK-NEXT: ret [[OUT]] ; %pg = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-loadstore.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-loadstore.ll index c67662f872503..d8d6740298536 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-loadstore.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-loadstore.ll @@ -5,7 +5,7 @@ target triple = "aarch64-unknown-linux-gnu" define @combine_ld1(ptr %ptr) #0 { ; CHECK-LABEL: @combine_ld1( -; CHECK-NEXT: [[TMP2:%.*]] = load , ptr [[PTR:%.*]], align 16, !annotation !0 +; CHECK-NEXT: [[TMP2:%.*]] = load , ptr [[PTR:%.*]], align 16, !annotation [[META0:![0-9]+]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -15,7 +15,7 @@ define @combine_ld1(ptr %ptr) #0 { define @combine_ld1_casted_predicate(ptr %ptr) #0 { ; CHECK-LABEL: @combine_ld1_casted_predicate( -; CHECK-NEXT: [[TMP2:%.*]] = load , ptr [[PTR:%.*]], align 16, !annotation !0 +; CHECK-NEXT: [[TMP2:%.*]] = load , ptr [[PTR:%.*]], align 16, !annotation [[META0]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -28,7 +28,7 @@ define @combine_ld1_casted_predicate(ptr %ptr) #0 { define @combine_ld1_masked(ptr %ptr) #0 { ; CHECK-LABEL: @combine_ld1_masked( ; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 16) -; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.masked.load.nxv4i32.p0(ptr [[PTR:%.*]], i32 1, [[TMP1]], zeroinitializer), !annotation !0 +; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.masked.load.nxv4i32.p0(ptr [[PTR:%.*]], i32 1, [[TMP1]], zeroinitializer), !annotation [[META0]] ; CHECK-NEXT: ret [[TMP3]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 16) @@ -38,10 +38,9 @@ define @combine_ld1_masked(ptr %ptr) #0 { define @combine_ld1_masked_casted_predicate(ptr %ptr) #0 { ; CHECK-LABEL: @combine_ld1_masked_casted_predicate( -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( [[TMP1]]) +; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( splat (i1 true)) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[TMP2]]) -; CHECK-NEXT: [[TMP5:%.*]] = call @llvm.masked.load.nxv8i16.p0(ptr [[PTR:%.*]], i32 1, [[TMP3]], zeroinitializer), !annotation !0 +; CHECK-NEXT: [[TMP5:%.*]] = call @llvm.masked.load.nxv8i16.p0(ptr [[PTR:%.*]], i32 1, [[TMP3]], zeroinitializer), !annotation [[META0]] ; CHECK-NEXT: ret [[TMP5]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -53,7 +52,7 @@ define @combine_ld1_masked_casted_predicate(ptr %ptr) #0 { define void @combine_st1( %vec, ptr %ptr) #0 { ; CHECK-LABEL: @combine_st1( -; CHECK-NEXT: store [[VEC:%.*]], ptr [[PTR:%.*]], align 16, !annotation !0 +; CHECK-NEXT: store [[VEC:%.*]], ptr [[PTR:%.*]], align 16, !annotation [[META0]] ; CHECK-NEXT: ret void ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -63,7 +62,7 @@ define void @combine_st1( %vec, ptr %ptr) #0 { define void @combine_st1_casted_predicate( %vec, ptr %ptr) #0 { ; CHECK-LABEL: @combine_st1_casted_predicate( -; CHECK-NEXT: store [[VEC:%.*]], ptr [[PTR:%.*]], align 16, !annotation !0 +; CHECK-NEXT: store [[VEC:%.*]], ptr [[PTR:%.*]], align 16, !annotation [[META0]] ; CHECK-NEXT: ret void ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -76,7 +75,7 @@ define void @combine_st1_casted_predicate( %vec, ptr %ptr) #0 define void @combine_st1_masked( %vec, ptr %ptr) #0 { ; CHECK-LABEL: @combine_st1_masked( ; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 16) -; CHECK-NEXT: call void @llvm.masked.store.nxv4i32.p0( [[VEC:%.*]], ptr [[PTR:%.*]], i32 1, [[TMP1]]), !annotation !0 +; CHECK-NEXT: call void @llvm.masked.store.nxv4i32.p0( [[VEC:%.*]], ptr [[PTR:%.*]], i32 1, [[TMP1]]), !annotation [[META0]] ; CHECK-NEXT: ret void ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 16) @@ -86,10 +85,9 @@ define void @combine_st1_masked( %vec, ptr %ptr) #0 { define void @combine_st1_masked_casted_predicate( %vec, ptr %ptr) #0 { ; CHECK-LABEL: @combine_st1_masked_casted_predicate( -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( [[TMP1]]) +; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( splat (i1 true)) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[TMP2]]) -; CHECK-NEXT: call void @llvm.masked.store.nxv8i16.p0( [[VEC:%.*]], ptr [[PTR:%.*]], i32 1, [[TMP3]]), !annotation !0 +; CHECK-NEXT: call void @llvm.masked.store.nxv8i16.p0( [[VEC:%.*]], ptr [[PTR:%.*]], i32 1, [[TMP3]]), !annotation [[META0]] ; CHECK-NEXT: ret void ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-cmpne.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-cmpne.ll index 6a2c0f8689ca4..93de2e7316065 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-cmpne.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-opts-cmpne.ll @@ -22,8 +22,7 @@ define @dupq_b_0() #0 { define @dupq_b_d() #0 { ; CHECK-LABEL: define @dupq_b_d( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( [[TMP1]]) +; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( splat (i1 true)) ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) @@ -38,8 +37,7 @@ define @dupq_b_d() #0 { define @dupq_b_w() #0 { ; CHECK-LABEL: define @dupq_b_w( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( [[TMP1]]) +; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( splat (i1 true)) ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) @@ -54,8 +52,7 @@ define @dupq_b_w() #0 { define @dupq_b_h() #0 { ; CHECK-LABEL: define @dupq_b_h( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv8i1( [[TMP1]]) +; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv8i1( splat (i1 true)) ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) @@ -70,8 +67,7 @@ define @dupq_b_h() #0 { define @dupq_b_b() #0 { ; CHECK-LABEL: define @dupq_b_b( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: ret [[TMP1]] +; CHECK-NEXT: ret splat (i1 true) ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.vector.insert.nxv16i8.v16i8( poison, @@ -101,9 +97,8 @@ define @dupq_h_0() #0 { define @dupq_h_d() #0 { ; CHECK-LABEL: define @dupq_h_d( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( [[TMP1]]) -; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[TMP2]]) +; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( splat (i1 true)) +; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[TMP1]]) ; CHECK-NEXT: ret [[TMP3]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -118,9 +113,8 @@ define @dupq_h_d() #0 { define @dupq_h_w() #0 { ; CHECK-LABEL: define @dupq_h_w( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( [[TMP1]]) -; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[TMP2]]) +; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( splat (i1 true)) +; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv8i1( [[TMP1]]) ; CHECK-NEXT: ret [[TMP3]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) @@ -135,8 +129,7 @@ define @dupq_h_w() #0 { define @dupq_h_h() #0 { ; CHECK-LABEL: define @dupq_h_h( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: ret [[TMP1]] +; CHECK-NEXT: ret splat (i1 true) ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.vector.insert.nxv8i16.v8i16( poison, @@ -166,9 +159,8 @@ define @dupq_w_0() #0 { define @dupq_w_d() #0 { ; CHECK-LABEL: define @dupq_w_d( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( [[TMP1]]) -; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[TMP2]]) +; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( splat (i1 true)) +; CHECK-NEXT: [[TMP3:%.*]] = call @llvm.aarch64.sve.convert.from.svbool.nxv4i1( [[TMP1]]) ; CHECK-NEXT: ret [[TMP3]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -183,8 +175,7 @@ define @dupq_w_d() #0 { define @dupq_w_w() #0 { ; CHECK-LABEL: define @dupq_w_w( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: ret [[TMP1]] +; CHECK-NEXT: ret splat (i1 true) ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.vector.insert.nxv4i32.v4i32( poison, @@ -214,8 +205,7 @@ define @dupq_d_0() #0 { define @dupq_d_d() #0 { ; CHECK-LABEL: define @dupq_d_d( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: ret [[TMP1]] +; CHECK-NEXT: ret splat (i1 true) ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.vector.insert.nxv2i64.v2i64( poison, @@ -231,10 +221,9 @@ define @dupq_d_d() #0 { define @dupq_neg1() #0 { ; CHECK-LABEL: define @dupq_neg1( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv2i64.v2i64( poison, <2 x i64> , i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv2i64( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -249,10 +238,9 @@ define @dupq_neg1() #0 { define @dupq_neg2() #0 { ; CHECK-LABEL: define @dupq_neg2( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv4i32.v4i32( poison, <4 x i32> , i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv4i32( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -267,10 +255,9 @@ define @dupq_neg2() #0 { define @dupq_neg3() #0 { ; CHECK-LABEL: define @dupq_neg3( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv4i32.v4i32( poison, <4 x i32> , i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv4i32( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -285,10 +272,9 @@ define @dupq_neg3() #0 { define @dupq_neg4() #0 { ; CHECK-LABEL: define @dupq_neg4( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv4i32.v4i32( poison, <4 x i32> , i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv4i32( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -303,10 +289,9 @@ define @dupq_neg4() #0 { define @dupq_neg5() #0 { ; CHECK-LABEL: define @dupq_neg5( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv4i32.v4i32( poison, <4 x i32> , i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv4i32( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -321,12 +306,11 @@ define @dupq_neg5() #0 { define @dupq_neg6(i1 %a) #0 { ; CHECK-LABEL: define @dupq_neg6( ; CHECK-SAME: i1 [[A:%.*]]) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = zext i1 [[A]] to i32 ; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x i32> , i32 [[TMP2]], i64 3 ; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.vector.insert.nxv4i32.v4i32( poison, <4 x i32> [[TMP3]], i64 0) ; CHECK-NEXT: [[TMP5:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv4i32( [[TMP4]], i64 0) -; CHECK-NEXT: [[TMP6:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( [[TMP1]], [[TMP5]], zeroinitializer) +; CHECK-NEXT: [[TMP6:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv4i32( splat (i1 true), [[TMP5]], zeroinitializer) ; CHECK-NEXT: ret [[TMP6]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) @@ -342,10 +326,9 @@ define @dupq_neg6(i1 %a) #0 { define @dupq_neg7() #0 { ; CHECK-LABEL: define @dupq_neg7( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv2i64.v2i64( poison, <2 x i64> splat (i64 1), i64 2) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv2i64( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -360,10 +343,9 @@ define @dupq_neg7() #0 { define @dupq_neg8() #0 { ; CHECK-LABEL: define @dupq_neg8( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv2i64.v2i64( poison, <2 x i64> splat (i64 1), i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv2i64( [[TMP2]], i64 1) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -378,10 +360,9 @@ define @dupq_neg8() #0 { define @dupq_neg9( %x) #0 { ; CHECK-LABEL: define @dupq_neg9( ; CHECK-SAME: [[X:%.*]]) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv2i64.v2i64( [[X]], <2 x i64> splat (i64 1), i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv2i64( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -396,10 +377,9 @@ define @dupq_neg9( %x) #0 { define @dupq_neg10() #0 { ; CHECK-LABEL: define @dupq_neg10( ; CHECK-SAME: ) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv2i64.v2i64( poison, <2 x i64> splat (i64 1), i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv2i64( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( [[TMP1]], [[TMP3]], splat (i64 1)) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( splat (i1 true), [[TMP3]], splat (i64 1)) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -448,10 +428,9 @@ define @dupq_neg12() #0 { define @dupq_neg13( %x) #0 { ; CHECK-LABEL: define @dupq_neg13( ; CHECK-SAME: [[X:%.*]]) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv2i64.v2i64( poison, <2 x i64> splat (i64 1), i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv2i64( [[TMP2]], i64 0) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( [[TMP1]], [[TMP3]], [[X]]) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.nxv2i64( splat (i1 true), [[TMP3]], [[X]]) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) @@ -465,10 +444,9 @@ define @dupq_neg13( %x) #0 { define @dupq_b_idx(i64 %idx) #0 { ; CHECK-LABEL: define @dupq_b_idx( ; CHECK-SAME: i64 [[IDX:%.*]]) #[[ATTR0]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.vector.insert.nxv16i8.v16i8( poison, <16 x i8> zeroinitializer, i64 0) ; CHECK-NEXT: [[TMP3:%.*]] = tail call @llvm.aarch64.sve.dupq.lane.nxv16i8( [[TMP2]], i64 [[IDX]]) -; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv16i8( [[TMP1]], [[TMP3]], zeroinitializer) +; CHECK-NEXT: [[TMP4:%.*]] = tail call @llvm.aarch64.sve.cmpne.wide.nxv16i8( splat (i1 true), [[TMP3]], zeroinitializer) ; CHECK-NEXT: ret [[TMP4]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-strictfp.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-strictfp.ll index f6f60d6d64e72..690bcd3dc0337 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-strictfp.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsic-strictfp.ll @@ -8,8 +8,7 @@ target triple = "aarch64-unknown-linux-gnu" define @replace_fadd_intrinsic_double_strictfp( %a, %b) #0 { ; CHECK: Function Attrs: strictfp ; CHECK-LABEL: @replace_fadd_intrinsic_double_strictfp( -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #[[ATTR2:[0-9]+]] -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.fadd.u.nxv2f64( [[TMP1]], [[A:%.*]], [[B:%.*]]) #[[ATTR2]] +; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.fadd.u.nxv2f64( splat (i1 true), [[A:%.*]], [[B:%.*]]) #[[ATTR2:[0-9]+]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #1 @@ -22,8 +21,7 @@ define @replace_fadd_intrinsic_double_strictfp( @call_replace_fadd_intrinsic_double_strictfp( %a, %b) #0 { ; CHECK: Function Attrs: strictfp ; CHECK-LABEL: @call_replace_fadd_intrinsic_double_strictfp( -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #[[ATTR2]] -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.fadd.u.nxv2f64( [[TMP1]], [[A:%.*]], [[B:%.*]]) #[[ATTR2]] +; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.fadd.u.nxv2f64( splat (i1 true), [[A:%.*]], [[B:%.*]]) #[[ATTR2]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = call @replace_fadd_intrinsic_double_strictfp( %a, %b) #1 @@ -35,8 +33,7 @@ define @call_replace_fadd_intrinsic_double_strictfp( @replace_fmul_intrinsic_double_strictfp( %a, %b) #0 { ; CHECK: Function Attrs: strictfp ; CHECK-LABEL: @replace_fmul_intrinsic_double_strictfp( -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #[[ATTR2]] -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.fmul.u.nxv2f64( [[TMP1]], [[A:%.*]], [[B:%.*]]) #[[ATTR2]] +; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.fmul.u.nxv2f64( splat (i1 true), [[A:%.*]], [[B:%.*]]) #[[ATTR2]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #1 @@ -49,8 +46,7 @@ define @replace_fmul_intrinsic_double_strictfp( @call_replace_fmul_intrinsic_double_strictfp( %a, %b) #0 { ; CHECK: Function Attrs: strictfp ; CHECK-LABEL: @call_replace_fmul_intrinsic_double_strictfp( -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #[[ATTR2]] -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.fmul.u.nxv2f64( [[TMP1]], [[A:%.*]], [[B:%.*]]) #[[ATTR2]] +; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.fmul.u.nxv2f64( splat (i1 true), [[A:%.*]], [[B:%.*]]) #[[ATTR2]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = call @replace_fmul_intrinsic_double_strictfp( %a, %b) #1 @@ -62,8 +58,7 @@ define @call_replace_fmul_intrinsic_double_strictfp( @replace_fsub_intrinsic_double_strictfp( %a, %b) #0 { ; CHECK: Function Attrs: strictfp ; CHECK-LABEL: @replace_fsub_intrinsic_double_strictfp( -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #[[ATTR2]] -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.fsub.u.nxv2f64( [[TMP1]], [[A:%.*]], [[B:%.*]]) #[[ATTR2]] +; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.fsub.u.nxv2f64( splat (i1 true), [[A:%.*]], [[B:%.*]]) #[[ATTR2]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #1 @@ -76,8 +71,7 @@ define @replace_fsub_intrinsic_double_strictfp( @call_replace_fsub_intrinsic_double_strictfp( %a, %b) #0 { ; CHECK: Function Attrs: strictfp ; CHECK-LABEL: @call_replace_fsub_intrinsic_double_strictfp( -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) #[[ATTR2]] -; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.fsub.u.nxv2f64( [[TMP1]], [[A:%.*]], [[B:%.*]]) #[[ATTR2]] +; CHECK-NEXT: [[TMP2:%.*]] = call @llvm.aarch64.sve.fsub.u.nxv2f64( splat (i1 true), [[A:%.*]], [[B:%.*]]) #[[ATTR2]] ; CHECK-NEXT: ret [[TMP2]] ; %1 = call @replace_fsub_intrinsic_double_strictfp( %a, %b) #1 diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-combine-to-u-forms.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-combine-to-u-forms.ll index 60b2efe27168c..bbf4b3c65c30a 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-combine-to-u-forms.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-combine-to-u-forms.ll @@ -16,9 +16,8 @@ declare @llvm.aarch64.sve.fabd.nxv8f16(, @replace_fabd_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fabd_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1:[0-9]+]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fabd.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fabd.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fabd.nxv8f16( %1, %a, %b) @@ -29,9 +28,8 @@ declare @llvm.aarch64.sve.fabd.nxv4f32(, < define @replace_fabd_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fabd_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fabd.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fabd.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fabd.nxv4f32( %1, %a, %b) @@ -42,9 +40,8 @@ declare @llvm.aarch64.sve.fabd.nxv2f64(, define @replace_fabd_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fabd_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fabd.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fabd.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fabd.nxv2f64( %1, %a, %b) @@ -117,9 +114,8 @@ declare @llvm.aarch64.sve.fdiv.nxv8f16(, @replace_fdiv_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fdiv_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fdiv.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fdiv.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fdiv.nxv8f16( %1, %a, %b) @@ -130,9 +126,8 @@ declare @llvm.aarch64.sve.fdiv.nxv4f32(, < define @replace_fdiv_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fdiv_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fdiv.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fdiv.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fdiv.nxv4f32( %1, %a, %b) @@ -143,9 +138,8 @@ declare @llvm.aarch64.sve.fdiv.nxv2f64(, define @replace_fdiv_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fdiv_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fdiv.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fdiv.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fdiv.nxv2f64( %1, %a, %b) @@ -168,9 +162,8 @@ declare @llvm.aarch64.sve.fmax.nxv8f16(, @replace_fmax_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmax_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmax.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmax.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmax.nxv8f16( %1, %a, %b) @@ -181,9 +174,8 @@ declare @llvm.aarch64.sve.fmax.nxv4f32(, < define @replace_fmax_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmax_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmax.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmax.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmax.nxv4f32( %1, %a, %b) @@ -194,9 +186,8 @@ declare @llvm.aarch64.sve.fmax.nxv2f64(, define @replace_fmax_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmax_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmax.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmax.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmax.nxv2f64( %1, %a, %b) @@ -219,9 +210,8 @@ declare @llvm.aarch64.sve.fmaxnm.nxv8f16(, define @replace_fmaxnm_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmaxnm_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnm.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnm.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmaxnm.nxv8f16( %1, %a, %b) @@ -232,9 +222,8 @@ declare @llvm.aarch64.sve.fmaxnm.nxv4f32(, define @replace_fmaxnm_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmaxnm_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnm.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnm.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmaxnm.nxv4f32( %1, %a, %b) @@ -245,9 +234,8 @@ declare @llvm.aarch64.sve.fmaxnm.nxv2f64( define @replace_fmaxnm_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmaxnm_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnm.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmaxnm.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmaxnm.nxv2f64( %1, %a, %b) @@ -270,9 +258,8 @@ declare @llvm.aarch64.sve.fmin.nxv8f16(, @replace_fmin_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmin_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmin.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmin.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmin.nxv8f16( %1, %a, %b) @@ -283,9 +270,8 @@ declare @llvm.aarch64.sve.fmin.nxv4f32(, < define @replace_fmin_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmin_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmin.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmin.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmin.nxv4f32( %1, %a, %b) @@ -296,9 +282,8 @@ declare @llvm.aarch64.sve.fmin.nxv2f64(, define @replace_fmin_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmin_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmin.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmin.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmin.nxv2f64( %1, %a, %b) @@ -321,9 +306,8 @@ declare @llvm.aarch64.sve.fminnm.nxv8f16(, define @replace_fminnm_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fminnm_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fminnm.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fminnm.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fminnm.nxv8f16( %1, %a, %b) @@ -334,9 +318,8 @@ declare @llvm.aarch64.sve.fminnm.nxv4f32(, define @replace_fminnm_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fminnm_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fminnm.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fminnm.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fminnm.nxv4f32( %1, %a, %b) @@ -347,9 +330,8 @@ declare @llvm.aarch64.sve.fminnm.nxv2f64( define @replace_fminnm_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fminnm_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fminnm.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fminnm.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fminnm.nxv2f64( %1, %a, %b) @@ -372,9 +354,8 @@ declare @llvm.aarch64.sve.fmla.nxv8f16(, @replace_fmla_intrinsic_half( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fmla_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmla.u.nxv8f16( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmla.u.nxv8f16( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmla.nxv8f16( %1, %a, %b, %c) @@ -385,9 +366,8 @@ declare @llvm.aarch64.sve.fmla.nxv4f32(, < define @replace_fmla_intrinsic_float( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fmla_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmla.u.nxv4f32( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmla.u.nxv4f32( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmla.nxv4f32( %1, %a, %b, %c) @@ -398,9 +378,8 @@ declare @llvm.aarch64.sve.fmla.nxv2f64(, define @replace_fmla_intrinsic_double( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fmla_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmla.u.nxv2f64( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmla.u.nxv2f64( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmla.nxv2f64( %1, %a, %b, %c) @@ -423,9 +402,8 @@ declare @llvm.aarch64.sve.fmls.nxv8f16(, @replace_fmls_intrinsic_half( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fmls_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmls.u.nxv8f16( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmls.u.nxv8f16( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmls.nxv8f16( %1, %a, %b, %c) @@ -436,9 +414,8 @@ declare @llvm.aarch64.sve.fmls.nxv4f32(, < define @replace_fmls_intrinsic_float( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fmls_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmls.u.nxv4f32( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmls.u.nxv4f32( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmls.nxv4f32( %1, %a, %b, %c) @@ -449,9 +426,8 @@ declare @llvm.aarch64.sve.fmls.nxv2f64(, define @replace_fmls_intrinsic_double( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fmls_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmls.u.nxv2f64( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmls.u.nxv2f64( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmls.nxv2f64( %1, %a, %b, %c) @@ -524,9 +500,8 @@ declare @llvm.aarch64.sve.fmulx.nxv8f16(, < define @replace_fmulx_intrinsic_half( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmulx_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmulx.u.nxv8f16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmulx.u.nxv8f16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmulx.nxv8f16( %1, %a, %b) @@ -537,9 +512,8 @@ declare @llvm.aarch64.sve.fmulx.nxv4f32(, define @replace_fmulx_intrinsic_float( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmulx_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmulx.u.nxv4f32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmulx.u.nxv4f32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmulx.nxv4f32( %1, %a, %b) @@ -550,9 +524,8 @@ declare @llvm.aarch64.sve.fmulx.nxv2f64(, define @replace_fmulx_intrinsic_double( %a, %b) #0 { ; CHECK-LABEL: define @replace_fmulx_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fmulx.u.nxv2f64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fmulx.u.nxv2f64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fmulx.nxv2f64( %1, %a, %b) @@ -575,9 +548,8 @@ declare @llvm.aarch64.sve.fnmla.nxv8f16(, < define @replace_fnmla_intrinsic_half( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fnmla_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fnmla.u.nxv8f16( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fnmla.u.nxv8f16( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fnmla.nxv8f16( %1, %a, %b, %c) @@ -588,9 +560,8 @@ declare @llvm.aarch64.sve.fnmla.nxv4f32(, define @replace_fnmla_intrinsic_float( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fnmla_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fnmla.u.nxv4f32( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fnmla.u.nxv4f32( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fnmla.nxv4f32( %1, %a, %b, %c) @@ -601,9 +572,8 @@ declare @llvm.aarch64.sve.fnmla.nxv2f64(, define @replace_fnmla_intrinsic_double( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fnmla_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fnmla.u.nxv2f64( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fnmla.u.nxv2f64( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fnmla.nxv2f64( %1, %a, %b, %c) @@ -626,9 +596,8 @@ declare @llvm.aarch64.sve.fnmls.nxv8f16(, < define @replace_fnmls_intrinsic_half( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fnmls_intrinsic_half ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fnmls.u.nxv8f16( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fnmls.u.nxv8f16( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fnmls.nxv8f16( %1, %a, %b, %c) @@ -639,9 +608,8 @@ declare @llvm.aarch64.sve.fnmls.nxv4f32(, define @replace_fnmls_intrinsic_float( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fnmls_intrinsic_float ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fnmls.u.nxv4f32( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fnmls.u.nxv4f32( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fnmls.nxv4f32( %1, %a, %b, %c) @@ -652,9 +620,8 @@ declare @llvm.aarch64.sve.fnmls.nxv2f64(, define @replace_fnmls_intrinsic_double( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_fnmls_intrinsic_double ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call fast @llvm.aarch64.sve.fnmls.u.nxv2f64( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call fast @llvm.aarch64.sve.fnmls.u.nxv2f64( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call fast @llvm.aarch64.sve.fnmls.nxv2f64( %1, %a, %b, %c) @@ -729,9 +696,8 @@ declare @llvm.aarch64.sve.add.nxv16i8(, @replace_add_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_add_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.add.nxv16i8( %1, %a, %b) @@ -742,9 +708,8 @@ declare @llvm.aarch64.sve.add.nxv8i16(, @replace_add_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_add_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.add.nxv8i16( %1, %a, %b) @@ -755,9 +720,8 @@ declare @llvm.aarch64.sve.add.nxv4i32(, @replace_add_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_add_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.add.nxv4i32( %1, %a, %b) @@ -768,9 +732,8 @@ declare @llvm.aarch64.sve.add.nxv2i64(, @replace_add_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_add_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.add.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.add.nxv2i64( %1, %a, %b) @@ -793,9 +756,8 @@ declare @llvm.aarch64.sve.mla.nxv16i8(, @replace_mla_intrinsic_i8( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mla_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv16i8( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv16i8( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.mla.nxv16i8( %1, %a, %b, %c) @@ -806,9 +768,8 @@ declare @llvm.aarch64.sve.mla.nxv8i16(, @replace_mla_intrinsic_i16( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mla_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv8i16( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv8i16( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.mla.nxv8i16( %1, %a, %b, %c) @@ -819,9 +780,8 @@ declare @llvm.aarch64.sve.mla.nxv4i32(, @replace_mla_intrinsic_i32( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mla_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv4i32( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv4i32( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.mla.nxv4i32( %1, %a, %b, %c) @@ -832,9 +792,8 @@ declare @llvm.aarch64.sve.mla.nxv2i64(, @replace_mla_intrinsic_i64( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mla_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv2i64( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mla.u.nxv2i64( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.mla.nxv2i64( %1, %a, %b, %c) @@ -857,9 +816,8 @@ declare @llvm.aarch64.sve.mls.nxv16i8(, @replace_mls_intrinsic_i8( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mls_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv16i8( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv16i8( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.mls.nxv16i8( %1, %a, %b, %c) @@ -870,9 +828,8 @@ declare @llvm.aarch64.sve.mls.nxv8i16(, @replace_mls_intrinsic_i16( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mls_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv8i16( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv8i16( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.mls.nxv8i16( %1, %a, %b, %c) @@ -883,9 +840,8 @@ declare @llvm.aarch64.sve.mls.nxv4i32(, @replace_mls_intrinsic_i32( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mls_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv4i32( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv4i32( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.mls.nxv4i32( %1, %a, %b, %c) @@ -896,9 +852,8 @@ declare @llvm.aarch64.sve.mls.nxv2i64(, @replace_mls_intrinsic_i64( %a, %b, %c) #0 { ; CHECK-LABEL: define @replace_mls_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]], [[C:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv2i64( [[TMP1]], [[A]], [[B]], [[C]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mls.u.nxv2i64( splat (i1 true), [[A]], [[B]], [[C]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.mls.nxv2i64( %1, %a, %b, %c) @@ -921,9 +876,8 @@ declare @llvm.aarch64.sve.mul.nxv16i8(, @replace_mul_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_mul_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.mul.nxv16i8( %1, %a, %b) @@ -934,9 +888,8 @@ declare @llvm.aarch64.sve.mul.nxv8i16(, @replace_mul_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_mul_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.mul.nxv8i16( %1, %a, %b) @@ -947,9 +900,8 @@ declare @llvm.aarch64.sve.mul.nxv4i32(, @replace_mul_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_mul_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.mul.nxv4i32( %1, %a, %b) @@ -960,9 +912,8 @@ declare @llvm.aarch64.sve.mul.nxv2i64(, @replace_mul_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_mul_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.mul.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.mul.nxv2i64( %1, %a, %b) @@ -985,9 +936,8 @@ declare @llvm.aarch64.sve.sabd.nxv16i8(, @replace_sabd_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_sabd_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.sabd.nxv16i8( %1, %a, %b) @@ -998,9 +948,8 @@ declare @llvm.aarch64.sve.sabd.nxv8i16(, @replace_sabd_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_sabd_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.sabd.nxv8i16( %1, %a, %b) @@ -1011,9 +960,8 @@ declare @llvm.aarch64.sve.sabd.nxv4i32(, @replace_sabd_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_sabd_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.sabd.nxv4i32( %1, %a, %b) @@ -1024,9 +972,8 @@ declare @llvm.aarch64.sve.sabd.nxv2i64(, @replace_sabd_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_sabd_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sabd.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.sabd.nxv2i64( %1, %a, %b) @@ -1049,9 +996,8 @@ declare @llvm.aarch64.sve.smax.nxv16i8(, @replace_smax_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_smax_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.smax.nxv16i8( %1, %a, %b) @@ -1062,9 +1008,8 @@ declare @llvm.aarch64.sve.smax.nxv8i16(, @replace_smax_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_smax_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.smax.nxv8i16( %1, %a, %b) @@ -1075,9 +1020,8 @@ declare @llvm.aarch64.sve.smax.nxv4i32(, @replace_smax_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_smax_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.smax.nxv4i32( %1, %a, %b) @@ -1088,9 +1032,8 @@ declare @llvm.aarch64.sve.smax.nxv2i64(, @replace_smax_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_smax_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smax.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.smax.nxv2i64( %1, %a, %b) @@ -1113,9 +1056,8 @@ declare @llvm.aarch64.sve.smin.nxv16i8(, @replace_smin_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_smin_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.smin.nxv16i8( %1, %a, %b) @@ -1126,9 +1068,8 @@ declare @llvm.aarch64.sve.smin.nxv8i16(, @replace_smin_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_smin_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.smin.nxv8i16( %1, %a, %b) @@ -1139,9 +1080,8 @@ declare @llvm.aarch64.sve.smin.nxv4i32(, @replace_smin_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_smin_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.smin.nxv4i32( %1, %a, %b) @@ -1152,9 +1092,8 @@ declare @llvm.aarch64.sve.smin.nxv2i64(, @replace_smin_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_smin_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smin.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.smin.nxv2i64( %1, %a, %b) @@ -1177,9 +1116,8 @@ declare @llvm.aarch64.sve.smulh.nxv16i8(, < define @replace_smulh_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_smulh_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.smulh.nxv16i8( %1, %a, %b) @@ -1190,9 +1128,8 @@ declare @llvm.aarch64.sve.smulh.nxv8i16(, @replace_smulh_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_smulh_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.smulh.nxv8i16( %1, %a, %b) @@ -1203,9 +1140,8 @@ declare @llvm.aarch64.sve.smulh.nxv4i32(, @replace_smulh_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_smulh_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.smulh.nxv4i32( %1, %a, %b) @@ -1216,9 +1152,8 @@ declare @llvm.aarch64.sve.smulh.nxv2i64(, @replace_smulh_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_smulh_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.smulh.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.smulh.nxv2i64( %1, %a, %b) @@ -1241,9 +1176,8 @@ declare @llvm.aarch64.sve.sub.nxv16i8(, @replace_sub_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_sub_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.sub.nxv16i8( %1, %a, %b) @@ -1254,9 +1188,8 @@ declare @llvm.aarch64.sve.sub.nxv8i16(, @replace_sub_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_sub_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.sub.nxv8i16( %1, %a, %b) @@ -1267,9 +1200,8 @@ declare @llvm.aarch64.sve.sub.nxv4i32(, @replace_sub_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_sub_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.sub.nxv4i32( %1, %a, %b) @@ -1280,9 +1212,8 @@ declare @llvm.aarch64.sve.sub.nxv2i64(, @replace_sub_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_sub_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sub.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.sub.nxv2i64( %1, %a, %b) @@ -1305,9 +1236,8 @@ declare @llvm.aarch64.sve.uabd.nxv16i8(, @replace_uabd_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_uabd_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.uabd.nxv16i8( %1, %a, %b) @@ -1318,9 +1248,8 @@ declare @llvm.aarch64.sve.uabd.nxv8i16(, @replace_uabd_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_uabd_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.uabd.nxv8i16( %1, %a, %b) @@ -1331,9 +1260,8 @@ declare @llvm.aarch64.sve.uabd.nxv4i32(, @replace_uabd_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_uabd_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.uabd.nxv4i32( %1, %a, %b) @@ -1344,9 +1272,8 @@ declare @llvm.aarch64.sve.uabd.nxv2i64(, @replace_uabd_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_uabd_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uabd.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.uabd.nxv2i64( %1, %a, %b) @@ -1369,9 +1296,8 @@ declare @llvm.aarch64.sve.umax.nxv16i8(, @replace_umax_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_umax_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.umax.nxv16i8( %1, %a, %b) @@ -1382,9 +1308,8 @@ declare @llvm.aarch64.sve.umax.nxv8i16(, @replace_umax_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_umax_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.umax.nxv8i16( %1, %a, %b) @@ -1395,9 +1320,8 @@ declare @llvm.aarch64.sve.umax.nxv4i32(, @replace_umax_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_umax_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.umax.nxv4i32( %1, %a, %b) @@ -1408,9 +1332,8 @@ declare @llvm.aarch64.sve.umax.nxv2i64(, @replace_umax_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_umax_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umax.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.umax.nxv2i64( %1, %a, %b) @@ -1433,9 +1356,8 @@ declare @llvm.aarch64.sve.umin.nxv16i8(, @replace_umin_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_umin_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.umin.nxv16i8( %1, %a, %b) @@ -1446,9 +1368,8 @@ declare @llvm.aarch64.sve.umin.nxv8i16(, @replace_umin_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_umin_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.umin.nxv8i16( %1, %a, %b) @@ -1459,9 +1380,8 @@ declare @llvm.aarch64.sve.umin.nxv4i32(, @replace_umin_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_umin_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.umin.nxv4i32( %1, %a, %b) @@ -1472,9 +1392,8 @@ declare @llvm.aarch64.sve.umin.nxv2i64(, @replace_umin_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_umin_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umin.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.umin.nxv2i64( %1, %a, %b) @@ -1497,9 +1416,8 @@ declare @llvm.aarch64.sve.umulh.nxv16i8(, < define @replace_umulh_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_umulh_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.umulh.nxv16i8( %1, %a, %b) @@ -1510,9 +1428,8 @@ declare @llvm.aarch64.sve.umulh.nxv8i16(, @replace_umulh_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_umulh_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.umulh.nxv8i16( %1, %a, %b) @@ -1523,9 +1440,8 @@ declare @llvm.aarch64.sve.umulh.nxv4i32(, @replace_umulh_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_umulh_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.umulh.nxv4i32( %1, %a, %b) @@ -1536,9 +1452,8 @@ declare @llvm.aarch64.sve.umulh.nxv2i64(, @replace_umulh_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_umulh_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.umulh.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.umulh.nxv2i64( %1, %a, %b) @@ -1563,9 +1478,8 @@ declare @llvm.aarch64.sve.asr.nxv16i8(, @replace_asr_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_asr_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.asr.nxv16i8( %1, %a, %b) @@ -1576,9 +1490,8 @@ declare @llvm.aarch64.sve.asr.nxv8i16(, @replace_asr_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_asr_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.asr.nxv8i16( %1, %a, %b) @@ -1589,9 +1502,8 @@ declare @llvm.aarch64.sve.asr.nxv4i32(, @replace_asr_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_asr_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.asr.nxv4i32( %1, %a, %b) @@ -1602,9 +1514,8 @@ declare @llvm.aarch64.sve.asr.nxv2i64(, @replace_asr_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_asr_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.asr.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.asr.nxv2i64( %1, %a, %b) @@ -1627,9 +1538,8 @@ declare @llvm.aarch64.sve.lsl.nxv16i8(, @replace_lsl_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsl_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsl.nxv16i8( %1, %a, %b) @@ -1640,9 +1550,8 @@ declare @llvm.aarch64.sve.lsl.nxv8i16(, @replace_lsl_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsl_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsl.nxv8i16( %1, %a, %b) @@ -1653,9 +1562,8 @@ declare @llvm.aarch64.sve.lsl.nxv4i32(, @replace_lsl_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsl_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsl.nxv4i32( %1, %a, %b) @@ -1666,9 +1574,8 @@ declare @llvm.aarch64.sve.lsl.nxv2i64(, @replace_lsl_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsl_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsl.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsl.nxv2i64( %1, %a, %b) @@ -1691,9 +1598,8 @@ declare @llvm.aarch64.sve.lsr.nxv16i8(, @replace_lsr_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsr_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsr.nxv16i8( %1, %a, %b) @@ -1704,9 +1610,8 @@ declare @llvm.aarch64.sve.lsr.nxv8i16(, @replace_lsr_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsr_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsr.nxv8i16( %1, %a, %b) @@ -1717,9 +1622,8 @@ declare @llvm.aarch64.sve.lsr.nxv4i32(, @replace_lsr_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsr_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsr.nxv4i32( %1, %a, %b) @@ -1730,9 +1634,8 @@ declare @llvm.aarch64.sve.lsr.nxv2i64(, @replace_lsr_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_lsr_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.lsr.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.lsr.nxv2i64( %1, %a, %b) @@ -1757,9 +1660,8 @@ declare @llvm.aarch64.sve.and.nxv16i8(, @replace_and_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_and_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.and.nxv16i8( %1, %a, %b) @@ -1770,9 +1672,8 @@ declare @llvm.aarch64.sve.and.nxv8i16(, @replace_and_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_and_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.and.nxv8i16( %1, %a, %b) @@ -1783,9 +1684,8 @@ declare @llvm.aarch64.sve.and.nxv4i32(, @replace_and_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_and_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.and.nxv4i32( %1, %a, %b) @@ -1796,9 +1696,8 @@ declare @llvm.aarch64.sve.and.nxv2i64(, @replace_and_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_and_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.and.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.and.nxv2i64( %1, %a, %b) @@ -1821,9 +1720,8 @@ declare @llvm.aarch64.sve.bic.nxv16i8(, @replace_bic_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_bic_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.bic.nxv16i8( %1, %a, %b) @@ -1834,9 +1732,8 @@ declare @llvm.aarch64.sve.bic.nxv8i16(, @replace_bic_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_bic_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.bic.nxv8i16( %1, %a, %b) @@ -1847,9 +1744,8 @@ declare @llvm.aarch64.sve.bic.nxv4i32(, @replace_bic_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_bic_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.bic.nxv4i32( %1, %a, %b) @@ -1860,9 +1756,8 @@ declare @llvm.aarch64.sve.bic.nxv2i64(, @replace_bic_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_bic_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.bic.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.bic.nxv2i64( %1, %a, %b) @@ -1885,9 +1780,8 @@ declare @llvm.aarch64.sve.eor.nxv16i8(, @replace_eor_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_eor_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.eor.nxv16i8( %1, %a, %b) @@ -1898,9 +1792,8 @@ declare @llvm.aarch64.sve.eor.nxv8i16(, @replace_eor_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_eor_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.eor.nxv8i16( %1, %a, %b) @@ -1911,9 +1804,8 @@ declare @llvm.aarch64.sve.eor.nxv4i32(, @replace_eor_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_eor_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.eor.nxv4i32( %1, %a, %b) @@ -1924,9 +1816,8 @@ declare @llvm.aarch64.sve.eor.nxv2i64(, @replace_eor_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_eor_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.eor.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.eor.nxv2i64( %1, %a, %b) @@ -1949,9 +1840,8 @@ declare @llvm.aarch64.sve.orr.nxv16i8(, @replace_orr_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_orr_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.orr.nxv16i8( %1, %a, %b) @@ -1962,9 +1852,8 @@ declare @llvm.aarch64.sve.orr.nxv8i16(, @replace_orr_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_orr_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.orr.nxv8i16( %1, %a, %b) @@ -1975,9 +1864,8 @@ declare @llvm.aarch64.sve.orr.nxv4i32(, @replace_orr_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_orr_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.orr.nxv4i32( %1, %a, %b) @@ -1988,9 +1876,8 @@ declare @llvm.aarch64.sve.orr.nxv2i64(, @replace_orr_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_orr_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.orr.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.orr.nxv2i64( %1, %a, %b) @@ -2015,9 +1902,8 @@ declare @llvm.aarch64.sve.sqsub.nxv16i8(, < define @replace_sqsub_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_sqsub_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.sqsub.nxv16i8( %1, %a, %b) @@ -2028,9 +1914,8 @@ declare @llvm.aarch64.sve.sqsub.nxv8i16(, @replace_sqsub_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_sqsub_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.sqsub.nxv8i16( %1, %a, %b) @@ -2041,9 +1926,8 @@ declare @llvm.aarch64.sve.sqsub.nxv4i32(, @replace_sqsub_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_sqsub_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.sqsub.nxv4i32( %1, %a, %b) @@ -2054,9 +1938,8 @@ declare @llvm.aarch64.sve.sqsub.nxv2i64(, @replace_sqsub_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_sqsub_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.sqsub.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.sqsub.nxv2i64( %1, %a, %b) @@ -2079,9 +1962,8 @@ declare @llvm.aarch64.sve.uqsub.nxv16i8(, < define @replace_uqsub_intrinsic_i8( %a, %b) #0 { ; CHECK-LABEL: define @replace_uqsub_intrinsic_i8 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv16i8( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv16i8( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) %2 = tail call @llvm.aarch64.sve.uqsub.nxv16i8( %1, %a, %b) @@ -2092,9 +1974,8 @@ declare @llvm.aarch64.sve.uqsub.nxv8i16(, @replace_uqsub_intrinsic_i16( %a, %b) #0 { ; CHECK-LABEL: define @replace_uqsub_intrinsic_i16 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv8i16( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv8i16( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) %2 = tail call @llvm.aarch64.sve.uqsub.nxv8i16( %1, %a, %b) @@ -2105,9 +1986,8 @@ declare @llvm.aarch64.sve.uqsub.nxv4i32(, @replace_uqsub_intrinsic_i32( %a, %b) #0 { ; CHECK-LABEL: define @replace_uqsub_intrinsic_i32 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv4i32( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv4i32( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) %2 = tail call @llvm.aarch64.sve.uqsub.nxv4i32( %1, %a, %b) @@ -2118,9 +1998,8 @@ declare @llvm.aarch64.sve.uqsub.nxv2i64(, @replace_uqsub_intrinsic_i64( %a, %b) #0 { ; CHECK-LABEL: define @replace_uqsub_intrinsic_i64 ; CHECK-SAME: ( [[A:%.*]], [[B:%.*]]) #[[ATTR1]] { -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv2i64( [[TMP1]], [[A]], [[B]]) -; CHECK-NEXT: ret [[TMP2]] +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.uqsub.u.nxv2i64( splat (i1 true), [[A]], [[B]]) +; CHECK-NEXT: ret [[TMP1]] ; %1 = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) %2 = tail call @llvm.aarch64.sve.uqsub.nxv2i64( %1, %a, %b) diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-ptest.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-ptest.ll index a22454b586c25..e00ad68bdfacf 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-ptest.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-ptest.ll @@ -39,8 +39,7 @@ define i1 @ptest_any1( %a) #0 { ; No transform because the ptest is using differently sized operands. define i1 @ptest_any2( %a) #0 { ; CHECK-LABEL: @ptest_any2( -; CHECK-NEXT: [[MASK:%.*]] = tail call @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) -; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( [[MASK]]) +; CHECK-NEXT: [[TMP1:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv2i1( splat (i1 true)) ; CHECK-NEXT: [[TMP2:%.*]] = tail call @llvm.aarch64.sve.convert.to.svbool.nxv4i1( [[A:%.*]]) ; CHECK-NEXT: [[OUT:%.*]] = call i1 @llvm.aarch64.sve.ptest.any.nxv16i1( [[TMP1]], [[TMP2]]) ; CHECK-NEXT: ret i1 [[OUT]] diff --git a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-rdffr-predication.ll b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-rdffr-predication.ll index 155102db52b56..ff728dc47c665 100644 --- a/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-rdffr-predication.ll +++ b/llvm/test/Transforms/InstCombine/AArch64/sve-intrinsics-rdffr-predication.ll @@ -6,8 +6,7 @@ target triple = "aarch64-unknown-linux-gnu" ; Test that rdffr is substituted with predicated form which enables ptest optimization later. define @predicate_rdffr() #0 { ; CHECK-LABEL: @predicate_rdffr( -; CHECK-NEXT: [[TMP1:%.*]] = call @llvm.aarch64.sve.ptrue.nxv16i1(i32 31) -; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.rdffr.z( [[TMP1]]) +; CHECK-NEXT: [[OUT:%.*]] = call @llvm.aarch64.sve.rdffr.z( splat (i1 true)) ; CHECK-NEXT: ret [[OUT]] ; %out = call @llvm.aarch64.sve.rdffr() From de53aae71eb440a6dbca15de9aa2f0b2bb1708a0 Mon Sep 17 00:00:00 2001 From: Matthew Devereau Date: Wed, 9 Apr 2025 19:08:42 +0000 Subject: [PATCH 2/3] Improve checks --- .../AArch64/AArch64TargetTransformInfo.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp index 73b55a2dcb720..b9327d835477e 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -1496,13 +1496,8 @@ static bool isAllActivePredicate(Value *Pred) { m_ConstantInt()))) return true; - if (Value *Splat = getSplatValue(Pred)) { - auto ConstIdx = dyn_cast(Splat); - if (ConstIdx->getZExtValue() == 1) - return true; - } - - return false; + auto *C = dyn_cast(Pred); + return (C && C->isAllOnesValue()); } // Use SVE intrinsic info to eliminate redundant operands and/or canonicalise @@ -2643,14 +2638,8 @@ static std::optional instCombineDMB(InstCombiner &IC, static std::optional instCombinePTrue(InstCombiner &IC, IntrinsicInst &II) { - IRBuilder<> Builder(&II); - auto Type = cast(II.getType()); - ConstantInt *Pattern; - if (match(II.getOperand(0), m_ConstantInt(Pattern)) && - Pattern->getZExtValue() == AArch64SVEPredPattern::all) { - Value *One = ConstantInt::get(Builder.getInt1Ty(), APInt(1, 1)); - Value *SplatOne = Builder.CreateVectorSplat(Type->getElementCount(), One); - return IC.replaceInstUsesWith(II, SplatOne); + if (match(II.getOperand(0), m_ConstantInt())) { + return IC.replaceInstUsesWith(II, Constant::getAllOnesValue(II.getType())); } return std::nullopt; } From c16ee0456ad5a41f3c05138e6de6b8ef4426683c Mon Sep 17 00:00:00 2001 From: Matthew Devereau Date: Fri, 11 Apr 2025 10:14:11 +0000 Subject: [PATCH 3/3] Remove ptrue check and brackets --- llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp index b9327d835477e..cb36ef8668e26 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -1492,10 +1492,6 @@ static bool isAllActivePredicate(Value *Pred) { if (cast(Pred->getType())->getMinNumElements() <= cast(UncastedPred->getType())->getMinNumElements()) Pred = UncastedPred; - if (match(Pred, m_Intrinsic( - m_ConstantInt()))) - return true; - auto *C = dyn_cast(Pred); return (C && C->isAllOnesValue()); } @@ -2638,9 +2634,8 @@ static std::optional instCombineDMB(InstCombiner &IC, static std::optional instCombinePTrue(InstCombiner &IC, IntrinsicInst &II) { - if (match(II.getOperand(0), m_ConstantInt())) { + if (match(II.getOperand(0), m_ConstantInt())) return IC.replaceInstUsesWith(II, Constant::getAllOnesValue(II.getType())); - } return std::nullopt; }