xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/interrupt-attr.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mcpu=mips32r2 -march=mipsel -relocation-model=static -o - %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerdefine void @isr_sw0() #0 {
4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_sw0:
5*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
6*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, [[R1:[0-9]+]]($sp)
7*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
8*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, [[R2:[0-9]+]]($sp)
9*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 1
10*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
11*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
12*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
13*9880d681SAndroid Build Coastguard Worker  ; Must save all registers
14*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $7, {{[0-9]+}}($sp)
15*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $6, {{[0-9]+}}($sp)
16*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $5, {{[0-9]+}}($sp)
17*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $4, {{[0-9]+}}($sp)
18*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $3, {{[0-9]+}}($sp)
19*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $2, {{[0-9]+}}($sp)
20*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $25, {{[0-9]+}}($sp)
21*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $24, {{[0-9]+}}($sp)
22*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $15, {{[0-9]+}}($sp)
23*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $14, {{[0-9]+}}($sp)
24*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $13, {{[0-9]+}}($sp)
25*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $12, {{[0-9]+}}($sp)
26*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $11, {{[0-9]+}}($sp)
27*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $10, {{[0-9]+}}($sp)
28*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $9, {{[0-9]+}}($sp)
29*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $8, {{[0-9]+}}($sp)
30*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $ra, [[R5:[0-9]+]]($sp)
31*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $gp, {{[0-9]+}}($sp)
32*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $1, {{[0-9]+}}($sp)
33*9880d681SAndroid Build Coastguard Worker; CHECK: mflo    $26
34*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $26, [[R3:[0-9]+]]($sp)
35*9880d681SAndroid Build Coastguard Worker; CHECK: mfhi    $26
36*9880d681SAndroid Build Coastguard Worker; CHECK: sw      $26, [[R4:[0-9]+]]($sp)
37*9880d681SAndroid Build Coastguard Worker  call void bitcast (void (...)* @write to void ()*)()
38*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $26, [[R4:[0-9]+]]($sp)
39*9880d681SAndroid Build Coastguard Worker; CHECK: mthi    $26
40*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $26, [[R3:[0-9]+]]($sp)
41*9880d681SAndroid Build Coastguard Worker; CHECK: mtlo    $26
42*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $1, {{[0-9]+}}($sp)
43*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $gp, {{[0-9]+}}($sp)
44*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $ra, [[R5:[0-9]+]]($sp)
45*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $8, {{[0-9]+}}($sp)
46*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $9, {{[0-9]+}}($sp)
47*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $10, {{[0-9]+}}($sp)
48*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $11, {{[0-9]+}}($sp)
49*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $12, {{[0-9]+}}($sp)
50*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $13, {{[0-9]+}}($sp)
51*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $14, {{[0-9]+}}($sp)
52*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $15, {{[0-9]+}}($sp)
53*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $24, {{[0-9]+}}($sp)
54*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $25, {{[0-9]+}}($sp)
55*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $2, {{[0-9]+}}($sp)
56*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $3, {{[0-9]+}}($sp)
57*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $4, {{[0-9]+}}($sp)
58*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $5, {{[0-9]+}}($sp)
59*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $6, {{[0-9]+}}($sp)
60*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $7, {{[0-9]+}}($sp)
61*9880d681SAndroid Build Coastguard Worker; CHECK: di
62*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
63*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, [[R2:[0-9]+]]($sp)
64*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
65*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, [[R1:[0-9]+]]($sp)
66*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
67*9880d681SAndroid Build Coastguard Worker; CHECK: eret
68*9880d681SAndroid Build Coastguard Worker  ret void
69*9880d681SAndroid Build Coastguard Worker}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Workerdeclare void @write(...)
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdefine void @isr_sw1() #2 {
74*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_sw1:
75*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
76*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
77*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
78*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
79*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 2
80*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
81*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
82*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
83*9880d681SAndroid Build Coastguard Worker  ret void
84*9880d681SAndroid Build Coastguard Worker; CHECK: di
85*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
86*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
87*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
88*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
89*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
90*9880d681SAndroid Build Coastguard Worker; CHECK: eret
91*9880d681SAndroid Build Coastguard Worker }
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine void @isr_hw0() #3 {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_hw0:
95*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
96*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
97*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
98*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
99*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 3
100*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
101*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
102*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
103*9880d681SAndroid Build Coastguard Worker  ret void
104*9880d681SAndroid Build Coastguard Worker; CHECK: di
105*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
106*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
107*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
108*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
109*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
110*9880d681SAndroid Build Coastguard Worker; CHECK: eret
111*9880d681SAndroid Build Coastguard Worker }
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine void @isr_hw1() #4 {
114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_hw1:
115*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
116*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
117*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
118*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
119*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 4
120*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
121*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
122*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
123*9880d681SAndroid Build Coastguard Worker  ret void
124*9880d681SAndroid Build Coastguard Worker; CHECK: di
125*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
126*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
127*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
128*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
129*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
130*9880d681SAndroid Build Coastguard Worker; CHECK: eret
131*9880d681SAndroid Build Coastguard Worker }
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdefine void @isr_hw2() #5 {
135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_hw2:
136*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
137*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
138*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
139*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
140*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 5
141*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
142*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
143*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
144*9880d681SAndroid Build Coastguard Worker  ret void
145*9880d681SAndroid Build Coastguard Worker; CHECK: di
146*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
147*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
148*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
149*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
150*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
151*9880d681SAndroid Build Coastguard Worker; CHECK: eret
152*9880d681SAndroid Build Coastguard Worker }
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Workerdefine void @isr_hw3() #6 {
155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_hw3:
156*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
157*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
158*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
159*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
160*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 6
161*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
162*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
163*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
164*9880d681SAndroid Build Coastguard Worker  ret void
165*9880d681SAndroid Build Coastguard Worker; CHECK: di
166*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
167*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
168*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
169*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
170*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
171*9880d681SAndroid Build Coastguard Worker; CHECK: eret
172*9880d681SAndroid Build Coastguard Worker }
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Workerdefine void @isr_hw4() #7 {
175*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_hw4:
176*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
177*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
178*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
179*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
180*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 7
181*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
182*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
183*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
184*9880d681SAndroid Build Coastguard Worker  ret void
185*9880d681SAndroid Build Coastguard Worker; CHECK: di
186*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
187*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
188*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
189*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
190*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
191*9880d681SAndroid Build Coastguard Worker; CHECK: eret
192*9880d681SAndroid Build Coastguard Worker }
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Workerdefine void @isr_hw5() #8 {
195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_hw5:
196*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
197*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
198*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
199*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
200*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 8, 8
201*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
202*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
203*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
204*9880d681SAndroid Build Coastguard Worker  ret void
205*9880d681SAndroid Build Coastguard Worker; CHECK: di
206*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
207*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
208*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
209*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
210*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
211*9880d681SAndroid Build Coastguard Worker; CHECK: eret
212*9880d681SAndroid Build Coastguard Worker }
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Workerdefine void @isr_eic() #9 {
215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: isr_eic:
216*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $26, $13, 0
217*9880d681SAndroid Build Coastguard Worker; CHECK: ext    $26, $26, 10, 6
218*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $14, 0
219*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
220*9880d681SAndroid Build Coastguard Worker; CHECK: mfc0   $27, $12, 0
221*9880d681SAndroid Build Coastguard Worker; CHECK: sw     $27, {{[0-9]+}}($sp)
222*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $26, 10, 6
223*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 1, 4
224*9880d681SAndroid Build Coastguard Worker; CHECK: ins    $27, $zero, 29, 1
225*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0   $27, $12, 0
226*9880d681SAndroid Build Coastguard Worker  ret void
227*9880d681SAndroid Build Coastguard Worker; CHECK: di
228*9880d681SAndroid Build Coastguard Worker; CHECK: ehb
229*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
230*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $14, 0
231*9880d681SAndroid Build Coastguard Worker; CHECK: lw      $27, {{[0-9]+}}($sp)
232*9880d681SAndroid Build Coastguard Worker; CHECK: mtc0    $27, $12, 0
233*9880d681SAndroid Build Coastguard Worker; CHECK: eret
234*9880d681SAndroid Build Coastguard Worker }
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerattributes #0 = { "interrupt"="sw0" }
237*9880d681SAndroid Build Coastguard Workerattributes #2 = { "interrupt"="sw1" }
238*9880d681SAndroid Build Coastguard Workerattributes #3 = { "interrupt"="hw0" }
239*9880d681SAndroid Build Coastguard Workerattributes #4 = { "interrupt"="hw1" }
240*9880d681SAndroid Build Coastguard Workerattributes #5 = { "interrupt"="hw2" }
241*9880d681SAndroid Build Coastguard Workerattributes #6 = { "interrupt"="hw3" }
242*9880d681SAndroid Build Coastguard Workerattributes #7 = { "interrupt"="hw4" }
243*9880d681SAndroid Build Coastguard Workerattributes #8 = { "interrupt"="hw5" }
244*9880d681SAndroid Build Coastguard Workerattributes #9 = { "interrupt"="eic" }
245