summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2012-01-11 18:23:35 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2012-01-11 18:23:35 +0000
commit2b89448d601d40fa1ba6da34031213e9bd1e5b24 (patch)
tree27306dc99c144e6298a39803f4148f0bbe579311 /llvm
parent687d0781926e996d51fc7cd11e3b03d1cb9f6b1b (diff)
downloadbcm5719-llvm-2b89448d601d40fa1ba6da34031213e9bd1e5b24.tar.gz
bcm5719-llvm-2b89448d601d40fa1ba6da34031213e9bd1e5b24.zip
Use unsigned comparison in segmented stack prologue.
This is a comparison of two addresses, and GCC does the comparison unsigned. Patch by Brian Anderson. llvm-svn: 147954
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/X86/X86FrameLowering.cpp2
-rw-r--r--llvm/test/CodeGen/X86/segmented-stacks.ll6
2 files changed, 7 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/X86FrameLowering.cpp b/llvm/lib/Target/X86/X86FrameLowering.cpp
index 058b39a1c71..fba4788d6a5 100644
--- a/llvm/lib/Target/X86/X86FrameLowering.cpp
+++ b/llvm/lib/Target/X86/X86FrameLowering.cpp
@@ -1405,7 +1405,7 @@ X86FrameLowering::adjustForSegmentedStacks(MachineFunction &MF) const {
// This jump is taken if SP >= (Stacklet Limit + Stack Space required).
// It jumps to normal execution of the function body.
- BuildMI(checkMBB, DL, TII.get(X86::JG_4)).addMBB(&prologueMBB);
+ BuildMI(checkMBB, DL, TII.get(X86::JA_4)).addMBB(&prologueMBB);
// On 32 bit we first push the arguments size and then the frame size. On 64
// bit, we pass the stack frame size in r10 and the argument size in r11.
diff --git a/llvm/test/CodeGen/X86/segmented-stacks.ll b/llvm/test/CodeGen/X86/segmented-stacks.ll
index 7854cbd060a..27537c085c8 100644
--- a/llvm/test/CodeGen/X86/segmented-stacks.ll
+++ b/llvm/test/CodeGen/X86/segmented-stacks.ll
@@ -25,6 +25,7 @@ false:
; X32: test_basic:
; X32: cmpl %gs:48, %esp
+; X32-NEXT: ja .LBB0_2
; X32: pushl $4
; X32-NEXT: pushl $12
@@ -45,6 +46,7 @@ false:
; X64: test_basic:
; X64: cmpq %fs:112, %rsp
+; X64-NEXT: ja .LBB0_2
; X64: movabsq $24, %r10
; X64-NEXT: movabsq $0, %r11
@@ -69,6 +71,7 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) {
ret i32 %result
; X32: cmpl %gs:48, %esp
+; X32-NEXT: ja .LBB1_2
; X32: pushl $4
; X32-NEXT: pushl $0
@@ -76,6 +79,7 @@ define i32 @test_nested(i32 * nest %closure, i32 %other) {
; X32-NEXT: ret
; X64: cmpq %fs:112, %rsp
+; X64-NEXT: ja .LBB1_2
; X64: movq %r10, %rax
; X64-NEXT: movabsq $0, %r10
@@ -93,6 +97,7 @@ define void @test_large() {
; X32: leal -40012(%esp), %ecx
; X32-NEXT: cmpl %gs:48, %ecx
+; X32-NEXT: ja .LBB2_2
; X32: pushl $0
; X32-NEXT: pushl $40012
@@ -101,6 +106,7 @@ define void @test_large() {
; X64: leaq -40008(%rsp), %r11
; X64-NEXT: cmpq %fs:112, %r11
+; X64-NEXT: ja .LBB2_2
; X64: movabsq $40008, %r10
; X64-NEXT: movabsq $0, %r11
OpenPOWER on IntegriCloud