[llvm] [AArch64][SME] Introduce CHECK_MATCHING_VL pseudo for streaming transitions (PR #157510)
Sander de Smalen via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 12 07:14:31 PDT 2025
================
@@ -9147,7 +9199,38 @@ SDValue AArch64TargetLowering::changeStreamingMode(SelectionDAG &DAG, SDLoc DL,
if (InGlue)
Ops.push_back(InGlue);
- return DAG.getNode(Opcode, DL, DAG.getVTList(MVT::Other, MVT::Glue), Ops);
+ if (!InsertVectorLengthCheck)
+ return DAG.getNode(Opcode, DL, DAG.getVTList(MVT::Other, MVT::Glue), Ops);
+
+ auto GetCheckVL = [&](SDValue Chain, SDValue InGlue = SDValue()) -> SDValue {
+ SmallVector<SDValue, 2> Ops = {Chain};
+ if (InGlue)
+ Ops.push_back(InGlue);
+ return DAG.getNode(AArch64ISD::CHECK_MATCHING_VL, DL,
+ DAG.getVTList(MVT::Other, MVT::Glue), Ops);
+ };
+
+ // Non-streaming -> Streaming
+ if (Enable) {
+ SDValue CheckVL = GetCheckVL(Chain, InGlue);
+
+ // Replace chain
+ Ops[0] = CheckVL.getValue(0);
+
+ // Replace/append glue
+ if (InGlue)
+ Ops.back() = CheckVL.getValue(1);
+ else
+ Ops.push_back(CheckVL.getValue(1));
+
+ return DAG.getNode(Opcode, DL, DAG.getVTList(MVT::Other, MVT::Glue), Ops);
+ }
+
+ // Streaming -> Non-streaming
----------------
sdesmalen-arm wrote:
nit: could you add a brief comment explaining why this must be done _after_ the `smstop` ?
https://github.com/llvm/llvm-project/pull/157510
More information about the llvm-commits
mailing list