1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s
3
3
4
- define { i32 , i32 , i32 , i32 } @test () {
5
- ; CHECK-LABEL: test :
4
+ define { i32 , i32 , i32 , i32 } @test0 () {
5
+ ; CHECK-LABEL: test0 :
6
6
; CHECK: .cfi_startproc
7
7
; CHECK-NEXT: ; %bb.0: ; %start
8
8
; CHECK-NEXT: move.l (4,%sp), %a0
@@ -18,3 +18,73 @@ define { i32, i32, i32, i32 } @test() {
18
18
start:
19
19
ret { i32 , i32 , i32 , i32 } { i32 13 , i32 17 , i32 19 , i32 23 }
20
20
}
21
+
22
+ define void @call_test0 () {
23
+ ; CHECK-LABEL: call_test0:
24
+ ; CHECK: .cfi_startproc
25
+ ; CHECK-NEXT: ; %bb.0: ; %start
26
+ ; CHECK-NEXT: suba.l #20, %sp
27
+ ; CHECK-NEXT: .cfi_def_cfa_offset -24
28
+ ; CHECK-NEXT: lea (4,%sp), %a0
29
+ ; CHECK-NEXT: move.l %a0, (%sp)
30
+ ; CHECK-NEXT: jsr test0
31
+ ; CHECK-NEXT: adda.l #16, %sp
32
+ ; CHECK-NEXT: rts
33
+ start:
34
+ %val = call { i32 , i32 , i32 , i32 } @test0 ()
35
+ ret void
36
+ }
37
+
38
+ define void @test1 (ptr sret ({ i32 , i32 , i32 , i32 }) %ret_val ) {
39
+ ; CHECK-LABEL: test1:
40
+ ; CHECK: .cfi_startproc
41
+ ; CHECK-NEXT: ; %bb.0: ; %start
42
+ ; CHECK-NEXT: move.l (4,%sp), %d0
43
+ ; CHECK-NEXT: move.l (%sp), %a1
44
+ ; CHECK-NEXT: adda.l #4, %sp
45
+ ; CHECK-NEXT: move.l %a1, (%sp)
46
+ ; CHECK-NEXT: rts
47
+ start:
48
+ ret void
49
+ }
50
+
51
+ define void @call_test1 () {
52
+ ; CHECK-LABEL: call_test1:
53
+ ; CHECK: .cfi_startproc
54
+ ; CHECK-NEXT: ; %bb.0: ; %start
55
+ ; CHECK-NEXT: suba.l #20, %sp
56
+ ; CHECK-NEXT: .cfi_def_cfa_offset -24
57
+ ; CHECK-NEXT: lea (4,%sp), %a0
58
+ ; CHECK-NEXT: move.l %a0, (%sp)
59
+ ; CHECK-NEXT: jsr test1
60
+ ; CHECK-NEXT: adda.l #16, %sp
61
+ ; CHECK-NEXT: rts
62
+ start:
63
+ %ret_val = alloca { i32 , i32 , i32 , i32 }
64
+ call void @test1 (ptr %ret_val )
65
+ ret void
66
+ }
67
+
68
+ define i32 @test2 () {
69
+ ; CHECK-LABEL: test2:
70
+ ; CHECK: .cfi_startproc
71
+ ; CHECK-NEXT: ; %bb.0: ; %start
72
+ ; CHECK-NEXT: moveq #13, %d0
73
+ ; CHECK-NEXT: rts
74
+ start:
75
+ ret i32 13
76
+ }
77
+
78
+ define void @call_test2 () {
79
+ ; CHECK-LABEL: call_test2:
80
+ ; CHECK: .cfi_startproc
81
+ ; CHECK-NEXT: ; %bb.0: ; %start
82
+ ; CHECK-NEXT: suba.l #4, %sp
83
+ ; CHECK-NEXT: .cfi_def_cfa_offset -8
84
+ ; CHECK-NEXT: jsr test2
85
+ ; CHECK-NEXT: adda.l #4, %sp
86
+ ; CHECK-NEXT: rts
87
+ start:
88
+ %0 = call i32 @test2 ()
89
+ ret void
90
+ }
0 commit comments