Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Mips / load-store-left-right.ll
blob3c3110341df269483377e9e9ddb747f33b5e96d9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=mipsel   -mcpu=mips32              -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS32,MIPS32-EL %s
3 ; RUN: llc -march=mips     -mcpu=mips32              -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS32,MIPS32-EB %s
4 ; RUN: llc -march=mipsel   -mcpu=mips32r2            -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS32,MIPS32-EL %s
5 ; RUN: llc -march=mips     -mcpu=mips32r2            -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS32,MIPS32-EB %s
6 ; RUN: llc -march=mipsel   -mcpu=mips32r6            -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS32R6,MIPS32R6-EL %s
7 ; RUN: llc -march=mips     -mcpu=mips32r6            -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS32R6,MIPS32R6-EB %s
8 ; RUN: llc -march=mips64el -mcpu=mips4    -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64,MIPS64-EL %s
9 ; RUN: llc -march=mips64   -mcpu=mips4    -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64,MIPS64-EB %s
10 ; RUN: llc -march=mips64el -mcpu=mips64   -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64,MIPS64-EL %s
11 ; RUN: llc -march=mips64   -mcpu=mips64   -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64,MIPS64-EB %s
12 ; RUN: llc -march=mips64el -mcpu=mips64r2 -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64,MIPS64R2-EL %s
13 ; RUN: llc -march=mips64   -mcpu=mips64r2 -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64,MIPS64R2-EB %s
14 ; RUN: llc -march=mips64el -mcpu=mips64r6 -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64R6 %s
15 ; RUN: llc -march=mips64   -mcpu=mips64r6 -target-abi=n64 -relocation-model=pic < %s | FileCheck -check-prefixes=MIPS64R6 %s
17 %struct.SLL = type { i64 }
18 %struct.SI = type { i32 }
19 %struct.SUI = type { i32 }
21 @sll = common global %struct.SLL zeroinitializer, align 1
22 @si = common global %struct.SI zeroinitializer, align 1
23 @sui = common global %struct.SUI zeroinitializer, align 1
25 define i32 @load_SI() nounwind readonly {
26 ; MIPS32-EL-LABEL: load_SI:
27 ; MIPS32-EL:       # %bb.0: # %entry
28 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
29 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
30 ; MIPS32-EL-NEXT:    addu $1, $2, $25
31 ; MIPS32-EL-NEXT:    lw $1, %got(si)($1)
32 ; MIPS32-EL-NEXT:    lwl $2, 3($1)
33 ; MIPS32-EL-NEXT:    jr $ra
34 ; MIPS32-EL-NEXT:    lwr $2, 0($1)
36 ; MIPS32-EB-LABEL: load_SI:
37 ; MIPS32-EB:       # %bb.0: # %entry
38 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
39 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
40 ; MIPS32-EB-NEXT:    addu $1, $2, $25
41 ; MIPS32-EB-NEXT:    lw $1, %got(si)($1)
42 ; MIPS32-EB-NEXT:    lwl $2, 0($1)
43 ; MIPS32-EB-NEXT:    jr $ra
44 ; MIPS32-EB-NEXT:    lwr $2, 3($1)
46 ; MIPS32R6-LABEL: load_SI:
47 ; MIPS32R6:       # %bb.0: # %entry
48 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
49 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
50 ; MIPS32R6-NEXT:    addu $1, $2, $25
51 ; MIPS32R6-NEXT:    lw $1, %got(si)($1)
52 ; MIPS32R6-NEXT:    jr $ra
53 ; MIPS32R6-NEXT:    lw $2, 0($1)
55 ; MIPS64-EL-LABEL: load_SI:
56 ; MIPS64-EL:       # %bb.0: # %entry
57 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI)))
58 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
59 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI)))
60 ; MIPS64-EL-NEXT:    ld $1, %got_disp(si)($1)
61 ; MIPS64-EL-NEXT:    lwl $2, 3($1)
62 ; MIPS64-EL-NEXT:    jr $ra
63 ; MIPS64-EL-NEXT:    lwr $2, 0($1)
65 ; MIPS64-EB-LABEL: load_SI:
66 ; MIPS64-EB:       # %bb.0: # %entry
67 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI)))
68 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
69 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI)))
70 ; MIPS64-EB-NEXT:    ld $1, %got_disp(si)($1)
71 ; MIPS64-EB-NEXT:    lwl $2, 0($1)
72 ; MIPS64-EB-NEXT:    jr $ra
73 ; MIPS64-EB-NEXT:    lwr $2, 3($1)
75 ; MIPS64R2-EL-LABEL: load_SI:
76 ; MIPS64R2-EL:       # %bb.0: # %entry
77 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI)))
78 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
79 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI)))
80 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(si)($1)
81 ; MIPS64R2-EL-NEXT:    lwl $2, 3($1)
82 ; MIPS64R2-EL-NEXT:    jr $ra
83 ; MIPS64R2-EL-NEXT:    lwr $2, 0($1)
85 ; MIPS64R2-EB-LABEL: load_SI:
86 ; MIPS64R2-EB:       # %bb.0: # %entry
87 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI)))
88 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
89 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI)))
90 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(si)($1)
91 ; MIPS64R2-EB-NEXT:    lwl $2, 0($1)
92 ; MIPS64R2-EB-NEXT:    jr $ra
93 ; MIPS64R2-EB-NEXT:    lwr $2, 3($1)
95 ; MIPS64R6-LABEL: load_SI:
96 ; MIPS64R6:       # %bb.0: # %entry
97 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI)))
98 ; MIPS64R6-NEXT:    daddu $1, $1, $25
99 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI)))
100 ; MIPS64R6-NEXT:    ld $1, %got_disp(si)($1)
101 ; MIPS64R6-NEXT:    jr $ra
102 ; MIPS64R6-NEXT:    lw $2, 0($1)
103 entry:
104   %0 = load i32, ptr @si, align 1
105   ret i32 %0
108 define void @store_SI(i32 signext %a) nounwind {
109 ; MIPS32-EL-LABEL: store_SI:
110 ; MIPS32-EL:       # %bb.0: # %entry
111 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
112 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
113 ; MIPS32-EL-NEXT:    addu $1, $2, $25
114 ; MIPS32-EL-NEXT:    lw $1, %got(si)($1)
115 ; MIPS32-EL-NEXT:    swl $4, 3($1)
116 ; MIPS32-EL-NEXT:    jr $ra
117 ; MIPS32-EL-NEXT:    swr $4, 0($1)
119 ; MIPS32-EB-LABEL: store_SI:
120 ; MIPS32-EB:       # %bb.0: # %entry
121 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
122 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
123 ; MIPS32-EB-NEXT:    addu $1, $2, $25
124 ; MIPS32-EB-NEXT:    lw $1, %got(si)($1)
125 ; MIPS32-EB-NEXT:    swl $4, 0($1)
126 ; MIPS32-EB-NEXT:    jr $ra
127 ; MIPS32-EB-NEXT:    swr $4, 3($1)
129 ; MIPS32R6-LABEL: store_SI:
130 ; MIPS32R6:       # %bb.0: # %entry
131 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
132 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
133 ; MIPS32R6-NEXT:    addu $1, $2, $25
134 ; MIPS32R6-NEXT:    lw $1, %got(si)($1)
135 ; MIPS32R6-NEXT:    jr $ra
136 ; MIPS32R6-NEXT:    sw $4, 0($1)
138 ; MIPS64-EL-LABEL: store_SI:
139 ; MIPS64-EL:       # %bb.0: # %entry
140 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI)))
141 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
142 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI)))
143 ; MIPS64-EL-NEXT:    ld $1, %got_disp(si)($1)
144 ; MIPS64-EL-NEXT:    swl $4, 3($1)
145 ; MIPS64-EL-NEXT:    jr $ra
146 ; MIPS64-EL-NEXT:    swr $4, 0($1)
148 ; MIPS64-EB-LABEL: store_SI:
149 ; MIPS64-EB:       # %bb.0: # %entry
150 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI)))
151 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
152 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI)))
153 ; MIPS64-EB-NEXT:    ld $1, %got_disp(si)($1)
154 ; MIPS64-EB-NEXT:    swl $4, 0($1)
155 ; MIPS64-EB-NEXT:    jr $ra
156 ; MIPS64-EB-NEXT:    swr $4, 3($1)
158 ; MIPS64R2-EL-LABEL: store_SI:
159 ; MIPS64R2-EL:       # %bb.0: # %entry
160 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI)))
161 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
162 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI)))
163 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(si)($1)
164 ; MIPS64R2-EL-NEXT:    swl $4, 3($1)
165 ; MIPS64R2-EL-NEXT:    jr $ra
166 ; MIPS64R2-EL-NEXT:    swr $4, 0($1)
168 ; MIPS64R2-EB-LABEL: store_SI:
169 ; MIPS64R2-EB:       # %bb.0: # %entry
170 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI)))
171 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
172 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI)))
173 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(si)($1)
174 ; MIPS64R2-EB-NEXT:    swl $4, 0($1)
175 ; MIPS64R2-EB-NEXT:    jr $ra
176 ; MIPS64R2-EB-NEXT:    swr $4, 3($1)
178 ; MIPS64R6-LABEL: store_SI:
179 ; MIPS64R6:       # %bb.0: # %entry
180 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI)))
181 ; MIPS64R6-NEXT:    daddu $1, $1, $25
182 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI)))
183 ; MIPS64R6-NEXT:    ld $1, %got_disp(si)($1)
184 ; MIPS64R6-NEXT:    jr $ra
185 ; MIPS64R6-NEXT:    sw $4, 0($1)
186 entry:
187   store i32 %a, ptr @si, align 1
188   ret void
191 define i64 @load_SLL() nounwind readonly {
192 ; MIPS32-EL-LABEL: load_SLL:
193 ; MIPS32-EL:       # %bb.0: # %entry
194 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
195 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
196 ; MIPS32-EL-NEXT:    addu $1, $2, $25
197 ; MIPS32-EL-NEXT:    lw $1, %got(sll)($1)
198 ; MIPS32-EL-NEXT:    lwl $2, 3($1)
199 ; MIPS32-EL-NEXT:    lwr $2, 0($1)
200 ; MIPS32-EL-NEXT:    lwl $3, 7($1)
201 ; MIPS32-EL-NEXT:    jr $ra
202 ; MIPS32-EL-NEXT:    lwr $3, 4($1)
204 ; MIPS32-EB-LABEL: load_SLL:
205 ; MIPS32-EB:       # %bb.0: # %entry
206 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
207 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
208 ; MIPS32-EB-NEXT:    addu $1, $2, $25
209 ; MIPS32-EB-NEXT:    lw $1, %got(sll)($1)
210 ; MIPS32-EB-NEXT:    lwl $2, 0($1)
211 ; MIPS32-EB-NEXT:    lwr $2, 3($1)
212 ; MIPS32-EB-NEXT:    lwl $3, 4($1)
213 ; MIPS32-EB-NEXT:    jr $ra
214 ; MIPS32-EB-NEXT:    lwr $3, 7($1)
216 ; MIPS32R6-LABEL: load_SLL:
217 ; MIPS32R6:       # %bb.0: # %entry
218 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
219 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
220 ; MIPS32R6-NEXT:    addu $1, $2, $25
221 ; MIPS32R6-NEXT:    lw $1, %got(sll)($1)
222 ; MIPS32R6-NEXT:    lw $2, 0($1)
223 ; MIPS32R6-NEXT:    jr $ra
224 ; MIPS32R6-NEXT:    lw $3, 4($1)
226 ; MIPS64-EL-LABEL: load_SLL:
227 ; MIPS64-EL:       # %bb.0: # %entry
228 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SLL)))
229 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
230 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SLL)))
231 ; MIPS64-EL-NEXT:    ld $1, %got_disp(sll)($1)
232 ; MIPS64-EL-NEXT:    ldl $2, 7($1)
233 ; MIPS64-EL-NEXT:    jr $ra
234 ; MIPS64-EL-NEXT:    ldr $2, 0($1)
236 ; MIPS64-EB-LABEL: load_SLL:
237 ; MIPS64-EB:       # %bb.0: # %entry
238 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SLL)))
239 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
240 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SLL)))
241 ; MIPS64-EB-NEXT:    ld $1, %got_disp(sll)($1)
242 ; MIPS64-EB-NEXT:    ldl $2, 0($1)
243 ; MIPS64-EB-NEXT:    jr $ra
244 ; MIPS64-EB-NEXT:    ldr $2, 7($1)
246 ; MIPS64R2-EL-LABEL: load_SLL:
247 ; MIPS64R2-EL:       # %bb.0: # %entry
248 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SLL)))
249 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
250 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SLL)))
251 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(sll)($1)
252 ; MIPS64R2-EL-NEXT:    ldl $2, 7($1)
253 ; MIPS64R2-EL-NEXT:    jr $ra
254 ; MIPS64R2-EL-NEXT:    ldr $2, 0($1)
256 ; MIPS64R2-EB-LABEL: load_SLL:
257 ; MIPS64R2-EB:       # %bb.0: # %entry
258 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SLL)))
259 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
260 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SLL)))
261 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(sll)($1)
262 ; MIPS64R2-EB-NEXT:    ldl $2, 0($1)
263 ; MIPS64R2-EB-NEXT:    jr $ra
264 ; MIPS64R2-EB-NEXT:    ldr $2, 7($1)
266 ; MIPS64R6-LABEL: load_SLL:
267 ; MIPS64R6:       # %bb.0: # %entry
268 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SLL)))
269 ; MIPS64R6-NEXT:    daddu $1, $1, $25
270 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SLL)))
271 ; MIPS64R6-NEXT:    ld $1, %got_disp(sll)($1)
272 ; MIPS64R6-NEXT:    jr $ra
273 ; MIPS64R6-NEXT:    ld $2, 0($1)
274 entry:
275   %0 = load i64, ptr @sll, align 1
276   ret i64 %0
279 define i64 @load_SI_sext_to_i64() nounwind readonly {
280 ; MIPS32-EL-LABEL: load_SI_sext_to_i64:
281 ; MIPS32-EL:       # %bb.0: # %entry
282 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
283 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
284 ; MIPS32-EL-NEXT:    addu $1, $2, $25
285 ; MIPS32-EL-NEXT:    lw $1, %got(si)($1)
286 ; MIPS32-EL-NEXT:    lwl $2, 3($1)
287 ; MIPS32-EL-NEXT:    lwr $2, 0($1)
288 ; MIPS32-EL-NEXT:    jr $ra
289 ; MIPS32-EL-NEXT:    sra $3, $2, 31
291 ; MIPS32-EB-LABEL: load_SI_sext_to_i64:
292 ; MIPS32-EB:       # %bb.0: # %entry
293 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
294 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
295 ; MIPS32-EB-NEXT:    addu $1, $2, $25
296 ; MIPS32-EB-NEXT:    lw $1, %got(si)($1)
297 ; MIPS32-EB-NEXT:    lwl $3, 0($1)
298 ; MIPS32-EB-NEXT:    lwr $3, 3($1)
299 ; MIPS32-EB-NEXT:    jr $ra
300 ; MIPS32-EB-NEXT:    sra $2, $3, 31
302 ; MIPS32R6-EL-LABEL: load_SI_sext_to_i64:
303 ; MIPS32R6-EL:       # %bb.0: # %entry
304 ; MIPS32R6-EL-NEXT:    lui $2, %hi(_gp_disp)
305 ; MIPS32R6-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
306 ; MIPS32R6-EL-NEXT:    addu $1, $2, $25
307 ; MIPS32R6-EL-NEXT:    lw $1, %got(si)($1)
308 ; MIPS32R6-EL-NEXT:    lw $2, 0($1)
309 ; MIPS32R6-EL-NEXT:    jr $ra
310 ; MIPS32R6-EL-NEXT:    sra $3, $2, 31
312 ; MIPS32R6-EB-LABEL: load_SI_sext_to_i64:
313 ; MIPS32R6-EB:       # %bb.0: # %entry
314 ; MIPS32R6-EB-NEXT:    lui $2, %hi(_gp_disp)
315 ; MIPS32R6-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
316 ; MIPS32R6-EB-NEXT:    addu $1, $2, $25
317 ; MIPS32R6-EB-NEXT:    lw $1, %got(si)($1)
318 ; MIPS32R6-EB-NEXT:    lw $3, 0($1)
319 ; MIPS32R6-EB-NEXT:    jr $ra
320 ; MIPS32R6-EB-NEXT:    sra $2, $3, 31
322 ; MIPS64-EL-LABEL: load_SI_sext_to_i64:
323 ; MIPS64-EL:       # %bb.0: # %entry
324 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI_sext_to_i64)))
325 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
326 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI_sext_to_i64)))
327 ; MIPS64-EL-NEXT:    ld $1, %got_disp(si)($1)
328 ; MIPS64-EL-NEXT:    lwl $2, 3($1)
329 ; MIPS64-EL-NEXT:    jr $ra
330 ; MIPS64-EL-NEXT:    lwr $2, 0($1)
332 ; MIPS64-EB-LABEL: load_SI_sext_to_i64:
333 ; MIPS64-EB:       # %bb.0: # %entry
334 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI_sext_to_i64)))
335 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
336 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI_sext_to_i64)))
337 ; MIPS64-EB-NEXT:    ld $1, %got_disp(si)($1)
338 ; MIPS64-EB-NEXT:    lwl $2, 0($1)
339 ; MIPS64-EB-NEXT:    jr $ra
340 ; MIPS64-EB-NEXT:    lwr $2, 3($1)
342 ; MIPS64R2-EL-LABEL: load_SI_sext_to_i64:
343 ; MIPS64R2-EL:       # %bb.0: # %entry
344 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI_sext_to_i64)))
345 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
346 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI_sext_to_i64)))
347 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(si)($1)
348 ; MIPS64R2-EL-NEXT:    lwl $2, 3($1)
349 ; MIPS64R2-EL-NEXT:    jr $ra
350 ; MIPS64R2-EL-NEXT:    lwr $2, 0($1)
352 ; MIPS64R2-EB-LABEL: load_SI_sext_to_i64:
353 ; MIPS64R2-EB:       # %bb.0: # %entry
354 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI_sext_to_i64)))
355 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
356 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI_sext_to_i64)))
357 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(si)($1)
358 ; MIPS64R2-EB-NEXT:    lwl $2, 0($1)
359 ; MIPS64R2-EB-NEXT:    jr $ra
360 ; MIPS64R2-EB-NEXT:    lwr $2, 3($1)
362 ; MIPS64R6-LABEL: load_SI_sext_to_i64:
363 ; MIPS64R6:       # %bb.0: # %entry
364 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(load_SI_sext_to_i64)))
365 ; MIPS64R6-NEXT:    daddu $1, $1, $25
366 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_SI_sext_to_i64)))
367 ; MIPS64R6-NEXT:    ld $1, %got_disp(si)($1)
368 ; MIPS64R6-NEXT:    jr $ra
369 ; MIPS64R6-NEXT:    lw $2, 0($1)
370 entry:
371   %0 = load i32, ptr @si, align 1
372   %conv = sext i32 %0 to i64
373   ret i64 %conv
376 define i64 @load_UI() nounwind readonly {
377 ; MIPS32-EL-LABEL: load_UI:
378 ; MIPS32-EL:       # %bb.0: # %entry
379 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
380 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
381 ; MIPS32-EL-NEXT:    addu $1, $2, $25
382 ; MIPS32-EL-NEXT:    lw $1, %got(sui)($1)
383 ; MIPS32-EL-NEXT:    lwl $2, 3($1)
384 ; MIPS32-EL-NEXT:    lwr $2, 0($1)
385 ; MIPS32-EL-NEXT:    jr $ra
386 ; MIPS32-EL-NEXT:    addiu $3, $zero, 0
388 ; MIPS32-EB-LABEL: load_UI:
389 ; MIPS32-EB:       # %bb.0: # %entry
390 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
391 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
392 ; MIPS32-EB-NEXT:    addu $1, $2, $25
393 ; MIPS32-EB-NEXT:    lw $1, %got(sui)($1)
394 ; MIPS32-EB-NEXT:    lwl $3, 0($1)
395 ; MIPS32-EB-NEXT:    lwr $3, 3($1)
396 ; MIPS32-EB-NEXT:    jr $ra
397 ; MIPS32-EB-NEXT:    addiu $2, $zero, 0
399 ; MIPS32R6-EL-LABEL: load_UI:
400 ; MIPS32R6-EL:       # %bb.0: # %entry
401 ; MIPS32R6-EL-NEXT:    lui $2, %hi(_gp_disp)
402 ; MIPS32R6-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
403 ; MIPS32R6-EL-NEXT:    addu $1, $2, $25
404 ; MIPS32R6-EL-NEXT:    lw $1, %got(sui)($1)
405 ; MIPS32R6-EL-NEXT:    lw $2, 0($1)
406 ; MIPS32R6-EL-NEXT:    jr $ra
407 ; MIPS32R6-EL-NEXT:    addiu $3, $zero, 0
409 ; MIPS32R6-EB-LABEL: load_UI:
410 ; MIPS32R6-EB:       # %bb.0: # %entry
411 ; MIPS32R6-EB-NEXT:    lui $2, %hi(_gp_disp)
412 ; MIPS32R6-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
413 ; MIPS32R6-EB-NEXT:    addu $1, $2, $25
414 ; MIPS32R6-EB-NEXT:    lw $1, %got(sui)($1)
415 ; MIPS32R6-EB-NEXT:    lw $3, 0($1)
416 ; MIPS32R6-EB-NEXT:    jr $ra
417 ; MIPS32R6-EB-NEXT:    addiu $2, $zero, 0
419 ; MIPS64-EL-LABEL: load_UI:
420 ; MIPS64-EL:       # %bb.0: # %entry
421 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_UI)))
422 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
423 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_UI)))
424 ; MIPS64-EL-NEXT:    ld $1, %got_disp(sui)($1)
425 ; MIPS64-EL-NEXT:    lwl $2, 3($1)
426 ; MIPS64-EL-NEXT:    lwr $2, 0($1)
427 ; MIPS64-EL-NEXT:    daddiu $1, $zero, 1
428 ; MIPS64-EL-NEXT:    dsll $1, $1, 32
429 ; MIPS64-EL-NEXT:    daddiu $1, $1, -1
430 ; MIPS64-EL-NEXT:    jr $ra
431 ; MIPS64-EL-NEXT:    and $2, $2, $1
433 ; MIPS64-EB-LABEL: load_UI:
434 ; MIPS64-EB:       # %bb.0: # %entry
435 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_UI)))
436 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
437 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_UI)))
438 ; MIPS64-EB-NEXT:    ld $1, %got_disp(sui)($1)
439 ; MIPS64-EB-NEXT:    lwl $2, 0($1)
440 ; MIPS64-EB-NEXT:    lwr $2, 3($1)
441 ; MIPS64-EB-NEXT:    daddiu $1, $zero, 1
442 ; MIPS64-EB-NEXT:    dsll $1, $1, 32
443 ; MIPS64-EB-NEXT:    daddiu $1, $1, -1
444 ; MIPS64-EB-NEXT:    jr $ra
445 ; MIPS64-EB-NEXT:    and $2, $2, $1
447 ; MIPS64R2-EL-LABEL: load_UI:
448 ; MIPS64R2-EL:       # %bb.0: # %entry
449 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(load_UI)))
450 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
451 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_UI)))
452 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(sui)($1)
453 ; MIPS64R2-EL-NEXT:    lwl $2, 3($1)
454 ; MIPS64R2-EL-NEXT:    lwr $2, 0($1)
455 ; MIPS64R2-EL-NEXT:    jr $ra
456 ; MIPS64R2-EL-NEXT:    dext $2, $2, 0, 32
458 ; MIPS64R2-EB-LABEL: load_UI:
459 ; MIPS64R2-EB:       # %bb.0: # %entry
460 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(load_UI)))
461 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
462 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_UI)))
463 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(sui)($1)
464 ; MIPS64R2-EB-NEXT:    lwl $2, 0($1)
465 ; MIPS64R2-EB-NEXT:    lwr $2, 3($1)
466 ; MIPS64R2-EB-NEXT:    jr $ra
467 ; MIPS64R2-EB-NEXT:    dext $2, $2, 0, 32
469 ; MIPS64R6-LABEL: load_UI:
470 ; MIPS64R6:       # %bb.0: # %entry
471 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(load_UI)))
472 ; MIPS64R6-NEXT:    daddu $1, $1, $25
473 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(load_UI)))
474 ; MIPS64R6-NEXT:    ld $1, %got_disp(sui)($1)
475 ; MIPS64R6-NEXT:    jr $ra
476 ; MIPS64R6-NEXT:    lwu $2, 0($1)
477 entry:
478   %0 = load i32, ptr @sui, align 1
479   %conv = zext i32 %0 to i64
480   ret i64 %conv
483 define void @store_SLL(i64 %a) nounwind {
484 ; MIPS32-EL-LABEL: store_SLL:
485 ; MIPS32-EL:       # %bb.0: # %entry
486 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
487 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
488 ; MIPS32-EL-NEXT:    addu $1, $2, $25
489 ; MIPS32-EL-NEXT:    lw $1, %got(sll)($1)
490 ; MIPS32-EL-NEXT:    swl $5, 7($1)
491 ; MIPS32-EL-NEXT:    swl $4, 3($1)
492 ; MIPS32-EL-NEXT:    swr $5, 4($1)
493 ; MIPS32-EL-NEXT:    jr $ra
494 ; MIPS32-EL-NEXT:    swr $4, 0($1)
496 ; MIPS32-EB-LABEL: store_SLL:
497 ; MIPS32-EB:       # %bb.0: # %entry
498 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
499 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
500 ; MIPS32-EB-NEXT:    addu $1, $2, $25
501 ; MIPS32-EB-NEXT:    lw $1, %got(sll)($1)
502 ; MIPS32-EB-NEXT:    swl $5, 4($1)
503 ; MIPS32-EB-NEXT:    swl $4, 0($1)
504 ; MIPS32-EB-NEXT:    swr $5, 7($1)
505 ; MIPS32-EB-NEXT:    jr $ra
506 ; MIPS32-EB-NEXT:    swr $4, 3($1)
508 ; MIPS32R6-LABEL: store_SLL:
509 ; MIPS32R6:       # %bb.0: # %entry
510 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
511 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
512 ; MIPS32R6-NEXT:    addu $1, $2, $25
513 ; MIPS32R6-NEXT:    lw $1, %got(sll)($1)
514 ; MIPS32R6-NEXT:    sw $5, 4($1)
515 ; MIPS32R6-NEXT:    jr $ra
516 ; MIPS32R6-NEXT:    sw $4, 0($1)
518 ; MIPS64-EL-LABEL: store_SLL:
519 ; MIPS64-EL:       # %bb.0: # %entry
520 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SLL)))
521 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
522 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SLL)))
523 ; MIPS64-EL-NEXT:    ld $1, %got_disp(sll)($1)
524 ; MIPS64-EL-NEXT:    sdl $4, 7($1)
525 ; MIPS64-EL-NEXT:    jr $ra
526 ; MIPS64-EL-NEXT:    sdr $4, 0($1)
528 ; MIPS64-EB-LABEL: store_SLL:
529 ; MIPS64-EB:       # %bb.0: # %entry
530 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SLL)))
531 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
532 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SLL)))
533 ; MIPS64-EB-NEXT:    ld $1, %got_disp(sll)($1)
534 ; MIPS64-EB-NEXT:    sdl $4, 0($1)
535 ; MIPS64-EB-NEXT:    jr $ra
536 ; MIPS64-EB-NEXT:    sdr $4, 7($1)
538 ; MIPS64R2-EL-LABEL: store_SLL:
539 ; MIPS64R2-EL:       # %bb.0: # %entry
540 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SLL)))
541 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
542 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SLL)))
543 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(sll)($1)
544 ; MIPS64R2-EL-NEXT:    sdl $4, 7($1)
545 ; MIPS64R2-EL-NEXT:    jr $ra
546 ; MIPS64R2-EL-NEXT:    sdr $4, 0($1)
548 ; MIPS64R2-EB-LABEL: store_SLL:
549 ; MIPS64R2-EB:       # %bb.0: # %entry
550 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SLL)))
551 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
552 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SLL)))
553 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(sll)($1)
554 ; MIPS64R2-EB-NEXT:    sdl $4, 0($1)
555 ; MIPS64R2-EB-NEXT:    jr $ra
556 ; MIPS64R2-EB-NEXT:    sdr $4, 7($1)
558 ; MIPS64R6-LABEL: store_SLL:
559 ; MIPS64R6:       # %bb.0: # %entry
560 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SLL)))
561 ; MIPS64R6-NEXT:    daddu $1, $1, $25
562 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SLL)))
563 ; MIPS64R6-NEXT:    ld $1, %got_disp(sll)($1)
564 ; MIPS64R6-NEXT:    jr $ra
565 ; MIPS64R6-NEXT:    sd $4, 0($1)
566 entry:
567   store i64 %a, ptr @sll, align 1
568   ret void
571 define void @store_SI_trunc_from_i64(i32 signext %a) nounwind {
572 ; MIPS32-EL-LABEL: store_SI_trunc_from_i64:
573 ; MIPS32-EL:       # %bb.0: # %entry
574 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
575 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
576 ; MIPS32-EL-NEXT:    addu $1, $2, $25
577 ; MIPS32-EL-NEXT:    lw $1, %got(si)($1)
578 ; MIPS32-EL-NEXT:    swl $4, 3($1)
579 ; MIPS32-EL-NEXT:    jr $ra
580 ; MIPS32-EL-NEXT:    swr $4, 0($1)
582 ; MIPS32-EB-LABEL: store_SI_trunc_from_i64:
583 ; MIPS32-EB:       # %bb.0: # %entry
584 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
585 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
586 ; MIPS32-EB-NEXT:    addu $1, $2, $25
587 ; MIPS32-EB-NEXT:    lw $1, %got(si)($1)
588 ; MIPS32-EB-NEXT:    swl $4, 0($1)
589 ; MIPS32-EB-NEXT:    jr $ra
590 ; MIPS32-EB-NEXT:    swr $4, 3($1)
592 ; MIPS32R6-LABEL: store_SI_trunc_from_i64:
593 ; MIPS32R6:       # %bb.0: # %entry
594 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
595 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
596 ; MIPS32R6-NEXT:    addu $1, $2, $25
597 ; MIPS32R6-NEXT:    lw $1, %got(si)($1)
598 ; MIPS32R6-NEXT:    jr $ra
599 ; MIPS32R6-NEXT:    sw $4, 0($1)
601 ; MIPS64-EL-LABEL: store_SI_trunc_from_i64:
602 ; MIPS64-EL:       # %bb.0: # %entry
603 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI_trunc_from_i64)))
604 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
605 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI_trunc_from_i64)))
606 ; MIPS64-EL-NEXT:    ld $1, %got_disp(si)($1)
607 ; MIPS64-EL-NEXT:    swl $4, 3($1)
608 ; MIPS64-EL-NEXT:    jr $ra
609 ; MIPS64-EL-NEXT:    swr $4, 0($1)
611 ; MIPS64-EB-LABEL: store_SI_trunc_from_i64:
612 ; MIPS64-EB:       # %bb.0: # %entry
613 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI_trunc_from_i64)))
614 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
615 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI_trunc_from_i64)))
616 ; MIPS64-EB-NEXT:    ld $1, %got_disp(si)($1)
617 ; MIPS64-EB-NEXT:    swl $4, 0($1)
618 ; MIPS64-EB-NEXT:    jr $ra
619 ; MIPS64-EB-NEXT:    swr $4, 3($1)
621 ; MIPS64R2-EL-LABEL: store_SI_trunc_from_i64:
622 ; MIPS64R2-EL:       # %bb.0: # %entry
623 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI_trunc_from_i64)))
624 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
625 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI_trunc_from_i64)))
626 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(si)($1)
627 ; MIPS64R2-EL-NEXT:    swl $4, 3($1)
628 ; MIPS64R2-EL-NEXT:    jr $ra
629 ; MIPS64R2-EL-NEXT:    swr $4, 0($1)
631 ; MIPS64R2-EB-LABEL: store_SI_trunc_from_i64:
632 ; MIPS64R2-EB:       # %bb.0: # %entry
633 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI_trunc_from_i64)))
634 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
635 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI_trunc_from_i64)))
636 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(si)($1)
637 ; MIPS64R2-EB-NEXT:    swl $4, 0($1)
638 ; MIPS64R2-EB-NEXT:    jr $ra
639 ; MIPS64R2-EB-NEXT:    swr $4, 3($1)
641 ; MIPS64R6-LABEL: store_SI_trunc_from_i64:
642 ; MIPS64R6:       # %bb.0: # %entry
643 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(store_SI_trunc_from_i64)))
644 ; MIPS64R6-NEXT:    daddu $1, $1, $25
645 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(store_SI_trunc_from_i64)))
646 ; MIPS64R6-NEXT:    ld $1, %got_disp(si)($1)
647 ; MIPS64R6-NEXT:    jr $ra
648 ; MIPS64R6-NEXT:    sw $4, 0($1)
649 entry:
650   store i32 %a, ptr @si, align 1
651   ret void
655 ; Structures are simply concatenations of the members. They are unaffected by
656 ; endianness
659 %struct.S0 = type { i8, i8 }
660 @struct_s0 = common global %struct.S0 zeroinitializer, align 1
661 %struct.S1 = type { i16, i16 }
662 @struct_s1 = common global %struct.S1 zeroinitializer, align 1
663 %struct.S2 = type { i32, i32 }
664 @struct_s2 = common global %struct.S2 zeroinitializer, align 1
666 define void @copy_struct_S0() nounwind {
667 ; MIPS32-LABEL: copy_struct_S0:
668 ; MIPS32:       # %bb.0: # %entry
669 ; MIPS32-NEXT:    lui $2, %hi(_gp_disp)
670 ; MIPS32-NEXT:    addiu $2, $2, %lo(_gp_disp)
671 ; MIPS32-NEXT:    addu $1, $2, $25
672 ; MIPS32-NEXT:    lw $1, %got(struct_s0)($1)
673 ; MIPS32-NEXT:    lbu $2, 0($1)
674 ; MIPS32-NEXT:    sb $2, 2($1)
675 ; MIPS32-NEXT:    lbu $2, 1($1)
676 ; MIPS32-NEXT:    jr $ra
677 ; MIPS32-NEXT:    sb $2, 3($1)
679 ; MIPS32R6-LABEL: copy_struct_S0:
680 ; MIPS32R6:       # %bb.0: # %entry
681 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
682 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
683 ; MIPS32R6-NEXT:    addu $1, $2, $25
684 ; MIPS32R6-NEXT:    lw $1, %got(struct_s0)($1)
685 ; MIPS32R6-NEXT:    lhu $2, 0($1)
686 ; MIPS32R6-NEXT:    jr $ra
687 ; MIPS32R6-NEXT:    sh $2, 2($1)
689 ; MIPS64-LABEL: copy_struct_S0:
690 ; MIPS64:       # %bb.0: # %entry
691 ; MIPS64-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S0)))
692 ; MIPS64-NEXT:    daddu $1, $1, $25
693 ; MIPS64-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S0)))
694 ; MIPS64-NEXT:    ld $1, %got_disp(struct_s0)($1)
695 ; MIPS64-NEXT:    lbu $2, 0($1)
696 ; MIPS64-NEXT:    sb $2, 2($1)
697 ; MIPS64-NEXT:    lbu $2, 1($1)
698 ; MIPS64-NEXT:    jr $ra
699 ; MIPS64-NEXT:    sb $2, 3($1)
701 ; MIPS64R6-LABEL: copy_struct_S0:
702 ; MIPS64R6:       # %bb.0: # %entry
703 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S0)))
704 ; MIPS64R6-NEXT:    daddu $1, $1, $25
705 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S0)))
706 ; MIPS64R6-NEXT:    ld $1, %got_disp(struct_s0)($1)
707 ; MIPS64R6-NEXT:    lhu $2, 0($1)
708 ; MIPS64R6-NEXT:    jr $ra
709 ; MIPS64R6-NEXT:    sh $2, 2($1)
710 entry:
711   %0 = load %struct.S0, ptr @struct_s0, align 1
712   store %struct.S0 %0, ptr getelementptr inbounds (%struct.S0, ptr @struct_s0, i32 1), align 1
713   ret void
716 define void @copy_struct_S1() nounwind {
717 ; MIPS32-EL-LABEL: copy_struct_S1:
718 ; MIPS32-EL:       # %bb.0: # %entry
719 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
720 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
721 ; MIPS32-EL-NEXT:    addu $1, $2, $25
722 ; MIPS32-EL-NEXT:    lw $1, %got(struct_s1)($1)
723 ; MIPS32-EL-NEXT:    lwl $2, 3($1)
724 ; MIPS32-EL-NEXT:    lwr $2, 0($1)
725 ; MIPS32-EL-NEXT:    swl $2, 7($1)
726 ; MIPS32-EL-NEXT:    jr $ra
727 ; MIPS32-EL-NEXT:    swr $2, 4($1)
729 ; MIPS32-EB-LABEL: copy_struct_S1:
730 ; MIPS32-EB:       # %bb.0: # %entry
731 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
732 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
733 ; MIPS32-EB-NEXT:    addu $1, $2, $25
734 ; MIPS32-EB-NEXT:    lw $1, %got(struct_s1)($1)
735 ; MIPS32-EB-NEXT:    lwl $2, 0($1)
736 ; MIPS32-EB-NEXT:    lwr $2, 3($1)
737 ; MIPS32-EB-NEXT:    swl $2, 4($1)
738 ; MIPS32-EB-NEXT:    jr $ra
739 ; MIPS32-EB-NEXT:    swr $2, 7($1)
741 ; MIPS32R6-LABEL: copy_struct_S1:
742 ; MIPS32R6:       # %bb.0: # %entry
743 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
744 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
745 ; MIPS32R6-NEXT:    addu $1, $2, $25
746 ; MIPS32R6-NEXT:    lw $1, %got(struct_s1)($1)
747 ; MIPS32R6-NEXT:    lw $2, 0($1)
748 ; MIPS32R6-NEXT:    jr $ra
749 ; MIPS32R6-NEXT:    sw $2, 4($1)
751 ; MIPS64-EL-LABEL: copy_struct_S1:
752 ; MIPS64-EL:       # %bb.0: # %entry
753 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S1)))
754 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
755 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S1)))
756 ; MIPS64-EL-NEXT:    ld $1, %got_disp(struct_s1)($1)
757 ; MIPS64-EL-NEXT:    lwl $2, 3($1)
758 ; MIPS64-EL-NEXT:    lwr $2, 0($1)
759 ; MIPS64-EL-NEXT:    swl $2, 7($1)
760 ; MIPS64-EL-NEXT:    jr $ra
761 ; MIPS64-EL-NEXT:    swr $2, 4($1)
763 ; MIPS64-EB-LABEL: copy_struct_S1:
764 ; MIPS64-EB:       # %bb.0: # %entry
765 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S1)))
766 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
767 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S1)))
768 ; MIPS64-EB-NEXT:    ld $1, %got_disp(struct_s1)($1)
769 ; MIPS64-EB-NEXT:    lwl $2, 0($1)
770 ; MIPS64-EB-NEXT:    lwr $2, 3($1)
771 ; MIPS64-EB-NEXT:    swl $2, 4($1)
772 ; MIPS64-EB-NEXT:    jr $ra
773 ; MIPS64-EB-NEXT:    swr $2, 7($1)
775 ; MIPS64R2-EL-LABEL: copy_struct_S1:
776 ; MIPS64R2-EL:       # %bb.0: # %entry
777 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S1)))
778 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
779 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S1)))
780 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(struct_s1)($1)
781 ; MIPS64R2-EL-NEXT:    lwl $2, 3($1)
782 ; MIPS64R2-EL-NEXT:    lwr $2, 0($1)
783 ; MIPS64R2-EL-NEXT:    swl $2, 7($1)
784 ; MIPS64R2-EL-NEXT:    jr $ra
785 ; MIPS64R2-EL-NEXT:    swr $2, 4($1)
787 ; MIPS64R2-EB-LABEL: copy_struct_S1:
788 ; MIPS64R2-EB:       # %bb.0: # %entry
789 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S1)))
790 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
791 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S1)))
792 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(struct_s1)($1)
793 ; MIPS64R2-EB-NEXT:    lwl $2, 0($1)
794 ; MIPS64R2-EB-NEXT:    lwr $2, 3($1)
795 ; MIPS64R2-EB-NEXT:    swl $2, 4($1)
796 ; MIPS64R2-EB-NEXT:    jr $ra
797 ; MIPS64R2-EB-NEXT:    swr $2, 7($1)
799 ; MIPS64R6-LABEL: copy_struct_S1:
800 ; MIPS64R6:       # %bb.0: # %entry
801 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S1)))
802 ; MIPS64R6-NEXT:    daddu $1, $1, $25
803 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S1)))
804 ; MIPS64R6-NEXT:    ld $1, %got_disp(struct_s1)($1)
805 ; MIPS64R6-NEXT:    lw $2, 0($1)
806 ; MIPS64R6-NEXT:    jr $ra
807 ; MIPS64R6-NEXT:    sw $2, 4($1)
808 entry:
809   %0 = load %struct.S1, ptr @struct_s1, align 1
810   store %struct.S1 %0, ptr getelementptr inbounds (%struct.S1, ptr @struct_s1, i32 1), align 1
811   ret void
814 define void @copy_struct_S2() nounwind {
815 ; MIPS32-EL-LABEL: copy_struct_S2:
816 ; MIPS32-EL:       # %bb.0: # %entry
817 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
818 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
819 ; MIPS32-EL-NEXT:    addu $1, $2, $25
820 ; MIPS32-EL-NEXT:    lw $1, %got(struct_s2)($1)
821 ; MIPS32-EL-NEXT:    lwl $2, 3($1)
822 ; MIPS32-EL-NEXT:    lwr $2, 0($1)
823 ; MIPS32-EL-NEXT:    swl $2, 11($1)
824 ; MIPS32-EL-NEXT:    lwl $3, 7($1)
825 ; MIPS32-EL-NEXT:    lwr $3, 4($1)
826 ; MIPS32-EL-NEXT:    swl $3, 15($1)
827 ; MIPS32-EL-NEXT:    swr $2, 8($1)
828 ; MIPS32-EL-NEXT:    jr $ra
829 ; MIPS32-EL-NEXT:    swr $3, 12($1)
831 ; MIPS32-EB-LABEL: copy_struct_S2:
832 ; MIPS32-EB:       # %bb.0: # %entry
833 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
834 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
835 ; MIPS32-EB-NEXT:    addu $1, $2, $25
836 ; MIPS32-EB-NEXT:    lw $1, %got(struct_s2)($1)
837 ; MIPS32-EB-NEXT:    lwl $2, 0($1)
838 ; MIPS32-EB-NEXT:    lwr $2, 3($1)
839 ; MIPS32-EB-NEXT:    swl $2, 8($1)
840 ; MIPS32-EB-NEXT:    lwl $3, 4($1)
841 ; MIPS32-EB-NEXT:    lwr $3, 7($1)
842 ; MIPS32-EB-NEXT:    swl $3, 12($1)
843 ; MIPS32-EB-NEXT:    swr $2, 11($1)
844 ; MIPS32-EB-NEXT:    jr $ra
845 ; MIPS32-EB-NEXT:    swr $3, 15($1)
847 ; MIPS32R6-LABEL: copy_struct_S2:
848 ; MIPS32R6:       # %bb.0: # %entry
849 ; MIPS32R6-NEXT:    lui $2, %hi(_gp_disp)
850 ; MIPS32R6-NEXT:    addiu $2, $2, %lo(_gp_disp)
851 ; MIPS32R6-NEXT:    addu $1, $2, $25
852 ; MIPS32R6-NEXT:    lw $1, %got(struct_s2)($1)
853 ; MIPS32R6-NEXT:    lw $2, 0($1)
854 ; MIPS32R6-NEXT:    sw $2, 8($1)
855 ; MIPS32R6-NEXT:    lw $2, 4($1)
856 ; MIPS32R6-NEXT:    jr $ra
857 ; MIPS32R6-NEXT:    sw $2, 12($1)
859 ; MIPS64-EL-LABEL: copy_struct_S2:
860 ; MIPS64-EL:       # %bb.0: # %entry
861 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S2)))
862 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
863 ; MIPS64-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S2)))
864 ; MIPS64-EL-NEXT:    ld $1, %got_disp(struct_s2)($1)
865 ; MIPS64-EL-NEXT:    ldl $2, 7($1)
866 ; MIPS64-EL-NEXT:    ldr $2, 0($1)
867 ; MIPS64-EL-NEXT:    sdl $2, 15($1)
868 ; MIPS64-EL-NEXT:    jr $ra
869 ; MIPS64-EL-NEXT:    sdr $2, 8($1)
871 ; MIPS64-EB-LABEL: copy_struct_S2:
872 ; MIPS64-EB:       # %bb.0: # %entry
873 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S2)))
874 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
875 ; MIPS64-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S2)))
876 ; MIPS64-EB-NEXT:    ld $1, %got_disp(struct_s2)($1)
877 ; MIPS64-EB-NEXT:    ldl $2, 0($1)
878 ; MIPS64-EB-NEXT:    ldr $2, 7($1)
879 ; MIPS64-EB-NEXT:    sdl $2, 8($1)
880 ; MIPS64-EB-NEXT:    jr $ra
881 ; MIPS64-EB-NEXT:    sdr $2, 15($1)
883 ; MIPS64R2-EL-LABEL: copy_struct_S2:
884 ; MIPS64R2-EL:       # %bb.0: # %entry
885 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S2)))
886 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
887 ; MIPS64R2-EL-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S2)))
888 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(struct_s2)($1)
889 ; MIPS64R2-EL-NEXT:    ldl $2, 7($1)
890 ; MIPS64R2-EL-NEXT:    ldr $2, 0($1)
891 ; MIPS64R2-EL-NEXT:    sdl $2, 15($1)
892 ; MIPS64R2-EL-NEXT:    jr $ra
893 ; MIPS64R2-EL-NEXT:    sdr $2, 8($1)
895 ; MIPS64R2-EB-LABEL: copy_struct_S2:
896 ; MIPS64R2-EB:       # %bb.0: # %entry
897 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S2)))
898 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
899 ; MIPS64R2-EB-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S2)))
900 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(struct_s2)($1)
901 ; MIPS64R2-EB-NEXT:    ldl $2, 0($1)
902 ; MIPS64R2-EB-NEXT:    ldr $2, 7($1)
903 ; MIPS64R2-EB-NEXT:    sdl $2, 8($1)
904 ; MIPS64R2-EB-NEXT:    jr $ra
905 ; MIPS64R2-EB-NEXT:    sdr $2, 15($1)
907 ; MIPS64R6-LABEL: copy_struct_S2:
908 ; MIPS64R6:       # %bb.0: # %entry
909 ; MIPS64R6-NEXT:    lui $1, %hi(%neg(%gp_rel(copy_struct_S2)))
910 ; MIPS64R6-NEXT:    daddu $1, $1, $25
911 ; MIPS64R6-NEXT:    daddiu $1, $1, %lo(%neg(%gp_rel(copy_struct_S2)))
912 ; MIPS64R6-NEXT:    ld $1, %got_disp(struct_s2)($1)
913 ; MIPS64R6-NEXT:    ld $2, 0($1)
914 ; MIPS64R6-NEXT:    jr $ra
915 ; MIPS64R6-NEXT:    sd $2, 8($1)
916 entry:
917   %0 = load %struct.S2, ptr @struct_s2, align 1
918   store %struct.S2 %0, ptr getelementptr inbounds (%struct.S2, ptr @struct_s2, i32 1), align 1
919   ret void
923 ; Arrays are simply concatenations of the members. They are unaffected by
924 ; endianness
927 @arr = common global [7 x i8] zeroinitializer, align 1
929 define void @pass_array_byval() nounwind {
930 ; MIPS32-EL-LABEL: pass_array_byval:
931 ; MIPS32-EL:       # %bb.0: # %entry
932 ; MIPS32-EL-NEXT:    lui $2, %hi(_gp_disp)
933 ; MIPS32-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
934 ; MIPS32-EL-NEXT:    addiu $sp, $sp, -24
935 ; MIPS32-EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
936 ; MIPS32-EL-NEXT:    addu $gp, $2, $25
937 ; MIPS32-EL-NEXT:    lw $1, %got(arr)($gp)
938 ; MIPS32-EL-NEXT:    lwl $4, 3($1)
939 ; MIPS32-EL-NEXT:    lwr $4, 0($1)
940 ; MIPS32-EL-NEXT:    lbu $2, 4($1)
941 ; MIPS32-EL-NEXT:    lbu $3, 5($1)
942 ; MIPS32-EL-NEXT:    sll $3, $3, 8
943 ; MIPS32-EL-NEXT:    or $2, $3, $2
944 ; MIPS32-EL-NEXT:    lbu $1, 6($1)
945 ; MIPS32-EL-NEXT:    sll $1, $1, 16
946 ; MIPS32-EL-NEXT:    lw $25, %call16(extern_func)($gp)
947 ; MIPS32-EL-NEXT:    .reloc ($tmp0), R_MIPS_JALR, extern_func
948 ; MIPS32-EL-NEXT:  $tmp0:
949 ; MIPS32-EL-NEXT:    jalr $25
950 ; MIPS32-EL-NEXT:    or $5, $2, $1
951 ; MIPS32-EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
952 ; MIPS32-EL-NEXT:    jr $ra
953 ; MIPS32-EL-NEXT:    addiu $sp, $sp, 24
955 ; MIPS32-EB-LABEL: pass_array_byval:
956 ; MIPS32-EB:       # %bb.0: # %entry
957 ; MIPS32-EB-NEXT:    lui $2, %hi(_gp_disp)
958 ; MIPS32-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
959 ; MIPS32-EB-NEXT:    addiu $sp, $sp, -24
960 ; MIPS32-EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
961 ; MIPS32-EB-NEXT:    addu $gp, $2, $25
962 ; MIPS32-EB-NEXT:    lw $1, %got(arr)($gp)
963 ; MIPS32-EB-NEXT:    lwl $4, 0($1)
964 ; MIPS32-EB-NEXT:    lbu $2, 5($1)
965 ; MIPS32-EB-NEXT:    lwr $4, 3($1)
966 ; MIPS32-EB-NEXT:    sll $2, $2, 16
967 ; MIPS32-EB-NEXT:    lbu $3, 4($1)
968 ; MIPS32-EB-NEXT:    sll $3, $3, 24
969 ; MIPS32-EB-NEXT:    or $2, $3, $2
970 ; MIPS32-EB-NEXT:    lbu $1, 6($1)
971 ; MIPS32-EB-NEXT:    sll $1, $1, 8
972 ; MIPS32-EB-NEXT:    lw $25, %call16(extern_func)($gp)
973 ; MIPS32-EB-NEXT:    .reloc ($tmp0), R_MIPS_JALR, extern_func
974 ; MIPS32-EB-NEXT:  $tmp0:
975 ; MIPS32-EB-NEXT:    jalr $25
976 ; MIPS32-EB-NEXT:    or $5, $2, $1
977 ; MIPS32-EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
978 ; MIPS32-EB-NEXT:    jr $ra
979 ; MIPS32-EB-NEXT:    addiu $sp, $sp, 24
981 ; MIPS32R6-EL-LABEL: pass_array_byval:
982 ; MIPS32R6-EL:       # %bb.0: # %entry
983 ; MIPS32R6-EL-NEXT:    lui $2, %hi(_gp_disp)
984 ; MIPS32R6-EL-NEXT:    addiu $2, $2, %lo(_gp_disp)
985 ; MIPS32R6-EL-NEXT:    addiu $sp, $sp, -24
986 ; MIPS32R6-EL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
987 ; MIPS32R6-EL-NEXT:    addu $gp, $2, $25
988 ; MIPS32R6-EL-NEXT:    lw $1, %got(arr)($gp)
989 ; MIPS32R6-EL-NEXT:    lhu $2, 4($1)
990 ; MIPS32R6-EL-NEXT:    lbu $3, 6($1)
991 ; MIPS32R6-EL-NEXT:    sll $3, $3, 16
992 ; MIPS32R6-EL-NEXT:    lw $4, 0($1)
993 ; MIPS32R6-EL-NEXT:    lw $25, %call16(extern_func)($gp)
994 ; MIPS32R6-EL-NEXT:    .reloc ($tmp0), R_MIPS_JALR, extern_func
995 ; MIPS32R6-EL-NEXT:  $tmp0:
996 ; MIPS32R6-EL-NEXT:    jalr $25
997 ; MIPS32R6-EL-NEXT:    or $5, $2, $3
998 ; MIPS32R6-EL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
999 ; MIPS32R6-EL-NEXT:    jr $ra
1000 ; MIPS32R6-EL-NEXT:    addiu $sp, $sp, 24
1002 ; MIPS32R6-EB-LABEL: pass_array_byval:
1003 ; MIPS32R6-EB:       # %bb.0: # %entry
1004 ; MIPS32R6-EB-NEXT:    lui $2, %hi(_gp_disp)
1005 ; MIPS32R6-EB-NEXT:    addiu $2, $2, %lo(_gp_disp)
1006 ; MIPS32R6-EB-NEXT:    addiu $sp, $sp, -24
1007 ; MIPS32R6-EB-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
1008 ; MIPS32R6-EB-NEXT:    addu $gp, $2, $25
1009 ; MIPS32R6-EB-NEXT:    lw $1, %got(arr)($gp)
1010 ; MIPS32R6-EB-NEXT:    lbu $2, 6($1)
1011 ; MIPS32R6-EB-NEXT:    sll $2, $2, 8
1012 ; MIPS32R6-EB-NEXT:    lhu $3, 4($1)
1013 ; MIPS32R6-EB-NEXT:    sll $3, $3, 16
1014 ; MIPS32R6-EB-NEXT:    lw $4, 0($1)
1015 ; MIPS32R6-EB-NEXT:    lw $25, %call16(extern_func)($gp)
1016 ; MIPS32R6-EB-NEXT:    .reloc ($tmp0), R_MIPS_JALR, extern_func
1017 ; MIPS32R6-EB-NEXT:  $tmp0:
1018 ; MIPS32R6-EB-NEXT:    jalr $25
1019 ; MIPS32R6-EB-NEXT:    or $5, $3, $2
1020 ; MIPS32R6-EB-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
1021 ; MIPS32R6-EB-NEXT:    jr $ra
1022 ; MIPS32R6-EB-NEXT:    addiu $sp, $sp, 24
1024 ; MIPS64-EL-LABEL: pass_array_byval:
1025 ; MIPS64-EL:       # %bb.0: # %entry
1026 ; MIPS64-EL-NEXT:    daddiu $sp, $sp, -16
1027 ; MIPS64-EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
1028 ; MIPS64-EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
1029 ; MIPS64-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(pass_array_byval)))
1030 ; MIPS64-EL-NEXT:    daddu $1, $1, $25
1031 ; MIPS64-EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(pass_array_byval)))
1032 ; MIPS64-EL-NEXT:    ld $1, %got_disp(arr)($gp)
1033 ; MIPS64-EL-NEXT:    lbu $2, 4($1)
1034 ; MIPS64-EL-NEXT:    dsll $2, $2, 32
1035 ; MIPS64-EL-NEXT:    lbu $3, 5($1)
1036 ; MIPS64-EL-NEXT:    dsll $3, $3, 40
1037 ; MIPS64-EL-NEXT:    or $2, $3, $2
1038 ; MIPS64-EL-NEXT:    lwl $3, 3($1)
1039 ; MIPS64-EL-NEXT:    lwr $3, 0($1)
1040 ; MIPS64-EL-NEXT:    daddiu $4, $zero, 1
1041 ; MIPS64-EL-NEXT:    dsll $4, $4, 32
1042 ; MIPS64-EL-NEXT:    daddiu $4, $4, -1
1043 ; MIPS64-EL-NEXT:    and $3, $3, $4
1044 ; MIPS64-EL-NEXT:    or $2, $3, $2
1045 ; MIPS64-EL-NEXT:    lbu $1, 6($1)
1046 ; MIPS64-EL-NEXT:    dsll $1, $1, 48
1047 ; MIPS64-EL-NEXT:    ld $25, %call16(extern_func)($gp)
1048 ; MIPS64-EL-NEXT:    .reloc .Ltmp0, R_MIPS_JALR, extern_func
1049 ; MIPS64-EL-NEXT:  .Ltmp0:
1050 ; MIPS64-EL-NEXT:    jalr $25
1051 ; MIPS64-EL-NEXT:    or $4, $2, $1
1052 ; MIPS64-EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
1053 ; MIPS64-EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
1054 ; MIPS64-EL-NEXT:    jr $ra
1055 ; MIPS64-EL-NEXT:    daddiu $sp, $sp, 16
1057 ; MIPS64-EB-LABEL: pass_array_byval:
1058 ; MIPS64-EB:       # %bb.0: # %entry
1059 ; MIPS64-EB-NEXT:    daddiu $sp, $sp, -16
1060 ; MIPS64-EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
1061 ; MIPS64-EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
1062 ; MIPS64-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(pass_array_byval)))
1063 ; MIPS64-EB-NEXT:    daddu $1, $1, $25
1064 ; MIPS64-EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(pass_array_byval)))
1065 ; MIPS64-EB-NEXT:    ld $1, %got_disp(arr)($gp)
1066 ; MIPS64-EB-NEXT:    lbu $2, 5($1)
1067 ; MIPS64-EB-NEXT:    dsll $2, $2, 16
1068 ; MIPS64-EB-NEXT:    lbu $3, 4($1)
1069 ; MIPS64-EB-NEXT:    dsll $3, $3, 24
1070 ; MIPS64-EB-NEXT:    or $2, $3, $2
1071 ; MIPS64-EB-NEXT:    lwl $3, 0($1)
1072 ; MIPS64-EB-NEXT:    lwr $3, 3($1)
1073 ; MIPS64-EB-NEXT:    dsll $3, $3, 32
1074 ; MIPS64-EB-NEXT:    or $2, $3, $2
1075 ; MIPS64-EB-NEXT:    lbu $1, 6($1)
1076 ; MIPS64-EB-NEXT:    dsll $1, $1, 8
1077 ; MIPS64-EB-NEXT:    ld $25, %call16(extern_func)($gp)
1078 ; MIPS64-EB-NEXT:    .reloc .Ltmp0, R_MIPS_JALR, extern_func
1079 ; MIPS64-EB-NEXT:  .Ltmp0:
1080 ; MIPS64-EB-NEXT:    jalr $25
1081 ; MIPS64-EB-NEXT:    or $4, $2, $1
1082 ; MIPS64-EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
1083 ; MIPS64-EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
1084 ; MIPS64-EB-NEXT:    jr $ra
1085 ; MIPS64-EB-NEXT:    daddiu $sp, $sp, 16
1087 ; MIPS64R2-EL-LABEL: pass_array_byval:
1088 ; MIPS64R2-EL:       # %bb.0: # %entry
1089 ; MIPS64R2-EL-NEXT:    daddiu $sp, $sp, -16
1090 ; MIPS64R2-EL-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
1091 ; MIPS64R2-EL-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
1092 ; MIPS64R2-EL-NEXT:    lui $1, %hi(%neg(%gp_rel(pass_array_byval)))
1093 ; MIPS64R2-EL-NEXT:    daddu $1, $1, $25
1094 ; MIPS64R2-EL-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(pass_array_byval)))
1095 ; MIPS64R2-EL-NEXT:    ld $1, %got_disp(arr)($gp)
1096 ; MIPS64R2-EL-NEXT:    lbu $2, 4($1)
1097 ; MIPS64R2-EL-NEXT:    dsll $2, $2, 32
1098 ; MIPS64R2-EL-NEXT:    lbu $3, 5($1)
1099 ; MIPS64R2-EL-NEXT:    dsll $3, $3, 40
1100 ; MIPS64R2-EL-NEXT:    or $2, $3, $2
1101 ; MIPS64R2-EL-NEXT:    lwl $3, 3($1)
1102 ; MIPS64R2-EL-NEXT:    lwr $3, 0($1)
1103 ; MIPS64R2-EL-NEXT:    dext $3, $3, 0, 32
1104 ; MIPS64R2-EL-NEXT:    or $2, $3, $2
1105 ; MIPS64R2-EL-NEXT:    lbu $1, 6($1)
1106 ; MIPS64R2-EL-NEXT:    dsll $1, $1, 48
1107 ; MIPS64R2-EL-NEXT:    ld $25, %call16(extern_func)($gp)
1108 ; MIPS64R2-EL-NEXT:    .reloc .Ltmp0, R_MIPS_JALR, extern_func
1109 ; MIPS64R2-EL-NEXT:  .Ltmp0:
1110 ; MIPS64R2-EL-NEXT:    jalr $25
1111 ; MIPS64R2-EL-NEXT:    or $4, $2, $1
1112 ; MIPS64R2-EL-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
1113 ; MIPS64R2-EL-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
1114 ; MIPS64R2-EL-NEXT:    jr $ra
1115 ; MIPS64R2-EL-NEXT:    daddiu $sp, $sp, 16
1117 ; MIPS64R2-EB-LABEL: pass_array_byval:
1118 ; MIPS64R2-EB:       # %bb.0: # %entry
1119 ; MIPS64R2-EB-NEXT:    daddiu $sp, $sp, -16
1120 ; MIPS64R2-EB-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
1121 ; MIPS64R2-EB-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
1122 ; MIPS64R2-EB-NEXT:    lui $1, %hi(%neg(%gp_rel(pass_array_byval)))
1123 ; MIPS64R2-EB-NEXT:    daddu $1, $1, $25
1124 ; MIPS64R2-EB-NEXT:    daddiu $gp, $1, %lo(%neg(%gp_rel(pass_array_byval)))
1125 ; MIPS64R2-EB-NEXT:    ld $1, %got_disp(arr)($gp)
1126 ; MIPS64R2-EB-NEXT:    lbu $2, 5($1)
1127 ; MIPS64R2-EB-NEXT:    dsll $2, $2, 16
1128 ; MIPS64R2-EB-NEXT:    lbu $3, 4($1)
1129 ; MIPS64R2-EB-NEXT:    dsll $3, $3, 24
1130 ; MIPS64R2-EB-NEXT:    or $2, $3, $2
1131 ; MIPS64R2-EB-NEXT:    lwl $3, 0($1)
1132 ; MIPS64R2-EB-NEXT:    lwr $3, 3($1)
1133 ; MIPS64R2-EB-NEXT:    dext $3, $3, 0, 32
1134 ; MIPS64R2-EB-NEXT:    dsll $3, $3, 32
1135 ; MIPS64R2-EB-NEXT:    or $2, $3, $2
1136 ; MIPS64R2-EB-NEXT:    lbu $1, 6($1)
1137 ; MIPS64R2-EB-NEXT:    dsll $1, $1, 8
1138 ; MIPS64R2-EB-NEXT:    ld $25, %call16(extern_func)($gp)
1139 ; MIPS64R2-EB-NEXT:    .reloc .Ltmp0, R_MIPS_JALR, extern_func
1140 ; MIPS64R2-EB-NEXT:  .Ltmp0:
1141 ; MIPS64R2-EB-NEXT:    jalr $25
1142 ; MIPS64R2-EB-NEXT:    or $4, $2, $1
1143 ; MIPS64R2-EB-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
1144 ; MIPS64R2-EB-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
1145 ; MIPS64R2-EB-NEXT:    jr $ra
1146 ; MIPS64R2-EB-NEXT:    daddiu $sp, $sp, 16
1147 entry:
1148   tail call void @extern_func(ptr byval([7 x i8]) @arr) nounwind
1149   ret void
1152 declare void @extern_func(ptr byval([7 x i8]))