[llvm] r265046 - Revert r265039 "[X86] Merge adjacent stack adjustments in eliminateCallFramePseudoInstr (PR27140)"
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 31 13:27:32 PDT 2016
Author: hans
Date: Thu Mar 31 15:27:30 2016
New Revision: 265046
URL: http://llvm.org/viewvc/llvm-project?rev=265046&view=rev
Log:
Revert r265039 "[X86] Merge adjacent stack adjustments in eliminateCallFramePseudoInstr (PR27140)"
I think it might have caused these build breakages:
http://lab.llvm.org:8011/builders/clang-x86-win2008-selfhost/builds/7234/steps/build%20stage%202/logs/stdio
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/19566/steps/run%20tests/logs/stdio
Modified:
llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
llvm/trunk/test/CodeGen/X86/2006-05-02-InstrSched1.ll
llvm/trunk/test/CodeGen/X86/fold-push.ll
llvm/trunk/test/CodeGen/X86/force-align-stack-alloca.ll
llvm/trunk/test/CodeGen/X86/localescape.ll
llvm/trunk/test/CodeGen/X86/memset-2.ll
llvm/trunk/test/CodeGen/X86/movtopush.ll
llvm/trunk/test/CodeGen/X86/push-cfi-debug.ll
llvm/trunk/test/CodeGen/X86/push-cfi.ll
Modified: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86FrameLowering.cpp?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp Thu Mar 31 15:27:30 2016
@@ -2534,22 +2534,13 @@ eliminateCallFramePseudoInstr(MachineFun
BuildCFI(MBB, I, DL,
MCCFIInstruction::createAdjustCfaOffset(nullptr, -InternalAmt));
- // Add Amount to SP to destroy a frame, or subtract to setup.
- int64_t StackAdjustment = isDestroy ? Amount : -Amount;
-
- if (StackAdjustment) {
- // Merge with any previous or following adjustment instruction.
- StackAdjustment += mergeSPUpdates(MBB, I, true);
- StackAdjustment += mergeSPUpdates(MBB, I, false);
-
- if (!StackAdjustment) {
- // This and the merged instruction canceled out each other.
- return I;
- }
-
- if (!(Fn->optForMinSize() &&
- adjustStackWithPops(MBB, I, DL, StackAdjustment)))
- BuildStackAdjustment(MBB, I, DL, StackAdjustment, /*InEpilogue=*/false);
+ if (Amount) {
+ // Add Amount to SP to destroy a frame, and subtract to setup.
+ int Offset = isDestroy ? Amount : -Amount;
+
+ if (!(Fn->optForMinSize() &&
+ adjustStackWithPops(MBB, I, DL, Offset)))
+ BuildStackAdjustment(MBB, I, DL, Offset, /*InEpilogue=*/false);
}
if (DwarfCFI && !hasFP(MF)) {
@@ -2559,12 +2550,14 @@ eliminateCallFramePseudoInstr(MachineFun
// CFI only for EH purposes or for debugging. EH only requires the CFA
// offset to be correct at each call site, while for debugging we want
// it to be more precise.
-
+ int CFAOffset = Amount;
// TODO: When not using precise CFA, we also need to adjust for the
// InternalAmt here.
- if (StackAdjustment) {
- BuildCFI(MBB, I, DL, MCCFIInstruction::createAdjustCfaOffset(
- nullptr, -StackAdjustment));
+
+ if (CFAOffset) {
+ CFAOffset = isDestroy ? -CFAOffset : CFAOffset;
+ BuildCFI(MBB, I, DL,
+ MCCFIInstruction::createAdjustCfaOffset(nullptr, CFAOffset));
}
}
Modified: llvm/trunk/test/CodeGen/X86/2006-05-02-InstrSched1.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/2006-05-02-InstrSched1.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/2006-05-02-InstrSched1.ll (original)
+++ llvm/trunk/test/CodeGen/X86/2006-05-02-InstrSched1.ll Thu Mar 31 15:27:30 2016
@@ -1,6 +1,6 @@
; REQUIRES: asserts
; RUN: llc < %s -mtriple=i686-unknown-linux -relocation-model=static -stats 2>&1 | \
-; RUN: grep asm-printer | grep 14
+; RUN: grep asm-printer | grep 15
;
; It's possible to schedule this in 14 instructions by avoiding
; callee-save registers, but the scheduler isn't currently that
Modified: llvm/trunk/test/CodeGen/X86/fold-push.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fold-push.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/fold-push.ll (original)
+++ llvm/trunk/test/CodeGen/X86/fold-push.ll Thu Mar 31 15:27:30 2016
@@ -14,7 +14,7 @@ define void @test(i32 %a, i32 %b) optsiz
; SLM: movl (%esp), [[RELOAD:%e..]]
; SLM-NEXT: pushl [[RELOAD]]
; CHECK: calll
-; CHECK-NEXT: addl $8, %esp
+; CHECK-NEXT: addl $4, %esp
%c = add i32 %a, %b
call void @foo(i32 %c)
call void asm sideeffect "nop", "~{ax},~{bx},~{cx},~{dx},~{bp},~{si},~{di}"()
Modified: llvm/trunk/test/CodeGen/X86/force-align-stack-alloca.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/force-align-stack-alloca.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/force-align-stack-alloca.ll (original)
+++ llvm/trunk/test/CodeGen/X86/force-align-stack-alloca.ll Thu Mar 31 15:27:30 2016
@@ -32,21 +32,15 @@ define i64 @g(i32 %i) nounwind {
; CHECK: movl %{{...}}, %esp
; CHECK-NOT: {{[^ ,]*}}, %esp
;
-; Next we set up the memset call.
+; Next we set up the memset call, and then undo it.
; CHECK: subl $20, %esp
; CHECK-NOT: {{[^ ,]*}}, %esp
-; CHECK: pushl
-; CHECK: pushl
-; CHECK: pushl
; CHECK: calll memset
-;
-; Deallocating 32 bytes of outgoing call frame for memset and
-; allocating 28 bytes for calling f yields a 4-byte adjustment:
-; CHECK-NEXT: addl $4, %esp
+; CHECK-NEXT: addl $32, %esp
; CHECK-NOT: {{[^ ,]*}}, %esp
;
-; And move on to call 'f', and then restore the stack.
-; CHECK: pushl
+; Next we set up the call to 'f'.
+; CHECK: subl $28, %esp
; CHECK-NOT: {{[^ ,]*}}, %esp
; CHECK: calll f
; CHECK-NEXT: addl $32, %esp
Modified: llvm/trunk/test/CodeGen/X86/localescape.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/localescape.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/localescape.ll (original)
+++ llvm/trunk/test/CodeGen/X86/localescape.ll Thu Mar 31 15:27:30 2016
@@ -137,5 +137,6 @@ define void @alloc_func_no_frameaddr() {
; X86: movl $13, (%esp)
; X86: pushl $0
; X86: calll _print_framealloc_from_fp
-; X86: addl $12, %esp
+; X86: addl $4, %esp
+; X86: addl $8, %esp
; X86: retl
Modified: llvm/trunk/test/CodeGen/X86/memset-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/memset-2.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/memset-2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/memset-2.ll Thu Mar 31 15:27:30 2016
@@ -5,7 +5,7 @@ declare void @llvm.memset.i32(i8*, i8, i
define fastcc void @t1() nounwind {
; CHECK-LABEL: t1:
-; CHECK: subl $16, %esp
+; CHECK: subl $12, %esp
; CHECK: pushl $188
; CHECK-NEXT: pushl $0
; CHECK-NEXT: pushl $0
Modified: llvm/trunk/test/CodeGen/X86/movtopush.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/movtopush.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/movtopush.ll (original)
+++ llvm/trunk/test/CodeGen/X86/movtopush.ll Thu Mar 31 15:27:30 2016
@@ -2,7 +2,6 @@
; RUN: llc < %s -mtriple=i686-windows -no-x86-call-frame-opt | FileCheck %s -check-prefix=NOPUSH
; RUN: llc < %s -mtriple=x86_64-windows | FileCheck %s -check-prefix=X64
; RUN: llc < %s -mtriple=i686-windows -stackrealign -stack-alignment=32 | FileCheck %s -check-prefix=ALIGNED
-; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s -check-prefix=LINUX
%class.Class = type { i32 }
%struct.s = type { i64 }
@@ -224,7 +223,8 @@ entry:
; NORMAL-NEXT: pushl $2
; NORMAL-NEXT: pushl $1
; NORMAL-NEXT: call
-; NORMAL-NEXT: subl $4, %esp
+; NORMAL-NEXT: addl $16, %esp
+; NORMAL-NEXT: subl $20, %esp
; NORMAL-NEXT: movl 20(%esp), [[E1:%e..]]
; NORMAL-NEXT: movl 24(%esp), [[E2:%e..]]
; NORMAL-NEXT: movl [[E2]], 4(%esp)
@@ -261,7 +261,7 @@ entry:
; NORMAL-NEXT: pushl $2
; NORMAL-NEXT: pushl $1
; NORMAL-NEXT: calll *16(%esp)
-; NORMAL-NEXT: addl $24, %esp
+; NORMAL-NEXT: addl $16, %esp
define void @test10() optsize {
%stack_fptr = alloca void (i32, i32, i32, i32)*
store void (i32, i32, i32, i32)* @good, void (i32, i32, i32, i32)** %stack_fptr
@@ -314,7 +314,8 @@ entry:
; NORMAL-NEXT: pushl $2
; NORMAL-NEXT: pushl $1
; NORMAL-NEXT: calll _good
-; NORMAL-NEXT: subl $4, %esp
+; NORMAL-NEXT: addl $16, %esp
+; NORMAL-NEXT: subl $20, %esp
; NORMAL: movl $8, 16(%esp)
; NORMAL-NEXT: movl $7, 12(%esp)
; NORMAL-NEXT: movl $6, 8(%esp)
@@ -357,27 +358,3 @@ entry:
call void @good(i32 %val1, i32 %val2, i32 %val3, i32 %add)
ret i32* %ptr3
}
-
-; Make sure to fold adjacent stack adjustments.
-; LINUX-LABEL: pr27140:
-; LINUX: subl $12, %esp
-; LINUX: .cfi_def_cfa_offset 16
-; LINUX-NOT: sub
-; LINUX: pushl $4
-; LINUX: .cfi_adjust_cfa_offset 4
-; LINUX: pushl $3
-; LINUX: .cfi_adjust_cfa_offset 4
-; LINUX: pushl $2
-; LINUX: .cfi_adjust_cfa_offset 4
-; LINUX: pushl $1
-; LINUX: .cfi_adjust_cfa_offset 4
-; LINUX: calll good
-; LINUX: addl $28, %esp
-; LINUX: .cfi_adjust_cfa_offset -28
-; LINUX-NOT: add
-; LINUX: retl
-define void @pr27140() optsize {
-entry:
- tail call void @good(i32 1, i32 2, i32 3, i32 4)
- ret void
-}
Modified: llvm/trunk/test/CodeGen/X86/push-cfi-debug.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/push-cfi-debug.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/push-cfi-debug.ll (original)
+++ llvm/trunk/test/CodeGen/X86/push-cfi-debug.ll Thu Mar 31 15:27:30 2016
@@ -23,8 +23,8 @@ declare x86_stdcallcc void @stdfoo(i32,
; CHECK: .cfi_adjust_cfa_offset 4
; CHECK: calll stdfoo
; CHECK: .cfi_adjust_cfa_offset -8
-; CHECK: addl $20, %esp
-; CHECK: .cfi_adjust_cfa_offset -20
+; CHECK: addl $8, %esp
+; CHECK: .cfi_adjust_cfa_offset -8
define void @test1() #0 !dbg !4 {
entry:
tail call void @foo(i32 1, i32 2) #1, !dbg !10
Modified: llvm/trunk/test/CodeGen/X86/push-cfi.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/push-cfi.ll?rev=265046&r1=265045&r2=265046&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/push-cfi.ll (original)
+++ llvm/trunk/test/CodeGen/X86/push-cfi.ll Thu Mar 31 15:27:30 2016
@@ -82,8 +82,8 @@ cleanup:
; LINUX-NEXT: Ltmp{{[0-9]+}}:
; LINUX-NEXT: .cfi_adjust_cfa_offset 4
; LINUX-NEXT: call
-; LINUX-NEXT: addl $28, %esp
-; LINUX: .cfi_adjust_cfa_offset -28
+; LINUX-NEXT: addl $16, %esp
+; LINUX: .cfi_adjust_cfa_offset -16
; DARWIN-NOT: .cfi_escape
; DARWIN-NOT: pushl
define void @test2_nofp() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
More information about the llvm-commits
mailing list