diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp --- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp @@ -6025,17 +6025,17 @@ SDValue Ops[] = {Chain, NN, DAG.getConstant(1, DL, MVT::i64)}; SDVTList VTs = DAG.getVTList(MVT::i64, MVT::Other); SDValue Buffer = DAG.getNode(ISD::DYNAMIC_STACKALLOC, DL, VTs, Ops); - unsigned FI = MFI.CreateVariableSizedObject(Align(1), nullptr); - Register Reg = MF.getRegInfo().createVirtualRegister(getRegClassFor(MVT::i64)); - Chain = DAG.getCopyToReg(Buffer.getValue(1), DL, Reg, Buffer.getValue(0)); + Chain = Buffer.getValue(1); + MFI.CreateVariableSizedObject(Align(1), nullptr); // Allocate an additional TPIDR2 object on the stack (16 bytes) unsigned TPIDR2Obj = MFI.CreateStackObject(16, Align(16), false); // Store the buffer pointer to the TPIDR2 stack object. - MachinePointerInfo MPI = MachinePointerInfo::getStack(MF, FI); + MachinePointerInfo MPI = MachinePointerInfo::getStack(MF, TPIDR2Obj); SDValue Ptr = DAG.getFrameIndex( - FI, DAG.getTargetLoweringInfo().getFrameIndexTy(DAG.getDataLayout())); + TPIDR2Obj, + DAG.getTargetLoweringInfo().getFrameIndexTy(DAG.getDataLayout())); Chain = DAG.getStore(Chain, DL, Buffer, Ptr, MPI); return TPIDR2Obj; diff --git a/llvm/test/CodeGen/AArch64/sme-disable-gisel-fisel.ll b/llvm/test/CodeGen/AArch64/sme-disable-gisel-fisel.ll --- a/llvm/test/CodeGen/AArch64/sme-disable-gisel-fisel.ll +++ b/llvm/test/CodeGen/AArch64/sme-disable-gisel-fisel.ll @@ -235,7 +235,7 @@ ; CHECK-COMMON-NEXT: mov x9, sp ; CHECK-COMMON-NEXT: msub x8, x8, x8, x9 ; CHECK-COMMON-NEXT: mov sp, x8 -; CHECK-COMMON-NEXT: str x8, [x29] +; CHECK-COMMON-NEXT: stur x8, [x29, #-16] ; CHECK-COMMON-NEXT: mrs x8, TPIDR2_EL0 ; CHECK-COMMON-NEXT: cbz x8, .LBB6_2 ; CHECK-COMMON-NEXT: b .LBB6_1 @@ -270,7 +270,7 @@ ; CHECK-COMMON-NEXT: mov x9, sp ; CHECK-COMMON-NEXT: subs x9, x9, x8 ; CHECK-COMMON-NEXT: mov sp, x9 -; CHECK-COMMON-NEXT: str x9, [x29] +; CHECK-COMMON-NEXT: stur x9, [x29, #-16] ; CHECK-COMMON-NEXT: sturh w8, [x29, #-8] ; CHECK-COMMON-NEXT: sub x8, x29, #16 ; CHECK-COMMON-NEXT: msr TPIDR2_EL0, x8 @@ -311,7 +311,7 @@ ; CHECK-COMMON-NEXT: mov sp, x9 ; CHECK-COMMON-NEXT: sub x10, x29, #16 ; CHECK-COMMON-NEXT: sturh w8, [x29, #-8] -; CHECK-COMMON-NEXT: str x9, [x29] +; CHECK-COMMON-NEXT: stur x9, [x29, #-16] ; CHECK-COMMON-NEXT: msr TPIDR2_EL0, x10 ; CHECK-COMMON-NEXT: bl __addtf3 ; CHECK-COMMON-NEXT: smstart za diff --git a/llvm/test/CodeGen/AArch64/sme-lazy-save-call.ll b/llvm/test/CodeGen/AArch64/sme-lazy-save-call.ll --- a/llvm/test/CodeGen/AArch64/sme-lazy-save-call.ll +++ b/llvm/test/CodeGen/AArch64/sme-lazy-save-call.ll @@ -17,7 +17,7 @@ ; CHECK-NEXT: sub x9, x9, x8 ; CHECK-NEXT: mov sp, x9 ; CHECK-NEXT: sub x10, x29, #16 -; CHECK-NEXT: str x9, [x29] +; CHECK-NEXT: stur x9, [x29, #-16] ; CHECK-NEXT: sturh w8, [x29, #-8] ; CHECK-NEXT: msr TPIDR2_EL0, x10 ; CHECK-NEXT: bl private_za_callee @@ -50,7 +50,7 @@ ; CHECK-NEXT: sub x8, x8, x19 ; CHECK-NEXT: mov sp, x8 ; CHECK-NEXT: sub x20, x29, #16 -; CHECK-NEXT: str x8, [x29] +; CHECK-NEXT: stur x8, [x29, #-16] ; CHECK-NEXT: sturh w19, [x29, #-8] ; CHECK-NEXT: msr TPIDR2_EL0, x20 ; CHECK-NEXT: bl private_za_callee @@ -95,7 +95,7 @@ ; CHECK-NEXT: sub x9, x9, x8 ; CHECK-NEXT: mov sp, x9 ; CHECK-NEXT: sub x10, x29, #16 -; CHECK-NEXT: str x9, [x29] +; CHECK-NEXT: stur x9, [x29, #-16] ; CHECK-NEXT: sturh w8, [x29, #-8] ; CHECK-NEXT: msr TPIDR2_EL0, x10 ; CHECK-NEXT: bl cosf @@ -132,7 +132,7 @@ ; CHECK-NEXT: sub x9, x9, x8 ; CHECK-NEXT: mov sp, x9 ; CHECK-NEXT: sub x10, x29, #80 -; CHECK-NEXT: stur x9, [x29, #-64] +; CHECK-NEXT: stur x9, [x29, #-80] ; CHECK-NEXT: sturh w8, [x29, #-72] ; CHECK-NEXT: msr TPIDR2_EL0, x10 ; CHECK-NEXT: bl __arm_sme_state diff --git a/llvm/test/CodeGen/AArch64/sme-shared-za-interface.ll b/llvm/test/CodeGen/AArch64/sme-shared-za-interface.ll --- a/llvm/test/CodeGen/AArch64/sme-shared-za-interface.ll +++ b/llvm/test/CodeGen/AArch64/sme-shared-za-interface.ll @@ -16,7 +16,7 @@ ; CHECK-NEXT: sub x9, x9, x8 ; CHECK-NEXT: mov sp, x9 ; CHECK-NEXT: sub x10, x29, #16 -; CHECK-NEXT: str x9, [x29] +; CHECK-NEXT: stur x9, [x29, #-16] ; CHECK-NEXT: sturh w8, [x29, #-8] ; CHECK-NEXT: msr TPIDR2_EL0, x10 ; CHECK-NEXT: bl private_za_callee @@ -49,7 +49,7 @@ ; CHECK-NEXT: mov sp, x9 ; CHECK-NEXT: sub x10, x29, #16 ; CHECK-NEXT: sturh w8, [x29, #-8] -; CHECK-NEXT: str x9, [x29] +; CHECK-NEXT: stur x9, [x29, #-16] ; CHECK-NEXT: msr TPIDR2_EL0, x10 ; CHECK-NEXT: bl __addtf3 ; CHECK-NEXT: smstart za