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