[llvm] [AArch64][SME] Simplify initialization of the TPIDR2 block (PR #141049)
Sander de Smalen via llvm-commits
llvm-commits at lists.llvm.org
Tue May 27 06:13:24 PDT 2025
================
@@ -3231,20 +3231,24 @@ AArch64TargetLowering::EmitInitTPIDR2Object(MachineInstr &MI,
TPIDR2Object &TPIDR2 = FuncInfo->getTPIDR2Obj();
if (TPIDR2.Uses > 0) {
const TargetInstrInfo *TII = Subtarget->getInstrInfo();
- // Store the buffer pointer to the TPIDR2 stack object.
- BuildMI(*BB, MI, MI.getDebugLoc(), TII->get(AArch64::STRXui))
+ unsigned TPIDInitSaveSlicesReg = MI.getOperand(1).getReg();
+ if (!Subtarget->isLittleEndian()) {
+ unsigned TmpReg =
+ MF->getRegInfo().createVirtualRegister(&AArch64::GPR64RegClass);
+ // For big-endian targets move "num_za_save_slices" to the top two bytes.
+ BuildMI(*BB, MI, MI.getDebugLoc(), TII->get(AArch64::UBFMXri), TmpReg)
+ .addReg(TPIDInitSaveSlicesReg)
+ .addImm(16)
+ .addImm(15);
+ TPIDInitSaveSlicesReg = TmpReg;
+ }
----------------
sdesmalen-arm wrote:
Maybe just `assert(Subtarget->isLittleEndian()` for now, rather than adding something that's not used.
https://github.com/llvm/llvm-project/pull/141049
More information about the llvm-commits
mailing list