From 793a349e6f16888476cd365f7f958652347f4569 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Storsj=C3=B6?= Date: Tue, 18 Jul 2023 18:21:23 +0300 Subject: [PATCH] Revert "[AArch64] Fix an immediate out of range for large realignments on Windows" This reverts commit b1d0bc0f4395c69097bc11b6ba8f821f621272a9. Builds with expensive checks show that 'sp' isn't a valid register in ADDXrr - an object file built without exprnsive checks enabled disassembles as "add x15, xzr, x16", instead of the intended "add x15, sp, x16". --- llvm/lib/Target/AArch64/AArch64FrameLowering.cpp | 20 ++++--------------- llvm/test/CodeGen/AArch64/win-align-chkstk.ll | 25 ------------------------ 2 files changed, 4 insertions(+), 41 deletions(-) diff --git a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp index 029b2ea..f13344a 100644 --- a/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp +++ b/llvm/lib/Target/AArch64/AArch64FrameLowering.cpp @@ -1739,22 +1739,10 @@ void AArch64FrameLowering::emitPrologue(MachineFunction &MF, NumBytes = 0; if (RealignmentPadding > 0) { - if (RealignmentPadding >= 4096) { - BuildMI(MBB, MBBI, DL, TII->get(AArch64::MOVi64imm)) - .addReg(AArch64::X16, RegState::Define) - .addImm(RealignmentPadding) - .setMIFlags(MachineInstr::FrameSetup); - BuildMI(MBB, MBBI, DL, TII->get(AArch64::ADDXrr), AArch64::X15) - .addReg(AArch64::SP) - .addReg(AArch64::X16, RegState::Kill) - .setMIFlag(MachineInstr::FrameSetup); - } else { - BuildMI(MBB, MBBI, DL, TII->get(AArch64::ADDXri), AArch64::X15) - .addReg(AArch64::SP) - .addImm(RealignmentPadding) - .addImm(0) - .setMIFlag(MachineInstr::FrameSetup); - } + BuildMI(MBB, MBBI, DL, TII->get(AArch64::ADDXri), AArch64::X15) + .addReg(AArch64::SP) + .addImm(RealignmentPadding) + .addImm(0); uint64_t AndMask = ~(MFI.getMaxAlign().value() - 1); BuildMI(MBB, MBBI, DL, TII->get(AArch64::ANDXri), AArch64::SP) diff --git a/llvm/test/CodeGen/AArch64/win-align-chkstk.ll b/llvm/test/CodeGen/AArch64/win-align-chkstk.ll index 5650d78..7c1c3db 100644 --- a/llvm/test/CodeGen/AArch64/win-align-chkstk.ll +++ b/llvm/test/CodeGen/AArch64/win-align-chkstk.ll @@ -25,28 +25,3 @@ declare dso_local void @other(ptr noundef) ; CHECK-NEXT: sub sp, sp, x15, lsl #4 ; CHECK-NEXT: add x15, sp, #16 ; CHECK-NEXT: and sp, x15, #0xffffffffffffffe0 - -define dso_local void @func2() { -entry: - %buf = alloca [8192 x i8], align 8192 - %arraydecay = getelementptr inbounds [8192 x i8], ptr %buf, i64 0, i64 0 - call void @other(ptr noundef %arraydecay) - ret void -} - -; CHECK-LABEL: func2: -; CHECK-NEXT: .seh_proc func2 -; CHECK-NEXT: // %bb.0: -; CHECK-NEXT: str x28, [sp, #-32]! -; CHECK-NEXT: .seh_save_reg_x x28, 32 -; CHECK-NEXT: stp x29, x30, [sp, #8] -; CHECK-NEXT: .seh_save_fplr 8 -; CHECK-NEXT: add x29, sp, #8 -; CHECK-NEXT: .seh_add_fp 8 -; CHECK-NEXT: .seh_endprologue -; CHECK-NEXT: mov x15, #1533 -; CHECK-NEXT: bl __chkstk -; CHECK-NEXT: sub sp, sp, x15, lsl #4 -; CHECK-NEXT: mov x16, #8176 -; CHECK-NEXT: add x15, sp, x16 -; CHECK-NEXT: and sp, x15, #0xffffffffffffe000 -- 2.7.4