mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
0558b04f57
This reverts commit r262370. It turns out there is code out there that does sequences of allocas greater than 4K: http://crbug.com/591404 The goal of this change was to improve the code size of inalloca call sequences, but we got tangled up in the mess of dynamic allocas. Instead, we should come back later with a separate MI pass that uses dominance to optimize the full sequence. This should also be able to remove the often unneeded stacksave/stackrestore pairs around the call. llvm-svn: 262505
35 lines
846 B
LLVM
35 lines
846 B
LLVM
; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s
|
|
|
|
%Foo = type { i32, i32 }
|
|
|
|
%frame = type { %Foo, i32, %Foo }
|
|
|
|
declare void @f(%frame* inalloca %a)
|
|
|
|
declare void @Foo_ctor(%Foo* %this)
|
|
|
|
define void @g() {
|
|
entry:
|
|
%args = alloca inalloca %frame
|
|
%c = getelementptr %frame, %frame* %args, i32 0, i32 2
|
|
; CHECK: movl $20, %eax
|
|
; CHECK: calll __chkstk
|
|
; CHECK: movl %esp,
|
|
call void @Foo_ctor(%Foo* %c)
|
|
; CHECK: leal 12(%{{.*}}),
|
|
; CHECK-NEXT: pushl
|
|
; CHECK-NEXT: calll _Foo_ctor
|
|
; CHECK: addl $4, %esp
|
|
%b = getelementptr %frame, %frame* %args, i32 0, i32 1
|
|
store i32 42, i32* %b
|
|
; CHECK: movl $42,
|
|
%a = getelementptr %frame, %frame* %args, i32 0, i32 0
|
|
call void @Foo_ctor(%Foo* %a)
|
|
; CHECK-NEXT: pushl
|
|
; CHECK-NEXT: calll _Foo_ctor
|
|
; CHECK: addl $4, %esp
|
|
call void @f(%frame* inalloca %args)
|
|
; CHECK: calll _f
|
|
ret void
|
|
}
|