[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