From 12313ca2731ecc884495b1f28e726ef58dbf377b Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 11 Jan 2012 18:23:35 +0000 Subject: [PATCH] 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 --- lib/Target/X86/X86FrameLowering.cpp | 2 +- test/CodeGen/X86/segmented-stacks.ll | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Target/X86/X86FrameLowering.cpp b/lib/Target/X86/X86FrameLowering.cpp index 058b39a1c71..fba4788d6a5 100644 --- a/lib/Target/X86/X86FrameLowering.cpp +++ b/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/test/CodeGen/X86/segmented-stacks.ll b/test/CodeGen/X86/segmented-stacks.ll index 7854cbd060a..27537c085c8 100644 --- a/test/CodeGen/X86/segmented-stacks.ll +++ b/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