[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