mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +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
66 lines
1.7 KiB
LLVM
66 lines
1.7 KiB
LLVM
; RUN: llc < %s -mtriple=i686-pc-win32 | FileCheck %s
|
|
|
|
%Foo = type { i32, i32 }
|
|
|
|
declare void @f(%Foo* inalloca %b)
|
|
|
|
define void @a() {
|
|
; CHECK-LABEL: _a:
|
|
entry:
|
|
%b = alloca inalloca %Foo
|
|
; CHECK: movl $8, %eax
|
|
; CHECK: calll __chkstk
|
|
%f1 = getelementptr %Foo, %Foo* %b, i32 0, i32 0
|
|
%f2 = getelementptr %Foo, %Foo* %b, i32 0, i32 1
|
|
store i32 13, i32* %f1
|
|
store i32 42, i32* %f2
|
|
; CHECK: movl %esp, %eax
|
|
; CHECK: movl $13, (%eax)
|
|
; CHECK: movl $42, 4(%eax)
|
|
call void @f(%Foo* inalloca %b)
|
|
; CHECK: calll _f
|
|
ret void
|
|
}
|
|
|
|
declare void @inreg_with_inalloca(i32 inreg %a, %Foo* inalloca %b)
|
|
|
|
define void @b() {
|
|
; CHECK-LABEL: _b:
|
|
entry:
|
|
%b = alloca inalloca %Foo
|
|
; CHECK: movl $8, %eax
|
|
; CHECK: calll __chkstk
|
|
%f1 = getelementptr %Foo, %Foo* %b, i32 0, i32 0
|
|
%f2 = getelementptr %Foo, %Foo* %b, i32 0, i32 1
|
|
store i32 13, i32* %f1
|
|
store i32 42, i32* %f2
|
|
; CHECK: movl %esp, %eax
|
|
; CHECK: movl $13, (%eax)
|
|
; CHECK: movl $42, 4(%eax)
|
|
call void @inreg_with_inalloca(i32 inreg 1, %Foo* inalloca %b)
|
|
; CHECK: movl $1, %eax
|
|
; CHECK: calll _inreg_with_inalloca
|
|
ret void
|
|
}
|
|
|
|
declare x86_thiscallcc void @thiscall_with_inalloca(i8* %a, %Foo* inalloca %b)
|
|
|
|
define void @c() {
|
|
; CHECK-LABEL: _c:
|
|
entry:
|
|
%b = alloca inalloca %Foo
|
|
; CHECK: movl $8, %eax
|
|
; CHECK: calll __chkstk
|
|
%f1 = getelementptr %Foo, %Foo* %b, i32 0, i32 0
|
|
%f2 = getelementptr %Foo, %Foo* %b, i32 0, i32 1
|
|
store i32 13, i32* %f1
|
|
store i32 42, i32* %f2
|
|
; CHECK: movl %esp, %eax
|
|
; CHECK-DAG: movl $13, (%eax)
|
|
; CHECK-DAG: movl $42, 4(%eax)
|
|
call x86_thiscallcc void @thiscall_with_inalloca(i8* null, %Foo* inalloca %b)
|
|
; CHECK-DAG: xorl %ecx, %ecx
|
|
; CHECK: calll _thiscall_with_inalloca
|
|
ret void
|
|
}
|