[llvm] 9b8fcd0 - [X86] Fix cmp order in probing BuildStackAlignAND

Josh Stone via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 13 12:11:21 PST 2022


Author: Josh Stone
Date: 2022-12-13T12:10:39-08:00
New Revision: 9b8fcd04ef64cbe124f30b8cb49633b785b840d7

URL: https://github.com/llvm/llvm-project/commit/9b8fcd04ef64cbe124f30b8cb49633b785b840d7
DIFF: https://github.com/llvm/llvm-project/commit/9b8fcd04ef64cbe124f30b8cb49633b785b840d7.diff

LOG: [X86] Fix cmp order in probing BuildStackAlignAND

Due to reversed arguments, the loop start was almost always skipping the
whole loop, since FinalStackProbed is probably less than StackPtr for
large alignments. The intent was to skip the loop if the first sub on
StackPtr made it less than FinalStackProbed already, so flip it.

Reviewed By: serge-sans-paille

Differential Revision: https://reviews.llvm.org/D139756

Added: 
    

Modified: 
    llvm/lib/Target/X86/X86FrameLowering.cpp
    llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
    llvm/test/CodeGen/X86/stack-clash-small-large-align.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index dd853dd08632e..9d2fbea443f51 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -1293,11 +1293,11 @@ void X86FrameLowering::BuildStackAlignAND(MachineBasicBlock &MBB,
 
         BuildMI(headMBB, DL,
                 TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr))
-            .addReg(FinalStackProbed)
             .addReg(StackPtr)
+            .addReg(FinalStackProbed)
             .setMIFlag(MachineInstr::FrameSetup);
 
-        // jump
+        // jump to the footer if StackPtr < FinalStackProbed
         BuildMI(headMBB, DL, TII.get(X86::JCC_1))
             .addMBB(footMBB)
             .addImm(X86::COND_B)
@@ -1329,7 +1329,7 @@ void X86FrameLowering::BuildStackAlignAND(MachineBasicBlock &MBB,
             .addReg(StackPtr)
             .setMIFlag(MachineInstr::FrameSetup);
 
-        // jump
+        // jump back while FinalStackProbed < StackPtr
         BuildMI(bodyMBB, DL, TII.get(X86::JCC_1))
             .addMBB(bodyMBB)
             .addImm(X86::COND_B)

diff  --git a/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll b/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
index 1ade41e0f09b1..83297cfb6280a 100644
--- a/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
+++ b/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
@@ -44,7 +44,7 @@ define i32 @foo_protect() local_unnamed_addr #0 {
 ; CHECK-NEXT:    je .LBB1_4
 ; CHECK-NEXT:  # %bb.1:
 ; CHECK-NEXT:    subq $4096, %rsp # imm = 0x1000
-; CHECK-NEXT:    cmpq %rsp, %r11
+; CHECK-NEXT:    cmpq %r11, %rsp
 ; CHECK-NEXT:    jb .LBB1_3
 ; CHECK-NEXT:  .LBB1_2: # =>This Inner Loop Header: Depth=1
 ; CHECK-NEXT:    movq $0, (%rsp)

diff  --git a/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll b/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll
index 26060fb297f67..5f02e9e0e0b4e 100644
--- a/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll
+++ b/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll
@@ -40,7 +40,7 @@ define i32 @foo_protect() local_unnamed_addr #0 {
 ; CHECK-NEXT:    je .LBB1_4
 ; CHECK-NEXT:  # %bb.1:
 ; CHECK-NEXT:    subq $4096, %rsp # imm = 0x1000
-; CHECK-NEXT:    cmpq %rsp, %r11
+; CHECK-NEXT:    cmpq %r11, %rsp
 ; CHECK-NEXT:    jb .LBB1_3
 ; CHECK-NEXT:  .LBB1_2: # =>This Inner Loop Header: Depth=1
 ; CHECK-NEXT:    movq $0, (%rsp)


        


More information about the llvm-commits mailing list