xref: /llvm-project/llvm/test/CodeGen/Mips/GlobalISel/llvm-ir/load_atomic.ll (revision 7973d5196597894c2f8a4e99a90fc404db9f3041)
1120c5115SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2120c5115SMatt Arsenault; RUN: llc -global-isel -mtriple=mipsel-linux-gnu -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=MIPS32
3120c5115SMatt Arsenault
4120c5115SMatt Arsenault; --------------------------------------------------------------------
5120c5115SMatt Arsenault; unordered
6120c5115SMatt Arsenault; --------------------------------------------------------------------
7120c5115SMatt Arsenault
88663926aSNikita Popovdefine i8 @atomic_load_unordered_i8(ptr %ptr) {
9120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8:
10120c5115SMatt Arsenault; MIPS32:       # %bb.0:
11120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $2, 0($4)
12120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
13120c5115SMatt Arsenault; MIPS32-NEXT:    nop
148663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
15120c5115SMatt Arsenault  ret i8 %load
16120c5115SMatt Arsenault}
17120c5115SMatt Arsenault
188663926aSNikita Popovdefine i32 @atomic_load_unordered_i8_sext_i32(ptr %ptr) {
19120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_sext_i32:
20120c5115SMatt Arsenault; MIPS32:       # %bb.0:
21120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
22120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
23120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
24120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
258663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
26120c5115SMatt Arsenault  %sext = sext i8 %load to i32
27120c5115SMatt Arsenault  ret i32 %sext
28120c5115SMatt Arsenault}
29120c5115SMatt Arsenault
308663926aSNikita Popovdefine i16 @atomic_load_unordered_i8_sext_i16(ptr %ptr) {
31120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_sext_i16:
32120c5115SMatt Arsenault; MIPS32:       # %bb.0:
33120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
34120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
35120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
36120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
378663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
38120c5115SMatt Arsenault  %sext = sext i8 %load to i16
39120c5115SMatt Arsenault  ret i16 %sext
40120c5115SMatt Arsenault}
41120c5115SMatt Arsenault
428663926aSNikita Popovdefine i64 @atomic_load_unordered_i8_sext_i64(ptr %ptr) {
43120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_sext_i64:
44120c5115SMatt Arsenault; MIPS32:       # %bb.0:
45120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
46120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
47120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
48120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
49120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
508663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
51120c5115SMatt Arsenault  %sext = sext i8 %load to i64
52120c5115SMatt Arsenault  ret i64 %sext
53120c5115SMatt Arsenault}
54120c5115SMatt Arsenault
558663926aSNikita Popovdefine i32 @atomic_load_unordered_i8_zext_i32(ptr %ptr) {
56120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_zext_i32:
57120c5115SMatt Arsenault; MIPS32:       # %bb.0:
58120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
59120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
60120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
618663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
62120c5115SMatt Arsenault  %zext = zext i8 %load to i32
63120c5115SMatt Arsenault  ret i32 %zext
64120c5115SMatt Arsenault}
65120c5115SMatt Arsenault
668663926aSNikita Popovdefine i16 @atomic_load_unordered_i8_zext_i16(ptr %ptr) {
67120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_zext_i16:
68120c5115SMatt Arsenault; MIPS32:       # %bb.0:
69120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
70120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
71120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
728663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
73120c5115SMatt Arsenault  %zext = zext i8 %load to i16
74120c5115SMatt Arsenault  ret i16 %zext
75120c5115SMatt Arsenault}
76120c5115SMatt Arsenault
778663926aSNikita Popovdefine i64 @atomic_load_unordered_i8_zext_i64(ptr %ptr) {
78120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i8_zext_i64:
79120c5115SMatt Arsenault; MIPS32:       # %bb.0:
80120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
81120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
82120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
83120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
848663926aSNikita Popov  %load = load atomic i8, ptr %ptr unordered, align 1
85120c5115SMatt Arsenault  %zext = zext i8 %load to i64
86120c5115SMatt Arsenault  ret i64 %zext
87120c5115SMatt Arsenault}
88120c5115SMatt Arsenault
898663926aSNikita Popovdefine i16 @atomic_load_unordered_i16(ptr %ptr) {
90120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16:
91120c5115SMatt Arsenault; MIPS32:       # %bb.0:
92120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $2, 0($4)
93120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
94120c5115SMatt Arsenault; MIPS32-NEXT:    nop
958663926aSNikita Popov  %load = load atomic i16, ptr %ptr unordered, align 2
96120c5115SMatt Arsenault  ret i16 %load
97120c5115SMatt Arsenault}
98120c5115SMatt Arsenault
998663926aSNikita Popovdefine i32 @atomic_load_unordered_i16_sext_i32(ptr %ptr) {
100120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_sext_i32:
101120c5115SMatt Arsenault; MIPS32:       # %bb.0:
102120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
103120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
104120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
105120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
1068663926aSNikita Popov  %load = load atomic i16, ptr %ptr unordered, align 2
107120c5115SMatt Arsenault  %sext = sext i16 %load to i32
108120c5115SMatt Arsenault  ret i32 %sext
109120c5115SMatt Arsenault}
110120c5115SMatt Arsenault
1118663926aSNikita Popovdefine i64 @atomic_load_unordered_i16_sext_i64(ptr %ptr) {
112120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_sext_i64:
113120c5115SMatt Arsenault; MIPS32:       # %bb.0:
114120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
115120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
116120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
117120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
118120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
1198663926aSNikita Popov  %load = load atomic i16, ptr %ptr unordered, align 2
120120c5115SMatt Arsenault  %sext = sext i16 %load to i64
121120c5115SMatt Arsenault  ret i64 %sext
122120c5115SMatt Arsenault}
123120c5115SMatt Arsenault
1248663926aSNikita Popovdefine i32 @atomic_load_unordered_i16_zext_i32(ptr %ptr) {
125120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_zext_i32:
126120c5115SMatt Arsenault; MIPS32:       # %bb.0:
127120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
128120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
129120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
1308663926aSNikita Popov  %load = load atomic i16, ptr %ptr unordered, align 2
131120c5115SMatt Arsenault  %zext = zext i16 %load to i32
132120c5115SMatt Arsenault  ret i32 %zext
133120c5115SMatt Arsenault}
134120c5115SMatt Arsenault
1358663926aSNikita Popovdefine i64 @atomic_load_unordered_i16_zext_i64(ptr %ptr) {
136120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i16_zext_i64:
137120c5115SMatt Arsenault; MIPS32:       # %bb.0:
138120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
139120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
140120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
141120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
1428663926aSNikita Popov  %load = load atomic i16, ptr %ptr unordered, align 2
143120c5115SMatt Arsenault  %zext = zext i16 %load to i64
144120c5115SMatt Arsenault  ret i64 %zext
145120c5115SMatt Arsenault}
146120c5115SMatt Arsenault
1478663926aSNikita Popovdefine i32 @atomic_load_unordered_i32(ptr %ptr) {
148120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i32:
149120c5115SMatt Arsenault; MIPS32:       # %bb.0:
150120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 0($4)
151120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
152120c5115SMatt Arsenault; MIPS32-NEXT:    nop
1538663926aSNikita Popov  %load = load atomic i32, ptr %ptr unordered, align 4
154120c5115SMatt Arsenault  ret i32 %load
155120c5115SMatt Arsenault}
156120c5115SMatt Arsenault
1578663926aSNikita Popovdefine i64 @atomic_load_unordered_i64(ptr %ptr) {
158120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_i64:
159120c5115SMatt Arsenault; MIPS32:       # %bb.0:
160*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
161*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
162*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
163*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
164*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
165*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 0
166*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
167120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
168*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
1698663926aSNikita Popov  %load = load atomic i64, ptr %ptr unordered, align 8
170120c5115SMatt Arsenault  ret i64 %load
171120c5115SMatt Arsenault}
172120c5115SMatt Arsenault
1738663926aSNikita Popovdefine float @atomic_load_unordered_f32(ptr %ptr) {
174120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_f32:
175120c5115SMatt Arsenault; MIPS32:       # %bb.0:
176120c5115SMatt Arsenault; MIPS32-NEXT:    lwc1 $f0, 64($4)
177120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
178120c5115SMatt Arsenault; MIPS32-NEXT:    nop
1798663926aSNikita Popov  %gep = getelementptr inbounds float, ptr %ptr, i32 16
1808663926aSNikita Popov  %load = load atomic float, ptr %gep unordered, align 4
181120c5115SMatt Arsenault  ret float %load
182120c5115SMatt Arsenault}
183120c5115SMatt Arsenault
1848663926aSNikita Popovdefine double @atomic_load_unordered_f64(ptr %ptr) {
185120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_f64:
186120c5115SMatt Arsenault; MIPS32:       # %bb.0:
187*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
188*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
189*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
190*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
191*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 0
192*7973d519SBrad Smith; MIPS32-NEXT:    ori $1, $zero, 128
193*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
194*7973d519SBrad Smith; MIPS32-NEXT:    addu $4, $4, $1
195*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $2, $f0
196*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $3, $f1
197*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
198120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
199*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
2008663926aSNikita Popov  %gep = getelementptr inbounds double, ptr %ptr, i32 16
2018663926aSNikita Popov  %load = load atomic double, ptr %gep unordered, align 8
202120c5115SMatt Arsenault  ret double %load
203120c5115SMatt Arsenault}
204120c5115SMatt Arsenault
2058663926aSNikita Popovdefine ptr @atomic_load_unordered_p0i8(ptr %ptr) {
206120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_unordered_p0i8:
207120c5115SMatt Arsenault; MIPS32:       # %bb.0:
208120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 64($4)
209120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
210120c5115SMatt Arsenault; MIPS32-NEXT:    nop
2118663926aSNikita Popov  %gep = getelementptr inbounds ptr, ptr %ptr, i32 16
2128663926aSNikita Popov  %load = load atomic ptr, ptr %gep unordered, align 4
2138663926aSNikita Popov  ret ptr %load
214120c5115SMatt Arsenault}
215120c5115SMatt Arsenault
216120c5115SMatt Arsenault; --------------------------------------------------------------------
217120c5115SMatt Arsenault; monotonic
218120c5115SMatt Arsenault; --------------------------------------------------------------------
219120c5115SMatt Arsenault
2208663926aSNikita Popovdefine i8 @atomic_load_monotonic_i8(ptr %ptr) {
221120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8:
222120c5115SMatt Arsenault; MIPS32:       # %bb.0:
223120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $2, 0($4)
224120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
225120c5115SMatt Arsenault; MIPS32-NEXT:    nop
2268663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
227120c5115SMatt Arsenault  ret i8 %load
228120c5115SMatt Arsenault}
229120c5115SMatt Arsenault
2308663926aSNikita Popovdefine i32 @atomic_load_monotonic_i8_sext_i32(ptr %ptr) {
231120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_sext_i32:
232120c5115SMatt Arsenault; MIPS32:       # %bb.0:
233120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
234120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
235120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
236120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
2378663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
238120c5115SMatt Arsenault  %sext = sext i8 %load to i32
239120c5115SMatt Arsenault  ret i32 %sext
240120c5115SMatt Arsenault}
241120c5115SMatt Arsenault
2428663926aSNikita Popovdefine i16 @atomic_load_monotonic_i8_sext_i16(ptr %ptr) {
243120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_sext_i16:
244120c5115SMatt Arsenault; MIPS32:       # %bb.0:
245120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
246120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
247120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
248120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
2498663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
250120c5115SMatt Arsenault  %sext = sext i8 %load to i16
251120c5115SMatt Arsenault  ret i16 %sext
252120c5115SMatt Arsenault}
253120c5115SMatt Arsenault
2548663926aSNikita Popovdefine i64 @atomic_load_monotonic_i8_sext_i64(ptr %ptr) {
255120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_sext_i64:
256120c5115SMatt Arsenault; MIPS32:       # %bb.0:
257120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
258120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
259120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
260120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
261120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
2628663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
263120c5115SMatt Arsenault  %sext = sext i8 %load to i64
264120c5115SMatt Arsenault  ret i64 %sext
265120c5115SMatt Arsenault}
266120c5115SMatt Arsenault
2678663926aSNikita Popovdefine i32 @atomic_load_monotonic_i8_zext_i32(ptr %ptr) {
268120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_zext_i32:
269120c5115SMatt Arsenault; MIPS32:       # %bb.0:
270120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
271120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
272120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
2738663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
274120c5115SMatt Arsenault  %zext = zext i8 %load to i32
275120c5115SMatt Arsenault  ret i32 %zext
276120c5115SMatt Arsenault}
277120c5115SMatt Arsenault
2788663926aSNikita Popovdefine i16 @atomic_load_monotonic_i8_zext_i16(ptr %ptr) {
279120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_zext_i16:
280120c5115SMatt Arsenault; MIPS32:       # %bb.0:
281120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
282120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
283120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
2848663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
285120c5115SMatt Arsenault  %zext = zext i8 %load to i16
286120c5115SMatt Arsenault  ret i16 %zext
287120c5115SMatt Arsenault}
288120c5115SMatt Arsenault
2898663926aSNikita Popovdefine i64 @atomic_load_monotonic_i8_zext_i64(ptr %ptr) {
290120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i8_zext_i64:
291120c5115SMatt Arsenault; MIPS32:       # %bb.0:
292120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
293120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
294120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
295120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
2968663926aSNikita Popov  %load = load atomic i8, ptr %ptr monotonic, align 1
297120c5115SMatt Arsenault  %zext = zext i8 %load to i64
298120c5115SMatt Arsenault  ret i64 %zext
299120c5115SMatt Arsenault}
300120c5115SMatt Arsenault
3018663926aSNikita Popovdefine i16 @atomic_load_monotonic_i16(ptr %ptr) {
302120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16:
303120c5115SMatt Arsenault; MIPS32:       # %bb.0:
304120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $2, 0($4)
305120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
306120c5115SMatt Arsenault; MIPS32-NEXT:    nop
3078663926aSNikita Popov  %load = load atomic i16, ptr %ptr monotonic, align 2
308120c5115SMatt Arsenault  ret i16 %load
309120c5115SMatt Arsenault}
310120c5115SMatt Arsenault
3118663926aSNikita Popovdefine i32 @atomic_load_monotonic_i16_sext_i32(ptr %ptr) {
312120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_sext_i32:
313120c5115SMatt Arsenault; MIPS32:       # %bb.0:
314120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
315120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
316120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
317120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
3188663926aSNikita Popov  %load = load atomic i16, ptr %ptr monotonic, align 2
319120c5115SMatt Arsenault  %sext = sext i16 %load to i32
320120c5115SMatt Arsenault  ret i32 %sext
321120c5115SMatt Arsenault}
322120c5115SMatt Arsenault
3238663926aSNikita Popovdefine i64 @atomic_load_monotonic_i16_sext_i64(ptr %ptr) {
324120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_sext_i64:
325120c5115SMatt Arsenault; MIPS32:       # %bb.0:
326120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
327120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
328120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
329120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
330120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
3318663926aSNikita Popov  %load = load atomic i16, ptr %ptr monotonic, align 2
332120c5115SMatt Arsenault  %sext = sext i16 %load to i64
333120c5115SMatt Arsenault  ret i64 %sext
334120c5115SMatt Arsenault}
335120c5115SMatt Arsenault
3368663926aSNikita Popovdefine i32 @atomic_load_monotonic_i16_zext_i32(ptr %ptr) {
337120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_zext_i32:
338120c5115SMatt Arsenault; MIPS32:       # %bb.0:
339120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
340120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
341120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
3428663926aSNikita Popov  %load = load atomic i16, ptr %ptr monotonic, align 2
343120c5115SMatt Arsenault  %zext = zext i16 %load to i32
344120c5115SMatt Arsenault  ret i32 %zext
345120c5115SMatt Arsenault}
346120c5115SMatt Arsenault
3478663926aSNikita Popovdefine i64 @atomic_load_monotonic_i16_zext_i64(ptr %ptr) {
348120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i16_zext_i64:
349120c5115SMatt Arsenault; MIPS32:       # %bb.0:
350120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
351120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
352120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
353120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
3548663926aSNikita Popov  %load = load atomic i16, ptr %ptr monotonic, align 2
355120c5115SMatt Arsenault  %zext = zext i16 %load to i64
356120c5115SMatt Arsenault  ret i64 %zext
357120c5115SMatt Arsenault}
358120c5115SMatt Arsenault
3598663926aSNikita Popovdefine i32 @atomic_load_monotonic_i32(ptr %ptr) {
360120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i32:
361120c5115SMatt Arsenault; MIPS32:       # %bb.0:
362120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 0($4)
363120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
364120c5115SMatt Arsenault; MIPS32-NEXT:    nop
3658663926aSNikita Popov  %load = load atomic i32, ptr %ptr monotonic, align 4
366120c5115SMatt Arsenault  ret i32 %load
367120c5115SMatt Arsenault}
368120c5115SMatt Arsenault
3698663926aSNikita Popovdefine i64 @atomic_load_monotonic_i64(ptr %ptr) {
370120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_i64:
371120c5115SMatt Arsenault; MIPS32:       # %bb.0:
372*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
373*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
374*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
375*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
376*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
377*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 0
378*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
379120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
380*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
3818663926aSNikita Popov  %load = load atomic i64, ptr %ptr monotonic, align 8
382120c5115SMatt Arsenault  ret i64 %load
383120c5115SMatt Arsenault}
384120c5115SMatt Arsenault
3858663926aSNikita Popovdefine float @atomic_load_monotonic_f32(ptr %ptr) {
386120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_f32:
387120c5115SMatt Arsenault; MIPS32:       # %bb.0:
388120c5115SMatt Arsenault; MIPS32-NEXT:    lwc1 $f0, 64($4)
389120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
390120c5115SMatt Arsenault; MIPS32-NEXT:    nop
3918663926aSNikita Popov  %gep = getelementptr inbounds float, ptr %ptr, i32 16
3928663926aSNikita Popov  %load = load atomic float, ptr %gep monotonic, align 4
393120c5115SMatt Arsenault  ret float %load
394120c5115SMatt Arsenault}
395120c5115SMatt Arsenault
3968663926aSNikita Popovdefine double @atomic_load_monotonic_f64(ptr %ptr) {
397120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_f64:
398120c5115SMatt Arsenault; MIPS32:       # %bb.0:
399*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
400*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
401*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
402*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
403*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 0
404*7973d519SBrad Smith; MIPS32-NEXT:    ori $1, $zero, 128
405*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
406*7973d519SBrad Smith; MIPS32-NEXT:    addu $4, $4, $1
407*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $2, $f0
408*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $3, $f1
409*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
410120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
411*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
4128663926aSNikita Popov  %gep = getelementptr inbounds double, ptr %ptr, i32 16
4138663926aSNikita Popov  %load = load atomic double, ptr %gep monotonic, align 8
414120c5115SMatt Arsenault  ret double %load
415120c5115SMatt Arsenault}
416120c5115SMatt Arsenault
4178663926aSNikita Popovdefine ptr @atomic_load_monotonic_p0i8(ptr %ptr) {
418120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_monotonic_p0i8:
419120c5115SMatt Arsenault; MIPS32:       # %bb.0:
420120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 64($4)
421120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
422120c5115SMatt Arsenault; MIPS32-NEXT:    nop
4238663926aSNikita Popov  %gep = getelementptr inbounds ptr, ptr %ptr, i32 16
4248663926aSNikita Popov  %load = load atomic ptr, ptr %gep monotonic, align 4
4258663926aSNikita Popov  ret ptr %load
426120c5115SMatt Arsenault}
427120c5115SMatt Arsenault
428120c5115SMatt Arsenault; --------------------------------------------------------------------
429120c5115SMatt Arsenault; acquire
430120c5115SMatt Arsenault; --------------------------------------------------------------------
431120c5115SMatt Arsenault
4328663926aSNikita Popovdefine i8 @atomic_load_acquire_i8(ptr %ptr) {
433120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8:
434120c5115SMatt Arsenault; MIPS32:       # %bb.0:
435120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $2, 0($4)
436120c5115SMatt Arsenault; MIPS32-NEXT:    sync
437120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
438120c5115SMatt Arsenault; MIPS32-NEXT:    nop
4398663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
440120c5115SMatt Arsenault  ret i8 %load
441120c5115SMatt Arsenault}
442120c5115SMatt Arsenault
4438663926aSNikita Popovdefine i32 @atomic_load_acquire_i8_sext_i32(ptr %ptr) {
444120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_sext_i32:
445120c5115SMatt Arsenault; MIPS32:       # %bb.0:
446120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
447120c5115SMatt Arsenault; MIPS32-NEXT:    sync
448120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
449120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
450120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
4518663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
452120c5115SMatt Arsenault  %sext = sext i8 %load to i32
453120c5115SMatt Arsenault  ret i32 %sext
454120c5115SMatt Arsenault}
455120c5115SMatt Arsenault
4568663926aSNikita Popovdefine i16 @atomic_load_acquire_i8_sext_i16(ptr %ptr) {
457120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_sext_i16:
458120c5115SMatt Arsenault; MIPS32:       # %bb.0:
459120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
460120c5115SMatt Arsenault; MIPS32-NEXT:    sync
461120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
462120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
463120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
4648663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
465120c5115SMatt Arsenault  %sext = sext i8 %load to i16
466120c5115SMatt Arsenault  ret i16 %sext
467120c5115SMatt Arsenault}
468120c5115SMatt Arsenault
4698663926aSNikita Popovdefine i64 @atomic_load_acquire_i8_sext_i64(ptr %ptr) {
470120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_sext_i64:
471120c5115SMatt Arsenault; MIPS32:       # %bb.0:
472120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
473120c5115SMatt Arsenault; MIPS32-NEXT:    sync
474120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
475120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
476120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
477120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
4788663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
479120c5115SMatt Arsenault  %sext = sext i8 %load to i64
480120c5115SMatt Arsenault  ret i64 %sext
481120c5115SMatt Arsenault}
482120c5115SMatt Arsenault
4838663926aSNikita Popovdefine i32 @atomic_load_acquire_i8_zext_i32(ptr %ptr) {
484120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_zext_i32:
485120c5115SMatt Arsenault; MIPS32:       # %bb.0:
486120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
487120c5115SMatt Arsenault; MIPS32-NEXT:    sync
488120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
489120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
4908663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
491120c5115SMatt Arsenault  %zext = zext i8 %load to i32
492120c5115SMatt Arsenault  ret i32 %zext
493120c5115SMatt Arsenault}
494120c5115SMatt Arsenault
4958663926aSNikita Popovdefine i16 @atomic_load_acquire_i8_zext_i16(ptr %ptr) {
496120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_zext_i16:
497120c5115SMatt Arsenault; MIPS32:       # %bb.0:
498120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
499120c5115SMatt Arsenault; MIPS32-NEXT:    sync
500120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
501120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
5028663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
503120c5115SMatt Arsenault  %zext = zext i8 %load to i16
504120c5115SMatt Arsenault  ret i16 %zext
505120c5115SMatt Arsenault}
506120c5115SMatt Arsenault
5078663926aSNikita Popovdefine i64 @atomic_load_acquire_i8_zext_i64(ptr %ptr) {
508120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i8_zext_i64:
509120c5115SMatt Arsenault; MIPS32:       # %bb.0:
510120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
511120c5115SMatt Arsenault; MIPS32-NEXT:    sync
512120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
513120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
514120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
5158663926aSNikita Popov  %load = load atomic i8, ptr %ptr acquire, align 1
516120c5115SMatt Arsenault  %zext = zext i8 %load to i64
517120c5115SMatt Arsenault  ret i64 %zext
518120c5115SMatt Arsenault}
519120c5115SMatt Arsenault
5208663926aSNikita Popovdefine i16 @atomic_load_acquire_i16(ptr %ptr) {
521120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16:
522120c5115SMatt Arsenault; MIPS32:       # %bb.0:
523120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $2, 0($4)
524120c5115SMatt Arsenault; MIPS32-NEXT:    sync
525120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
526120c5115SMatt Arsenault; MIPS32-NEXT:    nop
5278663926aSNikita Popov  %load = load atomic i16, ptr %ptr acquire, align 2
528120c5115SMatt Arsenault  ret i16 %load
529120c5115SMatt Arsenault}
530120c5115SMatt Arsenault
5318663926aSNikita Popovdefine i32 @atomic_load_acquire_i16_sext_i32(ptr %ptr) {
532120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_sext_i32:
533120c5115SMatt Arsenault; MIPS32:       # %bb.0:
534120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
535120c5115SMatt Arsenault; MIPS32-NEXT:    sync
536120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
537120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
538120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
5398663926aSNikita Popov  %load = load atomic i16, ptr %ptr acquire, align 2
540120c5115SMatt Arsenault  %sext = sext i16 %load to i32
541120c5115SMatt Arsenault  ret i32 %sext
542120c5115SMatt Arsenault}
543120c5115SMatt Arsenault
5448663926aSNikita Popovdefine i64 @atomic_load_acquire_i16_sext_i64(ptr %ptr) {
545120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_sext_i64:
546120c5115SMatt Arsenault; MIPS32:       # %bb.0:
547120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
548120c5115SMatt Arsenault; MIPS32-NEXT:    sync
549120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
550120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
551120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
552120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
5538663926aSNikita Popov  %load = load atomic i16, ptr %ptr acquire, align 2
554120c5115SMatt Arsenault  %sext = sext i16 %load to i64
555120c5115SMatt Arsenault  ret i64 %sext
556120c5115SMatt Arsenault}
557120c5115SMatt Arsenault
5588663926aSNikita Popovdefine i32 @atomic_load_acquire_i16_zext_i32(ptr %ptr) {
559120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_zext_i32:
560120c5115SMatt Arsenault; MIPS32:       # %bb.0:
561120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
562120c5115SMatt Arsenault; MIPS32-NEXT:    sync
563120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
564120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
5658663926aSNikita Popov  %load = load atomic i16, ptr %ptr acquire, align 2
566120c5115SMatt Arsenault  %zext = zext i16 %load to i32
567120c5115SMatt Arsenault  ret i32 %zext
568120c5115SMatt Arsenault}
569120c5115SMatt Arsenault
5708663926aSNikita Popovdefine i64 @atomic_load_acquire_i16_zext_i64(ptr %ptr) {
571120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i16_zext_i64:
572120c5115SMatt Arsenault; MIPS32:       # %bb.0:
573120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
574120c5115SMatt Arsenault; MIPS32-NEXT:    sync
575120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
576120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
577120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
5788663926aSNikita Popov  %load = load atomic i16, ptr %ptr acquire, align 2
579120c5115SMatt Arsenault  %zext = zext i16 %load to i64
580120c5115SMatt Arsenault  ret i64 %zext
581120c5115SMatt Arsenault}
582120c5115SMatt Arsenault
5838663926aSNikita Popovdefine i32 @atomic_load_acquire_i32(ptr %ptr) {
584120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i32:
585120c5115SMatt Arsenault; MIPS32:       # %bb.0:
586120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 0($4)
587120c5115SMatt Arsenault; MIPS32-NEXT:    sync
588120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
589120c5115SMatt Arsenault; MIPS32-NEXT:    nop
5908663926aSNikita Popov  %load = load atomic i32, ptr %ptr acquire, align 4
591120c5115SMatt Arsenault  ret i32 %load
592120c5115SMatt Arsenault}
593120c5115SMatt Arsenault
5948663926aSNikita Popovdefine i64 @atomic_load_acquire_i64(ptr %ptr) {
595120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_i64:
596120c5115SMatt Arsenault; MIPS32:       # %bb.0:
597*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
598*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
599*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
600*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
601*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
602*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 2
603*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
604120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
605*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
6068663926aSNikita Popov  %load = load atomic i64, ptr %ptr acquire, align 8
607120c5115SMatt Arsenault  ret i64 %load
608120c5115SMatt Arsenault}
609120c5115SMatt Arsenault
6108663926aSNikita Popovdefine float @atomic_load_acquire_f32(ptr %ptr) {
611120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_f32:
612120c5115SMatt Arsenault; MIPS32:       # %bb.0:
613120c5115SMatt Arsenault; MIPS32-NEXT:    lwc1 $f0, 64($4)
614120c5115SMatt Arsenault; MIPS32-NEXT:    sync
615120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
616120c5115SMatt Arsenault; MIPS32-NEXT:    nop
6178663926aSNikita Popov  %gep = getelementptr inbounds float, ptr %ptr, i32 16
6188663926aSNikita Popov  %load = load atomic float, ptr %gep acquire, align 4
619120c5115SMatt Arsenault  ret float %load
620120c5115SMatt Arsenault}
621120c5115SMatt Arsenault
6228663926aSNikita Popovdefine double @atomic_load_acquire_f64(ptr %ptr) {
623120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_f64:
624120c5115SMatt Arsenault; MIPS32:       # %bb.0:
625*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
626*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
627*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
628*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
629*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 2
630*7973d519SBrad Smith; MIPS32-NEXT:    ori $1, $zero, 128
631*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
632*7973d519SBrad Smith; MIPS32-NEXT:    addu $4, $4, $1
633*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $2, $f0
634*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $3, $f1
635*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
636120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
637*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
6388663926aSNikita Popov  %gep = getelementptr inbounds double, ptr %ptr, i32 16
6398663926aSNikita Popov  %load = load atomic double, ptr %gep acquire, align 8
640120c5115SMatt Arsenault  ret double %load
641120c5115SMatt Arsenault}
642120c5115SMatt Arsenault
6438663926aSNikita Popovdefine ptr @atomic_load_acquire_p0i8(ptr %ptr) {
644120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_acquire_p0i8:
645120c5115SMatt Arsenault; MIPS32:       # %bb.0:
646120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 64($4)
647120c5115SMatt Arsenault; MIPS32-NEXT:    sync
648120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
649120c5115SMatt Arsenault; MIPS32-NEXT:    nop
6508663926aSNikita Popov  %gep = getelementptr inbounds ptr, ptr %ptr, i32 16
6518663926aSNikita Popov  %load = load atomic ptr, ptr %gep acquire, align 4
6528663926aSNikita Popov  ret ptr %load
653120c5115SMatt Arsenault}
654120c5115SMatt Arsenault
655120c5115SMatt Arsenault; --------------------------------------------------------------------
656120c5115SMatt Arsenault; seq_cst
657120c5115SMatt Arsenault; --------------------------------------------------------------------
658120c5115SMatt Arsenault
6598663926aSNikita Popovdefine i8 @atomic_load_seq_cst_i8(ptr %ptr) {
660120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8:
661120c5115SMatt Arsenault; MIPS32:       # %bb.0:
662120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $2, 0($4)
663120c5115SMatt Arsenault; MIPS32-NEXT:    sync
664120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
665120c5115SMatt Arsenault; MIPS32-NEXT:    nop
6668663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
667120c5115SMatt Arsenault  ret i8 %load
668120c5115SMatt Arsenault}
669120c5115SMatt Arsenault
6708663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i8_sext_i32(ptr %ptr) {
671120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_sext_i32:
672120c5115SMatt Arsenault; MIPS32:       # %bb.0:
673120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
674120c5115SMatt Arsenault; MIPS32-NEXT:    sync
675120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
676120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
677120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
6788663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
679120c5115SMatt Arsenault  %sext = sext i8 %load to i32
680120c5115SMatt Arsenault  ret i32 %sext
681120c5115SMatt Arsenault}
682120c5115SMatt Arsenault
6838663926aSNikita Popovdefine i16 @atomic_load_seq_cst_i8_sext_i16(ptr %ptr) {
684120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_sext_i16:
685120c5115SMatt Arsenault; MIPS32:       # %bb.0:
686120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
687120c5115SMatt Arsenault; MIPS32-NEXT:    sync
688120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
689120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
690120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
6918663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
692120c5115SMatt Arsenault  %sext = sext i8 %load to i16
693120c5115SMatt Arsenault  ret i16 %sext
694120c5115SMatt Arsenault}
695120c5115SMatt Arsenault
6968663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i8_sext_i64(ptr %ptr) {
697120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_sext_i64:
698120c5115SMatt Arsenault; MIPS32:       # %bb.0:
699120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
700120c5115SMatt Arsenault; MIPS32-NEXT:    sync
701120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 24
702120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 24
703120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
704120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
7058663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
706120c5115SMatt Arsenault  %sext = sext i8 %load to i64
707120c5115SMatt Arsenault  ret i64 %sext
708120c5115SMatt Arsenault}
709120c5115SMatt Arsenault
7108663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i8_zext_i32(ptr %ptr) {
711120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_zext_i32:
712120c5115SMatt Arsenault; MIPS32:       # %bb.0:
713120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
714120c5115SMatt Arsenault; MIPS32-NEXT:    sync
715120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
716120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
7178663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
718120c5115SMatt Arsenault  %zext = zext i8 %load to i32
719120c5115SMatt Arsenault  ret i32 %zext
720120c5115SMatt Arsenault}
721120c5115SMatt Arsenault
7228663926aSNikita Popovdefine i16 @atomic_load_seq_cst_i8_zext_i16(ptr %ptr) {
723120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_zext_i16:
724120c5115SMatt Arsenault; MIPS32:       # %bb.0:
725120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
726120c5115SMatt Arsenault; MIPS32-NEXT:    sync
727120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
728120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
7298663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
730120c5115SMatt Arsenault  %zext = zext i8 %load to i16
731120c5115SMatt Arsenault  ret i16 %zext
732120c5115SMatt Arsenault}
733120c5115SMatt Arsenault
7348663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i8_zext_i64(ptr %ptr) {
735120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i8_zext_i64:
736120c5115SMatt Arsenault; MIPS32:       # %bb.0:
737120c5115SMatt Arsenault; MIPS32-NEXT:    lbu $1, 0($4)
738120c5115SMatt Arsenault; MIPS32-NEXT:    sync
739120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 255
740120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
741120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
7428663926aSNikita Popov  %load = load atomic i8, ptr %ptr seq_cst, align 1
743120c5115SMatt Arsenault  %zext = zext i8 %load to i64
744120c5115SMatt Arsenault  ret i64 %zext
745120c5115SMatt Arsenault}
746120c5115SMatt Arsenault
7478663926aSNikita Popovdefine i16 @atomic_load_seq_cst_i16(ptr %ptr) {
748120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16:
749120c5115SMatt Arsenault; MIPS32:       # %bb.0:
750120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $2, 0($4)
751120c5115SMatt Arsenault; MIPS32-NEXT:    sync
752120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
753120c5115SMatt Arsenault; MIPS32-NEXT:    nop
7548663926aSNikita Popov  %load = load atomic i16, ptr %ptr seq_cst, align 2
755120c5115SMatt Arsenault  ret i16 %load
756120c5115SMatt Arsenault}
757120c5115SMatt Arsenault
7588663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i16_sext_i32(ptr %ptr) {
759120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_sext_i32:
760120c5115SMatt Arsenault; MIPS32:       # %bb.0:
761120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
762120c5115SMatt Arsenault; MIPS32-NEXT:    sync
763120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
764120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
765120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
7668663926aSNikita Popov  %load = load atomic i16, ptr %ptr seq_cst, align 2
767120c5115SMatt Arsenault  %sext = sext i16 %load to i32
768120c5115SMatt Arsenault  ret i32 %sext
769120c5115SMatt Arsenault}
770120c5115SMatt Arsenault
7718663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i16_sext_i64(ptr %ptr) {
772120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_sext_i64:
773120c5115SMatt Arsenault; MIPS32:       # %bb.0:
774120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
775120c5115SMatt Arsenault; MIPS32-NEXT:    sync
776120c5115SMatt Arsenault; MIPS32-NEXT:    sll $1, $1, 16
777120c5115SMatt Arsenault; MIPS32-NEXT:    sra $2, $1, 16
778120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
779120c5115SMatt Arsenault; MIPS32-NEXT:    sra $3, $1, 31
7808663926aSNikita Popov  %load = load atomic i16, ptr %ptr seq_cst, align 2
781120c5115SMatt Arsenault  %sext = sext i16 %load to i64
782120c5115SMatt Arsenault  ret i64 %sext
783120c5115SMatt Arsenault}
784120c5115SMatt Arsenault
7858663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i16_zext_i32(ptr %ptr) {
786120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_zext_i32:
787120c5115SMatt Arsenault; MIPS32:       # %bb.0:
788120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
789120c5115SMatt Arsenault; MIPS32-NEXT:    sync
790120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
791120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
7928663926aSNikita Popov  %load = load atomic i16, ptr %ptr seq_cst, align 2
793120c5115SMatt Arsenault  %zext = zext i16 %load to i32
794120c5115SMatt Arsenault  ret i32 %zext
795120c5115SMatt Arsenault}
796120c5115SMatt Arsenault
7978663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i16_zext_i64(ptr %ptr) {
798120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i16_zext_i64:
799120c5115SMatt Arsenault; MIPS32:       # %bb.0:
800120c5115SMatt Arsenault; MIPS32-NEXT:    lhu $1, 0($4)
801120c5115SMatt Arsenault; MIPS32-NEXT:    sync
802120c5115SMatt Arsenault; MIPS32-NEXT:    andi $2, $1, 65535
803120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
804120c5115SMatt Arsenault; MIPS32-NEXT:    andi $3, $1, 0
8058663926aSNikita Popov  %load = load atomic i16, ptr %ptr seq_cst, align 2
806120c5115SMatt Arsenault  %zext = zext i16 %load to i64
807120c5115SMatt Arsenault  ret i64 %zext
808120c5115SMatt Arsenault}
809120c5115SMatt Arsenault
8108663926aSNikita Popovdefine i32 @atomic_load_seq_cst_i32(ptr %ptr) {
811120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i32:
812120c5115SMatt Arsenault; MIPS32:       # %bb.0:
813120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 0($4)
814120c5115SMatt Arsenault; MIPS32-NEXT:    sync
815120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
816120c5115SMatt Arsenault; MIPS32-NEXT:    nop
8178663926aSNikita Popov  %load = load atomic i32, ptr %ptr seq_cst, align 4
818120c5115SMatt Arsenault  ret i32 %load
819120c5115SMatt Arsenault}
820120c5115SMatt Arsenault
8218663926aSNikita Popovdefine i64 @atomic_load_seq_cst_i64(ptr %ptr) {
822120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_i64:
823120c5115SMatt Arsenault; MIPS32:       # %bb.0:
824*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
825*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
826*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
827*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
828*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
829*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 5
830*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
831120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
832*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
8338663926aSNikita Popov  %load = load atomic i64, ptr %ptr seq_cst, align 8
834120c5115SMatt Arsenault  ret i64 %load
835120c5115SMatt Arsenault}
836120c5115SMatt Arsenault
8378663926aSNikita Popovdefine float @atomic_load_seq_cst_f32(ptr %ptr) {
838120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_f32:
839120c5115SMatt Arsenault; MIPS32:       # %bb.0:
840120c5115SMatt Arsenault; MIPS32-NEXT:    lwc1 $f0, 64($4)
841120c5115SMatt Arsenault; MIPS32-NEXT:    sync
842120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
843120c5115SMatt Arsenault; MIPS32-NEXT:    nop
8448663926aSNikita Popov  %gep = getelementptr inbounds float, ptr %ptr, i32 16
8458663926aSNikita Popov  %load = load atomic float, ptr %gep seq_cst, align 4
846120c5115SMatt Arsenault  ret float %load
847120c5115SMatt Arsenault}
848120c5115SMatt Arsenault
8498663926aSNikita Popovdefine double @atomic_load_seq_cst_f64(ptr %ptr) {
850120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_f64:
851120c5115SMatt Arsenault; MIPS32:       # %bb.0:
852*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, -24
853*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_def_cfa_offset 24
854*7973d519SBrad Smith; MIPS32-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
855*7973d519SBrad Smith; MIPS32-NEXT:    .cfi_offset 31, -4
856*7973d519SBrad Smith; MIPS32-NEXT:    ori $5, $zero, 5
857*7973d519SBrad Smith; MIPS32-NEXT:    ori $1, $zero, 128
858*7973d519SBrad Smith; MIPS32-NEXT:    jal __atomic_load_8
859*7973d519SBrad Smith; MIPS32-NEXT:    addu $4, $4, $1
860*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $2, $f0
861*7973d519SBrad Smith; MIPS32-NEXT:    mtc1 $3, $f1
862*7973d519SBrad Smith; MIPS32-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
863120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
864*7973d519SBrad Smith; MIPS32-NEXT:    addiu $sp, $sp, 24
8658663926aSNikita Popov  %gep = getelementptr inbounds double, ptr %ptr, i32 16
8668663926aSNikita Popov  %load = load atomic double, ptr %gep seq_cst, align 8
867120c5115SMatt Arsenault  ret double %load
868120c5115SMatt Arsenault}
869120c5115SMatt Arsenault
8708663926aSNikita Popovdefine ptr @atomic_load_seq_cst_p0i8(ptr %ptr) {
871120c5115SMatt Arsenault; MIPS32-LABEL: atomic_load_seq_cst_p0i8:
872120c5115SMatt Arsenault; MIPS32:       # %bb.0:
873120c5115SMatt Arsenault; MIPS32-NEXT:    lw $2, 64($4)
874120c5115SMatt Arsenault; MIPS32-NEXT:    sync
875120c5115SMatt Arsenault; MIPS32-NEXT:    jr $ra
876120c5115SMatt Arsenault; MIPS32-NEXT:    nop
8778663926aSNikita Popov  %gep = getelementptr inbounds ptr, ptr %ptr, i32 16
8788663926aSNikita Popov  %load = load atomic ptr, ptr %gep seq_cst, align 4
8798663926aSNikita Popov  ret ptr %load
880120c5115SMatt Arsenault}
881