@@ -2984,23 +2984,18 @@ AArch64TargetLowering::EmitInitTPIDR2Object(MachineInstr &MI,
29842984 AArch64FunctionInfo *FuncInfo = MF->getInfo<AArch64FunctionInfo>();
29852985 TPIDR2Object &TPIDR2 = FuncInfo->getTPIDR2Obj();
29862986 if (TPIDR2.Uses > 0) {
2987+ // Note: This case just needs to do `SVL << 48`. It is not implemented as we
2988+ // generally don't support big-endian SVE/SME.
2989+ assert(
2990+ Subtarget->isLittleEndian() &&
2991+ "TPIDR2 block initialization is not supported on big-endian targets");
2992+
29872993 const TargetInstrInfo *TII = Subtarget->getInstrInfo();
2988- unsigned TPIDInitSaveSlicesReg = MI.getOperand(1).getReg();
2989- if (!Subtarget->isLittleEndian()) {
2990- unsigned TmpReg =
2991- MF->getRegInfo().createVirtualRegister(&AArch64::GPR64RegClass);
2992- // For big-endian targets move "num_za_save_slices" to the top two bytes.
2993- BuildMI(*BB, MI, MI.getDebugLoc(), TII->get(AArch64::UBFMXri), TmpReg)
2994- .addReg(TPIDInitSaveSlicesReg)
2995- .addImm(16)
2996- .addImm(15);
2997- TPIDInitSaveSlicesReg = TmpReg;
2998- }
29992994 // Store buffer pointer and num_za_save_slices.
30002995 // Bytes 10-15 are implicitly zeroed.
30012996 BuildMI(*BB, MI, MI.getDebugLoc(), TII->get(AArch64::STPXi))
30022997 .addReg(MI.getOperand(0).getReg())
3003- .addReg(TPIDInitSaveSlicesReg )
2998+ .addReg(MI.getOperand(1).getReg() )
30042999 .addFrameIndex(TPIDR2.FrameIndex)
30053000 .addImm(0);
30063001 } else
0 commit comments