blob: 19972f74b2ba3c621cc5d40cc21207e0709d5bab [file] [log] [blame]
Benjamin Kramerefa81402011-04-26 18:47:43 +00001; RUN: llc -fast-isel -O0 -mtriple=i386-apple-darwin10 -relocation-model=pic < %s | FileCheck %s
Dan Gohman84023e02010-07-10 09:00:22 +00002
3; This should use flds to set the return value.
4; CHECK: test0:
5; CHECK: flds
6; CHECK: ret
7@G = external global float
8define float @test0() nounwind {
9 %t = load float* @G
10 ret float %t
11}
12
13; This should pop 4 bytes on return.
14; CHECK: test1:
15; CHECK: ret $4
16define void @test1({i32, i32, i32, i32}* sret %p) nounwind {
17 store {i32, i32, i32, i32} zeroinitializer, {i32, i32, i32, i32}* %p
18 ret void
19}
20
21; Properly initialize the pic base.
22; CHECK: test2:
23; CHECK-NOT: HHH
24; CHECK: call{{.*}}L2$pb
25; CHECK-NEXT: L2$pb:
26; CHECK-NEXT: pop
27; CHECK: HHH
28; CHECK: ret
29@HHH = external global i32
30define i32 @test2() nounwind {
Dan Gohmane695de02010-07-10 22:42:12 +000031 %t = load i32* @HHH
Dan Gohman84023e02010-07-10 09:00:22 +000032 ret i32 %t
33}
Eli Friedmand227eed2011-04-28 20:19:12 +000034
35; Check that we fast-isel sret, and handle the callee-pops behavior correctly.
36%struct.a = type { i64, i64, i64 }
37define void @test3() nounwind ssp {
38entry:
39 %tmp = alloca %struct.a, align 8
40 call void @test3sret(%struct.a* sret %tmp)
41 ret void
42; CHECK: test3:
43; CHECK: subl $44
44; CHECK: leal 16(%esp)
45; CHECK: calll _test3sret
46; CHECK: addl $40
47}
48declare void @test3sret(%struct.a* sret)