xref: /llvm-project/llvm/test/CodeGen/M68k/multiple-return.ll (revision 3006dddfe091bcb95924d72dddbb84f73186a344)
174522126SIan Douglas Scott; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
274522126SIan Douglas Scott; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s
374522126SIan Douglas Scott
4*3006dddfSJanis Heimsdefine { i32, i32, i32, i32 } @test0() {
5*3006dddfSJanis Heims; CHECK-LABEL: test0:
674522126SIan Douglas Scott; CHECK:         .cfi_startproc
774522126SIan Douglas Scott; CHECK-NEXT:  ; %bb.0: ; %start
874522126SIan Douglas Scott; CHECK-NEXT:    move.l (4,%sp), %a0
974522126SIan Douglas Scott; CHECK-NEXT:    move.l #23, (12,%a0)
1074522126SIan Douglas Scott; CHECK-NEXT:    move.l #19, (8,%a0)
1174522126SIan Douglas Scott; CHECK-NEXT:    move.l #17, (4,%a0)
1274522126SIan Douglas Scott; CHECK-NEXT:    move.l #13, (%a0)
1374522126SIan Douglas Scott; CHECK-NEXT:    move.l %a0, %d0
1474522126SIan Douglas Scott; CHECK-NEXT:    move.l (%sp), %a1
1574522126SIan Douglas Scott; CHECK-NEXT:    adda.l #4, %sp
1674522126SIan Douglas Scott; CHECK-NEXT:    move.l %a1, (%sp)
1774522126SIan Douglas Scott; CHECK-NEXT:    rts
1874522126SIan Douglas Scottstart:
1974522126SIan Douglas Scott  ret { i32, i32, i32, i32 } { i32 13, i32 17, i32 19, i32 23 }
2074522126SIan Douglas Scott}
21*3006dddfSJanis Heims
22*3006dddfSJanis Heimsdefine void @call_test0() {
23*3006dddfSJanis Heims; CHECK-LABEL: call_test0:
24*3006dddfSJanis Heims; CHECK:         .cfi_startproc
25*3006dddfSJanis Heims; CHECK-NEXT:  ; %bb.0: ; %start
26*3006dddfSJanis Heims; CHECK-NEXT:    suba.l #20, %sp
27*3006dddfSJanis Heims; CHECK-NEXT:    .cfi_def_cfa_offset -24
28*3006dddfSJanis Heims; CHECK-NEXT:    lea (4,%sp), %a0
29*3006dddfSJanis Heims; CHECK-NEXT:    move.l %a0, (%sp)
30*3006dddfSJanis Heims; CHECK-NEXT:    jsr test0
31*3006dddfSJanis Heims; CHECK-NEXT:    adda.l #16, %sp
32*3006dddfSJanis Heims; CHECK-NEXT:    rts
33*3006dddfSJanis Heimsstart:
34*3006dddfSJanis Heims  %val = call { i32, i32, i32, i32 } @test0()
35*3006dddfSJanis Heims  ret void
36*3006dddfSJanis Heims}
37*3006dddfSJanis Heims
38*3006dddfSJanis Heimsdefine void @test1(ptr sret({ i32, i32, i32, i32 }) %ret_val) {
39*3006dddfSJanis Heims; CHECK-LABEL: test1:
40*3006dddfSJanis Heims; CHECK:         .cfi_startproc
41*3006dddfSJanis Heims; CHECK-NEXT:  ; %bb.0: ; %start
42*3006dddfSJanis Heims; CHECK-NEXT:    move.l (4,%sp), %d0
43*3006dddfSJanis Heims; CHECK-NEXT:    move.l (%sp), %a1
44*3006dddfSJanis Heims; CHECK-NEXT:    adda.l #4, %sp
45*3006dddfSJanis Heims; CHECK-NEXT:    move.l %a1, (%sp)
46*3006dddfSJanis Heims; CHECK-NEXT:    rts
47*3006dddfSJanis Heimsstart:
48*3006dddfSJanis Heims  ret void
49*3006dddfSJanis Heims}
50*3006dddfSJanis Heims
51*3006dddfSJanis Heimsdefine void @call_test1() {
52*3006dddfSJanis Heims; CHECK-LABEL: call_test1:
53*3006dddfSJanis Heims; CHECK:         .cfi_startproc
54*3006dddfSJanis Heims; CHECK-NEXT:  ; %bb.0: ; %start
55*3006dddfSJanis Heims; CHECK-NEXT:    suba.l #20, %sp
56*3006dddfSJanis Heims; CHECK-NEXT:    .cfi_def_cfa_offset -24
57*3006dddfSJanis Heims; CHECK-NEXT:    lea (4,%sp), %a0
58*3006dddfSJanis Heims; CHECK-NEXT:    move.l %a0, (%sp)
59*3006dddfSJanis Heims; CHECK-NEXT:    jsr test1
60*3006dddfSJanis Heims; CHECK-NEXT:    adda.l #16, %sp
61*3006dddfSJanis Heims; CHECK-NEXT:    rts
62*3006dddfSJanis Heimsstart:
63*3006dddfSJanis Heims  %ret_val = alloca { i32, i32, i32, i32 }
64*3006dddfSJanis Heims  call void @test1(ptr %ret_val)
65*3006dddfSJanis Heims  ret void
66*3006dddfSJanis Heims}
67*3006dddfSJanis Heims
68*3006dddfSJanis Heimsdefine i32 @test2() {
69*3006dddfSJanis Heims; CHECK-LABEL: test2:
70*3006dddfSJanis Heims; CHECK:         .cfi_startproc
71*3006dddfSJanis Heims; CHECK-NEXT:  ; %bb.0: ; %start
72*3006dddfSJanis Heims; CHECK-NEXT:    moveq #13, %d0
73*3006dddfSJanis Heims; CHECK-NEXT:    rts
74*3006dddfSJanis Heimsstart:
75*3006dddfSJanis Heims  ret i32 13
76*3006dddfSJanis Heims}
77*3006dddfSJanis Heims
78*3006dddfSJanis Heimsdefine void @call_test2() {
79*3006dddfSJanis Heims; CHECK-LABEL: call_test2:
80*3006dddfSJanis Heims; CHECK:         .cfi_startproc
81*3006dddfSJanis Heims; CHECK-NEXT:  ; %bb.0: ; %start
82*3006dddfSJanis Heims; CHECK-NEXT:    suba.l #4, %sp
83*3006dddfSJanis Heims; CHECK-NEXT:    .cfi_def_cfa_offset -8
84*3006dddfSJanis Heims; CHECK-NEXT:    jsr test2
85*3006dddfSJanis Heims; CHECK-NEXT:    adda.l #4, %sp
86*3006dddfSJanis Heims; CHECK-NEXT:    rts
87*3006dddfSJanis Heimsstart:
88*3006dddfSJanis Heims  %0 = call i32 @test2()
89*3006dddfSJanis Heims  ret void
90*3006dddfSJanis Heims}
91