@@ -2726,6 +2726,8 @@ const char *AArch64TargetLowering::getTargetNodeName(unsigned Opcode) const {
27262726 MAKE_CASE(AArch64ISD::VG_RESTORE)
27272727 MAKE_CASE(AArch64ISD::SMSTART)
27282728 MAKE_CASE(AArch64ISD::SMSTOP)
2729+ MAKE_CASE(AArch64ISD::COND_SMSTART)
2730+ MAKE_CASE(AArch64ISD::COND_SMSTOP)
27292731 MAKE_CASE(AArch64ISD::RESTORE_ZA)
27302732 MAKE_CASE(AArch64ISD::RESTORE_ZT)
27312733 MAKE_CASE(AArch64ISD::SAVE_ZT)
@@ -2955,9 +2957,6 @@ const char *AArch64TargetLowering::getTargetNodeName(unsigned Opcode) const {
29552957 MAKE_CASE(AArch64ISD::LDFF1S_MERGE_ZERO)
29562958 MAKE_CASE(AArch64ISD::LD1RQ_MERGE_ZERO)
29572959 MAKE_CASE(AArch64ISD::LD1RO_MERGE_ZERO)
2958- MAKE_CASE(AArch64ISD::SVE_LD2_MERGE_ZERO)
2959- MAKE_CASE(AArch64ISD::SVE_LD3_MERGE_ZERO)
2960- MAKE_CASE(AArch64ISD::SVE_LD4_MERGE_ZERO)
29612960 MAKE_CASE(AArch64ISD::GLD1_MERGE_ZERO)
29622961 MAKE_CASE(AArch64ISD::GLD1_SCALED_MERGE_ZERO)
29632962 MAKE_CASE(AArch64ISD::GLD1_SXTW_MERGE_ZERO)
@@ -3017,7 +3016,6 @@ const char *AArch64TargetLowering::getTargetNodeName(unsigned Opcode) const {
30173016 MAKE_CASE(AArch64ISD::CTLZ_MERGE_PASSTHRU)
30183017 MAKE_CASE(AArch64ISD::CTPOP_MERGE_PASSTHRU)
30193018 MAKE_CASE(AArch64ISD::DUP_MERGE_PASSTHRU)
3020- MAKE_CASE(AArch64ISD::INDEX_VECTOR)
30213019 MAKE_CASE(AArch64ISD::ADDP)
30223020 MAKE_CASE(AArch64ISD::SADDLP)
30233021 MAKE_CASE(AArch64ISD::UADDLP)
@@ -6033,14 +6031,12 @@ SDValue AArch64TargetLowering::LowerINTRINSIC_VOID(SDValue Op,
60336031 return DAG.getNode(
60346032 AArch64ISD::SMSTART, DL, MVT::Other,
60356033 Op->getOperand(0), // Chain
6036- DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
6037- DAG.getConstant(AArch64SME::Always, DL, MVT::i64));
6034+ DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32));
60386035 case Intrinsic::aarch64_sme_za_disable:
60396036 return DAG.getNode(
60406037 AArch64ISD::SMSTOP, DL, MVT::Other,
60416038 Op->getOperand(0), // Chain
6042- DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
6043- DAG.getConstant(AArch64SME::Always, DL, MVT::i64));
6039+ DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32));
60446040 }
60456041}
60466042
@@ -8927,18 +8923,22 @@ SDValue AArch64TargetLowering::changeStreamingMode(SelectionDAG &DAG, SDLoc DL,
89278923 SDValue RegMask = DAG.getRegisterMask(TRI->getSMStartStopCallPreservedMask());
89288924 SDValue MSROp =
89298925 DAG.getTargetConstant((int32_t)AArch64SVCR::SVCRSM, DL, MVT::i32);
8930- SDValue ConditionOp = DAG.getTargetConstant(Condition, DL, MVT::i64) ;
8931- SmallVector<SDValue> Ops = {Chain, MSROp, ConditionOp} ;
8926+ SmallVector< SDValue> Ops = {Chain, MSROp} ;
8927+ unsigned Opcode ;
89328928 if (Condition != AArch64SME::Always) {
8929+ SDValue ConditionOp = DAG.getTargetConstant(Condition, DL, MVT::i64);
8930+ Opcode = Enable ? AArch64ISD::COND_SMSTART : AArch64ISD::COND_SMSTOP;
89338931 assert(PStateSM && "PStateSM should be defined");
8932+ Ops.push_back(ConditionOp);
89348933 Ops.push_back(PStateSM);
8934+ } else {
8935+ Opcode = Enable ? AArch64ISD::SMSTART : AArch64ISD::SMSTOP;
89358936 }
89368937 Ops.push_back(RegMask);
89378938
89388939 if (InGlue)
89398940 Ops.push_back(InGlue);
89408941
8941- unsigned Opcode = Enable ? AArch64ISD::SMSTART : AArch64ISD::SMSTOP;
89428942 return DAG.getNode(Opcode, DL, DAG.getVTList(MVT::Other, MVT::Glue), Ops);
89438943}
89448944
@@ -9203,9 +9203,8 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
92039203
92049204 if (DisableZA)
92059205 Chain = DAG.getNode(
9206- AArch64ISD::SMSTOP, DL, MVT::Other, Chain,
9207- DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
9208- DAG.getConstant(AArch64SME::Always, DL, MVT::i64));
9206+ AArch64ISD::SMSTOP, DL, DAG.getVTList(MVT::Other, MVT::Glue), Chain,
9207+ DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32));
92099208
92109209 // Adjust the stack pointer for the new arguments...
92119210 // These operations are automatically eliminated by the prolog/epilog pass
@@ -9682,9 +9681,8 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
96829681 if (CallAttrs.requiresEnablingZAAfterCall())
96839682 // Unconditionally resume ZA.
96849683 Result = DAG.getNode(
9685- AArch64ISD::SMSTART, DL, MVT::Other, Result,
9686- DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32),
9687- DAG.getConstant(AArch64SME::Always, DL, MVT::i64));
9684+ AArch64ISD::SMSTART, DL, DAG.getVTList(MVT::Other, MVT::Glue), Result,
9685+ DAG.getTargetConstant((int32_t)(AArch64SVCR::SVCRZA), DL, MVT::i32));
96889686
96899687 if (ShouldPreserveZT0)
96909688 Result =
0 commit comments