[PATCH] D139756: [X86] Fix cmp order in probing BuildStackAlignAND

Josh Stone via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 9 17:13:46 PST 2022


cuviper created this revision.
cuviper added a reviewer: serge-sans-paille.
Herald added subscribers: pengfei, hiraditya.
Herald added a project: All.
cuviper requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

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.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D139756

Files:
  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


Index: llvm/test/CodeGen/X86/stack-clash-small-large-align.ll
===================================================================
--- llvm/test/CodeGen/X86/stack-clash-small-large-align.ll
+++ llvm/test/CodeGen/X86/stack-clash-small-large-align.ll
@@ -40,7 +40,7 @@
 ; 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)
Index: llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
===================================================================
--- llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
+++ llvm/test/CodeGen/X86/stack-clash-large-large-align.ll
@@ -44,7 +44,7 @@
 ; 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)
Index: llvm/lib/Target/X86/X86FrameLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86FrameLowering.cpp
+++ llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -1293,11 +1293,11 @@
 
         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 @@
             .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)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139756.481795.patch
Type: text/x-patch
Size: 2111 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221210/e3fbdee9/attachment.bin>


More information about the llvm-commits mailing list