1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -O2 -mtriple=m68k -verify-machineinstrs \ 3; RUN: -code-model=large -relocation-model=static \ 4; RUN: | FileCheck %s 5 6@ptr = external global ptr 7@dst = external global i32 8@src = external global i32 9 10define void @test0() nounwind { 11; CHECK-LABEL: test0: 12; CHECK: ; %bb.0: ; %entry 13; CHECK-NEXT: move.l #dst, ptr 14; CHECK-NEXT: move.l src, dst 15; CHECK-NEXT: rts 16entry: 17 store ptr @dst, ptr @ptr 18 %tmp.s = load i32, ptr @src 19 store i32 %tmp.s, ptr @dst 20 ret void 21} 22 23@ptr2 = global ptr null 24@dst2 = global i32 0 25@src2 = global i32 0 26 27define void @test1() nounwind { 28; CHECK-LABEL: test1: 29; CHECK: ; %bb.0: ; %entry 30; CHECK-NEXT: move.l #dst2, ptr2 31; CHECK-NEXT: move.l src2, dst2 32; CHECK-NEXT: rts 33entry: 34 store ptr @dst2, ptr @ptr2 35 %tmp.s = load i32, ptr @src2 36 store i32 %tmp.s, ptr @dst2 37 ret void 38} 39 40declare ptr @malloc(i32) 41 42define void @test2() nounwind { 43; CHECK-LABEL: test2: 44; CHECK: ; %bb.0: ; %entry 45; CHECK-NEXT: suba.l #4, %sp 46; CHECK-NEXT: move.l #40, (%sp) 47; CHECK-NEXT: jsr malloc 48; CHECK-NEXT: adda.l #4, %sp 49; CHECK-NEXT: rts 50entry: 51 %ptr = call ptr @malloc(i32 40) 52 ret void 53} 54 55@pfoo = external global ptr 56declare ptr @afoo(...) 57 58 59define void @test3() nounwind { 60; CHECK-LABEL: test3: 61; CHECK: ; %bb.0: ; %entry 62; CHECK-NEXT: suba.l #4, %sp 63; CHECK-NEXT: jsr afoo 64; CHECK-NEXT: move.l %a0, pfoo 65; CHECK-NEXT: jsr (%a0) 66; CHECK-NEXT: adda.l #4, %sp 67; CHECK-NEXT: rts 68entry: 69 %tmp = call ptr(...) @afoo() 70 store ptr %tmp, ptr @pfoo 71 %tmp1 = load ptr, ptr @pfoo 72 call void(...) %tmp1() 73 ret void 74} 75 76declare void @foo(...) 77 78define void @test4() nounwind { 79; CHECK-LABEL: test4: 80; CHECK: ; %bb.0: ; %entry 81; CHECK-NEXT: suba.l #4, %sp 82; CHECK-NEXT: jsr foo 83; CHECK-NEXT: adda.l #4, %sp 84; CHECK-NEXT: rts 85entry: 86 call void(...) @foo() 87 ret void 88} 89 90@ptr6 = internal global ptr null 91@dst6 = internal global i32 0 92@src6 = internal global i32 0 93 94define void @test5() nounwind { 95; CHECK-LABEL: test5: 96; CHECK: ; %bb.0: ; %entry 97; CHECK-NEXT: move.l #dst6, ptr6 98; CHECK-NEXT: move.l src6, dst6 99; CHECK-NEXT: rts 100entry: 101 store ptr @dst6, ptr @ptr6 102 %tmp.s = load i32, ptr @src6 103 store i32 %tmp.s, ptr @dst6 104 ret void 105} 106 107define void @test7(i32 %n.u) nounwind { 108; CHECK-LABEL: test7: 109; CHECK: ; %bb.0: ; %entry 110; CHECK-NEXT: move.l (4,%sp), %d0 111; CHECK-NEXT: add.l #-1, %d0 112; CHECK-NEXT: move.l %d0, %d1 113; CHECK-NEXT: sub.l #12, %d1 114; CHECK-NEXT: bhi .LBB6_12 115; CHECK-NEXT: ; %bb.1: ; %entry 116; CHECK-NEXT: lsl.l #2, %d0 117; CHECK-NEXT: move.l #.LJTI6_0, %a0 118; CHECK-NEXT: move.l (0,%a0,%d0), %a0 119; CHECK-NEXT: jmp (%a0) 120; CHECK-NEXT: .LBB6_12: ; %bb2 121; CHECK-NEXT: bra foo6 ; TAILCALL 122; CHECK-NEXT: .LBB6_3: ; %bb5 123; CHECK-NEXT: bra foo5 ; TAILCALL 124; CHECK-NEXT: .LBB6_5: ; %bb1 125; CHECK-NEXT: bra foo2 ; TAILCALL 126; CHECK-NEXT: .LBB6_2: ; %bb 127; CHECK-NEXT: bra foo1 ; TAILCALL 128; CHECK-NEXT: .LBB6_9: ; %bb4 129; CHECK-NEXT: bra foo4 ; TAILCALL 130; CHECK-NEXT: .LBB6_8: ; %bb3 131; CHECK-NEXT: bra foo3 ; TAILCALL 132entry: 133 switch i32 %n.u, label %bb12 [i32 1, label %bb i32 2, label %bb6 i32 4, label %bb7 i32 5, label %bb8 i32 6, label %bb10 i32 7, label %bb1 i32 8, label %bb3 i32 9, label %bb4 i32 10, label %bb9 i32 11, label %bb2 i32 12, label %bb5 i32 13, label %bb11 ] 134bb: 135 tail call void(...) @foo1() 136 ret void 137bb1: 138 tail call void(...) @foo2() 139 ret void 140bb2: 141 tail call void(...) @foo6() 142 ret void 143bb3: 144 tail call void(...) @foo3() 145 ret void 146bb4: 147 tail call void(...) @foo4() 148 ret void 149bb5: 150 tail call void(...) @foo5() 151 ret void 152bb6: 153 tail call void(...) @foo1() 154 ret void 155bb7: 156 tail call void(...) @foo2() 157 ret void 158bb8: 159 tail call void(...) @foo6() 160 ret void 161bb9: 162 tail call void(...) @foo3() 163 ret void 164bb10: 165 tail call void(...) @foo4() 166 ret void 167bb11: 168 tail call void(...) @foo5() 169 ret void 170bb12: 171 tail call void(...) @foo6() 172 ret void 173} 174 175declare void @foo1(...) 176declare void @foo2(...) 177declare void @foo6(...) 178declare void @foo3(...) 179declare void @foo4(...) 180declare void @foo5(...) 181