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