[llvm] 30b141a - [X86] Fix the incorrect displacement for prolog/epilog
via llvm-commits
llvm-commits at lists.llvm.org
Sat Mar 25 00:56:58 PDT 2023
Author: Luo, Yuanke
Date: 2023-03-25T12:24:37+08:00
New Revision: 30b141a3b9809da75a3d470b5d2f1d7656f7fc6a
URL: https://github.com/llvm/llvm-project/commit/30b141a3b9809da75a3d470b5d2f1d7656f7fc6a
DIFF: https://github.com/llvm/llvm-project/commit/30b141a3b9809da75a3d470b5d2f1d7656f7fc6a.diff
LOG: [X86] Fix the incorrect displacement for prolog/epilog
The bug is introduced in rGe4ceb5a7bb9b which set the wrong offset from
the stack base. This patch is to fix the bug.
Differential Revision: https://reviews.llvm.org/D146862
Added:
Modified:
llvm/lib/Target/X86/X86FrameLowering.cpp
llvm/test/CodeGen/X86/i386-baseptr.ll
llvm/test/CodeGen/X86/x86-64-baseptr.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index 78f96817c8420..10c57e43cf950 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -1587,7 +1587,7 @@ void X86FrameLowering::emitPrologue(MachineFunction &MF,
MachineInstr::FrameSetup);
}
BuildStackAlignAND(MBB, MBBI, DL, StackPtr, MaxAlign);
- int64_t Offset = Is64Bit ? -2 * (int64_t)SlotSize : -1 * (int64_t)SlotSize;
+ int64_t Offset = -(int64_t)SlotSize;
BuildMI(MBB, MBBI, DL, TII.get(Is64Bit ? X86::PUSH64rmm: X86::PUSH32rmm))
.addReg(ArgBaseReg)
.addImm(1)
@@ -2318,13 +2318,13 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF,
Opc = X86::LEA64r;
StackReg = X86::RSP;
}
- // leal -8(%basereg), %esp
+ // leal -4(%basereg), %esp
// .cfi_def_cfa %esp, 4
BuildMI(MBB, MBBI, DL, TII.get(Opc), StackReg)
.addUse(ArgBaseReg)
.addImm(1)
.addUse(X86::NoRegister)
- .addImm((int64_t)SlotSize * -2)
+ .addImm(-(int64_t)SlotSize)
.addUse(X86::NoRegister)
.setMIFlag(MachineInstr::FrameDestroy);
if (NeedsDwarfCFI) {
diff --git a/llvm/test/CodeGen/X86/i386-baseptr.ll b/llvm/test/CodeGen/X86/i386-baseptr.ll
index 715ffcbd5c930..08e4bde7353a4 100644
--- a/llvm/test/CodeGen/X86/i386-baseptr.ll
+++ b/llvm/test/CodeGen/X86/i386-baseptr.ll
@@ -73,7 +73,7 @@ define void @clobber_base() #0 {
; CHECK-NEXT: leal -4(%ebp), %esp
; CHECK-NEXT: popl %esi
; CHECK-NEXT: popl %ebp
-; CHECK-NEXT: leal -8(%ecx), %esp
+; CHECK-NEXT: leal -4(%ecx), %esp
; CHECK-NEXT: .cfi_def_cfa %esp, 4
; CHECK-NEXT: retl
entry:
diff --git a/llvm/test/CodeGen/X86/x86-64-baseptr.ll b/llvm/test/CodeGen/X86/x86-64-baseptr.ll
index 451e2c553873a..21befe7edb117 100644
--- a/llvm/test/CodeGen/X86/x86-64-baseptr.ll
+++ b/llvm/test/CodeGen/X86/x86-64-baseptr.ll
@@ -80,7 +80,7 @@ define void @clobber_base() #0 {
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %r10
; CHECK-NEXT: .cfi_def_cfa %r10, 0
; CHECK-NEXT: andq $-128, %rsp
-; CHECK-NEXT: pushq -16(%r10)
+; CHECK-NEXT: pushq -8(%r10)
; CHECK-NEXT: pushq %rbp
; CHECK-NEXT: movq %rsp, %rbp
; CHECK-NEXT: .cfi_escape 0x10, 0x06, 0x02, 0x76, 0x00 #
@@ -111,7 +111,7 @@ define void @clobber_base() #0 {
; CHECK-NEXT: leaq -8(%rbp), %rsp
; CHECK-NEXT: popq %rbx
; CHECK-NEXT: popq %rbp
-; CHECK-NEXT: leaq -16(%r10), %rsp
+; CHECK-NEXT: leaq -8(%r10), %rsp
; CHECK-NEXT: .cfi_def_cfa %rsp, 8
; CHECK-NEXT: retq
;
@@ -167,7 +167,7 @@ define x86_regcallcc void @clobber_baseptr_argptr(i32 %param1, i32 %param2, i32
; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %r10
; CHECK-NEXT: .cfi_def_cfa %r10, 0
; CHECK-NEXT: andq $-128, %rsp
-; CHECK-NEXT: pushq -16(%r10)
+; CHECK-NEXT: pushq -8(%r10)
; CHECK-NEXT: pushq %rbp
; CHECK-NEXT: movq %rsp, %rbp
; CHECK-NEXT: .cfi_escape 0x10, 0x06, 0x02, 0x76, 0x00 #
@@ -226,7 +226,7 @@ define x86_regcallcc void @clobber_baseptr_argptr(i32 %param1, i32 %param2, i32
; CHECK-NEXT: leaq -8(%rbp), %rsp
; CHECK-NEXT: popq %rbx
; CHECK-NEXT: popq %rbp
-; CHECK-NEXT: leaq -16(%r10), %rsp
+; CHECK-NEXT: leaq -8(%r10), %rsp
; CHECK-NEXT: .cfi_def_cfa %rsp, 8
; CHECK-NEXT: retq
;
More information about the llvm-commits
mailing list