1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=m68k-linux -verify-machineinstrs | FileCheck %s 3 4define { i32, i32, i32, i32 } @test0() { 5; CHECK-LABEL: test0: 6; CHECK: .cfi_startproc 7; CHECK-NEXT: ; %bb.0: ; %start 8; CHECK-NEXT: move.l (4,%sp), %a0 9; CHECK-NEXT: move.l #23, (12,%a0) 10; CHECK-NEXT: move.l #19, (8,%a0) 11; CHECK-NEXT: move.l #17, (4,%a0) 12; CHECK-NEXT: move.l #13, (%a0) 13; CHECK-NEXT: move.l %a0, %d0 14; CHECK-NEXT: move.l (%sp), %a1 15; CHECK-NEXT: adda.l #4, %sp 16; CHECK-NEXT: move.l %a1, (%sp) 17; CHECK-NEXT: rts 18start: 19 ret { i32, i32, i32, i32 } { i32 13, i32 17, i32 19, i32 23 } 20} 21 22define 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 33start: 34 %val = call { i32, i32, i32, i32 } @test0() 35 ret void 36} 37 38define 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 47start: 48 ret void 49} 50 51define 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 62start: 63 %ret_val = alloca { i32, i32, i32, i32 } 64 call void @test1(ptr %ret_val) 65 ret void 66} 67 68define 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 74start: 75 ret i32 13 76} 77 78define 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 87start: 88 %0 = call i32 @test2() 89 ret void 90} 91