183 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -O2 -mtriple=m68k -verify-machineinstrs \3; RUN: -code-model=small -relocation-model=static \4; RUN: | FileCheck %s5 6@ptr = external global ptr7@dst = external global i328@src = external global i329 10define void @test0() nounwind {11; CHECK-LABEL: test0:12; CHECK: ; %bb.0: ; %entry13; CHECK-NEXT: lea (dst,%pc), %a014; CHECK-NEXT: move.l %a0, (ptr,%pc)15; CHECK-NEXT: move.l (src,%pc), (dst,%pc)16; CHECK-NEXT: rts17entry:18 store ptr @dst, ptr @ptr19 %tmp.s = load i32, ptr @src20 store i32 %tmp.s, ptr @dst21 ret void22}23 24@ptr2 = global ptr null25@dst2 = global i32 026@src2 = global i32 027 28define void @test1() nounwind {29; CHECK-LABEL: test1:30; CHECK: ; %bb.0: ; %entry31; CHECK-NEXT: lea (dst2,%pc), %a032; CHECK-NEXT: move.l %a0, (ptr2,%pc)33; CHECK-NEXT: move.l (src2,%pc), (dst2,%pc)34; CHECK-NEXT: rts35entry:36 store ptr @dst2, ptr @ptr237 %tmp.s = load i32, ptr @src238 store i32 %tmp.s, ptr @dst239 ret void40}41 42declare ptr @malloc(i32)43 44define void @test2() nounwind {45; CHECK-LABEL: test2:46; CHECK: ; %bb.0: ; %entry47; CHECK-NEXT: suba.l #4, %sp48; CHECK-NEXT: move.l #40, (%sp)49; CHECK-NEXT: jsr malloc50; CHECK-NEXT: adda.l #4, %sp51; CHECK-NEXT: rts52entry:53 %ptr = call ptr @malloc(i32 40)54 ret void55}56 57@pfoo = external global ptr58declare ptr @afoo(...)59 60define void @test3() nounwind {61; CHECK-LABEL: test3:62; CHECK: ; %bb.0: ; %entry63; CHECK-NEXT: suba.l #4, %sp64; CHECK-NEXT: jsr afoo65; CHECK-NEXT: move.l %a0, (pfoo,%pc)66; CHECK-NEXT: jsr (%a0)67; CHECK-NEXT: adda.l #4, %sp68; CHECK-NEXT: rts69entry:70 %tmp = call ptr(...) @afoo()71 store ptr %tmp, ptr @pfoo72 %tmp1 = load ptr, ptr @pfoo73 call void(...) %tmp1()74 ret void75}76 77declare void @foo(...)78 79define void @test4() nounwind {80; CHECK-LABEL: test4:81; CHECK: ; %bb.0: ; %entry82; CHECK-NEXT: suba.l #4, %sp83; CHECK-NEXT: jsr foo84; CHECK-NEXT: adda.l #4, %sp85; CHECK-NEXT: rts86entry:87 call void(...) @foo()88 ret void89}90 91@ptr6 = internal global ptr null92@dst6 = internal global i32 093@src6 = internal global i32 094 95define void @test5() nounwind {96; CHECK-LABEL: test5:97; CHECK: ; %bb.0: ; %entry98; CHECK-NEXT: lea (dst6,%pc), %a099; CHECK-NEXT: move.l %a0, (ptr6,%pc)100; CHECK-NEXT: move.l (src6,%pc), (dst6,%pc)101; CHECK-NEXT: rts102entry:103 store ptr @dst6, ptr @ptr6104 %tmp.s = load i32, ptr @src6105 store i32 %tmp.s, ptr @dst6106 ret void107}108 109define void @test7(i32 %n.u) nounwind {110; CHECK-LABEL: test7:111; CHECK: ; %bb.0: ; %entry112; CHECK-NEXT: move.l (4,%sp), %d0113; CHECK-NEXT: add.l #-1, %d0114; CHECK-NEXT: move.l %d0, %d1115; CHECK-NEXT: sub.l #12, %d1116; CHECK-NEXT: bhi .LBB6_12117; CHECK-NEXT: ; %bb.1: ; %entry118; CHECK-NEXT: lsl.l #2, %d0119; CHECK-NEXT: lea (.LJTI6_0,%pc), %a0120; CHECK-NEXT: move.l (0,%a0,%d0), %a0121; CHECK-NEXT: jmp (%a0)122; CHECK-NEXT: .LBB6_12: ; %bb2123; CHECK-NEXT: bra foo6 ; TAILCALL124; CHECK-NEXT: .LBB6_3: ; %bb5125; CHECK-NEXT: bra foo5 ; TAILCALL126; CHECK-NEXT: .LBB6_5: ; %bb1127; CHECK-NEXT: bra foo2 ; TAILCALL128; CHECK-NEXT: .LBB6_2: ; %bb129; CHECK-NEXT: bra foo1 ; TAILCALL130; CHECK-NEXT: .LBB6_9: ; %bb4131; CHECK-NEXT: bra foo4 ; TAILCALL132; CHECK-NEXT: .LBB6_8: ; %bb3133; CHECK-NEXT: bra foo3 ; TAILCALL134entry:135 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 ]136bb:137 tail call void(...) @foo1()138 ret void139bb1:140 tail call void(...) @foo2()141 ret void142bb2:143 tail call void(...) @foo6()144 ret void145bb3:146 tail call void(...) @foo3()147 ret void148bb4:149 tail call void(...) @foo4()150 ret void151bb5:152 tail call void(...) @foo5()153 ret void154bb6:155 tail call void(...) @foo1()156 ret void157bb7:158 tail call void(...) @foo2()159 ret void160bb8:161 tail call void(...) @foo6()162 ret void163bb9:164 tail call void(...) @foo3()165 ret void166bb10:167 tail call void(...) @foo4()168 ret void169bb11:170 tail call void(...) @foo5()171 ret void172bb12:173 tail call void(...) @foo6()174 ret void175}176 177declare void @foo1(...)178declare void @foo2(...)179declare void @foo6(...)180declare void @foo3(...)181declare void @foo4(...)182declare void @foo5(...)183