[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:30 PDT 2025
================
@@ -2940,6 +2940,56 @@ AArch64TargetLowering::EmitDynamicProbedAlloc(MachineInstr &MI,
return NextInst->getParent();
}
+MachineBasicBlock *
+AArch64TargetLowering::EmitCheckMatchingVL(MachineInstr &MI,
+ MachineBasicBlock *MBB) const {
+ MachineFunction *MF = MBB->getParent();
+ const TargetInstrInfo *TII = Subtarget->getInstrInfo();
+ const BasicBlock *LLVM_BB = MBB->getBasicBlock();
+ DebugLoc DL = MI.getDebugLoc();
+ MachineFunction::iterator It = ++MBB->getIterator();
+
+ const TargetRegisterClass *RC = &AArch64::GPR64RegClass;
+ MachineRegisterInfo &MRI = MF->getRegInfo();
+
+ Register RegVL = MRI.createVirtualRegister(RC);
+ Register RegSVL = MRI.createVirtualRegister(RC);
+ Register RegCheck = MRI.createVirtualRegister(RC);
+
+ // Read VL and Streaming VL
+ BuildMI(*MBB, MI, DL, TII->get(AArch64::RDVLI_XI), RegVL).addImm(1);
+ BuildMI(*MBB, MI, DL, TII->get(AArch64::RDSVLI_XI), RegSVL).addImm(1);
----------------
sdesmalen-arm wrote:
You could also use `ADDSVL` with a `#-1` immediate, to do the subtraction directly.
That way you could get:
```
rdvl x8, #1
addsvl x8, x8, #-1
cbz x8, .LBB1_2
```
which saves a separate `sub` and also saves a register.
https://github.com/llvm/llvm-project/pull/157510
More information about the llvm-commits
mailing list