[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