xref: /llvm-project/llvm/test/CodeGen/Mips/atomic-min-max.ll (revision d8a5fae6913a0f6c7e3c814315c1a11fcfd609a1)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=mips-elf -O0 -mcpu=mips32r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS
3; RUN: llc -mtriple=mips-elf -O0 -mcpu=mips32r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPSR6
4; RUN: llc -mtriple=mips-elf -O0 -mcpu=mips32r2 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MM
5; RUN: llc -mtriple=mips-elf -O0 -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MMR6
6; RUN: llc -mtriple=mipsel-elf -O0 -mcpu=mips32 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS32
7; RUN: llc -mtriple=mipsel-elf -O0 -mcpu=mips32r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPSEL
8; RUN: llc -mtriple=mipsel-elf -O0 -mcpu=mips32r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPSELR6
9; RUN: llc -mtriple=mipsel-elf -O0 -mcpu=mips32r2 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MMEL
10; RUN: llc -mtriple=mipsel-elf -O0 -mcpu=mips32r6 -mattr=+micromips -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MMELR6
11; RUN: llc -mtriple=mips64-elf -O0 -mcpu=mips64r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64
12; RUN: llc -mtriple=mips64-elf -O0 -mcpu=mips64r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64R6
13; RUN: llc -mtriple=mips64el-elf -O0 -mcpu=mips64r2 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64EL
14; RUN: llc -mtriple=mips64el-elf -O0 -mcpu=mips64r6 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=MIPS64ELR6
15
16define i32 @test_max_32(ptr nocapture %ptr, i32 signext %val) {
17; MIPS-LABEL: test_max_32:
18; MIPS:       # %bb.0: # %entry
19; MIPS-NEXT:    sync
20; MIPS-NEXT:  $BB0_1: # %entry
21; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
22; MIPS-NEXT:    ll $2, 0($4)
23; MIPS-NEXT:    slt $3, $2, $5
24; MIPS-NEXT:    move $1, $2
25; MIPS-NEXT:    movn $1, $5, $3
26; MIPS-NEXT:    sc $1, 0($4)
27; MIPS-NEXT:    beqz $1, $BB0_1
28; MIPS-NEXT:    nop
29; MIPS-NEXT:  # %bb.2: # %entry
30; MIPS-NEXT:    sync
31; MIPS-NEXT:    jr $ra
32; MIPS-NEXT:    nop
33;
34; MIPSR6-LABEL: test_max_32:
35; MIPSR6:       # %bb.0: # %entry
36; MIPSR6-NEXT:    sync
37; MIPSR6-NEXT:  $BB0_1: # %entry
38; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
39; MIPSR6-NEXT:    ll $2, 0($4)
40; MIPSR6-NEXT:    slt $3, $2, $5
41; MIPSR6-NEXT:    seleqz $1, $2, $3
42; MIPSR6-NEXT:    selnez $3, $5, $3
43; MIPSR6-NEXT:    or $1, $1, $3
44; MIPSR6-NEXT:    sc $1, 0($4)
45; MIPSR6-NEXT:    beqzc $1, $BB0_1
46; MIPSR6-NEXT:  # %bb.2: # %entry
47; MIPSR6-NEXT:    sync
48; MIPSR6-NEXT:    jrc $ra
49;
50; MM-LABEL: test_max_32:
51; MM:       # %bb.0: # %entry
52; MM-NEXT:    sync
53; MM-NEXT:  $BB0_1: # %entry
54; MM-NEXT:    # =>This Inner Loop Header: Depth=1
55; MM-NEXT:    ll $2, 0($4)
56; MM-NEXT:    slt $3, $2, $5
57; MM-NEXT:    or $1, $2, $zero
58; MM-NEXT:    movn $1, $5, $3
59; MM-NEXT:    sc $1, 0($4)
60; MM-NEXT:    beqzc $1, $BB0_1
61; MM-NEXT:  # %bb.2: # %entry
62; MM-NEXT:    sync
63; MM-NEXT:    jrc $ra
64;
65; MMR6-LABEL: test_max_32:
66; MMR6:       # %bb.0: # %entry
67; MMR6-NEXT:    sync
68; MMR6-NEXT:  $BB0_1: # %entry
69; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
70; MMR6-NEXT:    ll $2, 0($4)
71; MMR6-NEXT:    slt $3, $2, $5
72; MMR6-NEXT:    seleqz $1, $2, $3
73; MMR6-NEXT:    selnez $3, $5, $3
74; MMR6-NEXT:    or $1, $1, $3
75; MMR6-NEXT:    sc $1, 0($4)
76; MMR6-NEXT:    beqc $1, $zero, $BB0_1
77; MMR6-NEXT:  # %bb.2: # %entry
78; MMR6-NEXT:    sync
79; MMR6-NEXT:    jrc $ra
80;
81; MIPS32-LABEL: test_max_32:
82; MIPS32:       # %bb.0: # %entry
83; MIPS32-NEXT:    sync
84; MIPS32-NEXT:  $BB0_1: # %entry
85; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
86; MIPS32-NEXT:    ll $2, 0($4)
87; MIPS32-NEXT:    slt $3, $2, $5
88; MIPS32-NEXT:    move $1, $2
89; MIPS32-NEXT:    movn $1, $5, $3
90; MIPS32-NEXT:    sc $1, 0($4)
91; MIPS32-NEXT:    beqz $1, $BB0_1
92; MIPS32-NEXT:    nop
93; MIPS32-NEXT:  # %bb.2: # %entry
94; MIPS32-NEXT:    sync
95; MIPS32-NEXT:    jr $ra
96; MIPS32-NEXT:    nop
97;
98; MIPSEL-LABEL: test_max_32:
99; MIPSEL:       # %bb.0: # %entry
100; MIPSEL-NEXT:    sync
101; MIPSEL-NEXT:  $BB0_1: # %entry
102; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
103; MIPSEL-NEXT:    ll $2, 0($4)
104; MIPSEL-NEXT:    slt $3, $2, $5
105; MIPSEL-NEXT:    move $1, $2
106; MIPSEL-NEXT:    movn $1, $5, $3
107; MIPSEL-NEXT:    sc $1, 0($4)
108; MIPSEL-NEXT:    beqz $1, $BB0_1
109; MIPSEL-NEXT:    nop
110; MIPSEL-NEXT:  # %bb.2: # %entry
111; MIPSEL-NEXT:    sync
112; MIPSEL-NEXT:    jr $ra
113; MIPSEL-NEXT:    nop
114;
115; MIPSELR6-LABEL: test_max_32:
116; MIPSELR6:       # %bb.0: # %entry
117; MIPSELR6-NEXT:    sync
118; MIPSELR6-NEXT:  $BB0_1: # %entry
119; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
120; MIPSELR6-NEXT:    ll $2, 0($4)
121; MIPSELR6-NEXT:    slt $3, $2, $5
122; MIPSELR6-NEXT:    seleqz $1, $2, $3
123; MIPSELR6-NEXT:    selnez $3, $5, $3
124; MIPSELR6-NEXT:    or $1, $1, $3
125; MIPSELR6-NEXT:    sc $1, 0($4)
126; MIPSELR6-NEXT:    beqzc $1, $BB0_1
127; MIPSELR6-NEXT:  # %bb.2: # %entry
128; MIPSELR6-NEXT:    sync
129; MIPSELR6-NEXT:    jrc $ra
130;
131; MMEL-LABEL: test_max_32:
132; MMEL:       # %bb.0: # %entry
133; MMEL-NEXT:    sync
134; MMEL-NEXT:  $BB0_1: # %entry
135; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
136; MMEL-NEXT:    ll $2, 0($4)
137; MMEL-NEXT:    slt $3, $2, $5
138; MMEL-NEXT:    or $1, $2, $zero
139; MMEL-NEXT:    movn $1, $5, $3
140; MMEL-NEXT:    sc $1, 0($4)
141; MMEL-NEXT:    beqzc $1, $BB0_1
142; MMEL-NEXT:  # %bb.2: # %entry
143; MMEL-NEXT:    sync
144; MMEL-NEXT:    jrc $ra
145;
146; MMELR6-LABEL: test_max_32:
147; MMELR6:       # %bb.0: # %entry
148; MMELR6-NEXT:    sync
149; MMELR6-NEXT:  $BB0_1: # %entry
150; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
151; MMELR6-NEXT:    ll $2, 0($4)
152; MMELR6-NEXT:    slt $3, $2, $5
153; MMELR6-NEXT:    seleqz $1, $2, $3
154; MMELR6-NEXT:    selnez $3, $5, $3
155; MMELR6-NEXT:    or $1, $1, $3
156; MMELR6-NEXT:    sc $1, 0($4)
157; MMELR6-NEXT:    beqc $1, $zero, $BB0_1
158; MMELR6-NEXT:  # %bb.2: # %entry
159; MMELR6-NEXT:    sync
160; MMELR6-NEXT:    jrc $ra
161;
162; MIPS64-LABEL: test_max_32:
163; MIPS64:       # %bb.0: # %entry
164; MIPS64-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
165; MIPS64-NEXT:    sync
166; MIPS64-NEXT:  .LBB0_1: # %entry
167; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
168; MIPS64-NEXT:    ll $2, 0($4)
169; MIPS64-NEXT:    slt $3, $2, $5
170; MIPS64-NEXT:    move $1, $2
171; MIPS64-NEXT:    movn $1, $5, $3
172; MIPS64-NEXT:    sc $1, 0($4)
173; MIPS64-NEXT:    beqz $1, .LBB0_1
174; MIPS64-NEXT:    nop
175; MIPS64-NEXT:  # %bb.2: # %entry
176; MIPS64-NEXT:    sync
177; MIPS64-NEXT:    jr $ra
178; MIPS64-NEXT:    nop
179;
180; MIPS64R6-LABEL: test_max_32:
181; MIPS64R6:       # %bb.0: # %entry
182; MIPS64R6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
183; MIPS64R6-NEXT:    sync
184; MIPS64R6-NEXT:  .LBB0_1: # %entry
185; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
186; MIPS64R6-NEXT:    ll $2, 0($4)
187; MIPS64R6-NEXT:    slt $3, $2, $5
188; MIPS64R6-NEXT:    seleqz $1, $2, $3
189; MIPS64R6-NEXT:    selnez $3, $5, $3
190; MIPS64R6-NEXT:    or $1, $1, $3
191; MIPS64R6-NEXT:    sc $1, 0($4)
192; MIPS64R6-NEXT:    beqzc $1, .LBB0_1
193; MIPS64R6-NEXT:  # %bb.2: # %entry
194; MIPS64R6-NEXT:    sync
195; MIPS64R6-NEXT:    jrc $ra
196;
197; MIPS64EL-LABEL: test_max_32:
198; MIPS64EL:       # %bb.0: # %entry
199; MIPS64EL-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
200; MIPS64EL-NEXT:    sync
201; MIPS64EL-NEXT:  .LBB0_1: # %entry
202; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
203; MIPS64EL-NEXT:    ll $2, 0($4)
204; MIPS64EL-NEXT:    slt $3, $2, $5
205; MIPS64EL-NEXT:    move $1, $2
206; MIPS64EL-NEXT:    movn $1, $5, $3
207; MIPS64EL-NEXT:    sc $1, 0($4)
208; MIPS64EL-NEXT:    beqz $1, .LBB0_1
209; MIPS64EL-NEXT:    nop
210; MIPS64EL-NEXT:  # %bb.2: # %entry
211; MIPS64EL-NEXT:    sync
212; MIPS64EL-NEXT:    jr $ra
213; MIPS64EL-NEXT:    nop
214;
215; MIPS64ELR6-LABEL: test_max_32:
216; MIPS64ELR6:       # %bb.0: # %entry
217; MIPS64ELR6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
218; MIPS64ELR6-NEXT:    sync
219; MIPS64ELR6-NEXT:  .LBB0_1: # %entry
220; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
221; MIPS64ELR6-NEXT:    ll $2, 0($4)
222; MIPS64ELR6-NEXT:    slt $3, $2, $5
223; MIPS64ELR6-NEXT:    seleqz $1, $2, $3
224; MIPS64ELR6-NEXT:    selnez $3, $5, $3
225; MIPS64ELR6-NEXT:    or $1, $1, $3
226; MIPS64ELR6-NEXT:    sc $1, 0($4)
227; MIPS64ELR6-NEXT:    beqzc $1, .LBB0_1
228; MIPS64ELR6-NEXT:  # %bb.2: # %entry
229; MIPS64ELR6-NEXT:    sync
230; MIPS64ELR6-NEXT:    jrc $ra
231entry:
232  %0 = atomicrmw max ptr %ptr, i32 %val seq_cst
233  ret i32 %0
234}
235
236define i32 @test_min_32(ptr nocapture %ptr, i32 signext %val) {
237; MIPS-LABEL: test_min_32:
238; MIPS:       # %bb.0: # %entry
239; MIPS-NEXT:    sync
240; MIPS-NEXT:  $BB1_1: # %entry
241; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
242; MIPS-NEXT:    ll $2, 0($4)
243; MIPS-NEXT:    slt $3, $2, $5
244; MIPS-NEXT:    move $1, $2
245; MIPS-NEXT:    movz $1, $5, $3
246; MIPS-NEXT:    sc $1, 0($4)
247; MIPS-NEXT:    beqz $1, $BB1_1
248; MIPS-NEXT:    nop
249; MIPS-NEXT:  # %bb.2: # %entry
250; MIPS-NEXT:    sync
251; MIPS-NEXT:    jr $ra
252; MIPS-NEXT:    nop
253;
254; MIPSR6-LABEL: test_min_32:
255; MIPSR6:       # %bb.0: # %entry
256; MIPSR6-NEXT:    sync
257; MIPSR6-NEXT:  $BB1_1: # %entry
258; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
259; MIPSR6-NEXT:    ll $2, 0($4)
260; MIPSR6-NEXT:    slt $3, $2, $5
261; MIPSR6-NEXT:    selnez $1, $2, $3
262; MIPSR6-NEXT:    seleqz $3, $5, $3
263; MIPSR6-NEXT:    or $1, $1, $3
264; MIPSR6-NEXT:    sc $1, 0($4)
265; MIPSR6-NEXT:    beqzc $1, $BB1_1
266; MIPSR6-NEXT:  # %bb.2: # %entry
267; MIPSR6-NEXT:    sync
268; MIPSR6-NEXT:    jrc $ra
269;
270; MM-LABEL: test_min_32:
271; MM:       # %bb.0: # %entry
272; MM-NEXT:    sync
273; MM-NEXT:  $BB1_1: # %entry
274; MM-NEXT:    # =>This Inner Loop Header: Depth=1
275; MM-NEXT:    ll $2, 0($4)
276; MM-NEXT:    slt $3, $2, $5
277; MM-NEXT:    or $1, $2, $zero
278; MM-NEXT:    movz $1, $5, $3
279; MM-NEXT:    sc $1, 0($4)
280; MM-NEXT:    beqzc $1, $BB1_1
281; MM-NEXT:  # %bb.2: # %entry
282; MM-NEXT:    sync
283; MM-NEXT:    jrc $ra
284;
285; MMR6-LABEL: test_min_32:
286; MMR6:       # %bb.0: # %entry
287; MMR6-NEXT:    sync
288; MMR6-NEXT:  $BB1_1: # %entry
289; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
290; MMR6-NEXT:    ll $2, 0($4)
291; MMR6-NEXT:    slt $3, $2, $5
292; MMR6-NEXT:    selnez $1, $2, $3
293; MMR6-NEXT:    seleqz $3, $5, $3
294; MMR6-NEXT:    or $1, $1, $3
295; MMR6-NEXT:    sc $1, 0($4)
296; MMR6-NEXT:    beqc $1, $zero, $BB1_1
297; MMR6-NEXT:  # %bb.2: # %entry
298; MMR6-NEXT:    sync
299; MMR6-NEXT:    jrc $ra
300;
301; MIPS32-LABEL: test_min_32:
302; MIPS32:       # %bb.0: # %entry
303; MIPS32-NEXT:    sync
304; MIPS32-NEXT:  $BB1_1: # %entry
305; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
306; MIPS32-NEXT:    ll $2, 0($4)
307; MIPS32-NEXT:    slt $3, $2, $5
308; MIPS32-NEXT:    move $1, $2
309; MIPS32-NEXT:    movz $1, $5, $3
310; MIPS32-NEXT:    sc $1, 0($4)
311; MIPS32-NEXT:    beqz $1, $BB1_1
312; MIPS32-NEXT:    nop
313; MIPS32-NEXT:  # %bb.2: # %entry
314; MIPS32-NEXT:    sync
315; MIPS32-NEXT:    jr $ra
316; MIPS32-NEXT:    nop
317;
318; MIPSEL-LABEL: test_min_32:
319; MIPSEL:       # %bb.0: # %entry
320; MIPSEL-NEXT:    sync
321; MIPSEL-NEXT:  $BB1_1: # %entry
322; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
323; MIPSEL-NEXT:    ll $2, 0($4)
324; MIPSEL-NEXT:    slt $3, $2, $5
325; MIPSEL-NEXT:    move $1, $2
326; MIPSEL-NEXT:    movz $1, $5, $3
327; MIPSEL-NEXT:    sc $1, 0($4)
328; MIPSEL-NEXT:    beqz $1, $BB1_1
329; MIPSEL-NEXT:    nop
330; MIPSEL-NEXT:  # %bb.2: # %entry
331; MIPSEL-NEXT:    sync
332; MIPSEL-NEXT:    jr $ra
333; MIPSEL-NEXT:    nop
334;
335; MIPSELR6-LABEL: test_min_32:
336; MIPSELR6:       # %bb.0: # %entry
337; MIPSELR6-NEXT:    sync
338; MIPSELR6-NEXT:  $BB1_1: # %entry
339; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
340; MIPSELR6-NEXT:    ll $2, 0($4)
341; MIPSELR6-NEXT:    slt $3, $2, $5
342; MIPSELR6-NEXT:    selnez $1, $2, $3
343; MIPSELR6-NEXT:    seleqz $3, $5, $3
344; MIPSELR6-NEXT:    or $1, $1, $3
345; MIPSELR6-NEXT:    sc $1, 0($4)
346; MIPSELR6-NEXT:    beqzc $1, $BB1_1
347; MIPSELR6-NEXT:  # %bb.2: # %entry
348; MIPSELR6-NEXT:    sync
349; MIPSELR6-NEXT:    jrc $ra
350;
351; MMEL-LABEL: test_min_32:
352; MMEL:       # %bb.0: # %entry
353; MMEL-NEXT:    sync
354; MMEL-NEXT:  $BB1_1: # %entry
355; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
356; MMEL-NEXT:    ll $2, 0($4)
357; MMEL-NEXT:    slt $3, $2, $5
358; MMEL-NEXT:    or $1, $2, $zero
359; MMEL-NEXT:    movz $1, $5, $3
360; MMEL-NEXT:    sc $1, 0($4)
361; MMEL-NEXT:    beqzc $1, $BB1_1
362; MMEL-NEXT:  # %bb.2: # %entry
363; MMEL-NEXT:    sync
364; MMEL-NEXT:    jrc $ra
365;
366; MMELR6-LABEL: test_min_32:
367; MMELR6:       # %bb.0: # %entry
368; MMELR6-NEXT:    sync
369; MMELR6-NEXT:  $BB1_1: # %entry
370; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
371; MMELR6-NEXT:    ll $2, 0($4)
372; MMELR6-NEXT:    slt $3, $2, $5
373; MMELR6-NEXT:    selnez $1, $2, $3
374; MMELR6-NEXT:    seleqz $3, $5, $3
375; MMELR6-NEXT:    or $1, $1, $3
376; MMELR6-NEXT:    sc $1, 0($4)
377; MMELR6-NEXT:    beqc $1, $zero, $BB1_1
378; MMELR6-NEXT:  # %bb.2: # %entry
379; MMELR6-NEXT:    sync
380; MMELR6-NEXT:    jrc $ra
381;
382; MIPS64-LABEL: test_min_32:
383; MIPS64:       # %bb.0: # %entry
384; MIPS64-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
385; MIPS64-NEXT:    sync
386; MIPS64-NEXT:  .LBB1_1: # %entry
387; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
388; MIPS64-NEXT:    ll $2, 0($4)
389; MIPS64-NEXT:    slt $3, $2, $5
390; MIPS64-NEXT:    move $1, $2
391; MIPS64-NEXT:    movz $1, $5, $3
392; MIPS64-NEXT:    sc $1, 0($4)
393; MIPS64-NEXT:    beqz $1, .LBB1_1
394; MIPS64-NEXT:    nop
395; MIPS64-NEXT:  # %bb.2: # %entry
396; MIPS64-NEXT:    sync
397; MIPS64-NEXT:    jr $ra
398; MIPS64-NEXT:    nop
399;
400; MIPS64R6-LABEL: test_min_32:
401; MIPS64R6:       # %bb.0: # %entry
402; MIPS64R6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
403; MIPS64R6-NEXT:    sync
404; MIPS64R6-NEXT:  .LBB1_1: # %entry
405; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
406; MIPS64R6-NEXT:    ll $2, 0($4)
407; MIPS64R6-NEXT:    slt $3, $2, $5
408; MIPS64R6-NEXT:    selnez $1, $2, $3
409; MIPS64R6-NEXT:    seleqz $3, $5, $3
410; MIPS64R6-NEXT:    or $1, $1, $3
411; MIPS64R6-NEXT:    sc $1, 0($4)
412; MIPS64R6-NEXT:    beqzc $1, .LBB1_1
413; MIPS64R6-NEXT:  # %bb.2: # %entry
414; MIPS64R6-NEXT:    sync
415; MIPS64R6-NEXT:    jrc $ra
416;
417; MIPS64EL-LABEL: test_min_32:
418; MIPS64EL:       # %bb.0: # %entry
419; MIPS64EL-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
420; MIPS64EL-NEXT:    sync
421; MIPS64EL-NEXT:  .LBB1_1: # %entry
422; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
423; MIPS64EL-NEXT:    ll $2, 0($4)
424; MIPS64EL-NEXT:    slt $3, $2, $5
425; MIPS64EL-NEXT:    move $1, $2
426; MIPS64EL-NEXT:    movz $1, $5, $3
427; MIPS64EL-NEXT:    sc $1, 0($4)
428; MIPS64EL-NEXT:    beqz $1, .LBB1_1
429; MIPS64EL-NEXT:    nop
430; MIPS64EL-NEXT:  # %bb.2: # %entry
431; MIPS64EL-NEXT:    sync
432; MIPS64EL-NEXT:    jr $ra
433; MIPS64EL-NEXT:    nop
434;
435; MIPS64ELR6-LABEL: test_min_32:
436; MIPS64ELR6:       # %bb.0: # %entry
437; MIPS64ELR6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
438; MIPS64ELR6-NEXT:    sync
439; MIPS64ELR6-NEXT:  .LBB1_1: # %entry
440; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
441; MIPS64ELR6-NEXT:    ll $2, 0($4)
442; MIPS64ELR6-NEXT:    slt $3, $2, $5
443; MIPS64ELR6-NEXT:    selnez $1, $2, $3
444; MIPS64ELR6-NEXT:    seleqz $3, $5, $3
445; MIPS64ELR6-NEXT:    or $1, $1, $3
446; MIPS64ELR6-NEXT:    sc $1, 0($4)
447; MIPS64ELR6-NEXT:    beqzc $1, .LBB1_1
448; MIPS64ELR6-NEXT:  # %bb.2: # %entry
449; MIPS64ELR6-NEXT:    sync
450; MIPS64ELR6-NEXT:    jrc $ra
451entry:
452  %0 = atomicrmw min ptr %ptr, i32 %val seq_cst
453  ret i32 %0
454}
455
456define i32 @test_umax_32(ptr nocapture %ptr, i32 signext %val) {
457; MIPS-LABEL: test_umax_32:
458; MIPS:       # %bb.0: # %entry
459; MIPS-NEXT:    sync
460; MIPS-NEXT:  $BB2_1: # %entry
461; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
462; MIPS-NEXT:    ll $2, 0($4)
463; MIPS-NEXT:    sltu $3, $2, $5
464; MIPS-NEXT:    move $1, $2
465; MIPS-NEXT:    movn $1, $5, $3
466; MIPS-NEXT:    sc $1, 0($4)
467; MIPS-NEXT:    beqz $1, $BB2_1
468; MIPS-NEXT:    nop
469; MIPS-NEXT:  # %bb.2: # %entry
470; MIPS-NEXT:    sync
471; MIPS-NEXT:    jr $ra
472; MIPS-NEXT:    nop
473;
474; MIPSR6-LABEL: test_umax_32:
475; MIPSR6:       # %bb.0: # %entry
476; MIPSR6-NEXT:    sync
477; MIPSR6-NEXT:  $BB2_1: # %entry
478; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
479; MIPSR6-NEXT:    ll $2, 0($4)
480; MIPSR6-NEXT:    sltu $3, $2, $5
481; MIPSR6-NEXT:    seleqz $1, $2, $3
482; MIPSR6-NEXT:    selnez $3, $5, $3
483; MIPSR6-NEXT:    or $1, $1, $3
484; MIPSR6-NEXT:    sc $1, 0($4)
485; MIPSR6-NEXT:    beqzc $1, $BB2_1
486; MIPSR6-NEXT:  # %bb.2: # %entry
487; MIPSR6-NEXT:    sync
488; MIPSR6-NEXT:    jrc $ra
489;
490; MM-LABEL: test_umax_32:
491; MM:       # %bb.0: # %entry
492; MM-NEXT:    sync
493; MM-NEXT:  $BB2_1: # %entry
494; MM-NEXT:    # =>This Inner Loop Header: Depth=1
495; MM-NEXT:    ll $2, 0($4)
496; MM-NEXT:    sltu $3, $2, $5
497; MM-NEXT:    or $1, $2, $zero
498; MM-NEXT:    movn $1, $5, $3
499; MM-NEXT:    sc $1, 0($4)
500; MM-NEXT:    beqzc $1, $BB2_1
501; MM-NEXT:  # %bb.2: # %entry
502; MM-NEXT:    sync
503; MM-NEXT:    jrc $ra
504;
505; MMR6-LABEL: test_umax_32:
506; MMR6:       # %bb.0: # %entry
507; MMR6-NEXT:    sync
508; MMR6-NEXT:  $BB2_1: # %entry
509; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
510; MMR6-NEXT:    ll $2, 0($4)
511; MMR6-NEXT:    sltu $3, $2, $5
512; MMR6-NEXT:    seleqz $1, $2, $3
513; MMR6-NEXT:    selnez $3, $5, $3
514; MMR6-NEXT:    or $1, $1, $3
515; MMR6-NEXT:    sc $1, 0($4)
516; MMR6-NEXT:    beqc $1, $zero, $BB2_1
517; MMR6-NEXT:  # %bb.2: # %entry
518; MMR6-NEXT:    sync
519; MMR6-NEXT:    jrc $ra
520;
521; MIPS32-LABEL: test_umax_32:
522; MIPS32:       # %bb.0: # %entry
523; MIPS32-NEXT:    sync
524; MIPS32-NEXT:  $BB2_1: # %entry
525; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
526; MIPS32-NEXT:    ll $2, 0($4)
527; MIPS32-NEXT:    sltu $3, $2, $5
528; MIPS32-NEXT:    move $1, $2
529; MIPS32-NEXT:    movn $1, $5, $3
530; MIPS32-NEXT:    sc $1, 0($4)
531; MIPS32-NEXT:    beqz $1, $BB2_1
532; MIPS32-NEXT:    nop
533; MIPS32-NEXT:  # %bb.2: # %entry
534; MIPS32-NEXT:    sync
535; MIPS32-NEXT:    jr $ra
536; MIPS32-NEXT:    nop
537;
538; MIPSEL-LABEL: test_umax_32:
539; MIPSEL:       # %bb.0: # %entry
540; MIPSEL-NEXT:    sync
541; MIPSEL-NEXT:  $BB2_1: # %entry
542; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
543; MIPSEL-NEXT:    ll $2, 0($4)
544; MIPSEL-NEXT:    sltu $3, $2, $5
545; MIPSEL-NEXT:    move $1, $2
546; MIPSEL-NEXT:    movn $1, $5, $3
547; MIPSEL-NEXT:    sc $1, 0($4)
548; MIPSEL-NEXT:    beqz $1, $BB2_1
549; MIPSEL-NEXT:    nop
550; MIPSEL-NEXT:  # %bb.2: # %entry
551; MIPSEL-NEXT:    sync
552; MIPSEL-NEXT:    jr $ra
553; MIPSEL-NEXT:    nop
554;
555; MIPSELR6-LABEL: test_umax_32:
556; MIPSELR6:       # %bb.0: # %entry
557; MIPSELR6-NEXT:    sync
558; MIPSELR6-NEXT:  $BB2_1: # %entry
559; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
560; MIPSELR6-NEXT:    ll $2, 0($4)
561; MIPSELR6-NEXT:    sltu $3, $2, $5
562; MIPSELR6-NEXT:    seleqz $1, $2, $3
563; MIPSELR6-NEXT:    selnez $3, $5, $3
564; MIPSELR6-NEXT:    or $1, $1, $3
565; MIPSELR6-NEXT:    sc $1, 0($4)
566; MIPSELR6-NEXT:    beqzc $1, $BB2_1
567; MIPSELR6-NEXT:  # %bb.2: # %entry
568; MIPSELR6-NEXT:    sync
569; MIPSELR6-NEXT:    jrc $ra
570;
571; MMEL-LABEL: test_umax_32:
572; MMEL:       # %bb.0: # %entry
573; MMEL-NEXT:    sync
574; MMEL-NEXT:  $BB2_1: # %entry
575; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
576; MMEL-NEXT:    ll $2, 0($4)
577; MMEL-NEXT:    sltu $3, $2, $5
578; MMEL-NEXT:    or $1, $2, $zero
579; MMEL-NEXT:    movn $1, $5, $3
580; MMEL-NEXT:    sc $1, 0($4)
581; MMEL-NEXT:    beqzc $1, $BB2_1
582; MMEL-NEXT:  # %bb.2: # %entry
583; MMEL-NEXT:    sync
584; MMEL-NEXT:    jrc $ra
585;
586; MMELR6-LABEL: test_umax_32:
587; MMELR6:       # %bb.0: # %entry
588; MMELR6-NEXT:    sync
589; MMELR6-NEXT:  $BB2_1: # %entry
590; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
591; MMELR6-NEXT:    ll $2, 0($4)
592; MMELR6-NEXT:    sltu $3, $2, $5
593; MMELR6-NEXT:    seleqz $1, $2, $3
594; MMELR6-NEXT:    selnez $3, $5, $3
595; MMELR6-NEXT:    or $1, $1, $3
596; MMELR6-NEXT:    sc $1, 0($4)
597; MMELR6-NEXT:    beqc $1, $zero, $BB2_1
598; MMELR6-NEXT:  # %bb.2: # %entry
599; MMELR6-NEXT:    sync
600; MMELR6-NEXT:    jrc $ra
601;
602; MIPS64-LABEL: test_umax_32:
603; MIPS64:       # %bb.0: # %entry
604; MIPS64-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
605; MIPS64-NEXT:    sync
606; MIPS64-NEXT:  .LBB2_1: # %entry
607; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
608; MIPS64-NEXT:    ll $2, 0($4)
609; MIPS64-NEXT:    sltu $3, $2, $5
610; MIPS64-NEXT:    move $1, $2
611; MIPS64-NEXT:    movn $1, $5, $3
612; MIPS64-NEXT:    sc $1, 0($4)
613; MIPS64-NEXT:    beqz $1, .LBB2_1
614; MIPS64-NEXT:    nop
615; MIPS64-NEXT:  # %bb.2: # %entry
616; MIPS64-NEXT:    sync
617; MIPS64-NEXT:    jr $ra
618; MIPS64-NEXT:    nop
619;
620; MIPS64R6-LABEL: test_umax_32:
621; MIPS64R6:       # %bb.0: # %entry
622; MIPS64R6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
623; MIPS64R6-NEXT:    sync
624; MIPS64R6-NEXT:  .LBB2_1: # %entry
625; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
626; MIPS64R6-NEXT:    ll $2, 0($4)
627; MIPS64R6-NEXT:    sltu $3, $2, $5
628; MIPS64R6-NEXT:    seleqz $1, $2, $3
629; MIPS64R6-NEXT:    selnez $3, $5, $3
630; MIPS64R6-NEXT:    or $1, $1, $3
631; MIPS64R6-NEXT:    sc $1, 0($4)
632; MIPS64R6-NEXT:    beqzc $1, .LBB2_1
633; MIPS64R6-NEXT:  # %bb.2: # %entry
634; MIPS64R6-NEXT:    sync
635; MIPS64R6-NEXT:    jrc $ra
636;
637; MIPS64EL-LABEL: test_umax_32:
638; MIPS64EL:       # %bb.0: # %entry
639; MIPS64EL-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
640; MIPS64EL-NEXT:    sync
641; MIPS64EL-NEXT:  .LBB2_1: # %entry
642; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
643; MIPS64EL-NEXT:    ll $2, 0($4)
644; MIPS64EL-NEXT:    sltu $3, $2, $5
645; MIPS64EL-NEXT:    move $1, $2
646; MIPS64EL-NEXT:    movn $1, $5, $3
647; MIPS64EL-NEXT:    sc $1, 0($4)
648; MIPS64EL-NEXT:    beqz $1, .LBB2_1
649; MIPS64EL-NEXT:    nop
650; MIPS64EL-NEXT:  # %bb.2: # %entry
651; MIPS64EL-NEXT:    sync
652; MIPS64EL-NEXT:    jr $ra
653; MIPS64EL-NEXT:    nop
654;
655; MIPS64ELR6-LABEL: test_umax_32:
656; MIPS64ELR6:       # %bb.0: # %entry
657; MIPS64ELR6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
658; MIPS64ELR6-NEXT:    sync
659; MIPS64ELR6-NEXT:  .LBB2_1: # %entry
660; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
661; MIPS64ELR6-NEXT:    ll $2, 0($4)
662; MIPS64ELR6-NEXT:    sltu $3, $2, $5
663; MIPS64ELR6-NEXT:    seleqz $1, $2, $3
664; MIPS64ELR6-NEXT:    selnez $3, $5, $3
665; MIPS64ELR6-NEXT:    or $1, $1, $3
666; MIPS64ELR6-NEXT:    sc $1, 0($4)
667; MIPS64ELR6-NEXT:    beqzc $1, .LBB2_1
668; MIPS64ELR6-NEXT:  # %bb.2: # %entry
669; MIPS64ELR6-NEXT:    sync
670; MIPS64ELR6-NEXT:    jrc $ra
671entry:
672  %0 = atomicrmw umax ptr %ptr, i32 %val seq_cst
673  ret i32 %0
674}
675
676define i32 @test_umin_32(ptr nocapture %ptr, i32 signext %val) {
677; MIPS-LABEL: test_umin_32:
678; MIPS:       # %bb.0: # %entry
679; MIPS-NEXT:    sync
680; MIPS-NEXT:  $BB3_1: # %entry
681; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
682; MIPS-NEXT:    ll $2, 0($4)
683; MIPS-NEXT:    sltu $3, $2, $5
684; MIPS-NEXT:    move $1, $2
685; MIPS-NEXT:    movz $1, $5, $3
686; MIPS-NEXT:    sc $1, 0($4)
687; MIPS-NEXT:    beqz $1, $BB3_1
688; MIPS-NEXT:    nop
689; MIPS-NEXT:  # %bb.2: # %entry
690; MIPS-NEXT:    sync
691; MIPS-NEXT:    jr $ra
692; MIPS-NEXT:    nop
693;
694; MIPSR6-LABEL: test_umin_32:
695; MIPSR6:       # %bb.0: # %entry
696; MIPSR6-NEXT:    sync
697; MIPSR6-NEXT:  $BB3_1: # %entry
698; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
699; MIPSR6-NEXT:    ll $2, 0($4)
700; MIPSR6-NEXT:    sltu $3, $2, $5
701; MIPSR6-NEXT:    selnez $1, $2, $3
702; MIPSR6-NEXT:    seleqz $3, $5, $3
703; MIPSR6-NEXT:    or $1, $1, $3
704; MIPSR6-NEXT:    sc $1, 0($4)
705; MIPSR6-NEXT:    beqzc $1, $BB3_1
706; MIPSR6-NEXT:  # %bb.2: # %entry
707; MIPSR6-NEXT:    sync
708; MIPSR6-NEXT:    jrc $ra
709;
710; MM-LABEL: test_umin_32:
711; MM:       # %bb.0: # %entry
712; MM-NEXT:    sync
713; MM-NEXT:  $BB3_1: # %entry
714; MM-NEXT:    # =>This Inner Loop Header: Depth=1
715; MM-NEXT:    ll $2, 0($4)
716; MM-NEXT:    sltu $3, $2, $5
717; MM-NEXT:    or $1, $2, $zero
718; MM-NEXT:    movz $1, $5, $3
719; MM-NEXT:    sc $1, 0($4)
720; MM-NEXT:    beqzc $1, $BB3_1
721; MM-NEXT:  # %bb.2: # %entry
722; MM-NEXT:    sync
723; MM-NEXT:    jrc $ra
724;
725; MMR6-LABEL: test_umin_32:
726; MMR6:       # %bb.0: # %entry
727; MMR6-NEXT:    sync
728; MMR6-NEXT:  $BB3_1: # %entry
729; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
730; MMR6-NEXT:    ll $2, 0($4)
731; MMR6-NEXT:    sltu $3, $2, $5
732; MMR6-NEXT:    selnez $1, $2, $3
733; MMR6-NEXT:    seleqz $3, $5, $3
734; MMR6-NEXT:    or $1, $1, $3
735; MMR6-NEXT:    sc $1, 0($4)
736; MMR6-NEXT:    beqc $1, $zero, $BB3_1
737; MMR6-NEXT:  # %bb.2: # %entry
738; MMR6-NEXT:    sync
739; MMR6-NEXT:    jrc $ra
740;
741; MIPS32-LABEL: test_umin_32:
742; MIPS32:       # %bb.0: # %entry
743; MIPS32-NEXT:    sync
744; MIPS32-NEXT:  $BB3_1: # %entry
745; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
746; MIPS32-NEXT:    ll $2, 0($4)
747; MIPS32-NEXT:    sltu $3, $2, $5
748; MIPS32-NEXT:    move $1, $2
749; MIPS32-NEXT:    movz $1, $5, $3
750; MIPS32-NEXT:    sc $1, 0($4)
751; MIPS32-NEXT:    beqz $1, $BB3_1
752; MIPS32-NEXT:    nop
753; MIPS32-NEXT:  # %bb.2: # %entry
754; MIPS32-NEXT:    sync
755; MIPS32-NEXT:    jr $ra
756; MIPS32-NEXT:    nop
757;
758; MIPSEL-LABEL: test_umin_32:
759; MIPSEL:       # %bb.0: # %entry
760; MIPSEL-NEXT:    sync
761; MIPSEL-NEXT:  $BB3_1: # %entry
762; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
763; MIPSEL-NEXT:    ll $2, 0($4)
764; MIPSEL-NEXT:    sltu $3, $2, $5
765; MIPSEL-NEXT:    move $1, $2
766; MIPSEL-NEXT:    movz $1, $5, $3
767; MIPSEL-NEXT:    sc $1, 0($4)
768; MIPSEL-NEXT:    beqz $1, $BB3_1
769; MIPSEL-NEXT:    nop
770; MIPSEL-NEXT:  # %bb.2: # %entry
771; MIPSEL-NEXT:    sync
772; MIPSEL-NEXT:    jr $ra
773; MIPSEL-NEXT:    nop
774;
775; MIPSELR6-LABEL: test_umin_32:
776; MIPSELR6:       # %bb.0: # %entry
777; MIPSELR6-NEXT:    sync
778; MIPSELR6-NEXT:  $BB3_1: # %entry
779; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
780; MIPSELR6-NEXT:    ll $2, 0($4)
781; MIPSELR6-NEXT:    sltu $3, $2, $5
782; MIPSELR6-NEXT:    selnez $1, $2, $3
783; MIPSELR6-NEXT:    seleqz $3, $5, $3
784; MIPSELR6-NEXT:    or $1, $1, $3
785; MIPSELR6-NEXT:    sc $1, 0($4)
786; MIPSELR6-NEXT:    beqzc $1, $BB3_1
787; MIPSELR6-NEXT:  # %bb.2: # %entry
788; MIPSELR6-NEXT:    sync
789; MIPSELR6-NEXT:    jrc $ra
790;
791; MMEL-LABEL: test_umin_32:
792; MMEL:       # %bb.0: # %entry
793; MMEL-NEXT:    sync
794; MMEL-NEXT:  $BB3_1: # %entry
795; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
796; MMEL-NEXT:    ll $2, 0($4)
797; MMEL-NEXT:    sltu $3, $2, $5
798; MMEL-NEXT:    or $1, $2, $zero
799; MMEL-NEXT:    movz $1, $5, $3
800; MMEL-NEXT:    sc $1, 0($4)
801; MMEL-NEXT:    beqzc $1, $BB3_1
802; MMEL-NEXT:  # %bb.2: # %entry
803; MMEL-NEXT:    sync
804; MMEL-NEXT:    jrc $ra
805;
806; MMELR6-LABEL: test_umin_32:
807; MMELR6:       # %bb.0: # %entry
808; MMELR6-NEXT:    sync
809; MMELR6-NEXT:  $BB3_1: # %entry
810; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
811; MMELR6-NEXT:    ll $2, 0($4)
812; MMELR6-NEXT:    sltu $3, $2, $5
813; MMELR6-NEXT:    selnez $1, $2, $3
814; MMELR6-NEXT:    seleqz $3, $5, $3
815; MMELR6-NEXT:    or $1, $1, $3
816; MMELR6-NEXT:    sc $1, 0($4)
817; MMELR6-NEXT:    beqc $1, $zero, $BB3_1
818; MMELR6-NEXT:  # %bb.2: # %entry
819; MMELR6-NEXT:    sync
820; MMELR6-NEXT:    jrc $ra
821;
822; MIPS64-LABEL: test_umin_32:
823; MIPS64:       # %bb.0: # %entry
824; MIPS64-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
825; MIPS64-NEXT:    sync
826; MIPS64-NEXT:  .LBB3_1: # %entry
827; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
828; MIPS64-NEXT:    ll $2, 0($4)
829; MIPS64-NEXT:    sltu $3, $2, $5
830; MIPS64-NEXT:    move $1, $2
831; MIPS64-NEXT:    movz $1, $5, $3
832; MIPS64-NEXT:    sc $1, 0($4)
833; MIPS64-NEXT:    beqz $1, .LBB3_1
834; MIPS64-NEXT:    nop
835; MIPS64-NEXT:  # %bb.2: # %entry
836; MIPS64-NEXT:    sync
837; MIPS64-NEXT:    jr $ra
838; MIPS64-NEXT:    nop
839;
840; MIPS64R6-LABEL: test_umin_32:
841; MIPS64R6:       # %bb.0: # %entry
842; MIPS64R6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
843; MIPS64R6-NEXT:    sync
844; MIPS64R6-NEXT:  .LBB3_1: # %entry
845; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
846; MIPS64R6-NEXT:    ll $2, 0($4)
847; MIPS64R6-NEXT:    sltu $3, $2, $5
848; MIPS64R6-NEXT:    selnez $1, $2, $3
849; MIPS64R6-NEXT:    seleqz $3, $5, $3
850; MIPS64R6-NEXT:    or $1, $1, $3
851; MIPS64R6-NEXT:    sc $1, 0($4)
852; MIPS64R6-NEXT:    beqzc $1, .LBB3_1
853; MIPS64R6-NEXT:  # %bb.2: # %entry
854; MIPS64R6-NEXT:    sync
855; MIPS64R6-NEXT:    jrc $ra
856;
857; MIPS64EL-LABEL: test_umin_32:
858; MIPS64EL:       # %bb.0: # %entry
859; MIPS64EL-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
860; MIPS64EL-NEXT:    sync
861; MIPS64EL-NEXT:  .LBB3_1: # %entry
862; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
863; MIPS64EL-NEXT:    ll $2, 0($4)
864; MIPS64EL-NEXT:    sltu $3, $2, $5
865; MIPS64EL-NEXT:    move $1, $2
866; MIPS64EL-NEXT:    movz $1, $5, $3
867; MIPS64EL-NEXT:    sc $1, 0($4)
868; MIPS64EL-NEXT:    beqz $1, .LBB3_1
869; MIPS64EL-NEXT:    nop
870; MIPS64EL-NEXT:  # %bb.2: # %entry
871; MIPS64EL-NEXT:    sync
872; MIPS64EL-NEXT:    jr $ra
873; MIPS64EL-NEXT:    nop
874;
875; MIPS64ELR6-LABEL: test_umin_32:
876; MIPS64ELR6:       # %bb.0: # %entry
877; MIPS64ELR6-NEXT:    # kill: def $a1 killed $a1 killed $a1_64
878; MIPS64ELR6-NEXT:    sync
879; MIPS64ELR6-NEXT:  .LBB3_1: # %entry
880; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
881; MIPS64ELR6-NEXT:    ll $2, 0($4)
882; MIPS64ELR6-NEXT:    sltu $3, $2, $5
883; MIPS64ELR6-NEXT:    selnez $1, $2, $3
884; MIPS64ELR6-NEXT:    seleqz $3, $5, $3
885; MIPS64ELR6-NEXT:    or $1, $1, $3
886; MIPS64ELR6-NEXT:    sc $1, 0($4)
887; MIPS64ELR6-NEXT:    beqzc $1, .LBB3_1
888; MIPS64ELR6-NEXT:  # %bb.2: # %entry
889; MIPS64ELR6-NEXT:    sync
890; MIPS64ELR6-NEXT:    jrc $ra
891entry:
892  %0 = atomicrmw umin ptr %ptr, i32 %val seq_cst
893  ret i32 %0
894}
895
896define i16 @test_max_16(ptr nocapture %ptr, i16 signext %val) {
897; MIPS-LABEL: test_max_16:
898; MIPS:       # %bb.0: # %entry
899; MIPS-NEXT:    addiu $sp, $sp, -8
900; MIPS-NEXT:    .cfi_def_cfa_offset 8
901; MIPS-NEXT:    # kill: def $at killed $a1
902; MIPS-NEXT:    sync
903; MIPS-NEXT:    addiu $1, $zero, -4
904; MIPS-NEXT:    and $6, $4, $1
905; MIPS-NEXT:    andi $1, $4, 3
906; MIPS-NEXT:    xori $1, $1, 2
907; MIPS-NEXT:    sll $10, $1, 3
908; MIPS-NEXT:    ori $1, $zero, 65535
909; MIPS-NEXT:    sllv $8, $1, $10
910; MIPS-NEXT:    nor $9, $zero, $8
911; MIPS-NEXT:    sllv $7, $5, $10
912; MIPS-NEXT:  $BB4_1: # %entry
913; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
914; MIPS-NEXT:    ll $2, 0($6)
915; MIPS-NEXT:    srav $4, $2, $10
916; MIPS-NEXT:    seh $4, $4
917; MIPS-NEXT:    or $1, $zero, $4
918; MIPS-NEXT:    sllv $4, $4, $10
919; MIPS-NEXT:    slt $5, $4, $7
920; MIPS-NEXT:    move $3, $4
921; MIPS-NEXT:    movn $3, $7, $5
922; MIPS-NEXT:    and $3, $3, $8
923; MIPS-NEXT:    and $4, $2, $9
924; MIPS-NEXT:    or $4, $4, $3
925; MIPS-NEXT:    sc $4, 0($6)
926; MIPS-NEXT:    beqz $4, $BB4_1
927; MIPS-NEXT:    nop
928; MIPS-NEXT:  # %bb.2: # %entry
929; MIPS-NEXT:    .insn
930; MIPS-NEXT:  # %bb.3: # %entry
931; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
932; MIPS-NEXT:  # %bb.4: # %entry
933; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
934; MIPS-NEXT:    sync
935; MIPS-NEXT:    addiu $sp, $sp, 8
936; MIPS-NEXT:    jr $ra
937; MIPS-NEXT:    nop
938;
939; MIPSR6-LABEL: test_max_16:
940; MIPSR6:       # %bb.0: # %entry
941; MIPSR6-NEXT:    addiu $sp, $sp, -8
942; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
943; MIPSR6-NEXT:    # kill: def $at killed $a1
944; MIPSR6-NEXT:    sync
945; MIPSR6-NEXT:    addiu $1, $zero, -4
946; MIPSR6-NEXT:    and $6, $4, $1
947; MIPSR6-NEXT:    andi $1, $4, 3
948; MIPSR6-NEXT:    xori $1, $1, 2
949; MIPSR6-NEXT:    sll $10, $1, 3
950; MIPSR6-NEXT:    ori $1, $zero, 65535
951; MIPSR6-NEXT:    sllv $8, $1, $10
952; MIPSR6-NEXT:    nor $9, $zero, $8
953; MIPSR6-NEXT:    sllv $7, $5, $10
954; MIPSR6-NEXT:  $BB4_1: # %entry
955; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
956; MIPSR6-NEXT:    ll $2, 0($6)
957; MIPSR6-NEXT:    srav $4, $2, $10
958; MIPSR6-NEXT:    seh $4, $4
959; MIPSR6-NEXT:    or $1, $zero, $4
960; MIPSR6-NEXT:    sllv $4, $4, $10
961; MIPSR6-NEXT:    slt $5, $4, $7
962; MIPSR6-NEXT:    seleqz $3, $4, $5
963; MIPSR6-NEXT:    selnez $5, $7, $5
964; MIPSR6-NEXT:    or $3, $3, $5
965; MIPSR6-NEXT:    and $3, $3, $8
966; MIPSR6-NEXT:    and $4, $2, $9
967; MIPSR6-NEXT:    or $4, $4, $3
968; MIPSR6-NEXT:    sc $4, 0($6)
969; MIPSR6-NEXT:    beqzc $4, $BB4_1
970; MIPSR6-NEXT:    nop
971; MIPSR6-NEXT:  # %bb.2: # %entry
972; MIPSR6-NEXT:    .insn
973; MIPSR6-NEXT:  # %bb.3: # %entry
974; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
975; MIPSR6-NEXT:  # %bb.4: # %entry
976; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
977; MIPSR6-NEXT:    sync
978; MIPSR6-NEXT:    addiu $sp, $sp, 8
979; MIPSR6-NEXT:    jrc $ra
980;
981; MM-LABEL: test_max_16:
982; MM:       # %bb.0: # %entry
983; MM-NEXT:    addiu $sp, $sp, -8
984; MM-NEXT:    .cfi_def_cfa_offset 8
985; MM-NEXT:    # kill: def $at killed $a1
986; MM-NEXT:    sync
987; MM-NEXT:    addiu $1, $zero, -4
988; MM-NEXT:    and $6, $4, $1
989; MM-NEXT:    andi $1, $4, 3
990; MM-NEXT:    xori $1, $1, 2
991; MM-NEXT:    sll $10, $1, 3
992; MM-NEXT:    ori $1, $zero, 65535
993; MM-NEXT:    sllv $8, $1, $10
994; MM-NEXT:    nor $9, $zero, $8
995; MM-NEXT:    sllv $7, $5, $10
996; MM-NEXT:  $BB4_1: # %entry
997; MM-NEXT:    # =>This Inner Loop Header: Depth=1
998; MM-NEXT:    ll $2, 0($6)
999; MM-NEXT:    srav $4, $2, $10
1000; MM-NEXT:    seh $4, $4
1001; MM-NEXT:    or $1, $zero, $4
1002; MM-NEXT:    sllv $4, $4, $10
1003; MM-NEXT:    slt $5, $4, $7
1004; MM-NEXT:    or $3, $4, $zero
1005; MM-NEXT:    movn $3, $7, $5
1006; MM-NEXT:    and $3, $3, $8
1007; MM-NEXT:    and $4, $2, $9
1008; MM-NEXT:    or $4, $4, $3
1009; MM-NEXT:    sc $4, 0($6)
1010; MM-NEXT:    beqzc $4, $BB4_1
1011; MM-NEXT:  # %bb.2: # %entry
1012; MM-NEXT:    .insn
1013; MM-NEXT:  # %bb.3: # %entry
1014; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1015; MM-NEXT:  # %bb.4: # %entry
1016; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1017; MM-NEXT:    sync
1018; MM-NEXT:    addiusp 8
1019; MM-NEXT:    jrc $ra
1020;
1021; MMR6-LABEL: test_max_16:
1022; MMR6:       # %bb.0: # %entry
1023; MMR6-NEXT:    addiu $sp, $sp, -8
1024; MMR6-NEXT:    .cfi_def_cfa_offset 8
1025; MMR6-NEXT:    # kill: def $at killed $a1
1026; MMR6-NEXT:    sync
1027; MMR6-NEXT:    addiu $1, $zero, -4
1028; MMR6-NEXT:    and $6, $4, $1
1029; MMR6-NEXT:    andi $1, $4, 3
1030; MMR6-NEXT:    xori $1, $1, 2
1031; MMR6-NEXT:    sll $10, $1, 3
1032; MMR6-NEXT:    ori $1, $zero, 65535
1033; MMR6-NEXT:    sllv $8, $1, $10
1034; MMR6-NEXT:    nor $9, $zero, $8
1035; MMR6-NEXT:    sllv $7, $5, $10
1036; MMR6-NEXT:  $BB4_1: # %entry
1037; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
1038; MMR6-NEXT:    ll $2, 0($6)
1039; MMR6-NEXT:    srav $4, $2, $10
1040; MMR6-NEXT:    seh $4, $4
1041; MMR6-NEXT:    or $1, $zero, $4
1042; MMR6-NEXT:    sllv $4, $4, $10
1043; MMR6-NEXT:    slt $5, $4, $7
1044; MMR6-NEXT:    seleqz $3, $4, $5
1045; MMR6-NEXT:    selnez $5, $7, $5
1046; MMR6-NEXT:    or $3, $3, $5
1047; MMR6-NEXT:    and $3, $3, $8
1048; MMR6-NEXT:    and $4, $2, $9
1049; MMR6-NEXT:    or $4, $4, $3
1050; MMR6-NEXT:    sc $4, 0($6)
1051; MMR6-NEXT:    beqc $4, $zero, $BB4_1
1052; MMR6-NEXT:  # %bb.2: # %entry
1053; MMR6-NEXT:    .insn
1054; MMR6-NEXT:  # %bb.3: # %entry
1055; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1056; MMR6-NEXT:  # %bb.4: # %entry
1057; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1058; MMR6-NEXT:    sync
1059; MMR6-NEXT:    addiu $sp, $sp, 8
1060; MMR6-NEXT:    jrc $ra
1061;
1062; MIPS32-LABEL: test_max_16:
1063; MIPS32:       # %bb.0: # %entry
1064; MIPS32-NEXT:    addiu $sp, $sp, -8
1065; MIPS32-NEXT:    .cfi_def_cfa_offset 8
1066; MIPS32-NEXT:    # kill: def $at killed $a1
1067; MIPS32-NEXT:    sync
1068; MIPS32-NEXT:    addiu $1, $zero, -4
1069; MIPS32-NEXT:    and $6, $4, $1
1070; MIPS32-NEXT:    andi $1, $4, 3
1071; MIPS32-NEXT:    sll $10, $1, 3
1072; MIPS32-NEXT:    ori $1, $zero, 65535
1073; MIPS32-NEXT:    sllv $8, $1, $10
1074; MIPS32-NEXT:    nor $9, $zero, $8
1075; MIPS32-NEXT:    sllv $7, $5, $10
1076; MIPS32-NEXT:  $BB4_1: # %entry
1077; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
1078; MIPS32-NEXT:    ll $2, 0($6)
1079; MIPS32-NEXT:    srav $4, $2, $10
1080; MIPS32-NEXT:    sll $4, $4, 16
1081; MIPS32-NEXT:    sra $4, $4, 16
1082; MIPS32-NEXT:    or $1, $zero, $4
1083; MIPS32-NEXT:    sllv $4, $4, $10
1084; MIPS32-NEXT:    slt $5, $4, $7
1085; MIPS32-NEXT:    move $3, $4
1086; MIPS32-NEXT:    movn $3, $7, $5
1087; MIPS32-NEXT:    and $3, $3, $8
1088; MIPS32-NEXT:    and $4, $2, $9
1089; MIPS32-NEXT:    or $4, $4, $3
1090; MIPS32-NEXT:    sc $4, 0($6)
1091; MIPS32-NEXT:    beqz $4, $BB4_1
1092; MIPS32-NEXT:    nop
1093; MIPS32-NEXT:  # %bb.2: # %entry
1094; MIPS32-NEXT:    .insn
1095; MIPS32-NEXT:  # %bb.3: # %entry
1096; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1097; MIPS32-NEXT:  # %bb.4: # %entry
1098; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1099; MIPS32-NEXT:    sync
1100; MIPS32-NEXT:    addiu $sp, $sp, 8
1101; MIPS32-NEXT:    jr $ra
1102; MIPS32-NEXT:    nop
1103;
1104; MIPSEL-LABEL: test_max_16:
1105; MIPSEL:       # %bb.0: # %entry
1106; MIPSEL-NEXT:    addiu $sp, $sp, -8
1107; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
1108; MIPSEL-NEXT:    # kill: def $at killed $a1
1109; MIPSEL-NEXT:    sync
1110; MIPSEL-NEXT:    addiu $1, $zero, -4
1111; MIPSEL-NEXT:    and $6, $4, $1
1112; MIPSEL-NEXT:    andi $1, $4, 3
1113; MIPSEL-NEXT:    sll $10, $1, 3
1114; MIPSEL-NEXT:    ori $1, $zero, 65535
1115; MIPSEL-NEXT:    sllv $8, $1, $10
1116; MIPSEL-NEXT:    nor $9, $zero, $8
1117; MIPSEL-NEXT:    sllv $7, $5, $10
1118; MIPSEL-NEXT:  $BB4_1: # %entry
1119; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
1120; MIPSEL-NEXT:    ll $2, 0($6)
1121; MIPSEL-NEXT:    srav $4, $2, $10
1122; MIPSEL-NEXT:    seh $4, $4
1123; MIPSEL-NEXT:    or $1, $zero, $4
1124; MIPSEL-NEXT:    sllv $4, $4, $10
1125; MIPSEL-NEXT:    slt $5, $4, $7
1126; MIPSEL-NEXT:    move $3, $4
1127; MIPSEL-NEXT:    movn $3, $7, $5
1128; MIPSEL-NEXT:    and $3, $3, $8
1129; MIPSEL-NEXT:    and $4, $2, $9
1130; MIPSEL-NEXT:    or $4, $4, $3
1131; MIPSEL-NEXT:    sc $4, 0($6)
1132; MIPSEL-NEXT:    beqz $4, $BB4_1
1133; MIPSEL-NEXT:    nop
1134; MIPSEL-NEXT:  # %bb.2: # %entry
1135; MIPSEL-NEXT:    .insn
1136; MIPSEL-NEXT:  # %bb.3: # %entry
1137; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1138; MIPSEL-NEXT:  # %bb.4: # %entry
1139; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1140; MIPSEL-NEXT:    sync
1141; MIPSEL-NEXT:    addiu $sp, $sp, 8
1142; MIPSEL-NEXT:    jr $ra
1143; MIPSEL-NEXT:    nop
1144;
1145; MIPSELR6-LABEL: test_max_16:
1146; MIPSELR6:       # %bb.0: # %entry
1147; MIPSELR6-NEXT:    addiu $sp, $sp, -8
1148; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
1149; MIPSELR6-NEXT:    # kill: def $at killed $a1
1150; MIPSELR6-NEXT:    sync
1151; MIPSELR6-NEXT:    addiu $1, $zero, -4
1152; MIPSELR6-NEXT:    and $6, $4, $1
1153; MIPSELR6-NEXT:    andi $1, $4, 3
1154; MIPSELR6-NEXT:    sll $10, $1, 3
1155; MIPSELR6-NEXT:    ori $1, $zero, 65535
1156; MIPSELR6-NEXT:    sllv $8, $1, $10
1157; MIPSELR6-NEXT:    nor $9, $zero, $8
1158; MIPSELR6-NEXT:    sllv $7, $5, $10
1159; MIPSELR6-NEXT:  $BB4_1: # %entry
1160; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
1161; MIPSELR6-NEXT:    ll $2, 0($6)
1162; MIPSELR6-NEXT:    srav $4, $2, $10
1163; MIPSELR6-NEXT:    seh $4, $4
1164; MIPSELR6-NEXT:    or $1, $zero, $4
1165; MIPSELR6-NEXT:    sllv $4, $4, $10
1166; MIPSELR6-NEXT:    slt $5, $4, $7
1167; MIPSELR6-NEXT:    seleqz $3, $4, $5
1168; MIPSELR6-NEXT:    selnez $5, $7, $5
1169; MIPSELR6-NEXT:    or $3, $3, $5
1170; MIPSELR6-NEXT:    and $3, $3, $8
1171; MIPSELR6-NEXT:    and $4, $2, $9
1172; MIPSELR6-NEXT:    or $4, $4, $3
1173; MIPSELR6-NEXT:    sc $4, 0($6)
1174; MIPSELR6-NEXT:    beqzc $4, $BB4_1
1175; MIPSELR6-NEXT:    nop
1176; MIPSELR6-NEXT:  # %bb.2: # %entry
1177; MIPSELR6-NEXT:    .insn
1178; MIPSELR6-NEXT:  # %bb.3: # %entry
1179; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1180; MIPSELR6-NEXT:  # %bb.4: # %entry
1181; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1182; MIPSELR6-NEXT:    sync
1183; MIPSELR6-NEXT:    addiu $sp, $sp, 8
1184; MIPSELR6-NEXT:    jrc $ra
1185;
1186; MMEL-LABEL: test_max_16:
1187; MMEL:       # %bb.0: # %entry
1188; MMEL-NEXT:    addiu $sp, $sp, -8
1189; MMEL-NEXT:    .cfi_def_cfa_offset 8
1190; MMEL-NEXT:    # kill: def $at killed $a1
1191; MMEL-NEXT:    sync
1192; MMEL-NEXT:    addiu $1, $zero, -4
1193; MMEL-NEXT:    and $6, $4, $1
1194; MMEL-NEXT:    andi $1, $4, 3
1195; MMEL-NEXT:    sll $10, $1, 3
1196; MMEL-NEXT:    ori $1, $zero, 65535
1197; MMEL-NEXT:    sllv $8, $1, $10
1198; MMEL-NEXT:    nor $9, $zero, $8
1199; MMEL-NEXT:    sllv $7, $5, $10
1200; MMEL-NEXT:  $BB4_1: # %entry
1201; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
1202; MMEL-NEXT:    ll $2, 0($6)
1203; MMEL-NEXT:    srav $4, $2, $10
1204; MMEL-NEXT:    seh $4, $4
1205; MMEL-NEXT:    or $1, $zero, $4
1206; MMEL-NEXT:    sllv $4, $4, $10
1207; MMEL-NEXT:    slt $5, $4, $7
1208; MMEL-NEXT:    or $3, $4, $zero
1209; MMEL-NEXT:    movn $3, $7, $5
1210; MMEL-NEXT:    and $3, $3, $8
1211; MMEL-NEXT:    and $4, $2, $9
1212; MMEL-NEXT:    or $4, $4, $3
1213; MMEL-NEXT:    sc $4, 0($6)
1214; MMEL-NEXT:    beqzc $4, $BB4_1
1215; MMEL-NEXT:  # %bb.2: # %entry
1216; MMEL-NEXT:    .insn
1217; MMEL-NEXT:  # %bb.3: # %entry
1218; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1219; MMEL-NEXT:  # %bb.4: # %entry
1220; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1221; MMEL-NEXT:    sync
1222; MMEL-NEXT:    addiusp 8
1223; MMEL-NEXT:    jrc $ra
1224;
1225; MMELR6-LABEL: test_max_16:
1226; MMELR6:       # %bb.0: # %entry
1227; MMELR6-NEXT:    addiu $sp, $sp, -8
1228; MMELR6-NEXT:    .cfi_def_cfa_offset 8
1229; MMELR6-NEXT:    # kill: def $at killed $a1
1230; MMELR6-NEXT:    sync
1231; MMELR6-NEXT:    addiu $1, $zero, -4
1232; MMELR6-NEXT:    and $6, $4, $1
1233; MMELR6-NEXT:    andi $1, $4, 3
1234; MMELR6-NEXT:    sll $10, $1, 3
1235; MMELR6-NEXT:    ori $1, $zero, 65535
1236; MMELR6-NEXT:    sllv $8, $1, $10
1237; MMELR6-NEXT:    nor $9, $zero, $8
1238; MMELR6-NEXT:    sllv $7, $5, $10
1239; MMELR6-NEXT:  $BB4_1: # %entry
1240; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
1241; MMELR6-NEXT:    ll $2, 0($6)
1242; MMELR6-NEXT:    srav $4, $2, $10
1243; MMELR6-NEXT:    seh $4, $4
1244; MMELR6-NEXT:    or $1, $zero, $4
1245; MMELR6-NEXT:    sllv $4, $4, $10
1246; MMELR6-NEXT:    slt $5, $4, $7
1247; MMELR6-NEXT:    seleqz $3, $4, $5
1248; MMELR6-NEXT:    selnez $5, $7, $5
1249; MMELR6-NEXT:    or $3, $3, $5
1250; MMELR6-NEXT:    and $3, $3, $8
1251; MMELR6-NEXT:    and $4, $2, $9
1252; MMELR6-NEXT:    or $4, $4, $3
1253; MMELR6-NEXT:    sc $4, 0($6)
1254; MMELR6-NEXT:    beqc $4, $zero, $BB4_1
1255; MMELR6-NEXT:  # %bb.2: # %entry
1256; MMELR6-NEXT:    .insn
1257; MMELR6-NEXT:  # %bb.3: # %entry
1258; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1259; MMELR6-NEXT:  # %bb.4: # %entry
1260; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1261; MMELR6-NEXT:    sync
1262; MMELR6-NEXT:    addiu $sp, $sp, 8
1263; MMELR6-NEXT:    jrc $ra
1264;
1265; MIPS64-LABEL: test_max_16:
1266; MIPS64:       # %bb.0: # %entry
1267; MIPS64-NEXT:    daddiu $sp, $sp, -16
1268; MIPS64-NEXT:    .cfi_def_cfa_offset 16
1269; MIPS64-NEXT:    move $1, $5
1270; MIPS64-NEXT:    sync
1271; MIPS64-NEXT:    daddiu $2, $zero, -4
1272; MIPS64-NEXT:    and $6, $4, $2
1273; MIPS64-NEXT:    andi $2, $4, 3
1274; MIPS64-NEXT:    xori $2, $2, 2
1275; MIPS64-NEXT:    sll $10, $2, 3
1276; MIPS64-NEXT:    ori $2, $zero, 65535
1277; MIPS64-NEXT:    sllv $8, $2, $10
1278; MIPS64-NEXT:    nor $9, $zero, $8
1279; MIPS64-NEXT:    sllv $7, $1, $10
1280; MIPS64-NEXT:  .LBB4_1: # %entry
1281; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
1282; MIPS64-NEXT:    ll $2, 0($6)
1283; MIPS64-NEXT:    srav $4, $2, $10
1284; MIPS64-NEXT:    seh $4, $4
1285; MIPS64-NEXT:    or $1, $zero, $4
1286; MIPS64-NEXT:    sllv $4, $4, $10
1287; MIPS64-NEXT:    slt $5, $4, $7
1288; MIPS64-NEXT:    move $3, $4
1289; MIPS64-NEXT:    movn $3, $7, $5
1290; MIPS64-NEXT:    and $3, $3, $8
1291; MIPS64-NEXT:    and $4, $2, $9
1292; MIPS64-NEXT:    or $4, $4, $3
1293; MIPS64-NEXT:    sc $4, 0($6)
1294; MIPS64-NEXT:    beqz $4, .LBB4_1
1295; MIPS64-NEXT:    nop
1296; MIPS64-NEXT:  # %bb.2: # %entry
1297; MIPS64-NEXT:    .insn
1298; MIPS64-NEXT:  # %bb.3: # %entry
1299; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1300; MIPS64-NEXT:  # %bb.4: # %entry
1301; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1302; MIPS64-NEXT:    sync
1303; MIPS64-NEXT:    daddiu $sp, $sp, 16
1304; MIPS64-NEXT:    jr $ra
1305; MIPS64-NEXT:    nop
1306;
1307; MIPS64R6-LABEL: test_max_16:
1308; MIPS64R6:       # %bb.0: # %entry
1309; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
1310; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
1311; MIPS64R6-NEXT:    move $1, $5
1312; MIPS64R6-NEXT:    sync
1313; MIPS64R6-NEXT:    daddiu $2, $zero, -4
1314; MIPS64R6-NEXT:    and $6, $4, $2
1315; MIPS64R6-NEXT:    andi $2, $4, 3
1316; MIPS64R6-NEXT:    xori $2, $2, 2
1317; MIPS64R6-NEXT:    sll $10, $2, 3
1318; MIPS64R6-NEXT:    ori $2, $zero, 65535
1319; MIPS64R6-NEXT:    sllv $8, $2, $10
1320; MIPS64R6-NEXT:    nor $9, $zero, $8
1321; MIPS64R6-NEXT:    sllv $7, $1, $10
1322; MIPS64R6-NEXT:  .LBB4_1: # %entry
1323; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
1324; MIPS64R6-NEXT:    ll $2, 0($6)
1325; MIPS64R6-NEXT:    srav $4, $2, $10
1326; MIPS64R6-NEXT:    seh $4, $4
1327; MIPS64R6-NEXT:    or $1, $zero, $4
1328; MIPS64R6-NEXT:    sllv $4, $4, $10
1329; MIPS64R6-NEXT:    slt $5, $4, $7
1330; MIPS64R6-NEXT:    seleqz $3, $4, $5
1331; MIPS64R6-NEXT:    selnez $5, $7, $5
1332; MIPS64R6-NEXT:    or $3, $3, $5
1333; MIPS64R6-NEXT:    and $3, $3, $8
1334; MIPS64R6-NEXT:    and $4, $2, $9
1335; MIPS64R6-NEXT:    or $4, $4, $3
1336; MIPS64R6-NEXT:    sc $4, 0($6)
1337; MIPS64R6-NEXT:    beqzc $4, .LBB4_1
1338; MIPS64R6-NEXT:    nop
1339; MIPS64R6-NEXT:  # %bb.2: # %entry
1340; MIPS64R6-NEXT:    .insn
1341; MIPS64R6-NEXT:  # %bb.3: # %entry
1342; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1343; MIPS64R6-NEXT:  # %bb.4: # %entry
1344; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1345; MIPS64R6-NEXT:    sync
1346; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
1347; MIPS64R6-NEXT:    jrc $ra
1348;
1349; MIPS64EL-LABEL: test_max_16:
1350; MIPS64EL:       # %bb.0: # %entry
1351; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
1352; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
1353; MIPS64EL-NEXT:    move $1, $5
1354; MIPS64EL-NEXT:    sync
1355; MIPS64EL-NEXT:    daddiu $2, $zero, -4
1356; MIPS64EL-NEXT:    and $6, $4, $2
1357; MIPS64EL-NEXT:    andi $2, $4, 3
1358; MIPS64EL-NEXT:    sll $10, $2, 3
1359; MIPS64EL-NEXT:    ori $2, $zero, 65535
1360; MIPS64EL-NEXT:    sllv $8, $2, $10
1361; MIPS64EL-NEXT:    nor $9, $zero, $8
1362; MIPS64EL-NEXT:    sllv $7, $1, $10
1363; MIPS64EL-NEXT:  .LBB4_1: # %entry
1364; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
1365; MIPS64EL-NEXT:    ll $2, 0($6)
1366; MIPS64EL-NEXT:    srav $4, $2, $10
1367; MIPS64EL-NEXT:    seh $4, $4
1368; MIPS64EL-NEXT:    or $1, $zero, $4
1369; MIPS64EL-NEXT:    sllv $4, $4, $10
1370; MIPS64EL-NEXT:    slt $5, $4, $7
1371; MIPS64EL-NEXT:    move $3, $4
1372; MIPS64EL-NEXT:    movn $3, $7, $5
1373; MIPS64EL-NEXT:    and $3, $3, $8
1374; MIPS64EL-NEXT:    and $4, $2, $9
1375; MIPS64EL-NEXT:    or $4, $4, $3
1376; MIPS64EL-NEXT:    sc $4, 0($6)
1377; MIPS64EL-NEXT:    beqz $4, .LBB4_1
1378; MIPS64EL-NEXT:    nop
1379; MIPS64EL-NEXT:  # %bb.2: # %entry
1380; MIPS64EL-NEXT:    .insn
1381; MIPS64EL-NEXT:  # %bb.3: # %entry
1382; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1383; MIPS64EL-NEXT:  # %bb.4: # %entry
1384; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1385; MIPS64EL-NEXT:    sync
1386; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
1387; MIPS64EL-NEXT:    jr $ra
1388; MIPS64EL-NEXT:    nop
1389;
1390; MIPS64ELR6-LABEL: test_max_16:
1391; MIPS64ELR6:       # %bb.0: # %entry
1392; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
1393; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
1394; MIPS64ELR6-NEXT:    move $1, $5
1395; MIPS64ELR6-NEXT:    sync
1396; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
1397; MIPS64ELR6-NEXT:    and $6, $4, $2
1398; MIPS64ELR6-NEXT:    andi $2, $4, 3
1399; MIPS64ELR6-NEXT:    sll $10, $2, 3
1400; MIPS64ELR6-NEXT:    ori $2, $zero, 65535
1401; MIPS64ELR6-NEXT:    sllv $8, $2, $10
1402; MIPS64ELR6-NEXT:    nor $9, $zero, $8
1403; MIPS64ELR6-NEXT:    sllv $7, $1, $10
1404; MIPS64ELR6-NEXT:  .LBB4_1: # %entry
1405; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
1406; MIPS64ELR6-NEXT:    ll $2, 0($6)
1407; MIPS64ELR6-NEXT:    srav $4, $2, $10
1408; MIPS64ELR6-NEXT:    seh $4, $4
1409; MIPS64ELR6-NEXT:    or $1, $zero, $4
1410; MIPS64ELR6-NEXT:    sllv $4, $4, $10
1411; MIPS64ELR6-NEXT:    slt $5, $4, $7
1412; MIPS64ELR6-NEXT:    seleqz $3, $4, $5
1413; MIPS64ELR6-NEXT:    selnez $5, $7, $5
1414; MIPS64ELR6-NEXT:    or $3, $3, $5
1415; MIPS64ELR6-NEXT:    and $3, $3, $8
1416; MIPS64ELR6-NEXT:    and $4, $2, $9
1417; MIPS64ELR6-NEXT:    or $4, $4, $3
1418; MIPS64ELR6-NEXT:    sc $4, 0($6)
1419; MIPS64ELR6-NEXT:    beqzc $4, .LBB4_1
1420; MIPS64ELR6-NEXT:    nop
1421; MIPS64ELR6-NEXT:  # %bb.2: # %entry
1422; MIPS64ELR6-NEXT:    .insn
1423; MIPS64ELR6-NEXT:  # %bb.3: # %entry
1424; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1425; MIPS64ELR6-NEXT:  # %bb.4: # %entry
1426; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1427; MIPS64ELR6-NEXT:    sync
1428; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
1429; MIPS64ELR6-NEXT:    jrc $ra
1430
1431entry:
1432  %0 = atomicrmw max ptr %ptr, i16 %val seq_cst
1433  ret i16 %0
1434}
1435
1436define i16 @test_min_16(ptr nocapture %ptr, i16 signext %val) {
1437; MIPS-LABEL: test_min_16:
1438; MIPS:       # %bb.0: # %entry
1439; MIPS-NEXT:    addiu $sp, $sp, -8
1440; MIPS-NEXT:    .cfi_def_cfa_offset 8
1441; MIPS-NEXT:    # kill: def $at killed $a1
1442; MIPS-NEXT:    sync
1443; MIPS-NEXT:    addiu $1, $zero, -4
1444; MIPS-NEXT:    and $6, $4, $1
1445; MIPS-NEXT:    andi $1, $4, 3
1446; MIPS-NEXT:    xori $1, $1, 2
1447; MIPS-NEXT:    sll $10, $1, 3
1448; MIPS-NEXT:    ori $1, $zero, 65535
1449; MIPS-NEXT:    sllv $8, $1, $10
1450; MIPS-NEXT:    nor $9, $zero, $8
1451; MIPS-NEXT:    sllv $7, $5, $10
1452; MIPS-NEXT:  $BB5_1: # %entry
1453; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
1454; MIPS-NEXT:    ll $2, 0($6)
1455; MIPS-NEXT:    srav $4, $2, $10
1456; MIPS-NEXT:    seh $4, $4
1457; MIPS-NEXT:    or $1, $zero, $4
1458; MIPS-NEXT:    sllv $4, $4, $10
1459; MIPS-NEXT:    slt $5, $4, $7
1460; MIPS-NEXT:    move $3, $4
1461; MIPS-NEXT:    movz $3, $7, $5
1462; MIPS-NEXT:    and $3, $3, $8
1463; MIPS-NEXT:    and $4, $2, $9
1464; MIPS-NEXT:    or $4, $4, $3
1465; MIPS-NEXT:    sc $4, 0($6)
1466; MIPS-NEXT:    beqz $4, $BB5_1
1467; MIPS-NEXT:    nop
1468; MIPS-NEXT:  # %bb.2: # %entry
1469; MIPS-NEXT:    .insn
1470; MIPS-NEXT:  # %bb.3: # %entry
1471; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1472; MIPS-NEXT:  # %bb.4: # %entry
1473; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1474; MIPS-NEXT:    sync
1475; MIPS-NEXT:    addiu $sp, $sp, 8
1476; MIPS-NEXT:    jr $ra
1477; MIPS-NEXT:    nop
1478;
1479; MIPSR6-LABEL: test_min_16:
1480; MIPSR6:       # %bb.0: # %entry
1481; MIPSR6-NEXT:    addiu $sp, $sp, -8
1482; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
1483; MIPSR6-NEXT:    # kill: def $at killed $a1
1484; MIPSR6-NEXT:    sync
1485; MIPSR6-NEXT:    addiu $1, $zero, -4
1486; MIPSR6-NEXT:    and $6, $4, $1
1487; MIPSR6-NEXT:    andi $1, $4, 3
1488; MIPSR6-NEXT:    xori $1, $1, 2
1489; MIPSR6-NEXT:    sll $10, $1, 3
1490; MIPSR6-NEXT:    ori $1, $zero, 65535
1491; MIPSR6-NEXT:    sllv $8, $1, $10
1492; MIPSR6-NEXT:    nor $9, $zero, $8
1493; MIPSR6-NEXT:    sllv $7, $5, $10
1494; MIPSR6-NEXT:  $BB5_1: # %entry
1495; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
1496; MIPSR6-NEXT:    ll $2, 0($6)
1497; MIPSR6-NEXT:    srav $4, $2, $10
1498; MIPSR6-NEXT:    seh $4, $4
1499; MIPSR6-NEXT:    or $1, $zero, $4
1500; MIPSR6-NEXT:    sllv $4, $4, $10
1501; MIPSR6-NEXT:    slt $5, $4, $7
1502; MIPSR6-NEXT:    selnez $3, $4, $5
1503; MIPSR6-NEXT:    seleqz $5, $7, $5
1504; MIPSR6-NEXT:    or $3, $3, $5
1505; MIPSR6-NEXT:    and $3, $3, $8
1506; MIPSR6-NEXT:    and $4, $2, $9
1507; MIPSR6-NEXT:    or $4, $4, $3
1508; MIPSR6-NEXT:    sc $4, 0($6)
1509; MIPSR6-NEXT:    beqzc $4, $BB5_1
1510; MIPSR6-NEXT:    nop
1511; MIPSR6-NEXT:  # %bb.2: # %entry
1512; MIPSR6-NEXT:    .insn
1513; MIPSR6-NEXT:  # %bb.3: # %entry
1514; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1515; MIPSR6-NEXT:  # %bb.4: # %entry
1516; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1517; MIPSR6-NEXT:    sync
1518; MIPSR6-NEXT:    addiu $sp, $sp, 8
1519; MIPSR6-NEXT:    jrc $ra
1520;
1521; MM-LABEL: test_min_16:
1522; MM:       # %bb.0: # %entry
1523; MM-NEXT:    addiu $sp, $sp, -8
1524; MM-NEXT:    .cfi_def_cfa_offset 8
1525; MM-NEXT:    # kill: def $at killed $a1
1526; MM-NEXT:    sync
1527; MM-NEXT:    addiu $1, $zero, -4
1528; MM-NEXT:    and $6, $4, $1
1529; MM-NEXT:    andi $1, $4, 3
1530; MM-NEXT:    xori $1, $1, 2
1531; MM-NEXT:    sll $10, $1, 3
1532; MM-NEXT:    ori $1, $zero, 65535
1533; MM-NEXT:    sllv $8, $1, $10
1534; MM-NEXT:    nor $9, $zero, $8
1535; MM-NEXT:    sllv $7, $5, $10
1536; MM-NEXT:  $BB5_1: # %entry
1537; MM-NEXT:    # =>This Inner Loop Header: Depth=1
1538; MM-NEXT:    ll $2, 0($6)
1539; MM-NEXT:    srav $4, $2, $10
1540; MM-NEXT:    seh $4, $4
1541; MM-NEXT:    or $1, $zero, $4
1542; MM-NEXT:    sllv $4, $4, $10
1543; MM-NEXT:    slt $5, $4, $7
1544; MM-NEXT:    or $3, $4, $zero
1545; MM-NEXT:    movz $3, $7, $5
1546; MM-NEXT:    and $3, $3, $8
1547; MM-NEXT:    and $4, $2, $9
1548; MM-NEXT:    or $4, $4, $3
1549; MM-NEXT:    sc $4, 0($6)
1550; MM-NEXT:    beqzc $4, $BB5_1
1551; MM-NEXT:  # %bb.2: # %entry
1552; MM-NEXT:    .insn
1553; MM-NEXT:  # %bb.3: # %entry
1554; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1555; MM-NEXT:  # %bb.4: # %entry
1556; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1557; MM-NEXT:    sync
1558; MM-NEXT:    addiusp 8
1559; MM-NEXT:    jrc $ra
1560;
1561; MMR6-LABEL: test_min_16:
1562; MMR6:       # %bb.0: # %entry
1563; MMR6-NEXT:    addiu $sp, $sp, -8
1564; MMR6-NEXT:    .cfi_def_cfa_offset 8
1565; MMR6-NEXT:    # kill: def $at killed $a1
1566; MMR6-NEXT:    sync
1567; MMR6-NEXT:    addiu $1, $zero, -4
1568; MMR6-NEXT:    and $6, $4, $1
1569; MMR6-NEXT:    andi $1, $4, 3
1570; MMR6-NEXT:    xori $1, $1, 2
1571; MMR6-NEXT:    sll $10, $1, 3
1572; MMR6-NEXT:    ori $1, $zero, 65535
1573; MMR6-NEXT:    sllv $8, $1, $10
1574; MMR6-NEXT:    nor $9, $zero, $8
1575; MMR6-NEXT:    sllv $7, $5, $10
1576; MMR6-NEXT:  $BB5_1: # %entry
1577; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
1578; MMR6-NEXT:    ll $2, 0($6)
1579; MMR6-NEXT:    srav $4, $2, $10
1580; MMR6-NEXT:    seh $4, $4
1581; MMR6-NEXT:    or $1, $zero, $4
1582; MMR6-NEXT:    sllv $4, $4, $10
1583; MMR6-NEXT:    slt $5, $4, $7
1584; MMR6-NEXT:    selnez $3, $4, $5
1585; MMR6-NEXT:    seleqz $5, $7, $5
1586; MMR6-NEXT:    or $3, $3, $5
1587; MMR6-NEXT:    and $3, $3, $8
1588; MMR6-NEXT:    and $4, $2, $9
1589; MMR6-NEXT:    or $4, $4, $3
1590; MMR6-NEXT:    sc $4, 0($6)
1591; MMR6-NEXT:    beqc $4, $zero, $BB5_1
1592; MMR6-NEXT:  # %bb.2: # %entry
1593; MMR6-NEXT:    .insn
1594; MMR6-NEXT:  # %bb.3: # %entry
1595; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1596; MMR6-NEXT:  # %bb.4: # %entry
1597; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1598; MMR6-NEXT:    sync
1599; MMR6-NEXT:    addiu $sp, $sp, 8
1600; MMR6-NEXT:    jrc $ra
1601;
1602; MIPS32-LABEL: test_min_16:
1603; MIPS32:       # %bb.0: # %entry
1604; MIPS32-NEXT:    addiu $sp, $sp, -8
1605; MIPS32-NEXT:    .cfi_def_cfa_offset 8
1606; MIPS32-NEXT:    # kill: def $at killed $a1
1607; MIPS32-NEXT:    sync
1608; MIPS32-NEXT:    addiu $1, $zero, -4
1609; MIPS32-NEXT:    and $6, $4, $1
1610; MIPS32-NEXT:    andi $1, $4, 3
1611; MIPS32-NEXT:    sll $10, $1, 3
1612; MIPS32-NEXT:    ori $1, $zero, 65535
1613; MIPS32-NEXT:    sllv $8, $1, $10
1614; MIPS32-NEXT:    nor $9, $zero, $8
1615; MIPS32-NEXT:    sllv $7, $5, $10
1616; MIPS32-NEXT:  $BB5_1: # %entry
1617; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
1618; MIPS32-NEXT:    ll $2, 0($6)
1619; MIPS32-NEXT:    srav $4, $2, $10
1620; MIPS32-NEXT:    sll $4, $4, 16
1621; MIPS32-NEXT:    sra $4, $4, 16
1622; MIPS32-NEXT:    or $1, $zero, $4
1623; MIPS32-NEXT:    sllv $4, $4, $10
1624; MIPS32-NEXT:    slt $5, $4, $7
1625; MIPS32-NEXT:    move $3, $4
1626; MIPS32-NEXT:    movz $3, $7, $5
1627; MIPS32-NEXT:    and $3, $3, $8
1628; MIPS32-NEXT:    and $4, $2, $9
1629; MIPS32-NEXT:    or $4, $4, $3
1630; MIPS32-NEXT:    sc $4, 0($6)
1631; MIPS32-NEXT:    beqz $4, $BB5_1
1632; MIPS32-NEXT:    nop
1633; MIPS32-NEXT:  # %bb.2: # %entry
1634; MIPS32-NEXT:    .insn
1635; MIPS32-NEXT:  # %bb.3: # %entry
1636; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1637; MIPS32-NEXT:  # %bb.4: # %entry
1638; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1639; MIPS32-NEXT:    sync
1640; MIPS32-NEXT:    addiu $sp, $sp, 8
1641; MIPS32-NEXT:    jr $ra
1642; MIPS32-NEXT:    nop
1643;
1644; MIPSEL-LABEL: test_min_16:
1645; MIPSEL:       # %bb.0: # %entry
1646; MIPSEL-NEXT:    addiu $sp, $sp, -8
1647; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
1648; MIPSEL-NEXT:    # kill: def $at killed $a1
1649; MIPSEL-NEXT:    sync
1650; MIPSEL-NEXT:    addiu $1, $zero, -4
1651; MIPSEL-NEXT:    and $6, $4, $1
1652; MIPSEL-NEXT:    andi $1, $4, 3
1653; MIPSEL-NEXT:    sll $10, $1, 3
1654; MIPSEL-NEXT:    ori $1, $zero, 65535
1655; MIPSEL-NEXT:    sllv $8, $1, $10
1656; MIPSEL-NEXT:    nor $9, $zero, $8
1657; MIPSEL-NEXT:    sllv $7, $5, $10
1658; MIPSEL-NEXT:  $BB5_1: # %entry
1659; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
1660; MIPSEL-NEXT:    ll $2, 0($6)
1661; MIPSEL-NEXT:    srav $4, $2, $10
1662; MIPSEL-NEXT:    seh $4, $4
1663; MIPSEL-NEXT:    or $1, $zero, $4
1664; MIPSEL-NEXT:    sllv $4, $4, $10
1665; MIPSEL-NEXT:    slt $5, $4, $7
1666; MIPSEL-NEXT:    move $3, $4
1667; MIPSEL-NEXT:    movz $3, $7, $5
1668; MIPSEL-NEXT:    and $3, $3, $8
1669; MIPSEL-NEXT:    and $4, $2, $9
1670; MIPSEL-NEXT:    or $4, $4, $3
1671; MIPSEL-NEXT:    sc $4, 0($6)
1672; MIPSEL-NEXT:    beqz $4, $BB5_1
1673; MIPSEL-NEXT:    nop
1674; MIPSEL-NEXT:  # %bb.2: # %entry
1675; MIPSEL-NEXT:    .insn
1676; MIPSEL-NEXT:  # %bb.3: # %entry
1677; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1678; MIPSEL-NEXT:  # %bb.4: # %entry
1679; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1680; MIPSEL-NEXT:    sync
1681; MIPSEL-NEXT:    addiu $sp, $sp, 8
1682; MIPSEL-NEXT:    jr $ra
1683; MIPSEL-NEXT:    nop
1684;
1685; MIPSELR6-LABEL: test_min_16:
1686; MIPSELR6:       # %bb.0: # %entry
1687; MIPSELR6-NEXT:    addiu $sp, $sp, -8
1688; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
1689; MIPSELR6-NEXT:    # kill: def $at killed $a1
1690; MIPSELR6-NEXT:    sync
1691; MIPSELR6-NEXT:    addiu $1, $zero, -4
1692; MIPSELR6-NEXT:    and $6, $4, $1
1693; MIPSELR6-NEXT:    andi $1, $4, 3
1694; MIPSELR6-NEXT:    sll $10, $1, 3
1695; MIPSELR6-NEXT:    ori $1, $zero, 65535
1696; MIPSELR6-NEXT:    sllv $8, $1, $10
1697; MIPSELR6-NEXT:    nor $9, $zero, $8
1698; MIPSELR6-NEXT:    sllv $7, $5, $10
1699; MIPSELR6-NEXT:  $BB5_1: # %entry
1700; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
1701; MIPSELR6-NEXT:    ll $2, 0($6)
1702; MIPSELR6-NEXT:    srav $4, $2, $10
1703; MIPSELR6-NEXT:    seh $4, $4
1704; MIPSELR6-NEXT:    or $1, $zero, $4
1705; MIPSELR6-NEXT:    sllv $4, $4, $10
1706; MIPSELR6-NEXT:    slt $5, $4, $7
1707; MIPSELR6-NEXT:    selnez $3, $4, $5
1708; MIPSELR6-NEXT:    seleqz $5, $7, $5
1709; MIPSELR6-NEXT:    or $3, $3, $5
1710; MIPSELR6-NEXT:    and $3, $3, $8
1711; MIPSELR6-NEXT:    and $4, $2, $9
1712; MIPSELR6-NEXT:    or $4, $4, $3
1713; MIPSELR6-NEXT:    sc $4, 0($6)
1714; MIPSELR6-NEXT:    beqzc $4, $BB5_1
1715; MIPSELR6-NEXT:    nop
1716; MIPSELR6-NEXT:  # %bb.2: # %entry
1717; MIPSELR6-NEXT:    .insn
1718; MIPSELR6-NEXT:  # %bb.3: # %entry
1719; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1720; MIPSELR6-NEXT:  # %bb.4: # %entry
1721; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1722; MIPSELR6-NEXT:    sync
1723; MIPSELR6-NEXT:    addiu $sp, $sp, 8
1724; MIPSELR6-NEXT:    jrc $ra
1725;
1726; MMEL-LABEL: test_min_16:
1727; MMEL:       # %bb.0: # %entry
1728; MMEL-NEXT:    addiu $sp, $sp, -8
1729; MMEL-NEXT:    .cfi_def_cfa_offset 8
1730; MMEL-NEXT:    # kill: def $at killed $a1
1731; MMEL-NEXT:    sync
1732; MMEL-NEXT:    addiu $1, $zero, -4
1733; MMEL-NEXT:    and $6, $4, $1
1734; MMEL-NEXT:    andi $1, $4, 3
1735; MMEL-NEXT:    sll $10, $1, 3
1736; MMEL-NEXT:    ori $1, $zero, 65535
1737; MMEL-NEXT:    sllv $8, $1, $10
1738; MMEL-NEXT:    nor $9, $zero, $8
1739; MMEL-NEXT:    sllv $7, $5, $10
1740; MMEL-NEXT:  $BB5_1: # %entry
1741; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
1742; MMEL-NEXT:    ll $2, 0($6)
1743; MMEL-NEXT:    srav $4, $2, $10
1744; MMEL-NEXT:    seh $4, $4
1745; MMEL-NEXT:    or $1, $zero, $4
1746; MMEL-NEXT:    sllv $4, $4, $10
1747; MMEL-NEXT:    slt $5, $4, $7
1748; MMEL-NEXT:    or $3, $4, $zero
1749; MMEL-NEXT:    movz $3, $7, $5
1750; MMEL-NEXT:    and $3, $3, $8
1751; MMEL-NEXT:    and $4, $2, $9
1752; MMEL-NEXT:    or $4, $4, $3
1753; MMEL-NEXT:    sc $4, 0($6)
1754; MMEL-NEXT:    beqzc $4, $BB5_1
1755; MMEL-NEXT:  # %bb.2: # %entry
1756; MMEL-NEXT:    .insn
1757; MMEL-NEXT:  # %bb.3: # %entry
1758; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1759; MMEL-NEXT:  # %bb.4: # %entry
1760; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1761; MMEL-NEXT:    sync
1762; MMEL-NEXT:    addiusp 8
1763; MMEL-NEXT:    jrc $ra
1764;
1765; MMELR6-LABEL: test_min_16:
1766; MMELR6:       # %bb.0: # %entry
1767; MMELR6-NEXT:    addiu $sp, $sp, -8
1768; MMELR6-NEXT:    .cfi_def_cfa_offset 8
1769; MMELR6-NEXT:    # kill: def $at killed $a1
1770; MMELR6-NEXT:    sync
1771; MMELR6-NEXT:    addiu $1, $zero, -4
1772; MMELR6-NEXT:    and $6, $4, $1
1773; MMELR6-NEXT:    andi $1, $4, 3
1774; MMELR6-NEXT:    sll $10, $1, 3
1775; MMELR6-NEXT:    ori $1, $zero, 65535
1776; MMELR6-NEXT:    sllv $8, $1, $10
1777; MMELR6-NEXT:    nor $9, $zero, $8
1778; MMELR6-NEXT:    sllv $7, $5, $10
1779; MMELR6-NEXT:  $BB5_1: # %entry
1780; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
1781; MMELR6-NEXT:    ll $2, 0($6)
1782; MMELR6-NEXT:    srav $4, $2, $10
1783; MMELR6-NEXT:    seh $4, $4
1784; MMELR6-NEXT:    or $1, $zero, $4
1785; MMELR6-NEXT:    sllv $4, $4, $10
1786; MMELR6-NEXT:    slt $5, $4, $7
1787; MMELR6-NEXT:    selnez $3, $4, $5
1788; MMELR6-NEXT:    seleqz $5, $7, $5
1789; MMELR6-NEXT:    or $3, $3, $5
1790; MMELR6-NEXT:    and $3, $3, $8
1791; MMELR6-NEXT:    and $4, $2, $9
1792; MMELR6-NEXT:    or $4, $4, $3
1793; MMELR6-NEXT:    sc $4, 0($6)
1794; MMELR6-NEXT:    beqc $4, $zero, $BB5_1
1795; MMELR6-NEXT:  # %bb.2: # %entry
1796; MMELR6-NEXT:    .insn
1797; MMELR6-NEXT:  # %bb.3: # %entry
1798; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
1799; MMELR6-NEXT:  # %bb.4: # %entry
1800; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
1801; MMELR6-NEXT:    sync
1802; MMELR6-NEXT:    addiu $sp, $sp, 8
1803; MMELR6-NEXT:    jrc $ra
1804;
1805; MIPS64-LABEL: test_min_16:
1806; MIPS64:       # %bb.0: # %entry
1807; MIPS64-NEXT:    daddiu $sp, $sp, -16
1808; MIPS64-NEXT:    .cfi_def_cfa_offset 16
1809; MIPS64-NEXT:    move $1, $5
1810; MIPS64-NEXT:    sync
1811; MIPS64-NEXT:    daddiu $2, $zero, -4
1812; MIPS64-NEXT:    and $6, $4, $2
1813; MIPS64-NEXT:    andi $2, $4, 3
1814; MIPS64-NEXT:    xori $2, $2, 2
1815; MIPS64-NEXT:    sll $10, $2, 3
1816; MIPS64-NEXT:    ori $2, $zero, 65535
1817; MIPS64-NEXT:    sllv $8, $2, $10
1818; MIPS64-NEXT:    nor $9, $zero, $8
1819; MIPS64-NEXT:    sllv $7, $1, $10
1820; MIPS64-NEXT:  .LBB5_1: # %entry
1821; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
1822; MIPS64-NEXT:    ll $2, 0($6)
1823; MIPS64-NEXT:    srav $4, $2, $10
1824; MIPS64-NEXT:    seh $4, $4
1825; MIPS64-NEXT:    or $1, $zero, $4
1826; MIPS64-NEXT:    sllv $4, $4, $10
1827; MIPS64-NEXT:    slt $5, $4, $7
1828; MIPS64-NEXT:    move $3, $4
1829; MIPS64-NEXT:    movz $3, $7, $5
1830; MIPS64-NEXT:    and $3, $3, $8
1831; MIPS64-NEXT:    and $4, $2, $9
1832; MIPS64-NEXT:    or $4, $4, $3
1833; MIPS64-NEXT:    sc $4, 0($6)
1834; MIPS64-NEXT:    beqz $4, .LBB5_1
1835; MIPS64-NEXT:    nop
1836; MIPS64-NEXT:  # %bb.2: # %entry
1837; MIPS64-NEXT:    .insn
1838; MIPS64-NEXT:  # %bb.3: # %entry
1839; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1840; MIPS64-NEXT:  # %bb.4: # %entry
1841; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1842; MIPS64-NEXT:    sync
1843; MIPS64-NEXT:    daddiu $sp, $sp, 16
1844; MIPS64-NEXT:    jr $ra
1845; MIPS64-NEXT:    nop
1846;
1847; MIPS64R6-LABEL: test_min_16:
1848; MIPS64R6:       # %bb.0: # %entry
1849; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
1850; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
1851; MIPS64R6-NEXT:    move $1, $5
1852; MIPS64R6-NEXT:    sync
1853; MIPS64R6-NEXT:    daddiu $2, $zero, -4
1854; MIPS64R6-NEXT:    and $6, $4, $2
1855; MIPS64R6-NEXT:    andi $2, $4, 3
1856; MIPS64R6-NEXT:    xori $2, $2, 2
1857; MIPS64R6-NEXT:    sll $10, $2, 3
1858; MIPS64R6-NEXT:    ori $2, $zero, 65535
1859; MIPS64R6-NEXT:    sllv $8, $2, $10
1860; MIPS64R6-NEXT:    nor $9, $zero, $8
1861; MIPS64R6-NEXT:    sllv $7, $1, $10
1862; MIPS64R6-NEXT:  .LBB5_1: # %entry
1863; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
1864; MIPS64R6-NEXT:    ll $2, 0($6)
1865; MIPS64R6-NEXT:    srav $4, $2, $10
1866; MIPS64R6-NEXT:    seh $4, $4
1867; MIPS64R6-NEXT:    or $1, $zero, $4
1868; MIPS64R6-NEXT:    sllv $4, $4, $10
1869; MIPS64R6-NEXT:    slt $5, $4, $7
1870; MIPS64R6-NEXT:    selnez $3, $4, $5
1871; MIPS64R6-NEXT:    seleqz $5, $7, $5
1872; MIPS64R6-NEXT:    or $3, $3, $5
1873; MIPS64R6-NEXT:    and $3, $3, $8
1874; MIPS64R6-NEXT:    and $4, $2, $9
1875; MIPS64R6-NEXT:    or $4, $4, $3
1876; MIPS64R6-NEXT:    sc $4, 0($6)
1877; MIPS64R6-NEXT:    beqzc $4, .LBB5_1
1878; MIPS64R6-NEXT:    nop
1879; MIPS64R6-NEXT:  # %bb.2: # %entry
1880; MIPS64R6-NEXT:    .insn
1881; MIPS64R6-NEXT:  # %bb.3: # %entry
1882; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1883; MIPS64R6-NEXT:  # %bb.4: # %entry
1884; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1885; MIPS64R6-NEXT:    sync
1886; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
1887; MIPS64R6-NEXT:    jrc $ra
1888;
1889; MIPS64EL-LABEL: test_min_16:
1890; MIPS64EL:       # %bb.0: # %entry
1891; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
1892; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
1893; MIPS64EL-NEXT:    move $1, $5
1894; MIPS64EL-NEXT:    sync
1895; MIPS64EL-NEXT:    daddiu $2, $zero, -4
1896; MIPS64EL-NEXT:    and $6, $4, $2
1897; MIPS64EL-NEXT:    andi $2, $4, 3
1898; MIPS64EL-NEXT:    sll $10, $2, 3
1899; MIPS64EL-NEXT:    ori $2, $zero, 65535
1900; MIPS64EL-NEXT:    sllv $8, $2, $10
1901; MIPS64EL-NEXT:    nor $9, $zero, $8
1902; MIPS64EL-NEXT:    sllv $7, $1, $10
1903; MIPS64EL-NEXT:  .LBB5_1: # %entry
1904; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
1905; MIPS64EL-NEXT:    ll $2, 0($6)
1906; MIPS64EL-NEXT:    srav $4, $2, $10
1907; MIPS64EL-NEXT:    seh $4, $4
1908; MIPS64EL-NEXT:    or $1, $zero, $4
1909; MIPS64EL-NEXT:    sllv $4, $4, $10
1910; MIPS64EL-NEXT:    slt $5, $4, $7
1911; MIPS64EL-NEXT:    move $3, $4
1912; MIPS64EL-NEXT:    movz $3, $7, $5
1913; MIPS64EL-NEXT:    and $3, $3, $8
1914; MIPS64EL-NEXT:    and $4, $2, $9
1915; MIPS64EL-NEXT:    or $4, $4, $3
1916; MIPS64EL-NEXT:    sc $4, 0($6)
1917; MIPS64EL-NEXT:    beqz $4, .LBB5_1
1918; MIPS64EL-NEXT:    nop
1919; MIPS64EL-NEXT:  # %bb.2: # %entry
1920; MIPS64EL-NEXT:    .insn
1921; MIPS64EL-NEXT:  # %bb.3: # %entry
1922; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1923; MIPS64EL-NEXT:  # %bb.4: # %entry
1924; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1925; MIPS64EL-NEXT:    sync
1926; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
1927; MIPS64EL-NEXT:    jr $ra
1928; MIPS64EL-NEXT:    nop
1929;
1930; MIPS64ELR6-LABEL: test_min_16:
1931; MIPS64ELR6:       # %bb.0: # %entry
1932; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
1933; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
1934; MIPS64ELR6-NEXT:    move $1, $5
1935; MIPS64ELR6-NEXT:    sync
1936; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
1937; MIPS64ELR6-NEXT:    and $6, $4, $2
1938; MIPS64ELR6-NEXT:    andi $2, $4, 3
1939; MIPS64ELR6-NEXT:    sll $10, $2, 3
1940; MIPS64ELR6-NEXT:    ori $2, $zero, 65535
1941; MIPS64ELR6-NEXT:    sllv $8, $2, $10
1942; MIPS64ELR6-NEXT:    nor $9, $zero, $8
1943; MIPS64ELR6-NEXT:    sllv $7, $1, $10
1944; MIPS64ELR6-NEXT:  .LBB5_1: # %entry
1945; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
1946; MIPS64ELR6-NEXT:    ll $2, 0($6)
1947; MIPS64ELR6-NEXT:    srav $4, $2, $10
1948; MIPS64ELR6-NEXT:    seh $4, $4
1949; MIPS64ELR6-NEXT:    or $1, $zero, $4
1950; MIPS64ELR6-NEXT:    sllv $4, $4, $10
1951; MIPS64ELR6-NEXT:    slt $5, $4, $7
1952; MIPS64ELR6-NEXT:    selnez $3, $4, $5
1953; MIPS64ELR6-NEXT:    seleqz $5, $7, $5
1954; MIPS64ELR6-NEXT:    or $3, $3, $5
1955; MIPS64ELR6-NEXT:    and $3, $3, $8
1956; MIPS64ELR6-NEXT:    and $4, $2, $9
1957; MIPS64ELR6-NEXT:    or $4, $4, $3
1958; MIPS64ELR6-NEXT:    sc $4, 0($6)
1959; MIPS64ELR6-NEXT:    beqzc $4, .LBB5_1
1960; MIPS64ELR6-NEXT:    nop
1961; MIPS64ELR6-NEXT:  # %bb.2: # %entry
1962; MIPS64ELR6-NEXT:    .insn
1963; MIPS64ELR6-NEXT:  # %bb.3: # %entry
1964; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
1965; MIPS64ELR6-NEXT:  # %bb.4: # %entry
1966; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
1967; MIPS64ELR6-NEXT:    sync
1968; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
1969; MIPS64ELR6-NEXT:    jrc $ra
1970entry:
1971  %0 = atomicrmw min ptr %ptr, i16 %val seq_cst
1972  ret i16 %0
1973}
1974
1975define i16 @test_umax_16(ptr nocapture %ptr, i16 signext %val) {
1976; MIPS-LABEL: test_umax_16:
1977; MIPS:       # %bb.0: # %entry
1978; MIPS-NEXT:    addiu $sp, $sp, -8
1979; MIPS-NEXT:    .cfi_def_cfa_offset 8
1980; MIPS-NEXT:    # kill: def $at killed $a1
1981; MIPS-NEXT:    sync
1982; MIPS-NEXT:    addiu $1, $zero, -4
1983; MIPS-NEXT:    and $6, $4, $1
1984; MIPS-NEXT:    andi $1, $4, 3
1985; MIPS-NEXT:    xori $1, $1, 2
1986; MIPS-NEXT:    sll $10, $1, 3
1987; MIPS-NEXT:    ori $1, $zero, 65535
1988; MIPS-NEXT:    sllv $8, $1, $10
1989; MIPS-NEXT:    nor $9, $zero, $8
1990; MIPS-NEXT:    sllv $7, $5, $10
1991; MIPS-NEXT:  $BB6_1: # %entry
1992; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
1993; MIPS-NEXT:    ll $2, 0($6)
1994; MIPS-NEXT:    srav $4, $2, $10
1995; MIPS-NEXT:    andi $4, $4, 65535
1996; MIPS-NEXT:    or $1, $zero, $4
1997; MIPS-NEXT:    sllv $4, $4, $10
1998; MIPS-NEXT:    sltu $5, $4, $7
1999; MIPS-NEXT:    move $3, $4
2000; MIPS-NEXT:    movn $3, $7, $5
2001; MIPS-NEXT:    and $3, $3, $8
2002; MIPS-NEXT:    and $4, $2, $9
2003; MIPS-NEXT:    or $4, $4, $3
2004; MIPS-NEXT:    sc $4, 0($6)
2005; MIPS-NEXT:    beqz $4, $BB6_1
2006; MIPS-NEXT:    nop
2007; MIPS-NEXT:  # %bb.2: # %entry
2008; MIPS-NEXT:    .insn
2009; MIPS-NEXT:  # %bb.3: # %entry
2010; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2011; MIPS-NEXT:  # %bb.4: # %entry
2012; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2013; MIPS-NEXT:    sync
2014; MIPS-NEXT:    addiu $sp, $sp, 8
2015; MIPS-NEXT:    jr $ra
2016; MIPS-NEXT:    nop
2017;
2018; MIPSR6-LABEL: test_umax_16:
2019; MIPSR6:       # %bb.0: # %entry
2020; MIPSR6-NEXT:    addiu $sp, $sp, -8
2021; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
2022; MIPSR6-NEXT:    # kill: def $at killed $a1
2023; MIPSR6-NEXT:    sync
2024; MIPSR6-NEXT:    addiu $1, $zero, -4
2025; MIPSR6-NEXT:    and $6, $4, $1
2026; MIPSR6-NEXT:    andi $1, $4, 3
2027; MIPSR6-NEXT:    xori $1, $1, 2
2028; MIPSR6-NEXT:    sll $10, $1, 3
2029; MIPSR6-NEXT:    ori $1, $zero, 65535
2030; MIPSR6-NEXT:    sllv $8, $1, $10
2031; MIPSR6-NEXT:    nor $9, $zero, $8
2032; MIPSR6-NEXT:    sllv $7, $5, $10
2033; MIPSR6-NEXT:  $BB6_1: # %entry
2034; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
2035; MIPSR6-NEXT:    ll $2, 0($6)
2036; MIPSR6-NEXT:    srav $4, $2, $10
2037; MIPSR6-NEXT:    andi $4, $4, 65535
2038; MIPSR6-NEXT:    or $1, $zero, $4
2039; MIPSR6-NEXT:    sllv $4, $4, $10
2040; MIPSR6-NEXT:    sltu $5, $4, $7
2041; MIPSR6-NEXT:    seleqz $3, $4, $5
2042; MIPSR6-NEXT:    selnez $5, $7, $5
2043; MIPSR6-NEXT:    or $3, $3, $5
2044; MIPSR6-NEXT:    and $3, $3, $8
2045; MIPSR6-NEXT:    and $4, $2, $9
2046; MIPSR6-NEXT:    or $4, $4, $3
2047; MIPSR6-NEXT:    sc $4, 0($6)
2048; MIPSR6-NEXT:    beqzc $4, $BB6_1
2049; MIPSR6-NEXT:    nop
2050; MIPSR6-NEXT:  # %bb.2: # %entry
2051; MIPSR6-NEXT:    .insn
2052; MIPSR6-NEXT:  # %bb.3: # %entry
2053; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2054; MIPSR6-NEXT:  # %bb.4: # %entry
2055; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2056; MIPSR6-NEXT:    sync
2057; MIPSR6-NEXT:    addiu $sp, $sp, 8
2058; MIPSR6-NEXT:    jrc $ra
2059;
2060; MM-LABEL: test_umax_16:
2061; MM:       # %bb.0: # %entry
2062; MM-NEXT:    addiu $sp, $sp, -8
2063; MM-NEXT:    .cfi_def_cfa_offset 8
2064; MM-NEXT:    # kill: def $at killed $a1
2065; MM-NEXT:    sync
2066; MM-NEXT:    addiu $1, $zero, -4
2067; MM-NEXT:    and $6, $4, $1
2068; MM-NEXT:    andi $1, $4, 3
2069; MM-NEXT:    xori $1, $1, 2
2070; MM-NEXT:    sll $10, $1, 3
2071; MM-NEXT:    ori $1, $zero, 65535
2072; MM-NEXT:    sllv $8, $1, $10
2073; MM-NEXT:    nor $9, $zero, $8
2074; MM-NEXT:    sllv $7, $5, $10
2075; MM-NEXT:  $BB6_1: # %entry
2076; MM-NEXT:    # =>This Inner Loop Header: Depth=1
2077; MM-NEXT:    ll $2, 0($6)
2078; MM-NEXT:    srav $4, $2, $10
2079; MM-NEXT:    andi $4, $4, 65535
2080; MM-NEXT:    or $1, $zero, $4
2081; MM-NEXT:    sllv $4, $4, $10
2082; MM-NEXT:    sltu $5, $4, $7
2083; MM-NEXT:    or $3, $4, $zero
2084; MM-NEXT:    movn $3, $7, $5
2085; MM-NEXT:    and $3, $3, $8
2086; MM-NEXT:    and $4, $2, $9
2087; MM-NEXT:    or $4, $4, $3
2088; MM-NEXT:    sc $4, 0($6)
2089; MM-NEXT:    beqzc $4, $BB6_1
2090; MM-NEXT:  # %bb.2: # %entry
2091; MM-NEXT:    .insn
2092; MM-NEXT:  # %bb.3: # %entry
2093; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2094; MM-NEXT:  # %bb.4: # %entry
2095; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2096; MM-NEXT:    sync
2097; MM-NEXT:    addiusp 8
2098; MM-NEXT:    jrc $ra
2099;
2100; MMR6-LABEL: test_umax_16:
2101; MMR6:       # %bb.0: # %entry
2102; MMR6-NEXT:    addiu $sp, $sp, -8
2103; MMR6-NEXT:    .cfi_def_cfa_offset 8
2104; MMR6-NEXT:    # kill: def $at killed $a1
2105; MMR6-NEXT:    sync
2106; MMR6-NEXT:    addiu $1, $zero, -4
2107; MMR6-NEXT:    and $6, $4, $1
2108; MMR6-NEXT:    andi $1, $4, 3
2109; MMR6-NEXT:    xori $1, $1, 2
2110; MMR6-NEXT:    sll $10, $1, 3
2111; MMR6-NEXT:    ori $1, $zero, 65535
2112; MMR6-NEXT:    sllv $8, $1, $10
2113; MMR6-NEXT:    nor $9, $zero, $8
2114; MMR6-NEXT:    sllv $7, $5, $10
2115; MMR6-NEXT:  $BB6_1: # %entry
2116; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
2117; MMR6-NEXT:    ll $2, 0($6)
2118; MMR6-NEXT:    srav $4, $2, $10
2119; MMR6-NEXT:    andi $4, $4, 65535
2120; MMR6-NEXT:    or $1, $zero, $4
2121; MMR6-NEXT:    sllv $4, $4, $10
2122; MMR6-NEXT:    sltu $5, $4, $7
2123; MMR6-NEXT:    seleqz $3, $4, $5
2124; MMR6-NEXT:    selnez $5, $7, $5
2125; MMR6-NEXT:    or $3, $3, $5
2126; MMR6-NEXT:    and $3, $3, $8
2127; MMR6-NEXT:    and $4, $2, $9
2128; MMR6-NEXT:    or $4, $4, $3
2129; MMR6-NEXT:    sc $4, 0($6)
2130; MMR6-NEXT:    beqc $4, $zero, $BB6_1
2131; MMR6-NEXT:  # %bb.2: # %entry
2132; MMR6-NEXT:    .insn
2133; MMR6-NEXT:  # %bb.3: # %entry
2134; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2135; MMR6-NEXT:  # %bb.4: # %entry
2136; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2137; MMR6-NEXT:    sync
2138; MMR6-NEXT:    addiu $sp, $sp, 8
2139; MMR6-NEXT:    jrc $ra
2140;
2141; MIPS32-LABEL: test_umax_16:
2142; MIPS32:       # %bb.0: # %entry
2143; MIPS32-NEXT:    addiu $sp, $sp, -8
2144; MIPS32-NEXT:    .cfi_def_cfa_offset 8
2145; MIPS32-NEXT:    # kill: def $at killed $a1
2146; MIPS32-NEXT:    sync
2147; MIPS32-NEXT:    addiu $1, $zero, -4
2148; MIPS32-NEXT:    and $6, $4, $1
2149; MIPS32-NEXT:    andi $1, $4, 3
2150; MIPS32-NEXT:    sll $10, $1, 3
2151; MIPS32-NEXT:    ori $1, $zero, 65535
2152; MIPS32-NEXT:    sllv $8, $1, $10
2153; MIPS32-NEXT:    nor $9, $zero, $8
2154; MIPS32-NEXT:    sllv $7, $5, $10
2155; MIPS32-NEXT:  $BB6_1: # %entry
2156; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
2157; MIPS32-NEXT:    ll $2, 0($6)
2158; MIPS32-NEXT:    srav $4, $2, $10
2159; MIPS32-NEXT:    andi $4, $4, 65535
2160; MIPS32-NEXT:    or $1, $zero, $4
2161; MIPS32-NEXT:    sllv $4, $4, $10
2162; MIPS32-NEXT:    sltu $5, $4, $7
2163; MIPS32-NEXT:    move $3, $4
2164; MIPS32-NEXT:    movn $3, $7, $5
2165; MIPS32-NEXT:    and $3, $3, $8
2166; MIPS32-NEXT:    and $4, $2, $9
2167; MIPS32-NEXT:    or $4, $4, $3
2168; MIPS32-NEXT:    sc $4, 0($6)
2169; MIPS32-NEXT:    beqz $4, $BB6_1
2170; MIPS32-NEXT:    nop
2171; MIPS32-NEXT:  # %bb.2: # %entry
2172; MIPS32-NEXT:    .insn
2173; MIPS32-NEXT:  # %bb.3: # %entry
2174; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2175; MIPS32-NEXT:  # %bb.4: # %entry
2176; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2177; MIPS32-NEXT:    sync
2178; MIPS32-NEXT:    addiu $sp, $sp, 8
2179; MIPS32-NEXT:    jr $ra
2180; MIPS32-NEXT:    nop
2181;
2182; MIPSEL-LABEL: test_umax_16:
2183; MIPSEL:       # %bb.0: # %entry
2184; MIPSEL-NEXT:    addiu $sp, $sp, -8
2185; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
2186; MIPSEL-NEXT:    # kill: def $at killed $a1
2187; MIPSEL-NEXT:    sync
2188; MIPSEL-NEXT:    addiu $1, $zero, -4
2189; MIPSEL-NEXT:    and $6, $4, $1
2190; MIPSEL-NEXT:    andi $1, $4, 3
2191; MIPSEL-NEXT:    sll $10, $1, 3
2192; MIPSEL-NEXT:    ori $1, $zero, 65535
2193; MIPSEL-NEXT:    sllv $8, $1, $10
2194; MIPSEL-NEXT:    nor $9, $zero, $8
2195; MIPSEL-NEXT:    sllv $7, $5, $10
2196; MIPSEL-NEXT:  $BB6_1: # %entry
2197; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
2198; MIPSEL-NEXT:    ll $2, 0($6)
2199; MIPSEL-NEXT:    srav $4, $2, $10
2200; MIPSEL-NEXT:    andi $4, $4, 65535
2201; MIPSEL-NEXT:    or $1, $zero, $4
2202; MIPSEL-NEXT:    sllv $4, $4, $10
2203; MIPSEL-NEXT:    sltu $5, $4, $7
2204; MIPSEL-NEXT:    move $3, $4
2205; MIPSEL-NEXT:    movn $3, $7, $5
2206; MIPSEL-NEXT:    and $3, $3, $8
2207; MIPSEL-NEXT:    and $4, $2, $9
2208; MIPSEL-NEXT:    or $4, $4, $3
2209; MIPSEL-NEXT:    sc $4, 0($6)
2210; MIPSEL-NEXT:    beqz $4, $BB6_1
2211; MIPSEL-NEXT:    nop
2212; MIPSEL-NEXT:  # %bb.2: # %entry
2213; MIPSEL-NEXT:    .insn
2214; MIPSEL-NEXT:  # %bb.3: # %entry
2215; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2216; MIPSEL-NEXT:  # %bb.4: # %entry
2217; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2218; MIPSEL-NEXT:    sync
2219; MIPSEL-NEXT:    addiu $sp, $sp, 8
2220; MIPSEL-NEXT:    jr $ra
2221; MIPSEL-NEXT:    nop
2222;
2223; MIPSELR6-LABEL: test_umax_16:
2224; MIPSELR6:       # %bb.0: # %entry
2225; MIPSELR6-NEXT:    addiu $sp, $sp, -8
2226; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
2227; MIPSELR6-NEXT:    # kill: def $at killed $a1
2228; MIPSELR6-NEXT:    sync
2229; MIPSELR6-NEXT:    addiu $1, $zero, -4
2230; MIPSELR6-NEXT:    and $6, $4, $1
2231; MIPSELR6-NEXT:    andi $1, $4, 3
2232; MIPSELR6-NEXT:    sll $10, $1, 3
2233; MIPSELR6-NEXT:    ori $1, $zero, 65535
2234; MIPSELR6-NEXT:    sllv $8, $1, $10
2235; MIPSELR6-NEXT:    nor $9, $zero, $8
2236; MIPSELR6-NEXT:    sllv $7, $5, $10
2237; MIPSELR6-NEXT:  $BB6_1: # %entry
2238; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
2239; MIPSELR6-NEXT:    ll $2, 0($6)
2240; MIPSELR6-NEXT:    srav $4, $2, $10
2241; MIPSELR6-NEXT:    andi $4, $4, 65535
2242; MIPSELR6-NEXT:    or $1, $zero, $4
2243; MIPSELR6-NEXT:    sllv $4, $4, $10
2244; MIPSELR6-NEXT:    sltu $5, $4, $7
2245; MIPSELR6-NEXT:    seleqz $3, $4, $5
2246; MIPSELR6-NEXT:    selnez $5, $7, $5
2247; MIPSELR6-NEXT:    or $3, $3, $5
2248; MIPSELR6-NEXT:    and $3, $3, $8
2249; MIPSELR6-NEXT:    and $4, $2, $9
2250; MIPSELR6-NEXT:    or $4, $4, $3
2251; MIPSELR6-NEXT:    sc $4, 0($6)
2252; MIPSELR6-NEXT:    beqzc $4, $BB6_1
2253; MIPSELR6-NEXT:    nop
2254; MIPSELR6-NEXT:  # %bb.2: # %entry
2255; MIPSELR6-NEXT:    .insn
2256; MIPSELR6-NEXT:  # %bb.3: # %entry
2257; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2258; MIPSELR6-NEXT:  # %bb.4: # %entry
2259; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2260; MIPSELR6-NEXT:    sync
2261; MIPSELR6-NEXT:    addiu $sp, $sp, 8
2262; MIPSELR6-NEXT:    jrc $ra
2263;
2264; MMEL-LABEL: test_umax_16:
2265; MMEL:       # %bb.0: # %entry
2266; MMEL-NEXT:    addiu $sp, $sp, -8
2267; MMEL-NEXT:    .cfi_def_cfa_offset 8
2268; MMEL-NEXT:    # kill: def $at killed $a1
2269; MMEL-NEXT:    sync
2270; MMEL-NEXT:    addiu $1, $zero, -4
2271; MMEL-NEXT:    and $6, $4, $1
2272; MMEL-NEXT:    andi $1, $4, 3
2273; MMEL-NEXT:    sll $10, $1, 3
2274; MMEL-NEXT:    ori $1, $zero, 65535
2275; MMEL-NEXT:    sllv $8, $1, $10
2276; MMEL-NEXT:    nor $9, $zero, $8
2277; MMEL-NEXT:    sllv $7, $5, $10
2278; MMEL-NEXT:  $BB6_1: # %entry
2279; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
2280; MMEL-NEXT:    ll $2, 0($6)
2281; MMEL-NEXT:    srav $4, $2, $10
2282; MMEL-NEXT:    andi $4, $4, 65535
2283; MMEL-NEXT:    or $1, $zero, $4
2284; MMEL-NEXT:    sllv $4, $4, $10
2285; MMEL-NEXT:    sltu $5, $4, $7
2286; MMEL-NEXT:    or $3, $4, $zero
2287; MMEL-NEXT:    movn $3, $7, $5
2288; MMEL-NEXT:    and $3, $3, $8
2289; MMEL-NEXT:    and $4, $2, $9
2290; MMEL-NEXT:    or $4, $4, $3
2291; MMEL-NEXT:    sc $4, 0($6)
2292; MMEL-NEXT:    beqzc $4, $BB6_1
2293; MMEL-NEXT:  # %bb.2: # %entry
2294; MMEL-NEXT:    .insn
2295; MMEL-NEXT:  # %bb.3: # %entry
2296; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2297; MMEL-NEXT:  # %bb.4: # %entry
2298; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2299; MMEL-NEXT:    sync
2300; MMEL-NEXT:    addiusp 8
2301; MMEL-NEXT:    jrc $ra
2302;
2303; MMELR6-LABEL: test_umax_16:
2304; MMELR6:       # %bb.0: # %entry
2305; MMELR6-NEXT:    addiu $sp, $sp, -8
2306; MMELR6-NEXT:    .cfi_def_cfa_offset 8
2307; MMELR6-NEXT:    # kill: def $at killed $a1
2308; MMELR6-NEXT:    sync
2309; MMELR6-NEXT:    addiu $1, $zero, -4
2310; MMELR6-NEXT:    and $6, $4, $1
2311; MMELR6-NEXT:    andi $1, $4, 3
2312; MMELR6-NEXT:    sll $10, $1, 3
2313; MMELR6-NEXT:    ori $1, $zero, 65535
2314; MMELR6-NEXT:    sllv $8, $1, $10
2315; MMELR6-NEXT:    nor $9, $zero, $8
2316; MMELR6-NEXT:    sllv $7, $5, $10
2317; MMELR6-NEXT:  $BB6_1: # %entry
2318; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
2319; MMELR6-NEXT:    ll $2, 0($6)
2320; MMELR6-NEXT:    srav $4, $2, $10
2321; MMELR6-NEXT:    andi $4, $4, 65535
2322; MMELR6-NEXT:    or $1, $zero, $4
2323; MMELR6-NEXT:    sllv $4, $4, $10
2324; MMELR6-NEXT:    sltu $5, $4, $7
2325; MMELR6-NEXT:    seleqz $3, $4, $5
2326; MMELR6-NEXT:    selnez $5, $7, $5
2327; MMELR6-NEXT:    or $3, $3, $5
2328; MMELR6-NEXT:    and $3, $3, $8
2329; MMELR6-NEXT:    and $4, $2, $9
2330; MMELR6-NEXT:    or $4, $4, $3
2331; MMELR6-NEXT:    sc $4, 0($6)
2332; MMELR6-NEXT:    beqc $4, $zero, $BB6_1
2333; MMELR6-NEXT:  # %bb.2: # %entry
2334; MMELR6-NEXT:    .insn
2335; MMELR6-NEXT:  # %bb.3: # %entry
2336; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2337; MMELR6-NEXT:  # %bb.4: # %entry
2338; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2339; MMELR6-NEXT:    sync
2340; MMELR6-NEXT:    addiu $sp, $sp, 8
2341; MMELR6-NEXT:    jrc $ra
2342;
2343; MIPS64-LABEL: test_umax_16:
2344; MIPS64:       # %bb.0: # %entry
2345; MIPS64-NEXT:    daddiu $sp, $sp, -16
2346; MIPS64-NEXT:    .cfi_def_cfa_offset 16
2347; MIPS64-NEXT:    move $1, $5
2348; MIPS64-NEXT:    sync
2349; MIPS64-NEXT:    daddiu $2, $zero, -4
2350; MIPS64-NEXT:    and $6, $4, $2
2351; MIPS64-NEXT:    andi $2, $4, 3
2352; MIPS64-NEXT:    xori $2, $2, 2
2353; MIPS64-NEXT:    sll $10, $2, 3
2354; MIPS64-NEXT:    ori $2, $zero, 65535
2355; MIPS64-NEXT:    sllv $8, $2, $10
2356; MIPS64-NEXT:    nor $9, $zero, $8
2357; MIPS64-NEXT:    sllv $7, $1, $10
2358; MIPS64-NEXT:  .LBB6_1: # %entry
2359; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
2360; MIPS64-NEXT:    ll $2, 0($6)
2361; MIPS64-NEXT:    srav $4, $2, $10
2362; MIPS64-NEXT:    andi $4, $4, 65535
2363; MIPS64-NEXT:    or $1, $zero, $4
2364; MIPS64-NEXT:    sllv $4, $4, $10
2365; MIPS64-NEXT:    sltu $5, $4, $7
2366; MIPS64-NEXT:    move $3, $4
2367; MIPS64-NEXT:    movn $3, $7, $5
2368; MIPS64-NEXT:    and $3, $3, $8
2369; MIPS64-NEXT:    and $4, $2, $9
2370; MIPS64-NEXT:    or $4, $4, $3
2371; MIPS64-NEXT:    sc $4, 0($6)
2372; MIPS64-NEXT:    beqz $4, .LBB6_1
2373; MIPS64-NEXT:    nop
2374; MIPS64-NEXT:  # %bb.2: # %entry
2375; MIPS64-NEXT:    .insn
2376; MIPS64-NEXT:  # %bb.3: # %entry
2377; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2378; MIPS64-NEXT:  # %bb.4: # %entry
2379; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
2380; MIPS64-NEXT:    sync
2381; MIPS64-NEXT:    daddiu $sp, $sp, 16
2382; MIPS64-NEXT:    jr $ra
2383; MIPS64-NEXT:    nop
2384;
2385; MIPS64R6-LABEL: test_umax_16:
2386; MIPS64R6:       # %bb.0: # %entry
2387; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
2388; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
2389; MIPS64R6-NEXT:    move $1, $5
2390; MIPS64R6-NEXT:    sync
2391; MIPS64R6-NEXT:    daddiu $2, $zero, -4
2392; MIPS64R6-NEXT:    and $6, $4, $2
2393; MIPS64R6-NEXT:    andi $2, $4, 3
2394; MIPS64R6-NEXT:    xori $2, $2, 2
2395; MIPS64R6-NEXT:    sll $10, $2, 3
2396; MIPS64R6-NEXT:    ori $2, $zero, 65535
2397; MIPS64R6-NEXT:    sllv $8, $2, $10
2398; MIPS64R6-NEXT:    nor $9, $zero, $8
2399; MIPS64R6-NEXT:    sllv $7, $1, $10
2400; MIPS64R6-NEXT:  .LBB6_1: # %entry
2401; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
2402; MIPS64R6-NEXT:    ll $2, 0($6)
2403; MIPS64R6-NEXT:    srav $4, $2, $10
2404; MIPS64R6-NEXT:    andi $4, $4, 65535
2405; MIPS64R6-NEXT:    or $1, $zero, $4
2406; MIPS64R6-NEXT:    sllv $4, $4, $10
2407; MIPS64R6-NEXT:    sltu $5, $4, $7
2408; MIPS64R6-NEXT:    seleqz $3, $4, $5
2409; MIPS64R6-NEXT:    selnez $5, $7, $5
2410; MIPS64R6-NEXT:    or $3, $3, $5
2411; MIPS64R6-NEXT:    and $3, $3, $8
2412; MIPS64R6-NEXT:    and $4, $2, $9
2413; MIPS64R6-NEXT:    or $4, $4, $3
2414; MIPS64R6-NEXT:    sc $4, 0($6)
2415; MIPS64R6-NEXT:    beqzc $4, .LBB6_1
2416; MIPS64R6-NEXT:    nop
2417; MIPS64R6-NEXT:  # %bb.2: # %entry
2418; MIPS64R6-NEXT:    .insn
2419; MIPS64R6-NEXT:  # %bb.3: # %entry
2420; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2421; MIPS64R6-NEXT:  # %bb.4: # %entry
2422; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
2423; MIPS64R6-NEXT:    sync
2424; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
2425; MIPS64R6-NEXT:    jrc $ra
2426;
2427; MIPS64EL-LABEL: test_umax_16:
2428; MIPS64EL:       # %bb.0: # %entry
2429; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
2430; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
2431; MIPS64EL-NEXT:    move $1, $5
2432; MIPS64EL-NEXT:    sync
2433; MIPS64EL-NEXT:    daddiu $2, $zero, -4
2434; MIPS64EL-NEXT:    and $6, $4, $2
2435; MIPS64EL-NEXT:    andi $2, $4, 3
2436; MIPS64EL-NEXT:    sll $10, $2, 3
2437; MIPS64EL-NEXT:    ori $2, $zero, 65535
2438; MIPS64EL-NEXT:    sllv $8, $2, $10
2439; MIPS64EL-NEXT:    nor $9, $zero, $8
2440; MIPS64EL-NEXT:    sllv $7, $1, $10
2441; MIPS64EL-NEXT:  .LBB6_1: # %entry
2442; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
2443; MIPS64EL-NEXT:    ll $2, 0($6)
2444; MIPS64EL-NEXT:    srav $4, $2, $10
2445; MIPS64EL-NEXT:    andi $4, $4, 65535
2446; MIPS64EL-NEXT:    or $1, $zero, $4
2447; MIPS64EL-NEXT:    sllv $4, $4, $10
2448; MIPS64EL-NEXT:    sltu $5, $4, $7
2449; MIPS64EL-NEXT:    move $3, $4
2450; MIPS64EL-NEXT:    movn $3, $7, $5
2451; MIPS64EL-NEXT:    and $3, $3, $8
2452; MIPS64EL-NEXT:    and $4, $2, $9
2453; MIPS64EL-NEXT:    or $4, $4, $3
2454; MIPS64EL-NEXT:    sc $4, 0($6)
2455; MIPS64EL-NEXT:    beqz $4, .LBB6_1
2456; MIPS64EL-NEXT:    nop
2457; MIPS64EL-NEXT:  # %bb.2: # %entry
2458; MIPS64EL-NEXT:    .insn
2459; MIPS64EL-NEXT:  # %bb.3: # %entry
2460; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2461; MIPS64EL-NEXT:  # %bb.4: # %entry
2462; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
2463; MIPS64EL-NEXT:    sync
2464; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
2465; MIPS64EL-NEXT:    jr $ra
2466; MIPS64EL-NEXT:    nop
2467;
2468; MIPS64ELR6-LABEL: test_umax_16:
2469; MIPS64ELR6:       # %bb.0: # %entry
2470; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
2471; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
2472; MIPS64ELR6-NEXT:    move $1, $5
2473; MIPS64ELR6-NEXT:    sync
2474; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
2475; MIPS64ELR6-NEXT:    and $6, $4, $2
2476; MIPS64ELR6-NEXT:    andi $2, $4, 3
2477; MIPS64ELR6-NEXT:    sll $10, $2, 3
2478; MIPS64ELR6-NEXT:    ori $2, $zero, 65535
2479; MIPS64ELR6-NEXT:    sllv $8, $2, $10
2480; MIPS64ELR6-NEXT:    nor $9, $zero, $8
2481; MIPS64ELR6-NEXT:    sllv $7, $1, $10
2482; MIPS64ELR6-NEXT:  .LBB6_1: # %entry
2483; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
2484; MIPS64ELR6-NEXT:    ll $2, 0($6)
2485; MIPS64ELR6-NEXT:    srav $4, $2, $10
2486; MIPS64ELR6-NEXT:    andi $4, $4, 65535
2487; MIPS64ELR6-NEXT:    or $1, $zero, $4
2488; MIPS64ELR6-NEXT:    sllv $4, $4, $10
2489; MIPS64ELR6-NEXT:    sltu $5, $4, $7
2490; MIPS64ELR6-NEXT:    seleqz $3, $4, $5
2491; MIPS64ELR6-NEXT:    selnez $5, $7, $5
2492; MIPS64ELR6-NEXT:    or $3, $3, $5
2493; MIPS64ELR6-NEXT:    and $3, $3, $8
2494; MIPS64ELR6-NEXT:    and $4, $2, $9
2495; MIPS64ELR6-NEXT:    or $4, $4, $3
2496; MIPS64ELR6-NEXT:    sc $4, 0($6)
2497; MIPS64ELR6-NEXT:    beqzc $4, .LBB6_1
2498; MIPS64ELR6-NEXT:    nop
2499; MIPS64ELR6-NEXT:  # %bb.2: # %entry
2500; MIPS64ELR6-NEXT:    .insn
2501; MIPS64ELR6-NEXT:  # %bb.3: # %entry
2502; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2503; MIPS64ELR6-NEXT:  # %bb.4: # %entry
2504; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
2505; MIPS64ELR6-NEXT:    sync
2506; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
2507; MIPS64ELR6-NEXT:    jrc $ra
2508entry:
2509  %0 = atomicrmw umax ptr %ptr, i16 %val seq_cst
2510  ret i16 %0
2511}
2512
2513define i16 @test_umin_16(ptr nocapture %ptr, i16 signext %val) {
2514; MIPS-LABEL: test_umin_16:
2515; MIPS:       # %bb.0: # %entry
2516; MIPS-NEXT:    addiu $sp, $sp, -8
2517; MIPS-NEXT:    .cfi_def_cfa_offset 8
2518; MIPS-NEXT:    # kill: def $at killed $a1
2519; MIPS-NEXT:    sync
2520; MIPS-NEXT:    addiu $1, $zero, -4
2521; MIPS-NEXT:    and $6, $4, $1
2522; MIPS-NEXT:    andi $1, $4, 3
2523; MIPS-NEXT:    xori $1, $1, 2
2524; MIPS-NEXT:    sll $10, $1, 3
2525; MIPS-NEXT:    ori $1, $zero, 65535
2526; MIPS-NEXT:    sllv $8, $1, $10
2527; MIPS-NEXT:    nor $9, $zero, $8
2528; MIPS-NEXT:    sllv $7, $5, $10
2529; MIPS-NEXT:  $BB7_1: # %entry
2530; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
2531; MIPS-NEXT:    ll $2, 0($6)
2532; MIPS-NEXT:    srav $4, $2, $10
2533; MIPS-NEXT:    andi $4, $4, 65535
2534; MIPS-NEXT:    or $1, $zero, $4
2535; MIPS-NEXT:    sllv $4, $4, $10
2536; MIPS-NEXT:    sltu $5, $4, $7
2537; MIPS-NEXT:    move $3, $4
2538; MIPS-NEXT:    movz $3, $7, $5
2539; MIPS-NEXT:    and $3, $3, $8
2540; MIPS-NEXT:    and $4, $2, $9
2541; MIPS-NEXT:    or $4, $4, $3
2542; MIPS-NEXT:    sc $4, 0($6)
2543; MIPS-NEXT:    beqz $4, $BB7_1
2544; MIPS-NEXT:    nop
2545; MIPS-NEXT:  # %bb.2: # %entry
2546; MIPS-NEXT:    .insn
2547; MIPS-NEXT:  # %bb.3: # %entry
2548; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2549; MIPS-NEXT:  # %bb.4: # %entry
2550; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2551; MIPS-NEXT:    sync
2552; MIPS-NEXT:    addiu $sp, $sp, 8
2553; MIPS-NEXT:    jr $ra
2554; MIPS-NEXT:    nop
2555;
2556; MIPSR6-LABEL: test_umin_16:
2557; MIPSR6:       # %bb.0: # %entry
2558; MIPSR6-NEXT:    addiu $sp, $sp, -8
2559; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
2560; MIPSR6-NEXT:    # kill: def $at killed $a1
2561; MIPSR6-NEXT:    sync
2562; MIPSR6-NEXT:    addiu $1, $zero, -4
2563; MIPSR6-NEXT:    and $6, $4, $1
2564; MIPSR6-NEXT:    andi $1, $4, 3
2565; MIPSR6-NEXT:    xori $1, $1, 2
2566; MIPSR6-NEXT:    sll $10, $1, 3
2567; MIPSR6-NEXT:    ori $1, $zero, 65535
2568; MIPSR6-NEXT:    sllv $8, $1, $10
2569; MIPSR6-NEXT:    nor $9, $zero, $8
2570; MIPSR6-NEXT:    sllv $7, $5, $10
2571; MIPSR6-NEXT:  $BB7_1: # %entry
2572; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
2573; MIPSR6-NEXT:    ll $2, 0($6)
2574; MIPSR6-NEXT:    srav $4, $2, $10
2575; MIPSR6-NEXT:    andi $4, $4, 65535
2576; MIPSR6-NEXT:    or $1, $zero, $4
2577; MIPSR6-NEXT:    sllv $4, $4, $10
2578; MIPSR6-NEXT:    sltu $5, $4, $7
2579; MIPSR6-NEXT:    selnez $3, $4, $5
2580; MIPSR6-NEXT:    seleqz $5, $7, $5
2581; MIPSR6-NEXT:    or $3, $3, $5
2582; MIPSR6-NEXT:    and $3, $3, $8
2583; MIPSR6-NEXT:    and $4, $2, $9
2584; MIPSR6-NEXT:    or $4, $4, $3
2585; MIPSR6-NEXT:    sc $4, 0($6)
2586; MIPSR6-NEXT:    beqzc $4, $BB7_1
2587; MIPSR6-NEXT:    nop
2588; MIPSR6-NEXT:  # %bb.2: # %entry
2589; MIPSR6-NEXT:    .insn
2590; MIPSR6-NEXT:  # %bb.3: # %entry
2591; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2592; MIPSR6-NEXT:  # %bb.4: # %entry
2593; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2594; MIPSR6-NEXT:    sync
2595; MIPSR6-NEXT:    addiu $sp, $sp, 8
2596; MIPSR6-NEXT:    jrc $ra
2597;
2598; MM-LABEL: test_umin_16:
2599; MM:       # %bb.0: # %entry
2600; MM-NEXT:    addiu $sp, $sp, -8
2601; MM-NEXT:    .cfi_def_cfa_offset 8
2602; MM-NEXT:    # kill: def $at killed $a1
2603; MM-NEXT:    sync
2604; MM-NEXT:    addiu $1, $zero, -4
2605; MM-NEXT:    and $6, $4, $1
2606; MM-NEXT:    andi $1, $4, 3
2607; MM-NEXT:    xori $1, $1, 2
2608; MM-NEXT:    sll $10, $1, 3
2609; MM-NEXT:    ori $1, $zero, 65535
2610; MM-NEXT:    sllv $8, $1, $10
2611; MM-NEXT:    nor $9, $zero, $8
2612; MM-NEXT:    sllv $7, $5, $10
2613; MM-NEXT:  $BB7_1: # %entry
2614; MM-NEXT:    # =>This Inner Loop Header: Depth=1
2615; MM-NEXT:    ll $2, 0($6)
2616; MM-NEXT:    srav $4, $2, $10
2617; MM-NEXT:    andi $4, $4, 65535
2618; MM-NEXT:    or $1, $zero, $4
2619; MM-NEXT:    sllv $4, $4, $10
2620; MM-NEXT:    sltu $5, $4, $7
2621; MM-NEXT:    or $3, $4, $zero
2622; MM-NEXT:    movz $3, $7, $5
2623; MM-NEXT:    and $3, $3, $8
2624; MM-NEXT:    and $4, $2, $9
2625; MM-NEXT:    or $4, $4, $3
2626; MM-NEXT:    sc $4, 0($6)
2627; MM-NEXT:    beqzc $4, $BB7_1
2628; MM-NEXT:  # %bb.2: # %entry
2629; MM-NEXT:    .insn
2630; MM-NEXT:  # %bb.3: # %entry
2631; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2632; MM-NEXT:  # %bb.4: # %entry
2633; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2634; MM-NEXT:    sync
2635; MM-NEXT:    addiusp 8
2636; MM-NEXT:    jrc $ra
2637;
2638; MMR6-LABEL: test_umin_16:
2639; MMR6:       # %bb.0: # %entry
2640; MMR6-NEXT:    addiu $sp, $sp, -8
2641; MMR6-NEXT:    .cfi_def_cfa_offset 8
2642; MMR6-NEXT:    # kill: def $at killed $a1
2643; MMR6-NEXT:    sync
2644; MMR6-NEXT:    addiu $1, $zero, -4
2645; MMR6-NEXT:    and $6, $4, $1
2646; MMR6-NEXT:    andi $1, $4, 3
2647; MMR6-NEXT:    xori $1, $1, 2
2648; MMR6-NEXT:    sll $10, $1, 3
2649; MMR6-NEXT:    ori $1, $zero, 65535
2650; MMR6-NEXT:    sllv $8, $1, $10
2651; MMR6-NEXT:    nor $9, $zero, $8
2652; MMR6-NEXT:    sllv $7, $5, $10
2653; MMR6-NEXT:  $BB7_1: # %entry
2654; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
2655; MMR6-NEXT:    ll $2, 0($6)
2656; MMR6-NEXT:    srav $4, $2, $10
2657; MMR6-NEXT:    andi $4, $4, 65535
2658; MMR6-NEXT:    or $1, $zero, $4
2659; MMR6-NEXT:    sllv $4, $4, $10
2660; MMR6-NEXT:    sltu $5, $4, $7
2661; MMR6-NEXT:    selnez $3, $4, $5
2662; MMR6-NEXT:    seleqz $5, $7, $5
2663; MMR6-NEXT:    or $3, $3, $5
2664; MMR6-NEXT:    and $3, $3, $8
2665; MMR6-NEXT:    and $4, $2, $9
2666; MMR6-NEXT:    or $4, $4, $3
2667; MMR6-NEXT:    sc $4, 0($6)
2668; MMR6-NEXT:    beqc $4, $zero, $BB7_1
2669; MMR6-NEXT:  # %bb.2: # %entry
2670; MMR6-NEXT:    .insn
2671; MMR6-NEXT:  # %bb.3: # %entry
2672; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2673; MMR6-NEXT:  # %bb.4: # %entry
2674; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2675; MMR6-NEXT:    sync
2676; MMR6-NEXT:    addiu $sp, $sp, 8
2677; MMR6-NEXT:    jrc $ra
2678;
2679; MIPS32-LABEL: test_umin_16:
2680; MIPS32:       # %bb.0: # %entry
2681; MIPS32-NEXT:    addiu $sp, $sp, -8
2682; MIPS32-NEXT:    .cfi_def_cfa_offset 8
2683; MIPS32-NEXT:    # kill: def $at killed $a1
2684; MIPS32-NEXT:    sync
2685; MIPS32-NEXT:    addiu $1, $zero, -4
2686; MIPS32-NEXT:    and $6, $4, $1
2687; MIPS32-NEXT:    andi $1, $4, 3
2688; MIPS32-NEXT:    sll $10, $1, 3
2689; MIPS32-NEXT:    ori $1, $zero, 65535
2690; MIPS32-NEXT:    sllv $8, $1, $10
2691; MIPS32-NEXT:    nor $9, $zero, $8
2692; MIPS32-NEXT:    sllv $7, $5, $10
2693; MIPS32-NEXT:  $BB7_1: # %entry
2694; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
2695; MIPS32-NEXT:    ll $2, 0($6)
2696; MIPS32-NEXT:    srav $4, $2, $10
2697; MIPS32-NEXT:    andi $4, $4, 65535
2698; MIPS32-NEXT:    or $1, $zero, $4
2699; MIPS32-NEXT:    sllv $4, $4, $10
2700; MIPS32-NEXT:    sltu $5, $4, $7
2701; MIPS32-NEXT:    move $3, $4
2702; MIPS32-NEXT:    movz $3, $7, $5
2703; MIPS32-NEXT:    and $3, $3, $8
2704; MIPS32-NEXT:    and $4, $2, $9
2705; MIPS32-NEXT:    or $4, $4, $3
2706; MIPS32-NEXT:    sc $4, 0($6)
2707; MIPS32-NEXT:    beqz $4, $BB7_1
2708; MIPS32-NEXT:    nop
2709; MIPS32-NEXT:  # %bb.2: # %entry
2710; MIPS32-NEXT:    .insn
2711; MIPS32-NEXT:  # %bb.3: # %entry
2712; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2713; MIPS32-NEXT:  # %bb.4: # %entry
2714; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2715; MIPS32-NEXT:    sync
2716; MIPS32-NEXT:    addiu $sp, $sp, 8
2717; MIPS32-NEXT:    jr $ra
2718; MIPS32-NEXT:    nop
2719;
2720; MIPSEL-LABEL: test_umin_16:
2721; MIPSEL:       # %bb.0: # %entry
2722; MIPSEL-NEXT:    addiu $sp, $sp, -8
2723; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
2724; MIPSEL-NEXT:    # kill: def $at killed $a1
2725; MIPSEL-NEXT:    sync
2726; MIPSEL-NEXT:    addiu $1, $zero, -4
2727; MIPSEL-NEXT:    and $6, $4, $1
2728; MIPSEL-NEXT:    andi $1, $4, 3
2729; MIPSEL-NEXT:    sll $10, $1, 3
2730; MIPSEL-NEXT:    ori $1, $zero, 65535
2731; MIPSEL-NEXT:    sllv $8, $1, $10
2732; MIPSEL-NEXT:    nor $9, $zero, $8
2733; MIPSEL-NEXT:    sllv $7, $5, $10
2734; MIPSEL-NEXT:  $BB7_1: # %entry
2735; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
2736; MIPSEL-NEXT:    ll $2, 0($6)
2737; MIPSEL-NEXT:    srav $4, $2, $10
2738; MIPSEL-NEXT:    andi $4, $4, 65535
2739; MIPSEL-NEXT:    or $1, $zero, $4
2740; MIPSEL-NEXT:    sllv $4, $4, $10
2741; MIPSEL-NEXT:    sltu $5, $4, $7
2742; MIPSEL-NEXT:    move $3, $4
2743; MIPSEL-NEXT:    movz $3, $7, $5
2744; MIPSEL-NEXT:    and $3, $3, $8
2745; MIPSEL-NEXT:    and $4, $2, $9
2746; MIPSEL-NEXT:    or $4, $4, $3
2747; MIPSEL-NEXT:    sc $4, 0($6)
2748; MIPSEL-NEXT:    beqz $4, $BB7_1
2749; MIPSEL-NEXT:    nop
2750; MIPSEL-NEXT:  # %bb.2: # %entry
2751; MIPSEL-NEXT:    .insn
2752; MIPSEL-NEXT:  # %bb.3: # %entry
2753; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2754; MIPSEL-NEXT:  # %bb.4: # %entry
2755; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2756; MIPSEL-NEXT:    sync
2757; MIPSEL-NEXT:    addiu $sp, $sp, 8
2758; MIPSEL-NEXT:    jr $ra
2759; MIPSEL-NEXT:    nop
2760;
2761; MIPSELR6-LABEL: test_umin_16:
2762; MIPSELR6:       # %bb.0: # %entry
2763; MIPSELR6-NEXT:    addiu $sp, $sp, -8
2764; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
2765; MIPSELR6-NEXT:    # kill: def $at killed $a1
2766; MIPSELR6-NEXT:    sync
2767; MIPSELR6-NEXT:    addiu $1, $zero, -4
2768; MIPSELR6-NEXT:    and $6, $4, $1
2769; MIPSELR6-NEXT:    andi $1, $4, 3
2770; MIPSELR6-NEXT:    sll $10, $1, 3
2771; MIPSELR6-NEXT:    ori $1, $zero, 65535
2772; MIPSELR6-NEXT:    sllv $8, $1, $10
2773; MIPSELR6-NEXT:    nor $9, $zero, $8
2774; MIPSELR6-NEXT:    sllv $7, $5, $10
2775; MIPSELR6-NEXT:  $BB7_1: # %entry
2776; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
2777; MIPSELR6-NEXT:    ll $2, 0($6)
2778; MIPSELR6-NEXT:    srav $4, $2, $10
2779; MIPSELR6-NEXT:    andi $4, $4, 65535
2780; MIPSELR6-NEXT:    or $1, $zero, $4
2781; MIPSELR6-NEXT:    sllv $4, $4, $10
2782; MIPSELR6-NEXT:    sltu $5, $4, $7
2783; MIPSELR6-NEXT:    selnez $3, $4, $5
2784; MIPSELR6-NEXT:    seleqz $5, $7, $5
2785; MIPSELR6-NEXT:    or $3, $3, $5
2786; MIPSELR6-NEXT:    and $3, $3, $8
2787; MIPSELR6-NEXT:    and $4, $2, $9
2788; MIPSELR6-NEXT:    or $4, $4, $3
2789; MIPSELR6-NEXT:    sc $4, 0($6)
2790; MIPSELR6-NEXT:    beqzc $4, $BB7_1
2791; MIPSELR6-NEXT:    nop
2792; MIPSELR6-NEXT:  # %bb.2: # %entry
2793; MIPSELR6-NEXT:    .insn
2794; MIPSELR6-NEXT:  # %bb.3: # %entry
2795; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2796; MIPSELR6-NEXT:  # %bb.4: # %entry
2797; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2798; MIPSELR6-NEXT:    sync
2799; MIPSELR6-NEXT:    addiu $sp, $sp, 8
2800; MIPSELR6-NEXT:    jrc $ra
2801;
2802; MMEL-LABEL: test_umin_16:
2803; MMEL:       # %bb.0: # %entry
2804; MMEL-NEXT:    addiu $sp, $sp, -8
2805; MMEL-NEXT:    .cfi_def_cfa_offset 8
2806; MMEL-NEXT:    # kill: def $at killed $a1
2807; MMEL-NEXT:    sync
2808; MMEL-NEXT:    addiu $1, $zero, -4
2809; MMEL-NEXT:    and $6, $4, $1
2810; MMEL-NEXT:    andi $1, $4, 3
2811; MMEL-NEXT:    sll $10, $1, 3
2812; MMEL-NEXT:    ori $1, $zero, 65535
2813; MMEL-NEXT:    sllv $8, $1, $10
2814; MMEL-NEXT:    nor $9, $zero, $8
2815; MMEL-NEXT:    sllv $7, $5, $10
2816; MMEL-NEXT:  $BB7_1: # %entry
2817; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
2818; MMEL-NEXT:    ll $2, 0($6)
2819; MMEL-NEXT:    srav $4, $2, $10
2820; MMEL-NEXT:    andi $4, $4, 65535
2821; MMEL-NEXT:    or $1, $zero, $4
2822; MMEL-NEXT:    sllv $4, $4, $10
2823; MMEL-NEXT:    sltu $5, $4, $7
2824; MMEL-NEXT:    or $3, $4, $zero
2825; MMEL-NEXT:    movz $3, $7, $5
2826; MMEL-NEXT:    and $3, $3, $8
2827; MMEL-NEXT:    and $4, $2, $9
2828; MMEL-NEXT:    or $4, $4, $3
2829; MMEL-NEXT:    sc $4, 0($6)
2830; MMEL-NEXT:    beqzc $4, $BB7_1
2831; MMEL-NEXT:  # %bb.2: # %entry
2832; MMEL-NEXT:    .insn
2833; MMEL-NEXT:  # %bb.3: # %entry
2834; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2835; MMEL-NEXT:  # %bb.4: # %entry
2836; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2837; MMEL-NEXT:    sync
2838; MMEL-NEXT:    addiusp 8
2839; MMEL-NEXT:    jrc $ra
2840;
2841; MMELR6-LABEL: test_umin_16:
2842; MMELR6:       # %bb.0: # %entry
2843; MMELR6-NEXT:    addiu $sp, $sp, -8
2844; MMELR6-NEXT:    .cfi_def_cfa_offset 8
2845; MMELR6-NEXT:    # kill: def $at killed $a1
2846; MMELR6-NEXT:    sync
2847; MMELR6-NEXT:    addiu $1, $zero, -4
2848; MMELR6-NEXT:    and $6, $4, $1
2849; MMELR6-NEXT:    andi $1, $4, 3
2850; MMELR6-NEXT:    sll $10, $1, 3
2851; MMELR6-NEXT:    ori $1, $zero, 65535
2852; MMELR6-NEXT:    sllv $8, $1, $10
2853; MMELR6-NEXT:    nor $9, $zero, $8
2854; MMELR6-NEXT:    sllv $7, $5, $10
2855; MMELR6-NEXT:  $BB7_1: # %entry
2856; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
2857; MMELR6-NEXT:    ll $2, 0($6)
2858; MMELR6-NEXT:    srav $4, $2, $10
2859; MMELR6-NEXT:    andi $4, $4, 65535
2860; MMELR6-NEXT:    or $1, $zero, $4
2861; MMELR6-NEXT:    sllv $4, $4, $10
2862; MMELR6-NEXT:    sltu $5, $4, $7
2863; MMELR6-NEXT:    selnez $3, $4, $5
2864; MMELR6-NEXT:    seleqz $5, $7, $5
2865; MMELR6-NEXT:    or $3, $3, $5
2866; MMELR6-NEXT:    and $3, $3, $8
2867; MMELR6-NEXT:    and $4, $2, $9
2868; MMELR6-NEXT:    or $4, $4, $3
2869; MMELR6-NEXT:    sc $4, 0($6)
2870; MMELR6-NEXT:    beqc $4, $zero, $BB7_1
2871; MMELR6-NEXT:  # %bb.2: # %entry
2872; MMELR6-NEXT:    .insn
2873; MMELR6-NEXT:  # %bb.3: # %entry
2874; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
2875; MMELR6-NEXT:  # %bb.4: # %entry
2876; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
2877; MMELR6-NEXT:    sync
2878; MMELR6-NEXT:    addiu $sp, $sp, 8
2879; MMELR6-NEXT:    jrc $ra
2880;
2881; MIPS64-LABEL: test_umin_16:
2882; MIPS64:       # %bb.0: # %entry
2883; MIPS64-NEXT:    daddiu $sp, $sp, -16
2884; MIPS64-NEXT:    .cfi_def_cfa_offset 16
2885; MIPS64-NEXT:    move $1, $5
2886; MIPS64-NEXT:    sync
2887; MIPS64-NEXT:    daddiu $2, $zero, -4
2888; MIPS64-NEXT:    and $6, $4, $2
2889; MIPS64-NEXT:    andi $2, $4, 3
2890; MIPS64-NEXT:    xori $2, $2, 2
2891; MIPS64-NEXT:    sll $10, $2, 3
2892; MIPS64-NEXT:    ori $2, $zero, 65535
2893; MIPS64-NEXT:    sllv $8, $2, $10
2894; MIPS64-NEXT:    nor $9, $zero, $8
2895; MIPS64-NEXT:    sllv $7, $1, $10
2896; MIPS64-NEXT:  .LBB7_1: # %entry
2897; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
2898; MIPS64-NEXT:    ll $2, 0($6)
2899; MIPS64-NEXT:    srav $4, $2, $10
2900; MIPS64-NEXT:    andi $4, $4, 65535
2901; MIPS64-NEXT:    or $1, $zero, $4
2902; MIPS64-NEXT:    sllv $4, $4, $10
2903; MIPS64-NEXT:    sltu $5, $4, $7
2904; MIPS64-NEXT:    move $3, $4
2905; MIPS64-NEXT:    movz $3, $7, $5
2906; MIPS64-NEXT:    and $3, $3, $8
2907; MIPS64-NEXT:    and $4, $2, $9
2908; MIPS64-NEXT:    or $4, $4, $3
2909; MIPS64-NEXT:    sc $4, 0($6)
2910; MIPS64-NEXT:    beqz $4, .LBB7_1
2911; MIPS64-NEXT:    nop
2912; MIPS64-NEXT:  # %bb.2: # %entry
2913; MIPS64-NEXT:    .insn
2914; MIPS64-NEXT:  # %bb.3: # %entry
2915; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2916; MIPS64-NEXT:  # %bb.4: # %entry
2917; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
2918; MIPS64-NEXT:    sync
2919; MIPS64-NEXT:    daddiu $sp, $sp, 16
2920; MIPS64-NEXT:    jr $ra
2921; MIPS64-NEXT:    nop
2922;
2923; MIPS64R6-LABEL: test_umin_16:
2924; MIPS64R6:       # %bb.0: # %entry
2925; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
2926; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
2927; MIPS64R6-NEXT:    move $1, $5
2928; MIPS64R6-NEXT:    sync
2929; MIPS64R6-NEXT:    daddiu $2, $zero, -4
2930; MIPS64R6-NEXT:    and $6, $4, $2
2931; MIPS64R6-NEXT:    andi $2, $4, 3
2932; MIPS64R6-NEXT:    xori $2, $2, 2
2933; MIPS64R6-NEXT:    sll $10, $2, 3
2934; MIPS64R6-NEXT:    ori $2, $zero, 65535
2935; MIPS64R6-NEXT:    sllv $8, $2, $10
2936; MIPS64R6-NEXT:    nor $9, $zero, $8
2937; MIPS64R6-NEXT:    sllv $7, $1, $10
2938; MIPS64R6-NEXT:  .LBB7_1: # %entry
2939; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
2940; MIPS64R6-NEXT:    ll $2, 0($6)
2941; MIPS64R6-NEXT:    srav $4, $2, $10
2942; MIPS64R6-NEXT:    andi $4, $4, 65535
2943; MIPS64R6-NEXT:    or $1, $zero, $4
2944; MIPS64R6-NEXT:    sllv $4, $4, $10
2945; MIPS64R6-NEXT:    sltu $5, $4, $7
2946; MIPS64R6-NEXT:    selnez $3, $4, $5
2947; MIPS64R6-NEXT:    seleqz $5, $7, $5
2948; MIPS64R6-NEXT:    or $3, $3, $5
2949; MIPS64R6-NEXT:    and $3, $3, $8
2950; MIPS64R6-NEXT:    and $4, $2, $9
2951; MIPS64R6-NEXT:    or $4, $4, $3
2952; MIPS64R6-NEXT:    sc $4, 0($6)
2953; MIPS64R6-NEXT:    beqzc $4, .LBB7_1
2954; MIPS64R6-NEXT:    nop
2955; MIPS64R6-NEXT:  # %bb.2: # %entry
2956; MIPS64R6-NEXT:    .insn
2957; MIPS64R6-NEXT:  # %bb.3: # %entry
2958; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2959; MIPS64R6-NEXT:  # %bb.4: # %entry
2960; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
2961; MIPS64R6-NEXT:    sync
2962; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
2963; MIPS64R6-NEXT:    jrc $ra
2964;
2965; MIPS64EL-LABEL: test_umin_16:
2966; MIPS64EL:       # %bb.0: # %entry
2967; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
2968; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
2969; MIPS64EL-NEXT:    move $1, $5
2970; MIPS64EL-NEXT:    sync
2971; MIPS64EL-NEXT:    daddiu $2, $zero, -4
2972; MIPS64EL-NEXT:    and $6, $4, $2
2973; MIPS64EL-NEXT:    andi $2, $4, 3
2974; MIPS64EL-NEXT:    sll $10, $2, 3
2975; MIPS64EL-NEXT:    ori $2, $zero, 65535
2976; MIPS64EL-NEXT:    sllv $8, $2, $10
2977; MIPS64EL-NEXT:    nor $9, $zero, $8
2978; MIPS64EL-NEXT:    sllv $7, $1, $10
2979; MIPS64EL-NEXT:  .LBB7_1: # %entry
2980; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
2981; MIPS64EL-NEXT:    ll $2, 0($6)
2982; MIPS64EL-NEXT:    srav $4, $2, $10
2983; MIPS64EL-NEXT:    andi $4, $4, 65535
2984; MIPS64EL-NEXT:    or $1, $zero, $4
2985; MIPS64EL-NEXT:    sllv $4, $4, $10
2986; MIPS64EL-NEXT:    sltu $5, $4, $7
2987; MIPS64EL-NEXT:    move $3, $4
2988; MIPS64EL-NEXT:    movz $3, $7, $5
2989; MIPS64EL-NEXT:    and $3, $3, $8
2990; MIPS64EL-NEXT:    and $4, $2, $9
2991; MIPS64EL-NEXT:    or $4, $4, $3
2992; MIPS64EL-NEXT:    sc $4, 0($6)
2993; MIPS64EL-NEXT:    beqz $4, .LBB7_1
2994; MIPS64EL-NEXT:    nop
2995; MIPS64EL-NEXT:  # %bb.2: # %entry
2996; MIPS64EL-NEXT:    .insn
2997; MIPS64EL-NEXT:  # %bb.3: # %entry
2998; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
2999; MIPS64EL-NEXT:  # %bb.4: # %entry
3000; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3001; MIPS64EL-NEXT:    sync
3002; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
3003; MIPS64EL-NEXT:    jr $ra
3004; MIPS64EL-NEXT:    nop
3005;
3006; MIPS64ELR6-LABEL: test_umin_16:
3007; MIPS64ELR6:       # %bb.0: # %entry
3008; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
3009; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
3010; MIPS64ELR6-NEXT:    move $1, $5
3011; MIPS64ELR6-NEXT:    sync
3012; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
3013; MIPS64ELR6-NEXT:    and $6, $4, $2
3014; MIPS64ELR6-NEXT:    andi $2, $4, 3
3015; MIPS64ELR6-NEXT:    sll $10, $2, 3
3016; MIPS64ELR6-NEXT:    ori $2, $zero, 65535
3017; MIPS64ELR6-NEXT:    sllv $8, $2, $10
3018; MIPS64ELR6-NEXT:    nor $9, $zero, $8
3019; MIPS64ELR6-NEXT:    sllv $7, $1, $10
3020; MIPS64ELR6-NEXT:  .LBB7_1: # %entry
3021; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
3022; MIPS64ELR6-NEXT:    ll $2, 0($6)
3023; MIPS64ELR6-NEXT:    srav $4, $2, $10
3024; MIPS64ELR6-NEXT:    andi $4, $4, 65535
3025; MIPS64ELR6-NEXT:    or $1, $zero, $4
3026; MIPS64ELR6-NEXT:    sllv $4, $4, $10
3027; MIPS64ELR6-NEXT:    sltu $5, $4, $7
3028; MIPS64ELR6-NEXT:    selnez $3, $4, $5
3029; MIPS64ELR6-NEXT:    seleqz $5, $7, $5
3030; MIPS64ELR6-NEXT:    or $3, $3, $5
3031; MIPS64ELR6-NEXT:    and $3, $3, $8
3032; MIPS64ELR6-NEXT:    and $4, $2, $9
3033; MIPS64ELR6-NEXT:    or $4, $4, $3
3034; MIPS64ELR6-NEXT:    sc $4, 0($6)
3035; MIPS64ELR6-NEXT:    beqzc $4, .LBB7_1
3036; MIPS64ELR6-NEXT:    nop
3037; MIPS64ELR6-NEXT:  # %bb.2: # %entry
3038; MIPS64ELR6-NEXT:    .insn
3039; MIPS64ELR6-NEXT:  # %bb.3: # %entry
3040; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
3041; MIPS64ELR6-NEXT:  # %bb.4: # %entry
3042; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3043; MIPS64ELR6-NEXT:    sync
3044; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
3045; MIPS64ELR6-NEXT:    jrc $ra
3046entry:
3047  %0 = atomicrmw umin ptr %ptr, i16 %val seq_cst
3048  ret i16 %0
3049}
3050
3051
3052define i8 @test_max_8(ptr nocapture %ptr, i8 signext %val) {
3053; MIPS-LABEL: test_max_8:
3054; MIPS:       # %bb.0: # %entry
3055; MIPS-NEXT:    addiu $sp, $sp, -8
3056; MIPS-NEXT:    .cfi_def_cfa_offset 8
3057; MIPS-NEXT:    # kill: def $at killed $a1
3058; MIPS-NEXT:    sync
3059; MIPS-NEXT:    addiu $1, $zero, -4
3060; MIPS-NEXT:    and $6, $4, $1
3061; MIPS-NEXT:    andi $1, $4, 3
3062; MIPS-NEXT:    xori $1, $1, 3
3063; MIPS-NEXT:    sll $10, $1, 3
3064; MIPS-NEXT:    ori $1, $zero, 255
3065; MIPS-NEXT:    sllv $8, $1, $10
3066; MIPS-NEXT:    nor $9, $zero, $8
3067; MIPS-NEXT:    sllv $7, $5, $10
3068; MIPS-NEXT:  $BB8_1: # %entry
3069; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
3070; MIPS-NEXT:    ll $2, 0($6)
3071; MIPS-NEXT:    srav $4, $2, $10
3072; MIPS-NEXT:    seb $4, $4
3073; MIPS-NEXT:    or $1, $zero, $4
3074; MIPS-NEXT:    sllv $4, $4, $10
3075; MIPS-NEXT:    slt $5, $4, $7
3076; MIPS-NEXT:    move $3, $4
3077; MIPS-NEXT:    movn $3, $7, $5
3078; MIPS-NEXT:    and $3, $3, $8
3079; MIPS-NEXT:    and $4, $2, $9
3080; MIPS-NEXT:    or $4, $4, $3
3081; MIPS-NEXT:    sc $4, 0($6)
3082; MIPS-NEXT:    beqz $4, $BB8_1
3083; MIPS-NEXT:    nop
3084; MIPS-NEXT:  # %bb.2: # %entry
3085; MIPS-NEXT:    .insn
3086; MIPS-NEXT:  # %bb.3: # %entry
3087; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3088; MIPS-NEXT:  # %bb.4: # %entry
3089; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3090; MIPS-NEXT:    sync
3091; MIPS-NEXT:    addiu $sp, $sp, 8
3092; MIPS-NEXT:    jr $ra
3093; MIPS-NEXT:    nop
3094;
3095; MIPSR6-LABEL: test_max_8:
3096; MIPSR6:       # %bb.0: # %entry
3097; MIPSR6-NEXT:    addiu $sp, $sp, -8
3098; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
3099; MIPSR6-NEXT:    # kill: def $at killed $a1
3100; MIPSR6-NEXT:    sync
3101; MIPSR6-NEXT:    addiu $1, $zero, -4
3102; MIPSR6-NEXT:    and $6, $4, $1
3103; MIPSR6-NEXT:    andi $1, $4, 3
3104; MIPSR6-NEXT:    xori $1, $1, 3
3105; MIPSR6-NEXT:    sll $10, $1, 3
3106; MIPSR6-NEXT:    ori $1, $zero, 255
3107; MIPSR6-NEXT:    sllv $8, $1, $10
3108; MIPSR6-NEXT:    nor $9, $zero, $8
3109; MIPSR6-NEXT:    sllv $7, $5, $10
3110; MIPSR6-NEXT:  $BB8_1: # %entry
3111; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
3112; MIPSR6-NEXT:    ll $2, 0($6)
3113; MIPSR6-NEXT:    srav $4, $2, $10
3114; MIPSR6-NEXT:    seb $4, $4
3115; MIPSR6-NEXT:    or $1, $zero, $4
3116; MIPSR6-NEXT:    sllv $4, $4, $10
3117; MIPSR6-NEXT:    slt $5, $4, $7
3118; MIPSR6-NEXT:    seleqz $3, $4, $5
3119; MIPSR6-NEXT:    selnez $5, $7, $5
3120; MIPSR6-NEXT:    or $3, $3, $5
3121; MIPSR6-NEXT:    and $3, $3, $8
3122; MIPSR6-NEXT:    and $4, $2, $9
3123; MIPSR6-NEXT:    or $4, $4, $3
3124; MIPSR6-NEXT:    sc $4, 0($6)
3125; MIPSR6-NEXT:    beqzc $4, $BB8_1
3126; MIPSR6-NEXT:    nop
3127; MIPSR6-NEXT:  # %bb.2: # %entry
3128; MIPSR6-NEXT:    .insn
3129; MIPSR6-NEXT:  # %bb.3: # %entry
3130; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3131; MIPSR6-NEXT:  # %bb.4: # %entry
3132; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3133; MIPSR6-NEXT:    sync
3134; MIPSR6-NEXT:    addiu $sp, $sp, 8
3135; MIPSR6-NEXT:    jrc $ra
3136;
3137; MM-LABEL: test_max_8:
3138; MM:       # %bb.0: # %entry
3139; MM-NEXT:    addiu $sp, $sp, -8
3140; MM-NEXT:    .cfi_def_cfa_offset 8
3141; MM-NEXT:    # kill: def $at killed $a1
3142; MM-NEXT:    sync
3143; MM-NEXT:    addiu $1, $zero, -4
3144; MM-NEXT:    and $6, $4, $1
3145; MM-NEXT:    andi $1, $4, 3
3146; MM-NEXT:    xori $1, $1, 3
3147; MM-NEXT:    sll $10, $1, 3
3148; MM-NEXT:    ori $1, $zero, 255
3149; MM-NEXT:    sllv $8, $1, $10
3150; MM-NEXT:    nor $9, $zero, $8
3151; MM-NEXT:    sllv $7, $5, $10
3152; MM-NEXT:  $BB8_1: # %entry
3153; MM-NEXT:    # =>This Inner Loop Header: Depth=1
3154; MM-NEXT:    ll $2, 0($6)
3155; MM-NEXT:    srav $4, $2, $10
3156; MM-NEXT:    seb $4, $4
3157; MM-NEXT:    or $1, $zero, $4
3158; MM-NEXT:    sllv $4, $4, $10
3159; MM-NEXT:    slt $5, $4, $7
3160; MM-NEXT:    or $3, $4, $zero
3161; MM-NEXT:    movn $3, $7, $5
3162; MM-NEXT:    and $3, $3, $8
3163; MM-NEXT:    and $4, $2, $9
3164; MM-NEXT:    or $4, $4, $3
3165; MM-NEXT:    sc $4, 0($6)
3166; MM-NEXT:    beqzc $4, $BB8_1
3167; MM-NEXT:  # %bb.2: # %entry
3168; MM-NEXT:    .insn
3169; MM-NEXT:  # %bb.3: # %entry
3170; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3171; MM-NEXT:  # %bb.4: # %entry
3172; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3173; MM-NEXT:    sync
3174; MM-NEXT:    addiusp 8
3175; MM-NEXT:    jrc $ra
3176;
3177; MMR6-LABEL: test_max_8:
3178; MMR6:       # %bb.0: # %entry
3179; MMR6-NEXT:    addiu $sp, $sp, -8
3180; MMR6-NEXT:    .cfi_def_cfa_offset 8
3181; MMR6-NEXT:    # kill: def $at killed $a1
3182; MMR6-NEXT:    sync
3183; MMR6-NEXT:    addiu $1, $zero, -4
3184; MMR6-NEXT:    and $6, $4, $1
3185; MMR6-NEXT:    andi $1, $4, 3
3186; MMR6-NEXT:    xori $1, $1, 3
3187; MMR6-NEXT:    sll $10, $1, 3
3188; MMR6-NEXT:    ori $1, $zero, 255
3189; MMR6-NEXT:    sllv $8, $1, $10
3190; MMR6-NEXT:    nor $9, $zero, $8
3191; MMR6-NEXT:    sllv $7, $5, $10
3192; MMR6-NEXT:  $BB8_1: # %entry
3193; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
3194; MMR6-NEXT:    ll $2, 0($6)
3195; MMR6-NEXT:    srav $4, $2, $10
3196; MMR6-NEXT:    seb $4, $4
3197; MMR6-NEXT:    or $1, $zero, $4
3198; MMR6-NEXT:    sllv $4, $4, $10
3199; MMR6-NEXT:    slt $5, $4, $7
3200; MMR6-NEXT:    seleqz $3, $4, $5
3201; MMR6-NEXT:    selnez $5, $7, $5
3202; MMR6-NEXT:    or $3, $3, $5
3203; MMR6-NEXT:    and $3, $3, $8
3204; MMR6-NEXT:    and $4, $2, $9
3205; MMR6-NEXT:    or $4, $4, $3
3206; MMR6-NEXT:    sc $4, 0($6)
3207; MMR6-NEXT:    beqc $4, $zero, $BB8_1
3208; MMR6-NEXT:  # %bb.2: # %entry
3209; MMR6-NEXT:    .insn
3210; MMR6-NEXT:  # %bb.3: # %entry
3211; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3212; MMR6-NEXT:  # %bb.4: # %entry
3213; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3214; MMR6-NEXT:    sync
3215; MMR6-NEXT:    addiu $sp, $sp, 8
3216; MMR6-NEXT:    jrc $ra
3217;
3218; MIPS32-LABEL: test_max_8:
3219; MIPS32:       # %bb.0: # %entry
3220; MIPS32-NEXT:    addiu $sp, $sp, -8
3221; MIPS32-NEXT:    .cfi_def_cfa_offset 8
3222; MIPS32-NEXT:    # kill: def $at killed $a1
3223; MIPS32-NEXT:    sync
3224; MIPS32-NEXT:    addiu $1, $zero, -4
3225; MIPS32-NEXT:    and $6, $4, $1
3226; MIPS32-NEXT:    andi $1, $4, 3
3227; MIPS32-NEXT:    sll $10, $1, 3
3228; MIPS32-NEXT:    ori $1, $zero, 255
3229; MIPS32-NEXT:    sllv $8, $1, $10
3230; MIPS32-NEXT:    nor $9, $zero, $8
3231; MIPS32-NEXT:    sllv $7, $5, $10
3232; MIPS32-NEXT:  $BB8_1: # %entry
3233; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
3234; MIPS32-NEXT:    ll $2, 0($6)
3235; MIPS32-NEXT:    srav $4, $2, $10
3236; MIPS32-NEXT:    sll $4, $4, 24
3237; MIPS32-NEXT:    sra $4, $4, 24
3238; MIPS32-NEXT:    or $1, $zero, $4
3239; MIPS32-NEXT:    sllv $4, $4, $10
3240; MIPS32-NEXT:    slt $5, $4, $7
3241; MIPS32-NEXT:    move $3, $4
3242; MIPS32-NEXT:    movn $3, $7, $5
3243; MIPS32-NEXT:    and $3, $3, $8
3244; MIPS32-NEXT:    and $4, $2, $9
3245; MIPS32-NEXT:    or $4, $4, $3
3246; MIPS32-NEXT:    sc $4, 0($6)
3247; MIPS32-NEXT:    beqz $4, $BB8_1
3248; MIPS32-NEXT:    nop
3249; MIPS32-NEXT:  # %bb.2: # %entry
3250; MIPS32-NEXT:    .insn
3251; MIPS32-NEXT:  # %bb.3: # %entry
3252; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3253; MIPS32-NEXT:  # %bb.4: # %entry
3254; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3255; MIPS32-NEXT:    sync
3256; MIPS32-NEXT:    addiu $sp, $sp, 8
3257; MIPS32-NEXT:    jr $ra
3258; MIPS32-NEXT:    nop
3259;
3260; MIPSEL-LABEL: test_max_8:
3261; MIPSEL:       # %bb.0: # %entry
3262; MIPSEL-NEXT:    addiu $sp, $sp, -8
3263; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
3264; MIPSEL-NEXT:    # kill: def $at killed $a1
3265; MIPSEL-NEXT:    sync
3266; MIPSEL-NEXT:    addiu $1, $zero, -4
3267; MIPSEL-NEXT:    and $6, $4, $1
3268; MIPSEL-NEXT:    andi $1, $4, 3
3269; MIPSEL-NEXT:    sll $10, $1, 3
3270; MIPSEL-NEXT:    ori $1, $zero, 255
3271; MIPSEL-NEXT:    sllv $8, $1, $10
3272; MIPSEL-NEXT:    nor $9, $zero, $8
3273; MIPSEL-NEXT:    sllv $7, $5, $10
3274; MIPSEL-NEXT:  $BB8_1: # %entry
3275; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
3276; MIPSEL-NEXT:    ll $2, 0($6)
3277; MIPSEL-NEXT:    srav $4, $2, $10
3278; MIPSEL-NEXT:    seb $4, $4
3279; MIPSEL-NEXT:    or $1, $zero, $4
3280; MIPSEL-NEXT:    sllv $4, $4, $10
3281; MIPSEL-NEXT:    slt $5, $4, $7
3282; MIPSEL-NEXT:    move $3, $4
3283; MIPSEL-NEXT:    movn $3, $7, $5
3284; MIPSEL-NEXT:    and $3, $3, $8
3285; MIPSEL-NEXT:    and $4, $2, $9
3286; MIPSEL-NEXT:    or $4, $4, $3
3287; MIPSEL-NEXT:    sc $4, 0($6)
3288; MIPSEL-NEXT:    beqz $4, $BB8_1
3289; MIPSEL-NEXT:    nop
3290; MIPSEL-NEXT:  # %bb.2: # %entry
3291; MIPSEL-NEXT:    .insn
3292; MIPSEL-NEXT:  # %bb.3: # %entry
3293; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3294; MIPSEL-NEXT:  # %bb.4: # %entry
3295; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3296; MIPSEL-NEXT:    sync
3297; MIPSEL-NEXT:    addiu $sp, $sp, 8
3298; MIPSEL-NEXT:    jr $ra
3299; MIPSEL-NEXT:    nop
3300;
3301; MIPSELR6-LABEL: test_max_8:
3302; MIPSELR6:       # %bb.0: # %entry
3303; MIPSELR6-NEXT:    addiu $sp, $sp, -8
3304; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
3305; MIPSELR6-NEXT:    # kill: def $at killed $a1
3306; MIPSELR6-NEXT:    sync
3307; MIPSELR6-NEXT:    addiu $1, $zero, -4
3308; MIPSELR6-NEXT:    and $6, $4, $1
3309; MIPSELR6-NEXT:    andi $1, $4, 3
3310; MIPSELR6-NEXT:    sll $10, $1, 3
3311; MIPSELR6-NEXT:    ori $1, $zero, 255
3312; MIPSELR6-NEXT:    sllv $8, $1, $10
3313; MIPSELR6-NEXT:    nor $9, $zero, $8
3314; MIPSELR6-NEXT:    sllv $7, $5, $10
3315; MIPSELR6-NEXT:  $BB8_1: # %entry
3316; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
3317; MIPSELR6-NEXT:    ll $2, 0($6)
3318; MIPSELR6-NEXT:    srav $4, $2, $10
3319; MIPSELR6-NEXT:    seb $4, $4
3320; MIPSELR6-NEXT:    or $1, $zero, $4
3321; MIPSELR6-NEXT:    sllv $4, $4, $10
3322; MIPSELR6-NEXT:    slt $5, $4, $7
3323; MIPSELR6-NEXT:    seleqz $3, $4, $5
3324; MIPSELR6-NEXT:    selnez $5, $7, $5
3325; MIPSELR6-NEXT:    or $3, $3, $5
3326; MIPSELR6-NEXT:    and $3, $3, $8
3327; MIPSELR6-NEXT:    and $4, $2, $9
3328; MIPSELR6-NEXT:    or $4, $4, $3
3329; MIPSELR6-NEXT:    sc $4, 0($6)
3330; MIPSELR6-NEXT:    beqzc $4, $BB8_1
3331; MIPSELR6-NEXT:    nop
3332; MIPSELR6-NEXT:  # %bb.2: # %entry
3333; MIPSELR6-NEXT:    .insn
3334; MIPSELR6-NEXT:  # %bb.3: # %entry
3335; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3336; MIPSELR6-NEXT:  # %bb.4: # %entry
3337; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3338; MIPSELR6-NEXT:    sync
3339; MIPSELR6-NEXT:    addiu $sp, $sp, 8
3340; MIPSELR6-NEXT:    jrc $ra
3341;
3342; MMEL-LABEL: test_max_8:
3343; MMEL:       # %bb.0: # %entry
3344; MMEL-NEXT:    addiu $sp, $sp, -8
3345; MMEL-NEXT:    .cfi_def_cfa_offset 8
3346; MMEL-NEXT:    # kill: def $at killed $a1
3347; MMEL-NEXT:    sync
3348; MMEL-NEXT:    addiu $1, $zero, -4
3349; MMEL-NEXT:    and $6, $4, $1
3350; MMEL-NEXT:    andi $1, $4, 3
3351; MMEL-NEXT:    sll $10, $1, 3
3352; MMEL-NEXT:    ori $1, $zero, 255
3353; MMEL-NEXT:    sllv $8, $1, $10
3354; MMEL-NEXT:    nor $9, $zero, $8
3355; MMEL-NEXT:    sllv $7, $5, $10
3356; MMEL-NEXT:  $BB8_1: # %entry
3357; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
3358; MMEL-NEXT:    ll $2, 0($6)
3359; MMEL-NEXT:    srav $4, $2, $10
3360; MMEL-NEXT:    seb $4, $4
3361; MMEL-NEXT:    or $1, $zero, $4
3362; MMEL-NEXT:    sllv $4, $4, $10
3363; MMEL-NEXT:    slt $5, $4, $7
3364; MMEL-NEXT:    or $3, $4, $zero
3365; MMEL-NEXT:    movn $3, $7, $5
3366; MMEL-NEXT:    and $3, $3, $8
3367; MMEL-NEXT:    and $4, $2, $9
3368; MMEL-NEXT:    or $4, $4, $3
3369; MMEL-NEXT:    sc $4, 0($6)
3370; MMEL-NEXT:    beqzc $4, $BB8_1
3371; MMEL-NEXT:  # %bb.2: # %entry
3372; MMEL-NEXT:    .insn
3373; MMEL-NEXT:  # %bb.3: # %entry
3374; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3375; MMEL-NEXT:  # %bb.4: # %entry
3376; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3377; MMEL-NEXT:    sync
3378; MMEL-NEXT:    addiusp 8
3379; MMEL-NEXT:    jrc $ra
3380;
3381; MMELR6-LABEL: test_max_8:
3382; MMELR6:       # %bb.0: # %entry
3383; MMELR6-NEXT:    addiu $sp, $sp, -8
3384; MMELR6-NEXT:    .cfi_def_cfa_offset 8
3385; MMELR6-NEXT:    # kill: def $at killed $a1
3386; MMELR6-NEXT:    sync
3387; MMELR6-NEXT:    addiu $1, $zero, -4
3388; MMELR6-NEXT:    and $6, $4, $1
3389; MMELR6-NEXT:    andi $1, $4, 3
3390; MMELR6-NEXT:    sll $10, $1, 3
3391; MMELR6-NEXT:    ori $1, $zero, 255
3392; MMELR6-NEXT:    sllv $8, $1, $10
3393; MMELR6-NEXT:    nor $9, $zero, $8
3394; MMELR6-NEXT:    sllv $7, $5, $10
3395; MMELR6-NEXT:  $BB8_1: # %entry
3396; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
3397; MMELR6-NEXT:    ll $2, 0($6)
3398; MMELR6-NEXT:    srav $4, $2, $10
3399; MMELR6-NEXT:    seb $4, $4
3400; MMELR6-NEXT:    or $1, $zero, $4
3401; MMELR6-NEXT:    sllv $4, $4, $10
3402; MMELR6-NEXT:    slt $5, $4, $7
3403; MMELR6-NEXT:    seleqz $3, $4, $5
3404; MMELR6-NEXT:    selnez $5, $7, $5
3405; MMELR6-NEXT:    or $3, $3, $5
3406; MMELR6-NEXT:    and $3, $3, $8
3407; MMELR6-NEXT:    and $4, $2, $9
3408; MMELR6-NEXT:    or $4, $4, $3
3409; MMELR6-NEXT:    sc $4, 0($6)
3410; MMELR6-NEXT:    beqc $4, $zero, $BB8_1
3411; MMELR6-NEXT:  # %bb.2: # %entry
3412; MMELR6-NEXT:    .insn
3413; MMELR6-NEXT:  # %bb.3: # %entry
3414; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3415; MMELR6-NEXT:  # %bb.4: # %entry
3416; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3417; MMELR6-NEXT:    sync
3418; MMELR6-NEXT:    addiu $sp, $sp, 8
3419; MMELR6-NEXT:    jrc $ra
3420;
3421; MIPS64-LABEL: test_max_8:
3422; MIPS64:       # %bb.0: # %entry
3423; MIPS64-NEXT:    daddiu $sp, $sp, -16
3424; MIPS64-NEXT:    .cfi_def_cfa_offset 16
3425; MIPS64-NEXT:    move $1, $5
3426; MIPS64-NEXT:    sync
3427; MIPS64-NEXT:    daddiu $2, $zero, -4
3428; MIPS64-NEXT:    and $6, $4, $2
3429; MIPS64-NEXT:    andi $2, $4, 3
3430; MIPS64-NEXT:    xori $2, $2, 3
3431; MIPS64-NEXT:    sll $10, $2, 3
3432; MIPS64-NEXT:    ori $2, $zero, 255
3433; MIPS64-NEXT:    sllv $8, $2, $10
3434; MIPS64-NEXT:    nor $9, $zero, $8
3435; MIPS64-NEXT:    sllv $7, $1, $10
3436; MIPS64-NEXT:  .LBB8_1: # %entry
3437; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
3438; MIPS64-NEXT:    ll $2, 0($6)
3439; MIPS64-NEXT:    srav $4, $2, $10
3440; MIPS64-NEXT:    seb $4, $4
3441; MIPS64-NEXT:    or $1, $zero, $4
3442; MIPS64-NEXT:    sllv $4, $4, $10
3443; MIPS64-NEXT:    slt $5, $4, $7
3444; MIPS64-NEXT:    move $3, $4
3445; MIPS64-NEXT:    movn $3, $7, $5
3446; MIPS64-NEXT:    and $3, $3, $8
3447; MIPS64-NEXT:    and $4, $2, $9
3448; MIPS64-NEXT:    or $4, $4, $3
3449; MIPS64-NEXT:    sc $4, 0($6)
3450; MIPS64-NEXT:    beqz $4, .LBB8_1
3451; MIPS64-NEXT:    nop
3452; MIPS64-NEXT:  # %bb.2: # %entry
3453; MIPS64-NEXT:    .insn
3454; MIPS64-NEXT:  # %bb.3: # %entry
3455; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
3456; MIPS64-NEXT:  # %bb.4: # %entry
3457; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3458; MIPS64-NEXT:    sync
3459; MIPS64-NEXT:    daddiu $sp, $sp, 16
3460; MIPS64-NEXT:    jr $ra
3461; MIPS64-NEXT:    nop
3462;
3463; MIPS64R6-LABEL: test_max_8:
3464; MIPS64R6:       # %bb.0: # %entry
3465; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
3466; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
3467; MIPS64R6-NEXT:    move $1, $5
3468; MIPS64R6-NEXT:    sync
3469; MIPS64R6-NEXT:    daddiu $2, $zero, -4
3470; MIPS64R6-NEXT:    and $6, $4, $2
3471; MIPS64R6-NEXT:    andi $2, $4, 3
3472; MIPS64R6-NEXT:    xori $2, $2, 3
3473; MIPS64R6-NEXT:    sll $10, $2, 3
3474; MIPS64R6-NEXT:    ori $2, $zero, 255
3475; MIPS64R6-NEXT:    sllv $8, $2, $10
3476; MIPS64R6-NEXT:    nor $9, $zero, $8
3477; MIPS64R6-NEXT:    sllv $7, $1, $10
3478; MIPS64R6-NEXT:  .LBB8_1: # %entry
3479; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
3480; MIPS64R6-NEXT:    ll $2, 0($6)
3481; MIPS64R6-NEXT:    srav $4, $2, $10
3482; MIPS64R6-NEXT:    seb $4, $4
3483; MIPS64R6-NEXT:    or $1, $zero, $4
3484; MIPS64R6-NEXT:    sllv $4, $4, $10
3485; MIPS64R6-NEXT:    slt $5, $4, $7
3486; MIPS64R6-NEXT:    seleqz $3, $4, $5
3487; MIPS64R6-NEXT:    selnez $5, $7, $5
3488; MIPS64R6-NEXT:    or $3, $3, $5
3489; MIPS64R6-NEXT:    and $3, $3, $8
3490; MIPS64R6-NEXT:    and $4, $2, $9
3491; MIPS64R6-NEXT:    or $4, $4, $3
3492; MIPS64R6-NEXT:    sc $4, 0($6)
3493; MIPS64R6-NEXT:    beqzc $4, .LBB8_1
3494; MIPS64R6-NEXT:    nop
3495; MIPS64R6-NEXT:  # %bb.2: # %entry
3496; MIPS64R6-NEXT:    .insn
3497; MIPS64R6-NEXT:  # %bb.3: # %entry
3498; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
3499; MIPS64R6-NEXT:  # %bb.4: # %entry
3500; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3501; MIPS64R6-NEXT:    sync
3502; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
3503; MIPS64R6-NEXT:    jrc $ra
3504;
3505; MIPS64EL-LABEL: test_max_8:
3506; MIPS64EL:       # %bb.0: # %entry
3507; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
3508; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
3509; MIPS64EL-NEXT:    move $1, $5
3510; MIPS64EL-NEXT:    sync
3511; MIPS64EL-NEXT:    daddiu $2, $zero, -4
3512; MIPS64EL-NEXT:    and $6, $4, $2
3513; MIPS64EL-NEXT:    andi $2, $4, 3
3514; MIPS64EL-NEXT:    sll $10, $2, 3
3515; MIPS64EL-NEXT:    ori $2, $zero, 255
3516; MIPS64EL-NEXT:    sllv $8, $2, $10
3517; MIPS64EL-NEXT:    nor $9, $zero, $8
3518; MIPS64EL-NEXT:    sllv $7, $1, $10
3519; MIPS64EL-NEXT:  .LBB8_1: # %entry
3520; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
3521; MIPS64EL-NEXT:    ll $2, 0($6)
3522; MIPS64EL-NEXT:    srav $4, $2, $10
3523; MIPS64EL-NEXT:    seb $4, $4
3524; MIPS64EL-NEXT:    or $1, $zero, $4
3525; MIPS64EL-NEXT:    sllv $4, $4, $10
3526; MIPS64EL-NEXT:    slt $5, $4, $7
3527; MIPS64EL-NEXT:    move $3, $4
3528; MIPS64EL-NEXT:    movn $3, $7, $5
3529; MIPS64EL-NEXT:    and $3, $3, $8
3530; MIPS64EL-NEXT:    and $4, $2, $9
3531; MIPS64EL-NEXT:    or $4, $4, $3
3532; MIPS64EL-NEXT:    sc $4, 0($6)
3533; MIPS64EL-NEXT:    beqz $4, .LBB8_1
3534; MIPS64EL-NEXT:    nop
3535; MIPS64EL-NEXT:  # %bb.2: # %entry
3536; MIPS64EL-NEXT:    .insn
3537; MIPS64EL-NEXT:  # %bb.3: # %entry
3538; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
3539; MIPS64EL-NEXT:  # %bb.4: # %entry
3540; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3541; MIPS64EL-NEXT:    sync
3542; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
3543; MIPS64EL-NEXT:    jr $ra
3544; MIPS64EL-NEXT:    nop
3545;
3546; MIPS64ELR6-LABEL: test_max_8:
3547; MIPS64ELR6:       # %bb.0: # %entry
3548; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
3549; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
3550; MIPS64ELR6-NEXT:    move $1, $5
3551; MIPS64ELR6-NEXT:    sync
3552; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
3553; MIPS64ELR6-NEXT:    and $6, $4, $2
3554; MIPS64ELR6-NEXT:    andi $2, $4, 3
3555; MIPS64ELR6-NEXT:    sll $10, $2, 3
3556; MIPS64ELR6-NEXT:    ori $2, $zero, 255
3557; MIPS64ELR6-NEXT:    sllv $8, $2, $10
3558; MIPS64ELR6-NEXT:    nor $9, $zero, $8
3559; MIPS64ELR6-NEXT:    sllv $7, $1, $10
3560; MIPS64ELR6-NEXT:  .LBB8_1: # %entry
3561; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
3562; MIPS64ELR6-NEXT:    ll $2, 0($6)
3563; MIPS64ELR6-NEXT:    srav $4, $2, $10
3564; MIPS64ELR6-NEXT:    seb $4, $4
3565; MIPS64ELR6-NEXT:    or $1, $zero, $4
3566; MIPS64ELR6-NEXT:    sllv $4, $4, $10
3567; MIPS64ELR6-NEXT:    slt $5, $4, $7
3568; MIPS64ELR6-NEXT:    seleqz $3, $4, $5
3569; MIPS64ELR6-NEXT:    selnez $5, $7, $5
3570; MIPS64ELR6-NEXT:    or $3, $3, $5
3571; MIPS64ELR6-NEXT:    and $3, $3, $8
3572; MIPS64ELR6-NEXT:    and $4, $2, $9
3573; MIPS64ELR6-NEXT:    or $4, $4, $3
3574; MIPS64ELR6-NEXT:    sc $4, 0($6)
3575; MIPS64ELR6-NEXT:    beqzc $4, .LBB8_1
3576; MIPS64ELR6-NEXT:    nop
3577; MIPS64ELR6-NEXT:  # %bb.2: # %entry
3578; MIPS64ELR6-NEXT:    .insn
3579; MIPS64ELR6-NEXT:  # %bb.3: # %entry
3580; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
3581; MIPS64ELR6-NEXT:  # %bb.4: # %entry
3582; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3583; MIPS64ELR6-NEXT:    sync
3584; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
3585; MIPS64ELR6-NEXT:    jrc $ra
3586entry:
3587  %0 = atomicrmw max ptr %ptr, i8 %val seq_cst
3588  ret i8 %0
3589}
3590
3591define i8 @test_min_8(ptr nocapture %ptr, i8 signext %val) {
3592; MIPS-LABEL: test_min_8:
3593; MIPS:       # %bb.0: # %entry
3594; MIPS-NEXT:    addiu $sp, $sp, -8
3595; MIPS-NEXT:    .cfi_def_cfa_offset 8
3596; MIPS-NEXT:    # kill: def $at killed $a1
3597; MIPS-NEXT:    sync
3598; MIPS-NEXT:    addiu $1, $zero, -4
3599; MIPS-NEXT:    and $6, $4, $1
3600; MIPS-NEXT:    andi $1, $4, 3
3601; MIPS-NEXT:    xori $1, $1, 3
3602; MIPS-NEXT:    sll $10, $1, 3
3603; MIPS-NEXT:    ori $1, $zero, 255
3604; MIPS-NEXT:    sllv $8, $1, $10
3605; MIPS-NEXT:    nor $9, $zero, $8
3606; MIPS-NEXT:    sllv $7, $5, $10
3607; MIPS-NEXT:  $BB9_1: # %entry
3608; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
3609; MIPS-NEXT:    ll $2, 0($6)
3610; MIPS-NEXT:    srav $4, $2, $10
3611; MIPS-NEXT:    seb $4, $4
3612; MIPS-NEXT:    or $1, $zero, $4
3613; MIPS-NEXT:    sllv $4, $4, $10
3614; MIPS-NEXT:    slt $5, $4, $7
3615; MIPS-NEXT:    move $3, $4
3616; MIPS-NEXT:    movz $3, $7, $5
3617; MIPS-NEXT:    and $3, $3, $8
3618; MIPS-NEXT:    and $4, $2, $9
3619; MIPS-NEXT:    or $4, $4, $3
3620; MIPS-NEXT:    sc $4, 0($6)
3621; MIPS-NEXT:    beqz $4, $BB9_1
3622; MIPS-NEXT:    nop
3623; MIPS-NEXT:  # %bb.2: # %entry
3624; MIPS-NEXT:    .insn
3625; MIPS-NEXT:  # %bb.3: # %entry
3626; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3627; MIPS-NEXT:  # %bb.4: # %entry
3628; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3629; MIPS-NEXT:    sync
3630; MIPS-NEXT:    addiu $sp, $sp, 8
3631; MIPS-NEXT:    jr $ra
3632; MIPS-NEXT:    nop
3633;
3634; MIPSR6-LABEL: test_min_8:
3635; MIPSR6:       # %bb.0: # %entry
3636; MIPSR6-NEXT:    addiu $sp, $sp, -8
3637; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
3638; MIPSR6-NEXT:    # kill: def $at killed $a1
3639; MIPSR6-NEXT:    sync
3640; MIPSR6-NEXT:    addiu $1, $zero, -4
3641; MIPSR6-NEXT:    and $6, $4, $1
3642; MIPSR6-NEXT:    andi $1, $4, 3
3643; MIPSR6-NEXT:    xori $1, $1, 3
3644; MIPSR6-NEXT:    sll $10, $1, 3
3645; MIPSR6-NEXT:    ori $1, $zero, 255
3646; MIPSR6-NEXT:    sllv $8, $1, $10
3647; MIPSR6-NEXT:    nor $9, $zero, $8
3648; MIPSR6-NEXT:    sllv $7, $5, $10
3649; MIPSR6-NEXT:  $BB9_1: # %entry
3650; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
3651; MIPSR6-NEXT:    ll $2, 0($6)
3652; MIPSR6-NEXT:    srav $4, $2, $10
3653; MIPSR6-NEXT:    seb $4, $4
3654; MIPSR6-NEXT:    or $1, $zero, $4
3655; MIPSR6-NEXT:    sllv $4, $4, $10
3656; MIPSR6-NEXT:    slt $5, $4, $7
3657; MIPSR6-NEXT:    selnez $3, $4, $5
3658; MIPSR6-NEXT:    seleqz $5, $7, $5
3659; MIPSR6-NEXT:    or $3, $3, $5
3660; MIPSR6-NEXT:    and $3, $3, $8
3661; MIPSR6-NEXT:    and $4, $2, $9
3662; MIPSR6-NEXT:    or $4, $4, $3
3663; MIPSR6-NEXT:    sc $4, 0($6)
3664; MIPSR6-NEXT:    beqzc $4, $BB9_1
3665; MIPSR6-NEXT:    nop
3666; MIPSR6-NEXT:  # %bb.2: # %entry
3667; MIPSR6-NEXT:    .insn
3668; MIPSR6-NEXT:  # %bb.3: # %entry
3669; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3670; MIPSR6-NEXT:  # %bb.4: # %entry
3671; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3672; MIPSR6-NEXT:    sync
3673; MIPSR6-NEXT:    addiu $sp, $sp, 8
3674; MIPSR6-NEXT:    jrc $ra
3675;
3676; MM-LABEL: test_min_8:
3677; MM:       # %bb.0: # %entry
3678; MM-NEXT:    addiu $sp, $sp, -8
3679; MM-NEXT:    .cfi_def_cfa_offset 8
3680; MM-NEXT:    # kill: def $at killed $a1
3681; MM-NEXT:    sync
3682; MM-NEXT:    addiu $1, $zero, -4
3683; MM-NEXT:    and $6, $4, $1
3684; MM-NEXT:    andi $1, $4, 3
3685; MM-NEXT:    xori $1, $1, 3
3686; MM-NEXT:    sll $10, $1, 3
3687; MM-NEXT:    ori $1, $zero, 255
3688; MM-NEXT:    sllv $8, $1, $10
3689; MM-NEXT:    nor $9, $zero, $8
3690; MM-NEXT:    sllv $7, $5, $10
3691; MM-NEXT:  $BB9_1: # %entry
3692; MM-NEXT:    # =>This Inner Loop Header: Depth=1
3693; MM-NEXT:    ll $2, 0($6)
3694; MM-NEXT:    srav $4, $2, $10
3695; MM-NEXT:    seb $4, $4
3696; MM-NEXT:    or $1, $zero, $4
3697; MM-NEXT:    sllv $4, $4, $10
3698; MM-NEXT:    slt $5, $4, $7
3699; MM-NEXT:    or $3, $4, $zero
3700; MM-NEXT:    movz $3, $7, $5
3701; MM-NEXT:    and $3, $3, $8
3702; MM-NEXT:    and $4, $2, $9
3703; MM-NEXT:    or $4, $4, $3
3704; MM-NEXT:    sc $4, 0($6)
3705; MM-NEXT:    beqzc $4, $BB9_1
3706; MM-NEXT:  # %bb.2: # %entry
3707; MM-NEXT:    .insn
3708; MM-NEXT:  # %bb.3: # %entry
3709; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3710; MM-NEXT:  # %bb.4: # %entry
3711; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3712; MM-NEXT:    sync
3713; MM-NEXT:    addiusp 8
3714; MM-NEXT:    jrc $ra
3715;
3716; MMR6-LABEL: test_min_8:
3717; MMR6:       # %bb.0: # %entry
3718; MMR6-NEXT:    addiu $sp, $sp, -8
3719; MMR6-NEXT:    .cfi_def_cfa_offset 8
3720; MMR6-NEXT:    # kill: def $at killed $a1
3721; MMR6-NEXT:    sync
3722; MMR6-NEXT:    addiu $1, $zero, -4
3723; MMR6-NEXT:    and $6, $4, $1
3724; MMR6-NEXT:    andi $1, $4, 3
3725; MMR6-NEXT:    xori $1, $1, 3
3726; MMR6-NEXT:    sll $10, $1, 3
3727; MMR6-NEXT:    ori $1, $zero, 255
3728; MMR6-NEXT:    sllv $8, $1, $10
3729; MMR6-NEXT:    nor $9, $zero, $8
3730; MMR6-NEXT:    sllv $7, $5, $10
3731; MMR6-NEXT:  $BB9_1: # %entry
3732; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
3733; MMR6-NEXT:    ll $2, 0($6)
3734; MMR6-NEXT:    srav $4, $2, $10
3735; MMR6-NEXT:    seb $4, $4
3736; MMR6-NEXT:    or $1, $zero, $4
3737; MMR6-NEXT:    sllv $4, $4, $10
3738; MMR6-NEXT:    slt $5, $4, $7
3739; MMR6-NEXT:    selnez $3, $4, $5
3740; MMR6-NEXT:    seleqz $5, $7, $5
3741; MMR6-NEXT:    or $3, $3, $5
3742; MMR6-NEXT:    and $3, $3, $8
3743; MMR6-NEXT:    and $4, $2, $9
3744; MMR6-NEXT:    or $4, $4, $3
3745; MMR6-NEXT:    sc $4, 0($6)
3746; MMR6-NEXT:    beqc $4, $zero, $BB9_1
3747; MMR6-NEXT:  # %bb.2: # %entry
3748; MMR6-NEXT:    .insn
3749; MMR6-NEXT:  # %bb.3: # %entry
3750; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3751; MMR6-NEXT:  # %bb.4: # %entry
3752; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3753; MMR6-NEXT:    sync
3754; MMR6-NEXT:    addiu $sp, $sp, 8
3755; MMR6-NEXT:    jrc $ra
3756;
3757; MIPS32-LABEL: test_min_8:
3758; MIPS32:       # %bb.0: # %entry
3759; MIPS32-NEXT:    addiu $sp, $sp, -8
3760; MIPS32-NEXT:    .cfi_def_cfa_offset 8
3761; MIPS32-NEXT:    # kill: def $at killed $a1
3762; MIPS32-NEXT:    sync
3763; MIPS32-NEXT:    addiu $1, $zero, -4
3764; MIPS32-NEXT:    and $6, $4, $1
3765; MIPS32-NEXT:    andi $1, $4, 3
3766; MIPS32-NEXT:    sll $10, $1, 3
3767; MIPS32-NEXT:    ori $1, $zero, 255
3768; MIPS32-NEXT:    sllv $8, $1, $10
3769; MIPS32-NEXT:    nor $9, $zero, $8
3770; MIPS32-NEXT:    sllv $7, $5, $10
3771; MIPS32-NEXT:  $BB9_1: # %entry
3772; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
3773; MIPS32-NEXT:    ll $2, 0($6)
3774; MIPS32-NEXT:    srav $4, $2, $10
3775; MIPS32-NEXT:    sll $4, $4, 24
3776; MIPS32-NEXT:    sra $4, $4, 24
3777; MIPS32-NEXT:    or $1, $zero, $4
3778; MIPS32-NEXT:    sllv $4, $4, $10
3779; MIPS32-NEXT:    slt $5, $4, $7
3780; MIPS32-NEXT:    move $3, $4
3781; MIPS32-NEXT:    movz $3, $7, $5
3782; MIPS32-NEXT:    and $3, $3, $8
3783; MIPS32-NEXT:    and $4, $2, $9
3784; MIPS32-NEXT:    or $4, $4, $3
3785; MIPS32-NEXT:    sc $4, 0($6)
3786; MIPS32-NEXT:    beqz $4, $BB9_1
3787; MIPS32-NEXT:    nop
3788; MIPS32-NEXT:  # %bb.2: # %entry
3789; MIPS32-NEXT:    .insn
3790; MIPS32-NEXT:  # %bb.3: # %entry
3791; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3792; MIPS32-NEXT:  # %bb.4: # %entry
3793; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3794; MIPS32-NEXT:    sync
3795; MIPS32-NEXT:    addiu $sp, $sp, 8
3796; MIPS32-NEXT:    jr $ra
3797; MIPS32-NEXT:    nop
3798;
3799; MIPSEL-LABEL: test_min_8:
3800; MIPSEL:       # %bb.0: # %entry
3801; MIPSEL-NEXT:    addiu $sp, $sp, -8
3802; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
3803; MIPSEL-NEXT:    # kill: def $at killed $a1
3804; MIPSEL-NEXT:    sync
3805; MIPSEL-NEXT:    addiu $1, $zero, -4
3806; MIPSEL-NEXT:    and $6, $4, $1
3807; MIPSEL-NEXT:    andi $1, $4, 3
3808; MIPSEL-NEXT:    sll $10, $1, 3
3809; MIPSEL-NEXT:    ori $1, $zero, 255
3810; MIPSEL-NEXT:    sllv $8, $1, $10
3811; MIPSEL-NEXT:    nor $9, $zero, $8
3812; MIPSEL-NEXT:    sllv $7, $5, $10
3813; MIPSEL-NEXT:  $BB9_1: # %entry
3814; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
3815; MIPSEL-NEXT:    ll $2, 0($6)
3816; MIPSEL-NEXT:    srav $4, $2, $10
3817; MIPSEL-NEXT:    seb $4, $4
3818; MIPSEL-NEXT:    or $1, $zero, $4
3819; MIPSEL-NEXT:    sllv $4, $4, $10
3820; MIPSEL-NEXT:    slt $5, $4, $7
3821; MIPSEL-NEXT:    move $3, $4
3822; MIPSEL-NEXT:    movz $3, $7, $5
3823; MIPSEL-NEXT:    and $3, $3, $8
3824; MIPSEL-NEXT:    and $4, $2, $9
3825; MIPSEL-NEXT:    or $4, $4, $3
3826; MIPSEL-NEXT:    sc $4, 0($6)
3827; MIPSEL-NEXT:    beqz $4, $BB9_1
3828; MIPSEL-NEXT:    nop
3829; MIPSEL-NEXT:  # %bb.2: # %entry
3830; MIPSEL-NEXT:    .insn
3831; MIPSEL-NEXT:  # %bb.3: # %entry
3832; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3833; MIPSEL-NEXT:  # %bb.4: # %entry
3834; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3835; MIPSEL-NEXT:    sync
3836; MIPSEL-NEXT:    addiu $sp, $sp, 8
3837; MIPSEL-NEXT:    jr $ra
3838; MIPSEL-NEXT:    nop
3839;
3840; MIPSELR6-LABEL: test_min_8:
3841; MIPSELR6:       # %bb.0: # %entry
3842; MIPSELR6-NEXT:    addiu $sp, $sp, -8
3843; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
3844; MIPSELR6-NEXT:    # kill: def $at killed $a1
3845; MIPSELR6-NEXT:    sync
3846; MIPSELR6-NEXT:    addiu $1, $zero, -4
3847; MIPSELR6-NEXT:    and $6, $4, $1
3848; MIPSELR6-NEXT:    andi $1, $4, 3
3849; MIPSELR6-NEXT:    sll $10, $1, 3
3850; MIPSELR6-NEXT:    ori $1, $zero, 255
3851; MIPSELR6-NEXT:    sllv $8, $1, $10
3852; MIPSELR6-NEXT:    nor $9, $zero, $8
3853; MIPSELR6-NEXT:    sllv $7, $5, $10
3854; MIPSELR6-NEXT:  $BB9_1: # %entry
3855; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
3856; MIPSELR6-NEXT:    ll $2, 0($6)
3857; MIPSELR6-NEXT:    srav $4, $2, $10
3858; MIPSELR6-NEXT:    seb $4, $4
3859; MIPSELR6-NEXT:    or $1, $zero, $4
3860; MIPSELR6-NEXT:    sllv $4, $4, $10
3861; MIPSELR6-NEXT:    slt $5, $4, $7
3862; MIPSELR6-NEXT:    selnez $3, $4, $5
3863; MIPSELR6-NEXT:    seleqz $5, $7, $5
3864; MIPSELR6-NEXT:    or $3, $3, $5
3865; MIPSELR6-NEXT:    and $3, $3, $8
3866; MIPSELR6-NEXT:    and $4, $2, $9
3867; MIPSELR6-NEXT:    or $4, $4, $3
3868; MIPSELR6-NEXT:    sc $4, 0($6)
3869; MIPSELR6-NEXT:    beqzc $4, $BB9_1
3870; MIPSELR6-NEXT:    nop
3871; MIPSELR6-NEXT:  # %bb.2: # %entry
3872; MIPSELR6-NEXT:    .insn
3873; MIPSELR6-NEXT:  # %bb.3: # %entry
3874; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3875; MIPSELR6-NEXT:  # %bb.4: # %entry
3876; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3877; MIPSELR6-NEXT:    sync
3878; MIPSELR6-NEXT:    addiu $sp, $sp, 8
3879; MIPSELR6-NEXT:    jrc $ra
3880;
3881; MMEL-LABEL: test_min_8:
3882; MMEL:       # %bb.0: # %entry
3883; MMEL-NEXT:    addiu $sp, $sp, -8
3884; MMEL-NEXT:    .cfi_def_cfa_offset 8
3885; MMEL-NEXT:    # kill: def $at killed $a1
3886; MMEL-NEXT:    sync
3887; MMEL-NEXT:    addiu $1, $zero, -4
3888; MMEL-NEXT:    and $6, $4, $1
3889; MMEL-NEXT:    andi $1, $4, 3
3890; MMEL-NEXT:    sll $10, $1, 3
3891; MMEL-NEXT:    ori $1, $zero, 255
3892; MMEL-NEXT:    sllv $8, $1, $10
3893; MMEL-NEXT:    nor $9, $zero, $8
3894; MMEL-NEXT:    sllv $7, $5, $10
3895; MMEL-NEXT:  $BB9_1: # %entry
3896; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
3897; MMEL-NEXT:    ll $2, 0($6)
3898; MMEL-NEXT:    srav $4, $2, $10
3899; MMEL-NEXT:    seb $4, $4
3900; MMEL-NEXT:    or $1, $zero, $4
3901; MMEL-NEXT:    sllv $4, $4, $10
3902; MMEL-NEXT:    slt $5, $4, $7
3903; MMEL-NEXT:    or $3, $4, $zero
3904; MMEL-NEXT:    movz $3, $7, $5
3905; MMEL-NEXT:    and $3, $3, $8
3906; MMEL-NEXT:    and $4, $2, $9
3907; MMEL-NEXT:    or $4, $4, $3
3908; MMEL-NEXT:    sc $4, 0($6)
3909; MMEL-NEXT:    beqzc $4, $BB9_1
3910; MMEL-NEXT:  # %bb.2: # %entry
3911; MMEL-NEXT:    .insn
3912; MMEL-NEXT:  # %bb.3: # %entry
3913; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3914; MMEL-NEXT:  # %bb.4: # %entry
3915; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3916; MMEL-NEXT:    sync
3917; MMEL-NEXT:    addiusp 8
3918; MMEL-NEXT:    jrc $ra
3919;
3920; MMELR6-LABEL: test_min_8:
3921; MMELR6:       # %bb.0: # %entry
3922; MMELR6-NEXT:    addiu $sp, $sp, -8
3923; MMELR6-NEXT:    .cfi_def_cfa_offset 8
3924; MMELR6-NEXT:    # kill: def $at killed $a1
3925; MMELR6-NEXT:    sync
3926; MMELR6-NEXT:    addiu $1, $zero, -4
3927; MMELR6-NEXT:    and $6, $4, $1
3928; MMELR6-NEXT:    andi $1, $4, 3
3929; MMELR6-NEXT:    sll $10, $1, 3
3930; MMELR6-NEXT:    ori $1, $zero, 255
3931; MMELR6-NEXT:    sllv $8, $1, $10
3932; MMELR6-NEXT:    nor $9, $zero, $8
3933; MMELR6-NEXT:    sllv $7, $5, $10
3934; MMELR6-NEXT:  $BB9_1: # %entry
3935; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
3936; MMELR6-NEXT:    ll $2, 0($6)
3937; MMELR6-NEXT:    srav $4, $2, $10
3938; MMELR6-NEXT:    seb $4, $4
3939; MMELR6-NEXT:    or $1, $zero, $4
3940; MMELR6-NEXT:    sllv $4, $4, $10
3941; MMELR6-NEXT:    slt $5, $4, $7
3942; MMELR6-NEXT:    selnez $3, $4, $5
3943; MMELR6-NEXT:    seleqz $5, $7, $5
3944; MMELR6-NEXT:    or $3, $3, $5
3945; MMELR6-NEXT:    and $3, $3, $8
3946; MMELR6-NEXT:    and $4, $2, $9
3947; MMELR6-NEXT:    or $4, $4, $3
3948; MMELR6-NEXT:    sc $4, 0($6)
3949; MMELR6-NEXT:    beqc $4, $zero, $BB9_1
3950; MMELR6-NEXT:  # %bb.2: # %entry
3951; MMELR6-NEXT:    .insn
3952; MMELR6-NEXT:  # %bb.3: # %entry
3953; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
3954; MMELR6-NEXT:  # %bb.4: # %entry
3955; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
3956; MMELR6-NEXT:    sync
3957; MMELR6-NEXT:    addiu $sp, $sp, 8
3958; MMELR6-NEXT:    jrc $ra
3959;
3960; MIPS64-LABEL: test_min_8:
3961; MIPS64:       # %bb.0: # %entry
3962; MIPS64-NEXT:    daddiu $sp, $sp, -16
3963; MIPS64-NEXT:    .cfi_def_cfa_offset 16
3964; MIPS64-NEXT:    move $1, $5
3965; MIPS64-NEXT:    sync
3966; MIPS64-NEXT:    daddiu $2, $zero, -4
3967; MIPS64-NEXT:    and $6, $4, $2
3968; MIPS64-NEXT:    andi $2, $4, 3
3969; MIPS64-NEXT:    xori $2, $2, 3
3970; MIPS64-NEXT:    sll $10, $2, 3
3971; MIPS64-NEXT:    ori $2, $zero, 255
3972; MIPS64-NEXT:    sllv $8, $2, $10
3973; MIPS64-NEXT:    nor $9, $zero, $8
3974; MIPS64-NEXT:    sllv $7, $1, $10
3975; MIPS64-NEXT:  .LBB9_1: # %entry
3976; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
3977; MIPS64-NEXT:    ll $2, 0($6)
3978; MIPS64-NEXT:    srav $4, $2, $10
3979; MIPS64-NEXT:    seb $4, $4
3980; MIPS64-NEXT:    or $1, $zero, $4
3981; MIPS64-NEXT:    sllv $4, $4, $10
3982; MIPS64-NEXT:    slt $5, $4, $7
3983; MIPS64-NEXT:    move $3, $4
3984; MIPS64-NEXT:    movz $3, $7, $5
3985; MIPS64-NEXT:    and $3, $3, $8
3986; MIPS64-NEXT:    and $4, $2, $9
3987; MIPS64-NEXT:    or $4, $4, $3
3988; MIPS64-NEXT:    sc $4, 0($6)
3989; MIPS64-NEXT:    beqz $4, .LBB9_1
3990; MIPS64-NEXT:    nop
3991; MIPS64-NEXT:  # %bb.2: # %entry
3992; MIPS64-NEXT:    .insn
3993; MIPS64-NEXT:  # %bb.3: # %entry
3994; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
3995; MIPS64-NEXT:  # %bb.4: # %entry
3996; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
3997; MIPS64-NEXT:    sync
3998; MIPS64-NEXT:    daddiu $sp, $sp, 16
3999; MIPS64-NEXT:    jr $ra
4000; MIPS64-NEXT:    nop
4001;
4002; MIPS64R6-LABEL: test_min_8:
4003; MIPS64R6:       # %bb.0: # %entry
4004; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
4005; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
4006; MIPS64R6-NEXT:    move $1, $5
4007; MIPS64R6-NEXT:    sync
4008; MIPS64R6-NEXT:    daddiu $2, $zero, -4
4009; MIPS64R6-NEXT:    and $6, $4, $2
4010; MIPS64R6-NEXT:    andi $2, $4, 3
4011; MIPS64R6-NEXT:    xori $2, $2, 3
4012; MIPS64R6-NEXT:    sll $10, $2, 3
4013; MIPS64R6-NEXT:    ori $2, $zero, 255
4014; MIPS64R6-NEXT:    sllv $8, $2, $10
4015; MIPS64R6-NEXT:    nor $9, $zero, $8
4016; MIPS64R6-NEXT:    sllv $7, $1, $10
4017; MIPS64R6-NEXT:  .LBB9_1: # %entry
4018; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
4019; MIPS64R6-NEXT:    ll $2, 0($6)
4020; MIPS64R6-NEXT:    srav $4, $2, $10
4021; MIPS64R6-NEXT:    seb $4, $4
4022; MIPS64R6-NEXT:    or $1, $zero, $4
4023; MIPS64R6-NEXT:    sllv $4, $4, $10
4024; MIPS64R6-NEXT:    slt $5, $4, $7
4025; MIPS64R6-NEXT:    selnez $3, $4, $5
4026; MIPS64R6-NEXT:    seleqz $5, $7, $5
4027; MIPS64R6-NEXT:    or $3, $3, $5
4028; MIPS64R6-NEXT:    and $3, $3, $8
4029; MIPS64R6-NEXT:    and $4, $2, $9
4030; MIPS64R6-NEXT:    or $4, $4, $3
4031; MIPS64R6-NEXT:    sc $4, 0($6)
4032; MIPS64R6-NEXT:    beqzc $4, .LBB9_1
4033; MIPS64R6-NEXT:    nop
4034; MIPS64R6-NEXT:  # %bb.2: # %entry
4035; MIPS64R6-NEXT:    .insn
4036; MIPS64R6-NEXT:  # %bb.3: # %entry
4037; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4038; MIPS64R6-NEXT:  # %bb.4: # %entry
4039; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4040; MIPS64R6-NEXT:    sync
4041; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
4042; MIPS64R6-NEXT:    jrc $ra
4043;
4044; MIPS64EL-LABEL: test_min_8:
4045; MIPS64EL:       # %bb.0: # %entry
4046; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4047; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4048; MIPS64EL-NEXT:    move $1, $5
4049; MIPS64EL-NEXT:    sync
4050; MIPS64EL-NEXT:    daddiu $2, $zero, -4
4051; MIPS64EL-NEXT:    and $6, $4, $2
4052; MIPS64EL-NEXT:    andi $2, $4, 3
4053; MIPS64EL-NEXT:    sll $10, $2, 3
4054; MIPS64EL-NEXT:    ori $2, $zero, 255
4055; MIPS64EL-NEXT:    sllv $8, $2, $10
4056; MIPS64EL-NEXT:    nor $9, $zero, $8
4057; MIPS64EL-NEXT:    sllv $7, $1, $10
4058; MIPS64EL-NEXT:  .LBB9_1: # %entry
4059; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
4060; MIPS64EL-NEXT:    ll $2, 0($6)
4061; MIPS64EL-NEXT:    srav $4, $2, $10
4062; MIPS64EL-NEXT:    seb $4, $4
4063; MIPS64EL-NEXT:    or $1, $zero, $4
4064; MIPS64EL-NEXT:    sllv $4, $4, $10
4065; MIPS64EL-NEXT:    slt $5, $4, $7
4066; MIPS64EL-NEXT:    move $3, $4
4067; MIPS64EL-NEXT:    movz $3, $7, $5
4068; MIPS64EL-NEXT:    and $3, $3, $8
4069; MIPS64EL-NEXT:    and $4, $2, $9
4070; MIPS64EL-NEXT:    or $4, $4, $3
4071; MIPS64EL-NEXT:    sc $4, 0($6)
4072; MIPS64EL-NEXT:    beqz $4, .LBB9_1
4073; MIPS64EL-NEXT:    nop
4074; MIPS64EL-NEXT:  # %bb.2: # %entry
4075; MIPS64EL-NEXT:    .insn
4076; MIPS64EL-NEXT:  # %bb.3: # %entry
4077; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4078; MIPS64EL-NEXT:  # %bb.4: # %entry
4079; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4080; MIPS64EL-NEXT:    sync
4081; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4082; MIPS64EL-NEXT:    jr $ra
4083; MIPS64EL-NEXT:    nop
4084;
4085; MIPS64ELR6-LABEL: test_min_8:
4086; MIPS64ELR6:       # %bb.0: # %entry
4087; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
4088; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
4089; MIPS64ELR6-NEXT:    move $1, $5
4090; MIPS64ELR6-NEXT:    sync
4091; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
4092; MIPS64ELR6-NEXT:    and $6, $4, $2
4093; MIPS64ELR6-NEXT:    andi $2, $4, 3
4094; MIPS64ELR6-NEXT:    sll $10, $2, 3
4095; MIPS64ELR6-NEXT:    ori $2, $zero, 255
4096; MIPS64ELR6-NEXT:    sllv $8, $2, $10
4097; MIPS64ELR6-NEXT:    nor $9, $zero, $8
4098; MIPS64ELR6-NEXT:    sllv $7, $1, $10
4099; MIPS64ELR6-NEXT:  .LBB9_1: # %entry
4100; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
4101; MIPS64ELR6-NEXT:    ll $2, 0($6)
4102; MIPS64ELR6-NEXT:    srav $4, $2, $10
4103; MIPS64ELR6-NEXT:    seb $4, $4
4104; MIPS64ELR6-NEXT:    or $1, $zero, $4
4105; MIPS64ELR6-NEXT:    sllv $4, $4, $10
4106; MIPS64ELR6-NEXT:    slt $5, $4, $7
4107; MIPS64ELR6-NEXT:    selnez $3, $4, $5
4108; MIPS64ELR6-NEXT:    seleqz $5, $7, $5
4109; MIPS64ELR6-NEXT:    or $3, $3, $5
4110; MIPS64ELR6-NEXT:    and $3, $3, $8
4111; MIPS64ELR6-NEXT:    and $4, $2, $9
4112; MIPS64ELR6-NEXT:    or $4, $4, $3
4113; MIPS64ELR6-NEXT:    sc $4, 0($6)
4114; MIPS64ELR6-NEXT:    beqzc $4, .LBB9_1
4115; MIPS64ELR6-NEXT:    nop
4116; MIPS64ELR6-NEXT:  # %bb.2: # %entry
4117; MIPS64ELR6-NEXT:    .insn
4118; MIPS64ELR6-NEXT:  # %bb.3: # %entry
4119; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4120; MIPS64ELR6-NEXT:  # %bb.4: # %entry
4121; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4122; MIPS64ELR6-NEXT:    sync
4123; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
4124; MIPS64ELR6-NEXT:    jrc $ra
4125entry:
4126  %0 = atomicrmw min ptr %ptr, i8 %val seq_cst
4127  ret i8 %0
4128}
4129
4130define i8 @test_umax_8(ptr nocapture %ptr, i8 signext %val) {
4131; MIPS-LABEL: test_umax_8:
4132; MIPS:       # %bb.0: # %entry
4133; MIPS-NEXT:    addiu $sp, $sp, -8
4134; MIPS-NEXT:    .cfi_def_cfa_offset 8
4135; MIPS-NEXT:    # kill: def $at killed $a1
4136; MIPS-NEXT:    sync
4137; MIPS-NEXT:    addiu $1, $zero, -4
4138; MIPS-NEXT:    and $6, $4, $1
4139; MIPS-NEXT:    andi $1, $4, 3
4140; MIPS-NEXT:    xori $1, $1, 3
4141; MIPS-NEXT:    sll $10, $1, 3
4142; MIPS-NEXT:    ori $1, $zero, 255
4143; MIPS-NEXT:    sllv $8, $1, $10
4144; MIPS-NEXT:    nor $9, $zero, $8
4145; MIPS-NEXT:    sllv $7, $5, $10
4146; MIPS-NEXT:  $BB10_1: # %entry
4147; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
4148; MIPS-NEXT:    ll $2, 0($6)
4149; MIPS-NEXT:    srav $4, $2, $10
4150; MIPS-NEXT:    andi $4, $4, 255
4151; MIPS-NEXT:    or $1, $zero, $4
4152; MIPS-NEXT:    sllv $4, $4, $10
4153; MIPS-NEXT:    sltu $5, $4, $7
4154; MIPS-NEXT:    move $3, $4
4155; MIPS-NEXT:    movn $3, $7, $5
4156; MIPS-NEXT:    and $3, $3, $8
4157; MIPS-NEXT:    and $4, $2, $9
4158; MIPS-NEXT:    or $4, $4, $3
4159; MIPS-NEXT:    sc $4, 0($6)
4160; MIPS-NEXT:    beqz $4, $BB10_1
4161; MIPS-NEXT:    nop
4162; MIPS-NEXT:  # %bb.2: # %entry
4163; MIPS-NEXT:    .insn
4164; MIPS-NEXT:  # %bb.3: # %entry
4165; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4166; MIPS-NEXT:  # %bb.4: # %entry
4167; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4168; MIPS-NEXT:    sync
4169; MIPS-NEXT:    addiu $sp, $sp, 8
4170; MIPS-NEXT:    jr $ra
4171; MIPS-NEXT:    nop
4172;
4173; MIPSR6-LABEL: test_umax_8:
4174; MIPSR6:       # %bb.0: # %entry
4175; MIPSR6-NEXT:    addiu $sp, $sp, -8
4176; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
4177; MIPSR6-NEXT:    # kill: def $at killed $a1
4178; MIPSR6-NEXT:    sync
4179; MIPSR6-NEXT:    addiu $1, $zero, -4
4180; MIPSR6-NEXT:    and $6, $4, $1
4181; MIPSR6-NEXT:    andi $1, $4, 3
4182; MIPSR6-NEXT:    xori $1, $1, 3
4183; MIPSR6-NEXT:    sll $10, $1, 3
4184; MIPSR6-NEXT:    ori $1, $zero, 255
4185; MIPSR6-NEXT:    sllv $8, $1, $10
4186; MIPSR6-NEXT:    nor $9, $zero, $8
4187; MIPSR6-NEXT:    sllv $7, $5, $10
4188; MIPSR6-NEXT:  $BB10_1: # %entry
4189; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
4190; MIPSR6-NEXT:    ll $2, 0($6)
4191; MIPSR6-NEXT:    srav $4, $2, $10
4192; MIPSR6-NEXT:    andi $4, $4, 255
4193; MIPSR6-NEXT:    or $1, $zero, $4
4194; MIPSR6-NEXT:    sllv $4, $4, $10
4195; MIPSR6-NEXT:    sltu $5, $4, $7
4196; MIPSR6-NEXT:    seleqz $3, $4, $5
4197; MIPSR6-NEXT:    selnez $5, $7, $5
4198; MIPSR6-NEXT:    or $3, $3, $5
4199; MIPSR6-NEXT:    and $3, $3, $8
4200; MIPSR6-NEXT:    and $4, $2, $9
4201; MIPSR6-NEXT:    or $4, $4, $3
4202; MIPSR6-NEXT:    sc $4, 0($6)
4203; MIPSR6-NEXT:    beqzc $4, $BB10_1
4204; MIPSR6-NEXT:    nop
4205; MIPSR6-NEXT:  # %bb.2: # %entry
4206; MIPSR6-NEXT:    .insn
4207; MIPSR6-NEXT:  # %bb.3: # %entry
4208; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4209; MIPSR6-NEXT:  # %bb.4: # %entry
4210; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4211; MIPSR6-NEXT:    sync
4212; MIPSR6-NEXT:    addiu $sp, $sp, 8
4213; MIPSR6-NEXT:    jrc $ra
4214;
4215; MM-LABEL: test_umax_8:
4216; MM:       # %bb.0: # %entry
4217; MM-NEXT:    addiu $sp, $sp, -8
4218; MM-NEXT:    .cfi_def_cfa_offset 8
4219; MM-NEXT:    # kill: def $at killed $a1
4220; MM-NEXT:    sync
4221; MM-NEXT:    addiu $1, $zero, -4
4222; MM-NEXT:    and $6, $4, $1
4223; MM-NEXT:    andi $1, $4, 3
4224; MM-NEXT:    xori $1, $1, 3
4225; MM-NEXT:    sll $10, $1, 3
4226; MM-NEXT:    ori $1, $zero, 255
4227; MM-NEXT:    sllv $8, $1, $10
4228; MM-NEXT:    nor $9, $zero, $8
4229; MM-NEXT:    sllv $7, $5, $10
4230; MM-NEXT:  $BB10_1: # %entry
4231; MM-NEXT:    # =>This Inner Loop Header: Depth=1
4232; MM-NEXT:    ll $2, 0($6)
4233; MM-NEXT:    srav $4, $2, $10
4234; MM-NEXT:    andi $4, $4, 255
4235; MM-NEXT:    or $1, $zero, $4
4236; MM-NEXT:    sllv $4, $4, $10
4237; MM-NEXT:    sltu $5, $4, $7
4238; MM-NEXT:    or $3, $4, $zero
4239; MM-NEXT:    movn $3, $7, $5
4240; MM-NEXT:    and $3, $3, $8
4241; MM-NEXT:    and $4, $2, $9
4242; MM-NEXT:    or $4, $4, $3
4243; MM-NEXT:    sc $4, 0($6)
4244; MM-NEXT:    beqzc $4, $BB10_1
4245; MM-NEXT:  # %bb.2: # %entry
4246; MM-NEXT:    .insn
4247; MM-NEXT:  # %bb.3: # %entry
4248; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4249; MM-NEXT:  # %bb.4: # %entry
4250; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4251; MM-NEXT:    sync
4252; MM-NEXT:    addiusp 8
4253; MM-NEXT:    jrc $ra
4254;
4255; MMR6-LABEL: test_umax_8:
4256; MMR6:       # %bb.0: # %entry
4257; MMR6-NEXT:    addiu $sp, $sp, -8
4258; MMR6-NEXT:    .cfi_def_cfa_offset 8
4259; MMR6-NEXT:    # kill: def $at killed $a1
4260; MMR6-NEXT:    sync
4261; MMR6-NEXT:    addiu $1, $zero, -4
4262; MMR6-NEXT:    and $6, $4, $1
4263; MMR6-NEXT:    andi $1, $4, 3
4264; MMR6-NEXT:    xori $1, $1, 3
4265; MMR6-NEXT:    sll $10, $1, 3
4266; MMR6-NEXT:    ori $1, $zero, 255
4267; MMR6-NEXT:    sllv $8, $1, $10
4268; MMR6-NEXT:    nor $9, $zero, $8
4269; MMR6-NEXT:    sllv $7, $5, $10
4270; MMR6-NEXT:  $BB10_1: # %entry
4271; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
4272; MMR6-NEXT:    ll $2, 0($6)
4273; MMR6-NEXT:    srav $4, $2, $10
4274; MMR6-NEXT:    andi $4, $4, 255
4275; MMR6-NEXT:    or $1, $zero, $4
4276; MMR6-NEXT:    sllv $4, $4, $10
4277; MMR6-NEXT:    sltu $5, $4, $7
4278; MMR6-NEXT:    seleqz $3, $4, $5
4279; MMR6-NEXT:    selnez $5, $7, $5
4280; MMR6-NEXT:    or $3, $3, $5
4281; MMR6-NEXT:    and $3, $3, $8
4282; MMR6-NEXT:    and $4, $2, $9
4283; MMR6-NEXT:    or $4, $4, $3
4284; MMR6-NEXT:    sc $4, 0($6)
4285; MMR6-NEXT:    beqc $4, $zero, $BB10_1
4286; MMR6-NEXT:  # %bb.2: # %entry
4287; MMR6-NEXT:    .insn
4288; MMR6-NEXT:  # %bb.3: # %entry
4289; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4290; MMR6-NEXT:  # %bb.4: # %entry
4291; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4292; MMR6-NEXT:    sync
4293; MMR6-NEXT:    addiu $sp, $sp, 8
4294; MMR6-NEXT:    jrc $ra
4295;
4296; MIPS32-LABEL: test_umax_8:
4297; MIPS32:       # %bb.0: # %entry
4298; MIPS32-NEXT:    addiu $sp, $sp, -8
4299; MIPS32-NEXT:    .cfi_def_cfa_offset 8
4300; MIPS32-NEXT:    # kill: def $at killed $a1
4301; MIPS32-NEXT:    sync
4302; MIPS32-NEXT:    addiu $1, $zero, -4
4303; MIPS32-NEXT:    and $6, $4, $1
4304; MIPS32-NEXT:    andi $1, $4, 3
4305; MIPS32-NEXT:    sll $10, $1, 3
4306; MIPS32-NEXT:    ori $1, $zero, 255
4307; MIPS32-NEXT:    sllv $8, $1, $10
4308; MIPS32-NEXT:    nor $9, $zero, $8
4309; MIPS32-NEXT:    sllv $7, $5, $10
4310; MIPS32-NEXT:  $BB10_1: # %entry
4311; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
4312; MIPS32-NEXT:    ll $2, 0($6)
4313; MIPS32-NEXT:    srav $4, $2, $10
4314; MIPS32-NEXT:    andi $4, $4, 255
4315; MIPS32-NEXT:    or $1, $zero, $4
4316; MIPS32-NEXT:    sllv $4, $4, $10
4317; MIPS32-NEXT:    sltu $5, $4, $7
4318; MIPS32-NEXT:    move $3, $4
4319; MIPS32-NEXT:    movn $3, $7, $5
4320; MIPS32-NEXT:    and $3, $3, $8
4321; MIPS32-NEXT:    and $4, $2, $9
4322; MIPS32-NEXT:    or $4, $4, $3
4323; MIPS32-NEXT:    sc $4, 0($6)
4324; MIPS32-NEXT:    beqz $4, $BB10_1
4325; MIPS32-NEXT:    nop
4326; MIPS32-NEXT:  # %bb.2: # %entry
4327; MIPS32-NEXT:    .insn
4328; MIPS32-NEXT:  # %bb.3: # %entry
4329; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4330; MIPS32-NEXT:  # %bb.4: # %entry
4331; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4332; MIPS32-NEXT:    sync
4333; MIPS32-NEXT:    addiu $sp, $sp, 8
4334; MIPS32-NEXT:    jr $ra
4335; MIPS32-NEXT:    nop
4336;
4337; MIPSEL-LABEL: test_umax_8:
4338; MIPSEL:       # %bb.0: # %entry
4339; MIPSEL-NEXT:    addiu $sp, $sp, -8
4340; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
4341; MIPSEL-NEXT:    # kill: def $at killed $a1
4342; MIPSEL-NEXT:    sync
4343; MIPSEL-NEXT:    addiu $1, $zero, -4
4344; MIPSEL-NEXT:    and $6, $4, $1
4345; MIPSEL-NEXT:    andi $1, $4, 3
4346; MIPSEL-NEXT:    sll $10, $1, 3
4347; MIPSEL-NEXT:    ori $1, $zero, 255
4348; MIPSEL-NEXT:    sllv $8, $1, $10
4349; MIPSEL-NEXT:    nor $9, $zero, $8
4350; MIPSEL-NEXT:    sllv $7, $5, $10
4351; MIPSEL-NEXT:  $BB10_1: # %entry
4352; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
4353; MIPSEL-NEXT:    ll $2, 0($6)
4354; MIPSEL-NEXT:    srav $4, $2, $10
4355; MIPSEL-NEXT:    andi $4, $4, 255
4356; MIPSEL-NEXT:    or $1, $zero, $4
4357; MIPSEL-NEXT:    sllv $4, $4, $10
4358; MIPSEL-NEXT:    sltu $5, $4, $7
4359; MIPSEL-NEXT:    move $3, $4
4360; MIPSEL-NEXT:    movn $3, $7, $5
4361; MIPSEL-NEXT:    and $3, $3, $8
4362; MIPSEL-NEXT:    and $4, $2, $9
4363; MIPSEL-NEXT:    or $4, $4, $3
4364; MIPSEL-NEXT:    sc $4, 0($6)
4365; MIPSEL-NEXT:    beqz $4, $BB10_1
4366; MIPSEL-NEXT:    nop
4367; MIPSEL-NEXT:  # %bb.2: # %entry
4368; MIPSEL-NEXT:    .insn
4369; MIPSEL-NEXT:  # %bb.3: # %entry
4370; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4371; MIPSEL-NEXT:  # %bb.4: # %entry
4372; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4373; MIPSEL-NEXT:    sync
4374; MIPSEL-NEXT:    addiu $sp, $sp, 8
4375; MIPSEL-NEXT:    jr $ra
4376; MIPSEL-NEXT:    nop
4377;
4378; MIPSELR6-LABEL: test_umax_8:
4379; MIPSELR6:       # %bb.0: # %entry
4380; MIPSELR6-NEXT:    addiu $sp, $sp, -8
4381; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
4382; MIPSELR6-NEXT:    # kill: def $at killed $a1
4383; MIPSELR6-NEXT:    sync
4384; MIPSELR6-NEXT:    addiu $1, $zero, -4
4385; MIPSELR6-NEXT:    and $6, $4, $1
4386; MIPSELR6-NEXT:    andi $1, $4, 3
4387; MIPSELR6-NEXT:    sll $10, $1, 3
4388; MIPSELR6-NEXT:    ori $1, $zero, 255
4389; MIPSELR6-NEXT:    sllv $8, $1, $10
4390; MIPSELR6-NEXT:    nor $9, $zero, $8
4391; MIPSELR6-NEXT:    sllv $7, $5, $10
4392; MIPSELR6-NEXT:  $BB10_1: # %entry
4393; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
4394; MIPSELR6-NEXT:    ll $2, 0($6)
4395; MIPSELR6-NEXT:    srav $4, $2, $10
4396; MIPSELR6-NEXT:    andi $4, $4, 255
4397; MIPSELR6-NEXT:    or $1, $zero, $4
4398; MIPSELR6-NEXT:    sllv $4, $4, $10
4399; MIPSELR6-NEXT:    sltu $5, $4, $7
4400; MIPSELR6-NEXT:    seleqz $3, $4, $5
4401; MIPSELR6-NEXT:    selnez $5, $7, $5
4402; MIPSELR6-NEXT:    or $3, $3, $5
4403; MIPSELR6-NEXT:    and $3, $3, $8
4404; MIPSELR6-NEXT:    and $4, $2, $9
4405; MIPSELR6-NEXT:    or $4, $4, $3
4406; MIPSELR6-NEXT:    sc $4, 0($6)
4407; MIPSELR6-NEXT:    beqzc $4, $BB10_1
4408; MIPSELR6-NEXT:    nop
4409; MIPSELR6-NEXT:  # %bb.2: # %entry
4410; MIPSELR6-NEXT:    .insn
4411; MIPSELR6-NEXT:  # %bb.3: # %entry
4412; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4413; MIPSELR6-NEXT:  # %bb.4: # %entry
4414; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4415; MIPSELR6-NEXT:    sync
4416; MIPSELR6-NEXT:    addiu $sp, $sp, 8
4417; MIPSELR6-NEXT:    jrc $ra
4418;
4419; MMEL-LABEL: test_umax_8:
4420; MMEL:       # %bb.0: # %entry
4421; MMEL-NEXT:    addiu $sp, $sp, -8
4422; MMEL-NEXT:    .cfi_def_cfa_offset 8
4423; MMEL-NEXT:    # kill: def $at killed $a1
4424; MMEL-NEXT:    sync
4425; MMEL-NEXT:    addiu $1, $zero, -4
4426; MMEL-NEXT:    and $6, $4, $1
4427; MMEL-NEXT:    andi $1, $4, 3
4428; MMEL-NEXT:    sll $10, $1, 3
4429; MMEL-NEXT:    ori $1, $zero, 255
4430; MMEL-NEXT:    sllv $8, $1, $10
4431; MMEL-NEXT:    nor $9, $zero, $8
4432; MMEL-NEXT:    sllv $7, $5, $10
4433; MMEL-NEXT:  $BB10_1: # %entry
4434; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
4435; MMEL-NEXT:    ll $2, 0($6)
4436; MMEL-NEXT:    srav $4, $2, $10
4437; MMEL-NEXT:    andi $4, $4, 255
4438; MMEL-NEXT:    or $1, $zero, $4
4439; MMEL-NEXT:    sllv $4, $4, $10
4440; MMEL-NEXT:    sltu $5, $4, $7
4441; MMEL-NEXT:    or $3, $4, $zero
4442; MMEL-NEXT:    movn $3, $7, $5
4443; MMEL-NEXT:    and $3, $3, $8
4444; MMEL-NEXT:    and $4, $2, $9
4445; MMEL-NEXT:    or $4, $4, $3
4446; MMEL-NEXT:    sc $4, 0($6)
4447; MMEL-NEXT:    beqzc $4, $BB10_1
4448; MMEL-NEXT:  # %bb.2: # %entry
4449; MMEL-NEXT:    .insn
4450; MMEL-NEXT:  # %bb.3: # %entry
4451; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4452; MMEL-NEXT:  # %bb.4: # %entry
4453; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4454; MMEL-NEXT:    sync
4455; MMEL-NEXT:    addiusp 8
4456; MMEL-NEXT:    jrc $ra
4457;
4458; MMELR6-LABEL: test_umax_8:
4459; MMELR6:       # %bb.0: # %entry
4460; MMELR6-NEXT:    addiu $sp, $sp, -8
4461; MMELR6-NEXT:    .cfi_def_cfa_offset 8
4462; MMELR6-NEXT:    # kill: def $at killed $a1
4463; MMELR6-NEXT:    sync
4464; MMELR6-NEXT:    addiu $1, $zero, -4
4465; MMELR6-NEXT:    and $6, $4, $1
4466; MMELR6-NEXT:    andi $1, $4, 3
4467; MMELR6-NEXT:    sll $10, $1, 3
4468; MMELR6-NEXT:    ori $1, $zero, 255
4469; MMELR6-NEXT:    sllv $8, $1, $10
4470; MMELR6-NEXT:    nor $9, $zero, $8
4471; MMELR6-NEXT:    sllv $7, $5, $10
4472; MMELR6-NEXT:  $BB10_1: # %entry
4473; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
4474; MMELR6-NEXT:    ll $2, 0($6)
4475; MMELR6-NEXT:    srav $4, $2, $10
4476; MMELR6-NEXT:    andi $4, $4, 255
4477; MMELR6-NEXT:    or $1, $zero, $4
4478; MMELR6-NEXT:    sllv $4, $4, $10
4479; MMELR6-NEXT:    sltu $5, $4, $7
4480; MMELR6-NEXT:    seleqz $3, $4, $5
4481; MMELR6-NEXT:    selnez $5, $7, $5
4482; MMELR6-NEXT:    or $3, $3, $5
4483; MMELR6-NEXT:    and $3, $3, $8
4484; MMELR6-NEXT:    and $4, $2, $9
4485; MMELR6-NEXT:    or $4, $4, $3
4486; MMELR6-NEXT:    sc $4, 0($6)
4487; MMELR6-NEXT:    beqc $4, $zero, $BB10_1
4488; MMELR6-NEXT:  # %bb.2: # %entry
4489; MMELR6-NEXT:    .insn
4490; MMELR6-NEXT:  # %bb.3: # %entry
4491; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4492; MMELR6-NEXT:  # %bb.4: # %entry
4493; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4494; MMELR6-NEXT:    sync
4495; MMELR6-NEXT:    addiu $sp, $sp, 8
4496; MMELR6-NEXT:    jrc $ra
4497;
4498; MIPS64-LABEL: test_umax_8:
4499; MIPS64:       # %bb.0: # %entry
4500; MIPS64-NEXT:    daddiu $sp, $sp, -16
4501; MIPS64-NEXT:    .cfi_def_cfa_offset 16
4502; MIPS64-NEXT:    move $1, $5
4503; MIPS64-NEXT:    sync
4504; MIPS64-NEXT:    daddiu $2, $zero, -4
4505; MIPS64-NEXT:    and $6, $4, $2
4506; MIPS64-NEXT:    andi $2, $4, 3
4507; MIPS64-NEXT:    xori $2, $2, 3
4508; MIPS64-NEXT:    sll $10, $2, 3
4509; MIPS64-NEXT:    ori $2, $zero, 255
4510; MIPS64-NEXT:    sllv $8, $2, $10
4511; MIPS64-NEXT:    nor $9, $zero, $8
4512; MIPS64-NEXT:    sllv $7, $1, $10
4513; MIPS64-NEXT:  .LBB10_1: # %entry
4514; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
4515; MIPS64-NEXT:    ll $2, 0($6)
4516; MIPS64-NEXT:    srav $4, $2, $10
4517; MIPS64-NEXT:    andi $4, $4, 255
4518; MIPS64-NEXT:    or $1, $zero, $4
4519; MIPS64-NEXT:    sllv $4, $4, $10
4520; MIPS64-NEXT:    sltu $5, $4, $7
4521; MIPS64-NEXT:    move $3, $4
4522; MIPS64-NEXT:    movn $3, $7, $5
4523; MIPS64-NEXT:    and $3, $3, $8
4524; MIPS64-NEXT:    and $4, $2, $9
4525; MIPS64-NEXT:    or $4, $4, $3
4526; MIPS64-NEXT:    sc $4, 0($6)
4527; MIPS64-NEXT:    beqz $4, .LBB10_1
4528; MIPS64-NEXT:    nop
4529; MIPS64-NEXT:  # %bb.2: # %entry
4530; MIPS64-NEXT:    .insn
4531; MIPS64-NEXT:  # %bb.3: # %entry
4532; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4533; MIPS64-NEXT:  # %bb.4: # %entry
4534; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4535; MIPS64-NEXT:    sync
4536; MIPS64-NEXT:    daddiu $sp, $sp, 16
4537; MIPS64-NEXT:    jr $ra
4538; MIPS64-NEXT:    nop
4539;
4540; MIPS64R6-LABEL: test_umax_8:
4541; MIPS64R6:       # %bb.0: # %entry
4542; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
4543; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
4544; MIPS64R6-NEXT:    move $1, $5
4545; MIPS64R6-NEXT:    sync
4546; MIPS64R6-NEXT:    daddiu $2, $zero, -4
4547; MIPS64R6-NEXT:    and $6, $4, $2
4548; MIPS64R6-NEXT:    andi $2, $4, 3
4549; MIPS64R6-NEXT:    xori $2, $2, 3
4550; MIPS64R6-NEXT:    sll $10, $2, 3
4551; MIPS64R6-NEXT:    ori $2, $zero, 255
4552; MIPS64R6-NEXT:    sllv $8, $2, $10
4553; MIPS64R6-NEXT:    nor $9, $zero, $8
4554; MIPS64R6-NEXT:    sllv $7, $1, $10
4555; MIPS64R6-NEXT:  .LBB10_1: # %entry
4556; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
4557; MIPS64R6-NEXT:    ll $2, 0($6)
4558; MIPS64R6-NEXT:    srav $4, $2, $10
4559; MIPS64R6-NEXT:    andi $4, $4, 255
4560; MIPS64R6-NEXT:    or $1, $zero, $4
4561; MIPS64R6-NEXT:    sllv $4, $4, $10
4562; MIPS64R6-NEXT:    sltu $5, $4, $7
4563; MIPS64R6-NEXT:    seleqz $3, $4, $5
4564; MIPS64R6-NEXT:    selnez $5, $7, $5
4565; MIPS64R6-NEXT:    or $3, $3, $5
4566; MIPS64R6-NEXT:    and $3, $3, $8
4567; MIPS64R6-NEXT:    and $4, $2, $9
4568; MIPS64R6-NEXT:    or $4, $4, $3
4569; MIPS64R6-NEXT:    sc $4, 0($6)
4570; MIPS64R6-NEXT:    beqzc $4, .LBB10_1
4571; MIPS64R6-NEXT:    nop
4572; MIPS64R6-NEXT:  # %bb.2: # %entry
4573; MIPS64R6-NEXT:    .insn
4574; MIPS64R6-NEXT:  # %bb.3: # %entry
4575; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4576; MIPS64R6-NEXT:  # %bb.4: # %entry
4577; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4578; MIPS64R6-NEXT:    sync
4579; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
4580; MIPS64R6-NEXT:    jrc $ra
4581;
4582; MIPS64EL-LABEL: test_umax_8:
4583; MIPS64EL:       # %bb.0: # %entry
4584; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
4585; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
4586; MIPS64EL-NEXT:    move $1, $5
4587; MIPS64EL-NEXT:    sync
4588; MIPS64EL-NEXT:    daddiu $2, $zero, -4
4589; MIPS64EL-NEXT:    and $6, $4, $2
4590; MIPS64EL-NEXT:    andi $2, $4, 3
4591; MIPS64EL-NEXT:    sll $10, $2, 3
4592; MIPS64EL-NEXT:    ori $2, $zero, 255
4593; MIPS64EL-NEXT:    sllv $8, $2, $10
4594; MIPS64EL-NEXT:    nor $9, $zero, $8
4595; MIPS64EL-NEXT:    sllv $7, $1, $10
4596; MIPS64EL-NEXT:  .LBB10_1: # %entry
4597; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
4598; MIPS64EL-NEXT:    ll $2, 0($6)
4599; MIPS64EL-NEXT:    srav $4, $2, $10
4600; MIPS64EL-NEXT:    andi $4, $4, 255
4601; MIPS64EL-NEXT:    or $1, $zero, $4
4602; MIPS64EL-NEXT:    sllv $4, $4, $10
4603; MIPS64EL-NEXT:    sltu $5, $4, $7
4604; MIPS64EL-NEXT:    move $3, $4
4605; MIPS64EL-NEXT:    movn $3, $7, $5
4606; MIPS64EL-NEXT:    and $3, $3, $8
4607; MIPS64EL-NEXT:    and $4, $2, $9
4608; MIPS64EL-NEXT:    or $4, $4, $3
4609; MIPS64EL-NEXT:    sc $4, 0($6)
4610; MIPS64EL-NEXT:    beqz $4, .LBB10_1
4611; MIPS64EL-NEXT:    nop
4612; MIPS64EL-NEXT:  # %bb.2: # %entry
4613; MIPS64EL-NEXT:    .insn
4614; MIPS64EL-NEXT:  # %bb.3: # %entry
4615; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4616; MIPS64EL-NEXT:  # %bb.4: # %entry
4617; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4618; MIPS64EL-NEXT:    sync
4619; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
4620; MIPS64EL-NEXT:    jr $ra
4621; MIPS64EL-NEXT:    nop
4622;
4623; MIPS64ELR6-LABEL: test_umax_8:
4624; MIPS64ELR6:       # %bb.0: # %entry
4625; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
4626; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
4627; MIPS64ELR6-NEXT:    move $1, $5
4628; MIPS64ELR6-NEXT:    sync
4629; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
4630; MIPS64ELR6-NEXT:    and $6, $4, $2
4631; MIPS64ELR6-NEXT:    andi $2, $4, 3
4632; MIPS64ELR6-NEXT:    sll $10, $2, 3
4633; MIPS64ELR6-NEXT:    ori $2, $zero, 255
4634; MIPS64ELR6-NEXT:    sllv $8, $2, $10
4635; MIPS64ELR6-NEXT:    nor $9, $zero, $8
4636; MIPS64ELR6-NEXT:    sllv $7, $1, $10
4637; MIPS64ELR6-NEXT:  .LBB10_1: # %entry
4638; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
4639; MIPS64ELR6-NEXT:    ll $2, 0($6)
4640; MIPS64ELR6-NEXT:    srav $4, $2, $10
4641; MIPS64ELR6-NEXT:    andi $4, $4, 255
4642; MIPS64ELR6-NEXT:    or $1, $zero, $4
4643; MIPS64ELR6-NEXT:    sllv $4, $4, $10
4644; MIPS64ELR6-NEXT:    sltu $5, $4, $7
4645; MIPS64ELR6-NEXT:    seleqz $3, $4, $5
4646; MIPS64ELR6-NEXT:    selnez $5, $7, $5
4647; MIPS64ELR6-NEXT:    or $3, $3, $5
4648; MIPS64ELR6-NEXT:    and $3, $3, $8
4649; MIPS64ELR6-NEXT:    and $4, $2, $9
4650; MIPS64ELR6-NEXT:    or $4, $4, $3
4651; MIPS64ELR6-NEXT:    sc $4, 0($6)
4652; MIPS64ELR6-NEXT:    beqzc $4, .LBB10_1
4653; MIPS64ELR6-NEXT:    nop
4654; MIPS64ELR6-NEXT:  # %bb.2: # %entry
4655; MIPS64ELR6-NEXT:    .insn
4656; MIPS64ELR6-NEXT:  # %bb.3: # %entry
4657; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
4658; MIPS64ELR6-NEXT:  # %bb.4: # %entry
4659; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
4660; MIPS64ELR6-NEXT:    sync
4661; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
4662; MIPS64ELR6-NEXT:    jrc $ra
4663entry:
4664  %0 = atomicrmw umax ptr %ptr, i8 %val seq_cst
4665  ret i8 %0
4666}
4667
4668define i8 @test_umin_8(ptr nocapture %ptr, i8 signext %val) {
4669; MIPS-LABEL: test_umin_8:
4670; MIPS:       # %bb.0: # %entry
4671; MIPS-NEXT:    addiu $sp, $sp, -8
4672; MIPS-NEXT:    .cfi_def_cfa_offset 8
4673; MIPS-NEXT:    # kill: def $at killed $a1
4674; MIPS-NEXT:    sync
4675; MIPS-NEXT:    addiu $1, $zero, -4
4676; MIPS-NEXT:    and $6, $4, $1
4677; MIPS-NEXT:    andi $1, $4, 3
4678; MIPS-NEXT:    xori $1, $1, 3
4679; MIPS-NEXT:    sll $10, $1, 3
4680; MIPS-NEXT:    ori $1, $zero, 255
4681; MIPS-NEXT:    sllv $8, $1, $10
4682; MIPS-NEXT:    nor $9, $zero, $8
4683; MIPS-NEXT:    sllv $7, $5, $10
4684; MIPS-NEXT:  $BB11_1: # %entry
4685; MIPS-NEXT:    # =>This Inner Loop Header: Depth=1
4686; MIPS-NEXT:    ll $2, 0($6)
4687; MIPS-NEXT:    srav $4, $2, $10
4688; MIPS-NEXT:    andi $4, $4, 255
4689; MIPS-NEXT:    or $1, $zero, $4
4690; MIPS-NEXT:    sllv $4, $4, $10
4691; MIPS-NEXT:    sltu $5, $4, $7
4692; MIPS-NEXT:    move $3, $4
4693; MIPS-NEXT:    movz $3, $7, $5
4694; MIPS-NEXT:    and $3, $3, $8
4695; MIPS-NEXT:    and $4, $2, $9
4696; MIPS-NEXT:    or $4, $4, $3
4697; MIPS-NEXT:    sc $4, 0($6)
4698; MIPS-NEXT:    beqz $4, $BB11_1
4699; MIPS-NEXT:    nop
4700; MIPS-NEXT:  # %bb.2: # %entry
4701; MIPS-NEXT:    .insn
4702; MIPS-NEXT:  # %bb.3: # %entry
4703; MIPS-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4704; MIPS-NEXT:  # %bb.4: # %entry
4705; MIPS-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4706; MIPS-NEXT:    sync
4707; MIPS-NEXT:    addiu $sp, $sp, 8
4708; MIPS-NEXT:    jr $ra
4709; MIPS-NEXT:    nop
4710;
4711; MIPSR6-LABEL: test_umin_8:
4712; MIPSR6:       # %bb.0: # %entry
4713; MIPSR6-NEXT:    addiu $sp, $sp, -8
4714; MIPSR6-NEXT:    .cfi_def_cfa_offset 8
4715; MIPSR6-NEXT:    # kill: def $at killed $a1
4716; MIPSR6-NEXT:    sync
4717; MIPSR6-NEXT:    addiu $1, $zero, -4
4718; MIPSR6-NEXT:    and $6, $4, $1
4719; MIPSR6-NEXT:    andi $1, $4, 3
4720; MIPSR6-NEXT:    xori $1, $1, 3
4721; MIPSR6-NEXT:    sll $10, $1, 3
4722; MIPSR6-NEXT:    ori $1, $zero, 255
4723; MIPSR6-NEXT:    sllv $8, $1, $10
4724; MIPSR6-NEXT:    nor $9, $zero, $8
4725; MIPSR6-NEXT:    sllv $7, $5, $10
4726; MIPSR6-NEXT:  $BB11_1: # %entry
4727; MIPSR6-NEXT:    # =>This Inner Loop Header: Depth=1
4728; MIPSR6-NEXT:    ll $2, 0($6)
4729; MIPSR6-NEXT:    srav $4, $2, $10
4730; MIPSR6-NEXT:    andi $4, $4, 255
4731; MIPSR6-NEXT:    or $1, $zero, $4
4732; MIPSR6-NEXT:    sllv $4, $4, $10
4733; MIPSR6-NEXT:    sltu $5, $4, $7
4734; MIPSR6-NEXT:    selnez $3, $4, $5
4735; MIPSR6-NEXT:    seleqz $5, $7, $5
4736; MIPSR6-NEXT:    or $3, $3, $5
4737; MIPSR6-NEXT:    and $3, $3, $8
4738; MIPSR6-NEXT:    and $4, $2, $9
4739; MIPSR6-NEXT:    or $4, $4, $3
4740; MIPSR6-NEXT:    sc $4, 0($6)
4741; MIPSR6-NEXT:    beqzc $4, $BB11_1
4742; MIPSR6-NEXT:    nop
4743; MIPSR6-NEXT:  # %bb.2: # %entry
4744; MIPSR6-NEXT:    .insn
4745; MIPSR6-NEXT:  # %bb.3: # %entry
4746; MIPSR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4747; MIPSR6-NEXT:  # %bb.4: # %entry
4748; MIPSR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4749; MIPSR6-NEXT:    sync
4750; MIPSR6-NEXT:    addiu $sp, $sp, 8
4751; MIPSR6-NEXT:    jrc $ra
4752;
4753; MM-LABEL: test_umin_8:
4754; MM:       # %bb.0: # %entry
4755; MM-NEXT:    addiu $sp, $sp, -8
4756; MM-NEXT:    .cfi_def_cfa_offset 8
4757; MM-NEXT:    # kill: def $at killed $a1
4758; MM-NEXT:    sync
4759; MM-NEXT:    addiu $1, $zero, -4
4760; MM-NEXT:    and $6, $4, $1
4761; MM-NEXT:    andi $1, $4, 3
4762; MM-NEXT:    xori $1, $1, 3
4763; MM-NEXT:    sll $10, $1, 3
4764; MM-NEXT:    ori $1, $zero, 255
4765; MM-NEXT:    sllv $8, $1, $10
4766; MM-NEXT:    nor $9, $zero, $8
4767; MM-NEXT:    sllv $7, $5, $10
4768; MM-NEXT:  $BB11_1: # %entry
4769; MM-NEXT:    # =>This Inner Loop Header: Depth=1
4770; MM-NEXT:    ll $2, 0($6)
4771; MM-NEXT:    srav $4, $2, $10
4772; MM-NEXT:    andi $4, $4, 255
4773; MM-NEXT:    or $1, $zero, $4
4774; MM-NEXT:    sllv $4, $4, $10
4775; MM-NEXT:    sltu $5, $4, $7
4776; MM-NEXT:    or $3, $4, $zero
4777; MM-NEXT:    movz $3, $7, $5
4778; MM-NEXT:    and $3, $3, $8
4779; MM-NEXT:    and $4, $2, $9
4780; MM-NEXT:    or $4, $4, $3
4781; MM-NEXT:    sc $4, 0($6)
4782; MM-NEXT:    beqzc $4, $BB11_1
4783; MM-NEXT:  # %bb.2: # %entry
4784; MM-NEXT:    .insn
4785; MM-NEXT:  # %bb.3: # %entry
4786; MM-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4787; MM-NEXT:  # %bb.4: # %entry
4788; MM-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4789; MM-NEXT:    sync
4790; MM-NEXT:    addiusp 8
4791; MM-NEXT:    jrc $ra
4792;
4793; MMR6-LABEL: test_umin_8:
4794; MMR6:       # %bb.0: # %entry
4795; MMR6-NEXT:    addiu $sp, $sp, -8
4796; MMR6-NEXT:    .cfi_def_cfa_offset 8
4797; MMR6-NEXT:    # kill: def $at killed $a1
4798; MMR6-NEXT:    sync
4799; MMR6-NEXT:    addiu $1, $zero, -4
4800; MMR6-NEXT:    and $6, $4, $1
4801; MMR6-NEXT:    andi $1, $4, 3
4802; MMR6-NEXT:    xori $1, $1, 3
4803; MMR6-NEXT:    sll $10, $1, 3
4804; MMR6-NEXT:    ori $1, $zero, 255
4805; MMR6-NEXT:    sllv $8, $1, $10
4806; MMR6-NEXT:    nor $9, $zero, $8
4807; MMR6-NEXT:    sllv $7, $5, $10
4808; MMR6-NEXT:  $BB11_1: # %entry
4809; MMR6-NEXT:    # =>This Inner Loop Header: Depth=1
4810; MMR6-NEXT:    ll $2, 0($6)
4811; MMR6-NEXT:    srav $4, $2, $10
4812; MMR6-NEXT:    andi $4, $4, 255
4813; MMR6-NEXT:    or $1, $zero, $4
4814; MMR6-NEXT:    sllv $4, $4, $10
4815; MMR6-NEXT:    sltu $5, $4, $7
4816; MMR6-NEXT:    selnez $3, $4, $5
4817; MMR6-NEXT:    seleqz $5, $7, $5
4818; MMR6-NEXT:    or $3, $3, $5
4819; MMR6-NEXT:    and $3, $3, $8
4820; MMR6-NEXT:    and $4, $2, $9
4821; MMR6-NEXT:    or $4, $4, $3
4822; MMR6-NEXT:    sc $4, 0($6)
4823; MMR6-NEXT:    beqc $4, $zero, $BB11_1
4824; MMR6-NEXT:  # %bb.2: # %entry
4825; MMR6-NEXT:    .insn
4826; MMR6-NEXT:  # %bb.3: # %entry
4827; MMR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4828; MMR6-NEXT:  # %bb.4: # %entry
4829; MMR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4830; MMR6-NEXT:    sync
4831; MMR6-NEXT:    addiu $sp, $sp, 8
4832; MMR6-NEXT:    jrc $ra
4833;
4834; MIPS32-LABEL: test_umin_8:
4835; MIPS32:       # %bb.0: # %entry
4836; MIPS32-NEXT:    addiu $sp, $sp, -8
4837; MIPS32-NEXT:    .cfi_def_cfa_offset 8
4838; MIPS32-NEXT:    # kill: def $at killed $a1
4839; MIPS32-NEXT:    sync
4840; MIPS32-NEXT:    addiu $1, $zero, -4
4841; MIPS32-NEXT:    and $6, $4, $1
4842; MIPS32-NEXT:    andi $1, $4, 3
4843; MIPS32-NEXT:    sll $10, $1, 3
4844; MIPS32-NEXT:    ori $1, $zero, 255
4845; MIPS32-NEXT:    sllv $8, $1, $10
4846; MIPS32-NEXT:    nor $9, $zero, $8
4847; MIPS32-NEXT:    sllv $7, $5, $10
4848; MIPS32-NEXT:  $BB11_1: # %entry
4849; MIPS32-NEXT:    # =>This Inner Loop Header: Depth=1
4850; MIPS32-NEXT:    ll $2, 0($6)
4851; MIPS32-NEXT:    srav $4, $2, $10
4852; MIPS32-NEXT:    andi $4, $4, 255
4853; MIPS32-NEXT:    or $1, $zero, $4
4854; MIPS32-NEXT:    sllv $4, $4, $10
4855; MIPS32-NEXT:    sltu $5, $4, $7
4856; MIPS32-NEXT:    move $3, $4
4857; MIPS32-NEXT:    movz $3, $7, $5
4858; MIPS32-NEXT:    and $3, $3, $8
4859; MIPS32-NEXT:    and $4, $2, $9
4860; MIPS32-NEXT:    or $4, $4, $3
4861; MIPS32-NEXT:    sc $4, 0($6)
4862; MIPS32-NEXT:    beqz $4, $BB11_1
4863; MIPS32-NEXT:    nop
4864; MIPS32-NEXT:  # %bb.2: # %entry
4865; MIPS32-NEXT:    .insn
4866; MIPS32-NEXT:  # %bb.3: # %entry
4867; MIPS32-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4868; MIPS32-NEXT:  # %bb.4: # %entry
4869; MIPS32-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4870; MIPS32-NEXT:    sync
4871; MIPS32-NEXT:    addiu $sp, $sp, 8
4872; MIPS32-NEXT:    jr $ra
4873; MIPS32-NEXT:    nop
4874;
4875; MIPSEL-LABEL: test_umin_8:
4876; MIPSEL:       # %bb.0: # %entry
4877; MIPSEL-NEXT:    addiu $sp, $sp, -8
4878; MIPSEL-NEXT:    .cfi_def_cfa_offset 8
4879; MIPSEL-NEXT:    # kill: def $at killed $a1
4880; MIPSEL-NEXT:    sync
4881; MIPSEL-NEXT:    addiu $1, $zero, -4
4882; MIPSEL-NEXT:    and $6, $4, $1
4883; MIPSEL-NEXT:    andi $1, $4, 3
4884; MIPSEL-NEXT:    sll $10, $1, 3
4885; MIPSEL-NEXT:    ori $1, $zero, 255
4886; MIPSEL-NEXT:    sllv $8, $1, $10
4887; MIPSEL-NEXT:    nor $9, $zero, $8
4888; MIPSEL-NEXT:    sllv $7, $5, $10
4889; MIPSEL-NEXT:  $BB11_1: # %entry
4890; MIPSEL-NEXT:    # =>This Inner Loop Header: Depth=1
4891; MIPSEL-NEXT:    ll $2, 0($6)
4892; MIPSEL-NEXT:    srav $4, $2, $10
4893; MIPSEL-NEXT:    andi $4, $4, 255
4894; MIPSEL-NEXT:    or $1, $zero, $4
4895; MIPSEL-NEXT:    sllv $4, $4, $10
4896; MIPSEL-NEXT:    sltu $5, $4, $7
4897; MIPSEL-NEXT:    move $3, $4
4898; MIPSEL-NEXT:    movz $3, $7, $5
4899; MIPSEL-NEXT:    and $3, $3, $8
4900; MIPSEL-NEXT:    and $4, $2, $9
4901; MIPSEL-NEXT:    or $4, $4, $3
4902; MIPSEL-NEXT:    sc $4, 0($6)
4903; MIPSEL-NEXT:    beqz $4, $BB11_1
4904; MIPSEL-NEXT:    nop
4905; MIPSEL-NEXT:  # %bb.2: # %entry
4906; MIPSEL-NEXT:    .insn
4907; MIPSEL-NEXT:  # %bb.3: # %entry
4908; MIPSEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4909; MIPSEL-NEXT:  # %bb.4: # %entry
4910; MIPSEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4911; MIPSEL-NEXT:    sync
4912; MIPSEL-NEXT:    addiu $sp, $sp, 8
4913; MIPSEL-NEXT:    jr $ra
4914; MIPSEL-NEXT:    nop
4915;
4916; MIPSELR6-LABEL: test_umin_8:
4917; MIPSELR6:       # %bb.0: # %entry
4918; MIPSELR6-NEXT:    addiu $sp, $sp, -8
4919; MIPSELR6-NEXT:    .cfi_def_cfa_offset 8
4920; MIPSELR6-NEXT:    # kill: def $at killed $a1
4921; MIPSELR6-NEXT:    sync
4922; MIPSELR6-NEXT:    addiu $1, $zero, -4
4923; MIPSELR6-NEXT:    and $6, $4, $1
4924; MIPSELR6-NEXT:    andi $1, $4, 3
4925; MIPSELR6-NEXT:    sll $10, $1, 3
4926; MIPSELR6-NEXT:    ori $1, $zero, 255
4927; MIPSELR6-NEXT:    sllv $8, $1, $10
4928; MIPSELR6-NEXT:    nor $9, $zero, $8
4929; MIPSELR6-NEXT:    sllv $7, $5, $10
4930; MIPSELR6-NEXT:  $BB11_1: # %entry
4931; MIPSELR6-NEXT:    # =>This Inner Loop Header: Depth=1
4932; MIPSELR6-NEXT:    ll $2, 0($6)
4933; MIPSELR6-NEXT:    srav $4, $2, $10
4934; MIPSELR6-NEXT:    andi $4, $4, 255
4935; MIPSELR6-NEXT:    or $1, $zero, $4
4936; MIPSELR6-NEXT:    sllv $4, $4, $10
4937; MIPSELR6-NEXT:    sltu $5, $4, $7
4938; MIPSELR6-NEXT:    selnez $3, $4, $5
4939; MIPSELR6-NEXT:    seleqz $5, $7, $5
4940; MIPSELR6-NEXT:    or $3, $3, $5
4941; MIPSELR6-NEXT:    and $3, $3, $8
4942; MIPSELR6-NEXT:    and $4, $2, $9
4943; MIPSELR6-NEXT:    or $4, $4, $3
4944; MIPSELR6-NEXT:    sc $4, 0($6)
4945; MIPSELR6-NEXT:    beqzc $4, $BB11_1
4946; MIPSELR6-NEXT:    nop
4947; MIPSELR6-NEXT:  # %bb.2: # %entry
4948; MIPSELR6-NEXT:    .insn
4949; MIPSELR6-NEXT:  # %bb.3: # %entry
4950; MIPSELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4951; MIPSELR6-NEXT:  # %bb.4: # %entry
4952; MIPSELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4953; MIPSELR6-NEXT:    sync
4954; MIPSELR6-NEXT:    addiu $sp, $sp, 8
4955; MIPSELR6-NEXT:    jrc $ra
4956;
4957; MMEL-LABEL: test_umin_8:
4958; MMEL:       # %bb.0: # %entry
4959; MMEL-NEXT:    addiu $sp, $sp, -8
4960; MMEL-NEXT:    .cfi_def_cfa_offset 8
4961; MMEL-NEXT:    # kill: def $at killed $a1
4962; MMEL-NEXT:    sync
4963; MMEL-NEXT:    addiu $1, $zero, -4
4964; MMEL-NEXT:    and $6, $4, $1
4965; MMEL-NEXT:    andi $1, $4, 3
4966; MMEL-NEXT:    sll $10, $1, 3
4967; MMEL-NEXT:    ori $1, $zero, 255
4968; MMEL-NEXT:    sllv $8, $1, $10
4969; MMEL-NEXT:    nor $9, $zero, $8
4970; MMEL-NEXT:    sllv $7, $5, $10
4971; MMEL-NEXT:  $BB11_1: # %entry
4972; MMEL-NEXT:    # =>This Inner Loop Header: Depth=1
4973; MMEL-NEXT:    ll $2, 0($6)
4974; MMEL-NEXT:    srav $4, $2, $10
4975; MMEL-NEXT:    andi $4, $4, 255
4976; MMEL-NEXT:    or $1, $zero, $4
4977; MMEL-NEXT:    sllv $4, $4, $10
4978; MMEL-NEXT:    sltu $5, $4, $7
4979; MMEL-NEXT:    or $3, $4, $zero
4980; MMEL-NEXT:    movz $3, $7, $5
4981; MMEL-NEXT:    and $3, $3, $8
4982; MMEL-NEXT:    and $4, $2, $9
4983; MMEL-NEXT:    or $4, $4, $3
4984; MMEL-NEXT:    sc $4, 0($6)
4985; MMEL-NEXT:    beqzc $4, $BB11_1
4986; MMEL-NEXT:  # %bb.2: # %entry
4987; MMEL-NEXT:    .insn
4988; MMEL-NEXT:  # %bb.3: # %entry
4989; MMEL-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
4990; MMEL-NEXT:  # %bb.4: # %entry
4991; MMEL-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
4992; MMEL-NEXT:    sync
4993; MMEL-NEXT:    addiusp 8
4994; MMEL-NEXT:    jrc $ra
4995;
4996; MMELR6-LABEL: test_umin_8:
4997; MMELR6:       # %bb.0: # %entry
4998; MMELR6-NEXT:    addiu $sp, $sp, -8
4999; MMELR6-NEXT:    .cfi_def_cfa_offset 8
5000; MMELR6-NEXT:    # kill: def $at killed $a1
5001; MMELR6-NEXT:    sync
5002; MMELR6-NEXT:    addiu $1, $zero, -4
5003; MMELR6-NEXT:    and $6, $4, $1
5004; MMELR6-NEXT:    andi $1, $4, 3
5005; MMELR6-NEXT:    sll $10, $1, 3
5006; MMELR6-NEXT:    ori $1, $zero, 255
5007; MMELR6-NEXT:    sllv $8, $1, $10
5008; MMELR6-NEXT:    nor $9, $zero, $8
5009; MMELR6-NEXT:    sllv $7, $5, $10
5010; MMELR6-NEXT:  $BB11_1: # %entry
5011; MMELR6-NEXT:    # =>This Inner Loop Header: Depth=1
5012; MMELR6-NEXT:    ll $2, 0($6)
5013; MMELR6-NEXT:    srav $4, $2, $10
5014; MMELR6-NEXT:    andi $4, $4, 255
5015; MMELR6-NEXT:    or $1, $zero, $4
5016; MMELR6-NEXT:    sllv $4, $4, $10
5017; MMELR6-NEXT:    sltu $5, $4, $7
5018; MMELR6-NEXT:    selnez $3, $4, $5
5019; MMELR6-NEXT:    seleqz $5, $7, $5
5020; MMELR6-NEXT:    or $3, $3, $5
5021; MMELR6-NEXT:    and $3, $3, $8
5022; MMELR6-NEXT:    and $4, $2, $9
5023; MMELR6-NEXT:    or $4, $4, $3
5024; MMELR6-NEXT:    sc $4, 0($6)
5025; MMELR6-NEXT:    beqc $4, $zero, $BB11_1
5026; MMELR6-NEXT:  # %bb.2: # %entry
5027; MMELR6-NEXT:    .insn
5028; MMELR6-NEXT:  # %bb.3: # %entry
5029; MMELR6-NEXT:    sw $1, 4($sp) # 4-byte Folded Spill
5030; MMELR6-NEXT:  # %bb.4: # %entry
5031; MMELR6-NEXT:    lw $2, 4($sp) # 4-byte Folded Reload
5032; MMELR6-NEXT:    sync
5033; MMELR6-NEXT:    addiu $sp, $sp, 8
5034; MMELR6-NEXT:    jrc $ra
5035;
5036; MIPS64-LABEL: test_umin_8:
5037; MIPS64:       # %bb.0: # %entry
5038; MIPS64-NEXT:    daddiu $sp, $sp, -16
5039; MIPS64-NEXT:    .cfi_def_cfa_offset 16
5040; MIPS64-NEXT:    move $1, $5
5041; MIPS64-NEXT:    sync
5042; MIPS64-NEXT:    daddiu $2, $zero, -4
5043; MIPS64-NEXT:    and $6, $4, $2
5044; MIPS64-NEXT:    andi $2, $4, 3
5045; MIPS64-NEXT:    xori $2, $2, 3
5046; MIPS64-NEXT:    sll $10, $2, 3
5047; MIPS64-NEXT:    ori $2, $zero, 255
5048; MIPS64-NEXT:    sllv $8, $2, $10
5049; MIPS64-NEXT:    nor $9, $zero, $8
5050; MIPS64-NEXT:    sllv $7, $1, $10
5051; MIPS64-NEXT:  .LBB11_1: # %entry
5052; MIPS64-NEXT:    # =>This Inner Loop Header: Depth=1
5053; MIPS64-NEXT:    ll $2, 0($6)
5054; MIPS64-NEXT:    srav $4, $2, $10
5055; MIPS64-NEXT:    andi $4, $4, 255
5056; MIPS64-NEXT:    or $1, $zero, $4
5057; MIPS64-NEXT:    sllv $4, $4, $10
5058; MIPS64-NEXT:    sltu $5, $4, $7
5059; MIPS64-NEXT:    move $3, $4
5060; MIPS64-NEXT:    movz $3, $7, $5
5061; MIPS64-NEXT:    and $3, $3, $8
5062; MIPS64-NEXT:    and $4, $2, $9
5063; MIPS64-NEXT:    or $4, $4, $3
5064; MIPS64-NEXT:    sc $4, 0($6)
5065; MIPS64-NEXT:    beqz $4, .LBB11_1
5066; MIPS64-NEXT:    nop
5067; MIPS64-NEXT:  # %bb.2: # %entry
5068; MIPS64-NEXT:    .insn
5069; MIPS64-NEXT:  # %bb.3: # %entry
5070; MIPS64-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
5071; MIPS64-NEXT:  # %bb.4: # %entry
5072; MIPS64-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
5073; MIPS64-NEXT:    sync
5074; MIPS64-NEXT:    daddiu $sp, $sp, 16
5075; MIPS64-NEXT:    jr $ra
5076; MIPS64-NEXT:    nop
5077;
5078; MIPS64R6-LABEL: test_umin_8:
5079; MIPS64R6:       # %bb.0: # %entry
5080; MIPS64R6-NEXT:    daddiu $sp, $sp, -16
5081; MIPS64R6-NEXT:    .cfi_def_cfa_offset 16
5082; MIPS64R6-NEXT:    move $1, $5
5083; MIPS64R6-NEXT:    sync
5084; MIPS64R6-NEXT:    daddiu $2, $zero, -4
5085; MIPS64R6-NEXT:    and $6, $4, $2
5086; MIPS64R6-NEXT:    andi $2, $4, 3
5087; MIPS64R6-NEXT:    xori $2, $2, 3
5088; MIPS64R6-NEXT:    sll $10, $2, 3
5089; MIPS64R6-NEXT:    ori $2, $zero, 255
5090; MIPS64R6-NEXT:    sllv $8, $2, $10
5091; MIPS64R6-NEXT:    nor $9, $zero, $8
5092; MIPS64R6-NEXT:    sllv $7, $1, $10
5093; MIPS64R6-NEXT:  .LBB11_1: # %entry
5094; MIPS64R6-NEXT:    # =>This Inner Loop Header: Depth=1
5095; MIPS64R6-NEXT:    ll $2, 0($6)
5096; MIPS64R6-NEXT:    srav $4, $2, $10
5097; MIPS64R6-NEXT:    andi $4, $4, 255
5098; MIPS64R6-NEXT:    or $1, $zero, $4
5099; MIPS64R6-NEXT:    sllv $4, $4, $10
5100; MIPS64R6-NEXT:    sltu $5, $4, $7
5101; MIPS64R6-NEXT:    selnez $3, $4, $5
5102; MIPS64R6-NEXT:    seleqz $5, $7, $5
5103; MIPS64R6-NEXT:    or $3, $3, $5
5104; MIPS64R6-NEXT:    and $3, $3, $8
5105; MIPS64R6-NEXT:    and $4, $2, $9
5106; MIPS64R6-NEXT:    or $4, $4, $3
5107; MIPS64R6-NEXT:    sc $4, 0($6)
5108; MIPS64R6-NEXT:    beqzc $4, .LBB11_1
5109; MIPS64R6-NEXT:    nop
5110; MIPS64R6-NEXT:  # %bb.2: # %entry
5111; MIPS64R6-NEXT:    .insn
5112; MIPS64R6-NEXT:  # %bb.3: # %entry
5113; MIPS64R6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
5114; MIPS64R6-NEXT:  # %bb.4: # %entry
5115; MIPS64R6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
5116; MIPS64R6-NEXT:    sync
5117; MIPS64R6-NEXT:    daddiu $sp, $sp, 16
5118; MIPS64R6-NEXT:    jrc $ra
5119;
5120; MIPS64EL-LABEL: test_umin_8:
5121; MIPS64EL:       # %bb.0: # %entry
5122; MIPS64EL-NEXT:    daddiu $sp, $sp, -16
5123; MIPS64EL-NEXT:    .cfi_def_cfa_offset 16
5124; MIPS64EL-NEXT:    move $1, $5
5125; MIPS64EL-NEXT:    sync
5126; MIPS64EL-NEXT:    daddiu $2, $zero, -4
5127; MIPS64EL-NEXT:    and $6, $4, $2
5128; MIPS64EL-NEXT:    andi $2, $4, 3
5129; MIPS64EL-NEXT:    sll $10, $2, 3
5130; MIPS64EL-NEXT:    ori $2, $zero, 255
5131; MIPS64EL-NEXT:    sllv $8, $2, $10
5132; MIPS64EL-NEXT:    nor $9, $zero, $8
5133; MIPS64EL-NEXT:    sllv $7, $1, $10
5134; MIPS64EL-NEXT:  .LBB11_1: # %entry
5135; MIPS64EL-NEXT:    # =>This Inner Loop Header: Depth=1
5136; MIPS64EL-NEXT:    ll $2, 0($6)
5137; MIPS64EL-NEXT:    srav $4, $2, $10
5138; MIPS64EL-NEXT:    andi $4, $4, 255
5139; MIPS64EL-NEXT:    or $1, $zero, $4
5140; MIPS64EL-NEXT:    sllv $4, $4, $10
5141; MIPS64EL-NEXT:    sltu $5, $4, $7
5142; MIPS64EL-NEXT:    move $3, $4
5143; MIPS64EL-NEXT:    movz $3, $7, $5
5144; MIPS64EL-NEXT:    and $3, $3, $8
5145; MIPS64EL-NEXT:    and $4, $2, $9
5146; MIPS64EL-NEXT:    or $4, $4, $3
5147; MIPS64EL-NEXT:    sc $4, 0($6)
5148; MIPS64EL-NEXT:    beqz $4, .LBB11_1
5149; MIPS64EL-NEXT:    nop
5150; MIPS64EL-NEXT:  # %bb.2: # %entry
5151; MIPS64EL-NEXT:    .insn
5152; MIPS64EL-NEXT:  # %bb.3: # %entry
5153; MIPS64EL-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
5154; MIPS64EL-NEXT:  # %bb.4: # %entry
5155; MIPS64EL-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
5156; MIPS64EL-NEXT:    sync
5157; MIPS64EL-NEXT:    daddiu $sp, $sp, 16
5158; MIPS64EL-NEXT:    jr $ra
5159; MIPS64EL-NEXT:    nop
5160;
5161; MIPS64ELR6-LABEL: test_umin_8:
5162; MIPS64ELR6:       # %bb.0: # %entry
5163; MIPS64ELR6-NEXT:    daddiu $sp, $sp, -16
5164; MIPS64ELR6-NEXT:    .cfi_def_cfa_offset 16
5165; MIPS64ELR6-NEXT:    move $1, $5
5166; MIPS64ELR6-NEXT:    sync
5167; MIPS64ELR6-NEXT:    daddiu $2, $zero, -4
5168; MIPS64ELR6-NEXT:    and $6, $4, $2
5169; MIPS64ELR6-NEXT:    andi $2, $4, 3
5170; MIPS64ELR6-NEXT:    sll $10, $2, 3
5171; MIPS64ELR6-NEXT:    ori $2, $zero, 255
5172; MIPS64ELR6-NEXT:    sllv $8, $2, $10
5173; MIPS64ELR6-NEXT:    nor $9, $zero, $8
5174; MIPS64ELR6-NEXT:    sllv $7, $1, $10
5175; MIPS64ELR6-NEXT:  .LBB11_1: # %entry
5176; MIPS64ELR6-NEXT:    # =>This Inner Loop Header: Depth=1
5177; MIPS64ELR6-NEXT:    ll $2, 0($6)
5178; MIPS64ELR6-NEXT:    srav $4, $2, $10
5179; MIPS64ELR6-NEXT:    andi $4, $4, 255
5180; MIPS64ELR6-NEXT:    or $1, $zero, $4
5181; MIPS64ELR6-NEXT:    sllv $4, $4, $10
5182; MIPS64ELR6-NEXT:    sltu $5, $4, $7
5183; MIPS64ELR6-NEXT:    selnez $3, $4, $5
5184; MIPS64ELR6-NEXT:    seleqz $5, $7, $5
5185; MIPS64ELR6-NEXT:    or $3, $3, $5
5186; MIPS64ELR6-NEXT:    and $3, $3, $8
5187; MIPS64ELR6-NEXT:    and $4, $2, $9
5188; MIPS64ELR6-NEXT:    or $4, $4, $3
5189; MIPS64ELR6-NEXT:    sc $4, 0($6)
5190; MIPS64ELR6-NEXT:    beqzc $4, .LBB11_1
5191; MIPS64ELR6-NEXT:    nop
5192; MIPS64ELR6-NEXT:  # %bb.2: # %entry
5193; MIPS64ELR6-NEXT:    .insn
5194; MIPS64ELR6-NEXT:  # %bb.3: # %entry
5195; MIPS64ELR6-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
5196; MIPS64ELR6-NEXT:  # %bb.4: # %entry
5197; MIPS64ELR6-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
5198; MIPS64ELR6-NEXT:    sync
5199; MIPS64ELR6-NEXT:    daddiu $sp, $sp, 16
5200; MIPS64ELR6-NEXT:    jrc $ra
5201entry:
5202  %0 = atomicrmw umin ptr %ptr, i8 %val seq_cst
5203  ret i8 %0
5204}
5205