Use unsigned comparison in segmented stack prologue.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 11 Jan 2012 18:23:35 +0000 (18:23 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 11 Jan 2012 18:23:35 +0000 (18:23 +0000)
This is a comparison of two addresses, and GCC does the comparison unsigned.

Patch by Brian Anderson.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147954 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86FrameLowering.cpp
test/CodeGen/X86/segmented-stacks.ll

index 058b39a1c7148740f7269947708a9184411ed7a1..fba4788d6a50e1a7848f2b45c02c769aadcd264e 100644 (file)
@@ -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.
index 7854cbd060a676543b0d4f3f34cfcc4f1013073c..27537c085c818a5115d0ba83c246fb9a76050b68 100644 (file)
@@ -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