190 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=pic \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: move.l (dst@GOTPCREL,%pc), %a014; CHECK-NEXT: move.l (ptr@GOTPCREL,%pc), %a115; CHECK-NEXT: move.l %a0, (%a1)16; CHECK-NEXT: move.l (src@GOTPCREL,%pc), %a117; CHECK-NEXT: move.l (%a1), (%a0)18; CHECK-NEXT: rts19entry:20 store ptr @dst, ptr @ptr21 %tmp.s = load i32, ptr @src22 store i32 %tmp.s, ptr @dst23 ret void24}25 26@ptr2 = global ptr null27@dst2 = global i32 028@src2 = global i32 029 30define void @test1() nounwind {31; CHECK-LABEL: test1:32; CHECK: ; %bb.0: ; %entry33; CHECK-NEXT: move.l (dst2@GOTPCREL,%pc), %a034; CHECK-NEXT: move.l (ptr2@GOTPCREL,%pc), %a135; CHECK-NEXT: move.l %a0, (%a1)36; CHECK-NEXT: move.l (src2@GOTPCREL,%pc), %a137; CHECK-NEXT: move.l (%a1), (%a0)38; CHECK-NEXT: rts39entry:40 store ptr @dst2, ptr @ptr241 %tmp.s = load i32, ptr @src242 store i32 %tmp.s, ptr @dst243 ret void44}45 46declare ptr @malloc(i32)47 48define void @test2() nounwind {49; CHECK-LABEL: test2:50; CHECK: ; %bb.0: ; %entry51; CHECK-NEXT: suba.l #4, %sp52; CHECK-NEXT: move.l #40, (%sp)53; CHECK-NEXT: jsr (malloc@PLT,%pc)54; CHECK-NEXT: adda.l #4, %sp55; CHECK-NEXT: rts56entry:57 %ptr = call ptr @malloc(i32 40)58 ret void59}60 61@pfoo = external global ptr62declare ptr @afoo(...)63 64define void @test3() nounwind {65; CHECK-LABEL: test3:66; CHECK: ; %bb.0: ; %entry67; CHECK-NEXT: suba.l #4, %sp68; CHECK-NEXT: jsr (afoo@PLT,%pc)69; CHECK-NEXT: move.l (pfoo@GOTPCREL,%pc), %a170; CHECK-NEXT: move.l %a0, (%a1)71; CHECK-NEXT: jsr (%a0)72; CHECK-NEXT: adda.l #4, %sp73; CHECK-NEXT: rts74entry:75 %tmp = call ptr(...) @afoo()76 store ptr %tmp, ptr @pfoo77 %tmp1 = load ptr, ptr @pfoo78 call void(...) %tmp1()79 ret void80}81 82declare void @foo(...)83 84define void @test4() nounwind {85; CHECK-LABEL: test4:86; CHECK: ; %bb.0: ; %entry87; CHECK-NEXT: suba.l #4, %sp88; CHECK-NEXT: jsr (foo@PLT,%pc)89; CHECK-NEXT: adda.l #4, %sp90; CHECK-NEXT: rts91entry:92 call void(...) @foo()93 ret void94}95 96@ptr6 = internal global ptr null97@dst6 = internal global i32 098@src6 = internal global i32 099 100define void @test5() nounwind {101; CHECK-LABEL: test5:102; CHECK: ; %bb.0: ; %entry103; CHECK-NEXT: lea (dst6,%pc), %a0104; CHECK-NEXT: move.l %a0, (ptr6,%pc)105; CHECK-NEXT: move.l (src6,%pc), (dst6,%pc)106; CHECK-NEXT: rts107entry:108 store ptr @dst6, ptr @ptr6109 %tmp.s = load i32, ptr @src6110 store i32 %tmp.s, ptr @dst6111 ret void112}113 114define void @test7(i32 %n.u) nounwind {115; CHECK-LABEL: test7:116; CHECK: ; %bb.0: ; %entry117; CHECK-NEXT: move.l (4,%sp), %d0118; CHECK-NEXT: add.l #-1, %d0119; CHECK-NEXT: move.l %d0, %d1120; CHECK-NEXT: sub.l #12, %d1121; CHECK-NEXT: bhi .LBB6_12122; CHECK-NEXT: ; %bb.1: ; %entry123; CHECK-NEXT: lsl.l #2, %d0124; CHECK-NEXT: lea (.LJTI6_0,%pc), %a0125; CHECK-NEXT: move.l %a0, %d1126; CHECK-NEXT: add.l (0,%a0,%d0), %d1127; CHECK-NEXT: move.l %d1, %a0128; CHECK-NEXT: jmp (%a0)129; CHECK-NEXT: .LBB6_12: ; %bb2130; CHECK-NEXT: bra foo6@PLT ; TAILCALL131; CHECK-NEXT: .LBB6_3: ; %bb5132; CHECK-NEXT: bra foo5@PLT ; TAILCALL133; CHECK-NEXT: .LBB6_5: ; %bb1134; CHECK-NEXT: bra foo2@PLT ; TAILCALL135; CHECK-NEXT: .LBB6_2: ; %bb136; CHECK-NEXT: bra foo1@PLT ; TAILCALL137; CHECK-NEXT: .LBB6_9: ; %bb4138; CHECK-NEXT: bra foo4@PLT ; TAILCALL139; CHECK-NEXT: .LBB6_8: ; %bb3140; CHECK-NEXT: bra foo3@PLT ; TAILCALL141entry:142 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 ]143bb:144 tail call void(...) @foo1()145 ret void146bb1:147 tail call void(...) @foo2()148 ret void149bb2:150 tail call void(...) @foo6()151 ret void152bb3:153 tail call void(...) @foo3()154 ret void155bb4:156 tail call void(...) @foo4()157 ret void158bb5:159 tail call void(...) @foo5()160 ret void161bb6:162 tail call void(...) @foo1()163 ret void164bb7:165 tail call void(...) @foo2()166 ret void167bb8:168 tail call void(...) @foo6()169 ret void170bb9:171 tail call void(...) @foo3()172 ret void173bb10:174 tail call void(...) @foo4()175 ret void176bb11:177 tail call void(...) @foo5()178 ret void179bb12:180 tail call void(...) @foo6()181 ret void182}183 184declare void @foo1(...)185declare void @foo2(...)186declare void @foo6(...)187declare void @foo3(...)188declare void @foo4(...)189declare void @foo5(...)190