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..cb36ef8668e26 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -1492,9 +1492,8 @@ static bool isAllActivePredicate(Value *Pred) { if (cast(Pred->getType())->getMinNumElements() <= cast(UncastedPred->getType())->getMinNumElements()) Pred = UncastedPred; - - return match(Pred, m_Intrinsic( - m_ConstantInt())); + auto *C = dyn_cast(Pred); + return (C && C->isAllOnesValue()); } // Use SVE intrinsic info to eliminate redundant operands and/or canonicalise @@ -1701,14 +1700,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 +2110,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 +2632,13 @@ static std::optional instCombineDMB(InstCombiner &IC, return std::nullopt; } +static std::optional instCombinePTrue(InstCombiner &IC, + IntrinsicInst &II) { + if (match(II.getOperand(0), m_ConstantInt())) + return IC.replaceInstUsesWith(II, Constant::getAllOnesValue(II.getType())); + return std::nullopt; +} + std::optional AArch64TTIImpl::instCombineIntrinsic(InstCombiner &IC, IntrinsicInst &II) const { @@ -2744,6 +2742,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()