blob: eb2198b36dff34c123fad3e2e0f05ca6d741ee2e [file] [log] [blame]
Daniel Sanders0fa60412014-06-12 13:39:06 +00001; RUN: llc < %s -march=mipsel -mcpu=mips32 | FileCheck %s -check-prefix=ALL -check-prefix=32
2; RUN: llc < %s -march=mipsel -mcpu=mips32r2 | FileCheck %s -check-prefix=ALL -check-prefix=32R2
3; RUN: llc < %s -march=mipsel -mcpu=mips32r6 | FileCheck %s -check-prefix=ALL -check-prefix=32R6
4; RUN: llc < %s -march=mips64el -mcpu=mips64 | FileCheck %s -check-prefix=ALL -check-prefix=64
5; RUN: llc < %s -march=mips64el -mcpu=mips64r2 | FileCheck %s -check-prefix=ALL -check-prefix=64R2
6; RUN: llc < %s -march=mips64el -mcpu=mips64r6 | FileCheck %s -check-prefix=ALL -check-prefix=64R6
Akira Hatanakaa5352702011-03-31 18:26:17 +00007
8@d2 = external global double
9@d3 = external global double
10
Daniel Sanders0fa60412014-06-12 13:39:06 +000011define i32 @i32_icmp_ne_i32_val(i32 %s, i32 %f0, i32 %f1) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +000012entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +000013; ALL-LABEL: i32_icmp_ne_i32_val:
14
15; 32: movn $5, $6, $4
16; 32: move $2, $5
17
18; 32R2: movn $5, $6, $4
19; 32R2: move $2, $5
20
Daniel Sanderse31155f2014-07-09 10:47:26 +000021; 32R6-DAG: seleqz $[[T0:[0-9]+]], $5, $4
22; 32R6-DAG: selnez $[[T1:[0-9]+]], $6, $4
23; 32R6: or $2, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +000024
25; 64: movn $5, $6, $4
26; 64: move $2, $5
27
28; 64R2: movn $5, $6, $4
29; 64R2: move $2, $5
30
Daniel Sanderse31155f2014-07-09 10:47:26 +000031; 64R6-DAG: seleqz $[[T0:[0-9]+]], $5, $4
32; 64R6-DAG: selnez $[[T1:[0-9]+]], $6, $4
33; 64R6: or $2, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +000034
Akira Hatanakaa5352702011-03-31 18:26:17 +000035 %tobool = icmp ne i32 %s, 0
36 %cond = select i1 %tobool, i32 %f1, i32 %f0
37 ret i32 %cond
38}
39
Daniel Sanders0fa60412014-06-12 13:39:06 +000040define i64 @i32_icmp_ne_i64_val(i32 %s, i64 %f0, i64 %f1) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +000041entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +000042; ALL-LABEL: i32_icmp_ne_i64_val:
43
44; 32-DAG: lw $[[F1:[0-9]+]], 16($sp)
45; 32-DAG: movn $6, $[[F1]], $4
46; 32-DAG: lw $[[F1H:[0-9]+]], 20($sp)
47; 32: movn $7, $[[F1H]], $4
48; 32: move $2, $6
49; 32: move $3, $7
50
51; 32R2-DAG: lw $[[F1:[0-9]+]], 16($sp)
52; 32R2-DAG: movn $6, $[[F1]], $4
53; 32R2-DAG: lw $[[F1H:[0-9]+]], 20($sp)
54; 32R2: movn $7, $[[F1H]], $4
55; 32R2: move $2, $6
56; 32R2: move $3, $7
57
58; 32R6-DAG: lw $[[F1:[0-9]+]], 16($sp)
Daniel Sanderse31155f2014-07-09 10:47:26 +000059; 32R6-DAG: seleqz $[[T0:[0-9]+]], $6, $4
60; 32R6-DAG: selnez $[[T1:[0-9]+]], $[[F1]], $4
61; 32R6: or $2, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +000062; 32R6-DAG: lw $[[F1H:[0-9]+]], 20($sp)
Daniel Sanderse31155f2014-07-09 10:47:26 +000063; 32R6-DAG: seleqz $[[T0:[0-9]+]], $7, $4
64; 32R6-DAG: selnez $[[T1:[0-9]+]], $[[F1H]], $4
65; 32R6: or $3, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +000066
67; 64: movn $5, $6, $4
68; 64: move $2, $5
69
70; 64R2: movn $5, $6, $4
71; 64R2: move $2, $5
72
73; FIXME: This sll works around an implementation detail in the code generator
74; (setcc's result is i32 so bits 32-63 are undefined). It's not really
75; needed.
76; 64R6-DAG: sll $[[CC:[0-9]+]], $4, 0
Daniel Sanderse31155f2014-07-09 10:47:26 +000077; 64R6-DAG: seleqz $[[T0:[0-9]+]], $5, $[[CC]]
78; 64R6-DAG: selnez $[[T1:[0-9]+]], $6, $[[CC]]
79; 64R6: or $2, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +000080
81 %tobool = icmp ne i32 %s, 0
82 %cond = select i1 %tobool, i64 %f1, i64 %f0
83 ret i64 %cond
84}
85
86define i64 @i64_icmp_ne_i64_val(i64 %s, i64 %f0, i64 %f1) nounwind readnone {
87entry:
88; ALL-LABEL: i64_icmp_ne_i64_val:
89
90; 32-DAG: or $[[CC:[0-9]+]], $4
91; 32-DAG: lw $[[F1:[0-9]+]], 16($sp)
92; 32-DAG: movn $6, $[[F1]], $[[CC]]
93; 32-DAG: lw $[[F1H:[0-9]+]], 20($sp)
94; 32: movn $7, $[[F1H]], $[[CC]]
95; 32: move $2, $6
96; 32: move $3, $7
97
98; 32R2-DAG: or $[[CC:[0-9]+]], $4
99; 32R2-DAG: lw $[[F1:[0-9]+]], 16($sp)
100; 32R2-DAG: movn $6, $[[F1]], $[[CC]]
101; 32R2-DAG: lw $[[F1H:[0-9]+]], 20($sp)
102; 32R2: movn $7, $[[F1H]], $[[CC]]
103; 32R2: move $2, $6
104; 32R2: move $3, $7
105
106; 32R6-DAG: lw $[[F1:[0-9]+]], 16($sp)
107; 32R6-DAG: or $[[T2:[0-9]+]], $4, $5
Daniel Sanderse31155f2014-07-09 10:47:26 +0000108; 32R6-DAG: seleqz $[[T0:[0-9]+]], $6, $[[T2]]
109; 32R6-DAG: selnez $[[T1:[0-9]+]], $[[F1]], $[[T2]]
110; 32R6: or $2, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000111; 32R6-DAG: lw $[[F1H:[0-9]+]], 20($sp)
Daniel Sanderse31155f2014-07-09 10:47:26 +0000112; 32R6-DAG: seleqz $[[T0:[0-9]+]], $7, $[[T2]]
113; 32R6-DAG: selnez $[[T1:[0-9]+]], $[[F1H]], $[[T2]]
114; 32R6: or $3, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000115
116; 64: movn $5, $6, $4
117; 64: move $2, $5
118
119; 64R2: movn $5, $6, $4
120; 64R2: move $2, $5
121
Daniel Sanderse31155f2014-07-09 10:47:26 +0000122; 64R6-DAG: seleqz $[[T0:[0-9]+]], $5, $4
123; 64R6-DAG: selnez $[[T1:[0-9]+]], $6, $4
124; 64R6: or $2, $[[T1]], $[[T0]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000125
126 %tobool = icmp ne i64 %s, 0
127 %cond = select i1 %tobool, i64 %f1, i64 %f0
128 ret i64 %cond
129}
130
131define float @i32_icmp_ne_f32_val(i32 %s, float %f0, float %f1) nounwind readnone {
132entry:
133; ALL-LABEL: i32_icmp_ne_f32_val:
134
135; 32-DAG: mtc1 $5, $[[F0:f[0-9]+]]
136; 32-DAG: mtc1 $6, $[[F1:f0]]
137; 32: movn.s $[[F1]], $[[F0]], $4
138
139; 32R2-DAG: mtc1 $5, $[[F0:f[0-9]+]]
140; 32R2-DAG: mtc1 $6, $[[F1:f0]]
141; 32R2: movn.s $[[F1]], $[[F0]], $4
142
143; 32R6-DAG: mtc1 $5, $[[F0:f[0-9]+]]
144; 32R6-DAG: mtc1 $6, $[[F1:f[0-9]+]]
145; 32R6: sltu $[[T0:[0-9]+]], $zero, $4
146; 32R6: mtc1 $[[T0]], $[[CC:f0]]
147; 32R6: sel.s $[[CC]], $[[F1]], $[[F0]]
148
149; 64: movn.s $f14, $f13, $4
150; 64: mov.s $f0, $f14
151
152; 64R2: movn.s $f14, $f13, $4
153; 64R2: mov.s $f0, $f14
154
155; 64R6: sltu $[[T0:[0-9]+]], $zero, $4
156; 64R6: mtc1 $[[T0]], $[[CC:f0]]
157; 64R6: sel.s $[[CC]], $f14, $f13
158
Akira Hatanakaa5352702011-03-31 18:26:17 +0000159 %tobool = icmp ne i32 %s, 0
160 %cond = select i1 %tobool, float %f0, float %f1
161 ret float %cond
162}
163
Daniel Sanders0fa60412014-06-12 13:39:06 +0000164define double @i32_icmp_ne_f64_val(i32 %s, double %f0, double %f1) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000165entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000166; ALL-LABEL: i32_icmp_ne_f64_val:
167
168; 32-DAG: mtc1 $6, $[[F0:f[1-3]*[02468]+]]
169; 32-DAG: mtc1 $7, $[[F0H:f[1-3]*[13579]+]]
170; 32-DAG: ldc1 $[[F1:f0]], 16($sp)
171; 32: movn.d $[[F1]], $[[F0]], $4
172
173; 32R2-DAG: mtc1 $6, $[[F0:f[0-9]+]]
174; 32R2-DAG: mthc1 $7, $[[F0]]
175; 32R2-DAG: ldc1 $[[F1:f0]], 16($sp)
176; 32R2: movn.d $[[F1]], $[[F0]], $4
177
178; 32R6-DAG: mtc1 $6, $[[F0:f[0-9]+]]
179; 32R6-DAG: mthc1 $7, $[[F0]]
180; 32R6-DAG: sltu $[[T0:[0-9]+]], $zero, $4
181; 32R6-DAG: mtc1 $[[T0]], $[[CC:f0]]
182; 32R6-DAG: ldc1 $[[F1:f[0-9]+]], 16($sp)
183; 32R6: sel.d $[[CC]], $[[F1]], $[[F0]]
184
185; 64: movn.d $f14, $f13, $4
186; 64: mov.d $f0, $f14
187
188; 64R2: movn.d $f14, $f13, $4
189; 64R2: mov.d $f0, $f14
190
191; 64R6-DAG: sltu $[[T0:[0-9]+]], $zero, $4
192; 64R6-DAG: mtc1 $[[T0]], $[[CC:f0]]
193; 64R6: sel.d $[[CC]], $f14, $f13
194
Akira Hatanakaa5352702011-03-31 18:26:17 +0000195 %tobool = icmp ne i32 %s, 0
196 %cond = select i1 %tobool, double %f0, double %f1
197 ret double %cond
198}
199
Daniel Sanders0fa60412014-06-12 13:39:06 +0000200define float @f32_fcmp_oeq_f32_val(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000201entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000202; ALL-LABEL: f32_fcmp_oeq_f32_val:
203
204; 32-DAG: mtc1 $6, $[[F2:f[0-9]+]]
205; 32-DAG: mtc1 $7, $[[F3:f[0-9]+]]
206; 32: c.eq.s $[[F2]], $[[F3]]
207; 32: movt.s $f14, $f12, $fcc0
208; 32: mov.s $f0, $f14
209
210; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
211; 32R2-DAG: mtc1 $7, $[[F3:f[0-9]+]]
212; 32R2: c.eq.s $[[F2]], $[[F3]]
213; 32R2: movt.s $f14, $f12, $fcc0
214; 32R2: mov.s $f0, $f14
215
216; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
217; 32R6-DAG: mtc1 $7, $[[F3:f[0-9]+]]
218; 32R6: cmp.eq.s $[[CC:f0]], $[[F2]], $[[F3]]
219; 32R6: sel.s $[[CC]], $f14, $f12
220
221; 64: c.eq.s $f14, $f15
222; 64: movt.s $f13, $f12, $fcc0
223; 64: mov.s $f0, $f13
224
225; 64R2: c.eq.s $f14, $f15
226; 64R2: movt.s $f13, $f12, $fcc0
227; 64R2: mov.s $f0, $f13
228
229; 64R6: cmp.eq.s $[[CC:f0]], $f14, $f15
230; 64R6: sel.s $[[CC]], $f13, $f12
231
Akira Hatanakaa5352702011-03-31 18:26:17 +0000232 %cmp = fcmp oeq float %f2, %f3
233 %cond = select i1 %cmp, float %f0, float %f1
234 ret float %cond
235}
236
Daniel Sanders0fa60412014-06-12 13:39:06 +0000237define float @f32_fcmp_olt_f32_val(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000238entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000239; ALL-LABEL: f32_fcmp_olt_f32_val:
240
241; 32-DAG: mtc1 $6, $[[F2:f[0-9]+]]
242; 32-DAG: mtc1 $7, $[[F3:f[0-9]+]]
243; 32: c.olt.s $[[F2]], $[[F3]]
244; 32: movt.s $f14, $f12, $fcc0
245; 32: mov.s $f0, $f14
246
247; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
248; 32R2-DAG: mtc1 $7, $[[F3:f[0-9]+]]
249; 32R2: c.olt.s $[[F2]], $[[F3]]
250; 32R2: movt.s $f14, $f12, $fcc0
251; 32R2: mov.s $f0, $f14
252
253; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
254; 32R6-DAG: mtc1 $7, $[[F3:f[0-9]+]]
Daniel Sandersdc067182014-07-09 10:40:20 +0000255; 32R6: cmp.lt.s $[[CC:f0]], $[[F2]], $[[F3]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000256; 32R6: sel.s $[[CC]], $f14, $f12
257
258; 64: c.olt.s $f14, $f15
259; 64: movt.s $f13, $f12, $fcc0
260; 64: mov.s $f0, $f13
261
262; 64R2: c.olt.s $f14, $f15
263; 64R2: movt.s $f13, $f12, $fcc0
264; 64R2: mov.s $f0, $f13
265
Daniel Sandersdc067182014-07-09 10:40:20 +0000266; 64R6: cmp.lt.s $[[CC:f0]], $f14, $f15
Daniel Sanders0fa60412014-06-12 13:39:06 +0000267; 64R6: sel.s $[[CC]], $f13, $f12
268
Akira Hatanakaa5352702011-03-31 18:26:17 +0000269 %cmp = fcmp olt float %f2, %f3
270 %cond = select i1 %cmp, float %f0, float %f1
271 ret float %cond
272}
273
Daniel Sanders0fa60412014-06-12 13:39:06 +0000274define float @f32_fcmp_ogt_f32_val(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000275entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000276; ALL-LABEL: f32_fcmp_ogt_f32_val:
277
278; 32-DAG: mtc1 $6, $[[F2:f[0-9]+]]
279; 32-DAG: mtc1 $7, $[[F3:f[0-9]+]]
280; 32: c.ule.s $[[F2]], $[[F3]]
281; 32: movf.s $f14, $f12, $fcc0
282; 32: mov.s $f0, $f14
283
284; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
285; 32R2-DAG: mtc1 $7, $[[F3:f[0-9]+]]
286; 32R2: c.ule.s $[[F2]], $[[F3]]
287; 32R2: movf.s $f14, $f12, $fcc0
288; 32R2: mov.s $f0, $f14
289
290; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
291; 32R6-DAG: mtc1 $7, $[[F3:f[0-9]+]]
Daniel Sandersdc067182014-07-09 10:40:20 +0000292; 32R6: cmp.lt.s $[[CC:f0]], $[[F3]], $[[F2]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000293; 32R6: sel.s $[[CC]], $f14, $f12
294
295; 64: c.ule.s $f14, $f15
296; 64: movf.s $f13, $f12, $fcc0
297; 64: mov.s $f0, $f13
298
299; 64R2: c.ule.s $f14, $f15
300; 64R2: movf.s $f13, $f12, $fcc0
301; 64R2: mov.s $f0, $f13
302
Daniel Sandersdc067182014-07-09 10:40:20 +0000303; 64R6: cmp.lt.s $[[CC:f0]], $f15, $f14
Daniel Sanders0fa60412014-06-12 13:39:06 +0000304; 64R6: sel.s $[[CC]], $f13, $f12
305
Akira Hatanakaa5352702011-03-31 18:26:17 +0000306 %cmp = fcmp ogt float %f2, %f3
307 %cond = select i1 %cmp, float %f0, float %f1
308 ret float %cond
309}
310
Daniel Sanders0fa60412014-06-12 13:39:06 +0000311define double @f32_fcmp_ogt_f64_val(double %f0, double %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000312entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000313; ALL-LABEL: f32_fcmp_ogt_f64_val:
314
315; 32-DAG: lwc1 $[[F2:f[0-9]+]], 16($sp)
316; 32-DAG: lwc1 $[[F3:f[0-9]+]], 20($sp)
317; 32: c.ule.s $[[F2]], $[[F3]]
318; 32: movf.d $f14, $f12, $fcc0
319; 32: mov.d $f0, $f14
320
321; 32R2-DAG: lwc1 $[[F2:f[0-9]+]], 16($sp)
322; 32R2-DAG: lwc1 $[[F3:f[0-9]+]], 20($sp)
323; 32R2: c.ule.s $[[F2]], $[[F3]]
324; 32R2: movf.d $f14, $f12, $fcc0
325; 32R2: mov.d $f0, $f14
326
327; 32R6-DAG: lwc1 $[[F2:f[0-9]+]], 16($sp)
328; 32R6-DAG: lwc1 $[[F3:f[0-9]+]], 20($sp)
Daniel Sandersdc067182014-07-09 10:40:20 +0000329; 32R6: cmp.lt.s $[[CC:f0]], $[[F3]], $[[F2]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000330; 32R6: sel.d $[[CC]], $f14, $f12
331
332; 64: c.ule.s $f14, $f15
333; 64: movf.d $f13, $f12, $fcc0
334; 64: mov.d $f0, $f13
335
336; 64R2: c.ule.s $f14, $f15
337; 64R2: movf.d $f13, $f12, $fcc0
338; 64R2: mov.d $f0, $f13
339
Daniel Sandersdc067182014-07-09 10:40:20 +0000340; 64R6: cmp.lt.s $[[CC:f0]], $f15, $f14
Daniel Sanders0fa60412014-06-12 13:39:06 +0000341; 64R6: sel.d $[[CC]], $f13, $f12
342
Akira Hatanakaa5352702011-03-31 18:26:17 +0000343 %cmp = fcmp ogt float %f2, %f3
344 %cond = select i1 %cmp, double %f0, double %f1
345 ret double %cond
346}
347
Daniel Sanders0fa60412014-06-12 13:39:06 +0000348define double @f64_fcmp_oeq_f64_val(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000349entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000350; ALL-LABEL: f64_fcmp_oeq_f64_val:
351
352; 32-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
353; 32-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
354; 32: c.eq.d $[[F2]], $[[F3]]
355; 32: movt.d $f14, $f12, $fcc0
356; 32: mov.d $f0, $f14
357
358; 32R2-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
359; 32R2-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
360; 32R2: c.eq.d $[[F2]], $[[F3]]
361; 32R2: movt.d $f14, $f12, $fcc0
362; 32R2: mov.d $f0, $f14
363
364; 32R6-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
365; 32R6-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
366; 32R6: cmp.eq.d $[[CC:f0]], $[[F2]], $[[F3]]
367; 32R6: sel.d $[[CC]], $f14, $f12
368
369; 64: c.eq.d $f14, $f15
370; 64: movt.d $f13, $f12, $fcc0
371; 64: mov.d $f0, $f13
372
373; 64R2: c.eq.d $f14, $f15
374; 64R2: movt.d $f13, $f12, $fcc0
375; 64R2: mov.d $f0, $f13
376
377; 64R6: cmp.eq.d $[[CC:f0]], $f14, $f15
378; 64R6: sel.d $[[CC]], $f13, $f12
379
Akira Hatanakaa5352702011-03-31 18:26:17 +0000380 %cmp = fcmp oeq double %f2, %f3
381 %cond = select i1 %cmp, double %f0, double %f1
382 ret double %cond
383}
384
Daniel Sanders0fa60412014-06-12 13:39:06 +0000385define double @f64_fcmp_olt_f64_val(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000386entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000387; ALL-LABEL: f64_fcmp_olt_f64_val:
388
389; 32-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
390; 32-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
391; 32: c.olt.d $[[F2]], $[[F3]]
392; 32: movt.d $f14, $f12, $fcc0
393; 32: mov.d $f0, $f14
394
395; 32R2-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
396; 32R2-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
397; 32R2: c.olt.d $[[F2]], $[[F3]]
398; 32R2: movt.d $f14, $f12, $fcc0
399; 32R2: mov.d $f0, $f14
400
401; 32R6-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
402; 32R6-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
Daniel Sandersdc067182014-07-09 10:40:20 +0000403; 32R6: cmp.lt.d $[[CC:f0]], $[[F2]], $[[F3]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000404; 32R6: sel.d $[[CC]], $f14, $f12
405
406; 64: c.olt.d $f14, $f15
407; 64: movt.d $f13, $f12, $fcc0
408; 64: mov.d $f0, $f13
409
410; 64R2: c.olt.d $f14, $f15
411; 64R2: movt.d $f13, $f12, $fcc0
412; 64R2: mov.d $f0, $f13
413
Daniel Sandersdc067182014-07-09 10:40:20 +0000414; 64R6: cmp.lt.d $[[CC:f0]], $f14, $f15
Daniel Sanders0fa60412014-06-12 13:39:06 +0000415; 64R6: sel.d $[[CC]], $f13, $f12
416
Akira Hatanakaa5352702011-03-31 18:26:17 +0000417 %cmp = fcmp olt double %f2, %f3
418 %cond = select i1 %cmp, double %f0, double %f1
419 ret double %cond
420}
421
Daniel Sanders0fa60412014-06-12 13:39:06 +0000422define double @f64_fcmp_ogt_f64_val(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000423entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000424; ALL-LABEL: f64_fcmp_ogt_f64_val:
425
426; 32-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
427; 32-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
428; 32: c.ule.d $[[F2]], $[[F3]]
429; 32: movf.d $f14, $f12, $fcc0
430; 32: mov.d $f0, $f14
431
432; 32R2-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
433; 32R2-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
434; 32R2: c.ule.d $[[F2]], $[[F3]]
435; 32R2: movf.d $f14, $f12, $fcc0
436; 32R2: mov.d $f0, $f14
437
438; 32R6-DAG: ldc1 $[[F2:f[0-9]+]], 16($sp)
439; 32R6-DAG: ldc1 $[[F3:f[0-9]+]], 24($sp)
Daniel Sandersdc067182014-07-09 10:40:20 +0000440; 32R6: cmp.lt.d $[[CC:f0]], $[[F3]], $[[F2]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000441; 32R6: sel.d $[[CC]], $f14, $f12
442
443; 64: c.ule.d $f14, $f15
444; 64: movf.d $f13, $f12, $fcc0
445; 64: mov.d $f0, $f13
446
447; 64R2: c.ule.d $f14, $f15
448; 64R2: movf.d $f13, $f12, $fcc0
449; 64R2: mov.d $f0, $f13
450
Daniel Sandersdc067182014-07-09 10:40:20 +0000451; 64R6: cmp.lt.d $[[CC:f0]], $f15, $f14
Daniel Sanders0fa60412014-06-12 13:39:06 +0000452; 64R6: sel.d $[[CC]], $f13, $f12
453
Akira Hatanakaa5352702011-03-31 18:26:17 +0000454 %cmp = fcmp ogt double %f2, %f3
455 %cond = select i1 %cmp, double %f0, double %f1
456 ret double %cond
457}
458
Daniel Sanders0fa60412014-06-12 13:39:06 +0000459define float @f64_fcmp_ogt_f32_val(float %f0, float %f1, double %f2, double %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000460entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000461; ALL-LABEL: f64_fcmp_ogt_f32_val:
462
463; 32-DAG: mtc1 $6, $[[F2:f[1-3]*[02468]+]]
464; 32-DAG: mtc1 $7, $[[F2H:f[1-3]*[13579]+]]
465; 32-DAG: ldc1 $[[F3:f[0-9]+]], 16($sp)
466; 32: c.ule.d $[[F2]], $[[F3]]
467; 32: movf.s $f14, $f12, $fcc0
468; 32: mov.s $f0, $f14
469
470; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
471; 32R2-DAG: mthc1 $7, $[[F2]]
472; 32R2-DAG: ldc1 $[[F3:f[0-9]+]], 16($sp)
473; 32R2: c.ule.d $[[F2]], $[[F3]]
474; 32R2: movf.s $f14, $f12, $fcc0
475; 32R2: mov.s $f0, $f14
476
477; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
478; 32R6-DAG: mthc1 $7, $[[F2]]
479; 32R6-DAG: ldc1 $[[F3:f[0-9]+]], 16($sp)
Daniel Sandersdc067182014-07-09 10:40:20 +0000480; 32R6: cmp.lt.d $[[CC:f0]], $[[F3]], $[[F2]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000481; 32R6: sel.s $[[CC]], $f14, $f12
482
483; 64: c.ule.d $f14, $f15
484; 64: movf.s $f13, $f12, $fcc0
485; 64: mov.s $f0, $f13
486
487; 64R2: c.ule.d $f14, $f15
488; 64R2: movf.s $f13, $f12, $fcc0
489; 64R2: mov.s $f0, $f13
490
Daniel Sandersdc067182014-07-09 10:40:20 +0000491; 64R6: cmp.lt.d $[[CC:f0]], $f15, $f14
Daniel Sanders0fa60412014-06-12 13:39:06 +0000492; 64R6: sel.s $[[CC]], $f13, $f12
493
Akira Hatanakaa5352702011-03-31 18:26:17 +0000494 %cmp = fcmp ogt double %f2, %f3
495 %cond = select i1 %cmp, float %f0, float %f1
496 ret float %cond
497}
498
Daniel Sanders0fa60412014-06-12 13:39:06 +0000499define i32 @f32_fcmp_oeq_i32_val(i32 %f0, i32 %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000500entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000501; ALL-LABEL: f32_fcmp_oeq_i32_val:
502
503; 32-DAG: mtc1 $6, $[[F2:f[0-9]+]]
504; 32-DAG: mtc1 $7, $[[F3:f[0-9]+]]
505; 32: c.eq.s $[[F2]], $[[F3]]
506; 32: movt $5, $4, $fcc0
507; 32: move $2, $5
508
509; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
510; 32R2-DAG: mtc1 $7, $[[F3:f[0-9]+]]
511; 32R2: c.eq.s $[[F2]], $[[F3]]
512; 32R2: movt $5, $4, $fcc0
513; 32R2: move $2, $5
514
515; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
516; 32R6-DAG: mtc1 $7, $[[F3:f[0-9]+]]
517; 32R6: cmp.eq.s $[[CC:f[0-9]+]], $[[F2]], $[[F3]]
518; 32R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000519; 32R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000520; 32R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000521; 32R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
522; 32R6: or $2, $[[NE]], $[[EQ]]
523
524; 64: c.eq.s $f14, $f15
525; 64: movt $5, $4, $fcc0
526; 64: move $2, $5
527
528; 64R2: c.eq.s $f14, $f15
529; 64R2: movt $5, $4, $fcc0
530; 64R2: move $2, $5
531
532; 64R6: cmp.eq.s $[[CC:f[0-9]+]], $f14, $f15
533; 64R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000534; 64R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000535; 64R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000536; 64R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
537; 64R6: or $2, $[[NE]], $[[EQ]]
538
Akira Hatanakaa5352702011-03-31 18:26:17 +0000539 %cmp = fcmp oeq float %f2, %f3
540 %cond = select i1 %cmp, i32 %f0, i32 %f1
541 ret i32 %cond
542}
543
Daniel Sanders0fa60412014-06-12 13:39:06 +0000544define i32 @f32_fcmp_olt_i32_val(i32 %f0, i32 %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000545entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000546; ALL-LABEL: f32_fcmp_olt_i32_val:
547
548; 32-DAG: mtc1 $6, $[[F2:f[0-9]+]]
549; 32-DAG: mtc1 $7, $[[F3:f[0-9]+]]
550; 32: c.olt.s $[[F2]], $[[F3]]
551; 32: movt $5, $4, $fcc0
552; 32: move $2, $5
553
554; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
555; 32R2-DAG: mtc1 $7, $[[F3:f[0-9]+]]
556; 32R2: c.olt.s $[[F2]], $[[F3]]
557; 32R2: movt $5, $4, $fcc0
558; 32R2: move $2, $5
559
560; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
561; 32R6-DAG: mtc1 $7, $[[F3:f[0-9]+]]
Daniel Sandersdc067182014-07-09 10:40:20 +0000562; 32R6: cmp.lt.s $[[CC:f[0-9]+]], $[[F2]], $[[F3]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000563; 32R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000564; 32R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000565; 32R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000566; 32R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
567; 32R6: or $2, $[[NE]], $[[EQ]]
568
569; 64: c.olt.s $f14, $f15
570; 64: movt $5, $4, $fcc0
571; 64: move $2, $5
572
573; 64R2: c.olt.s $f14, $f15
574; 64R2: movt $5, $4, $fcc0
575; 64R2: move $2, $5
576
Daniel Sandersdc067182014-07-09 10:40:20 +0000577; 64R6: cmp.lt.s $[[CC:f[0-9]+]], $f14, $f15
Daniel Sanders0fa60412014-06-12 13:39:06 +0000578; 64R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000579; 64R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000580; 64R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000581; 64R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
582; 64R6: or $2, $[[NE]], $[[EQ]]
Akira Hatanakaa5352702011-03-31 18:26:17 +0000583 %cmp = fcmp olt float %f2, %f3
584 %cond = select i1 %cmp, i32 %f0, i32 %f1
585 ret i32 %cond
586}
587
Daniel Sanders0fa60412014-06-12 13:39:06 +0000588define i32 @f32_fcmp_ogt_i32_val(i32 %f0, i32 %f1, float %f2, float %f3) nounwind readnone {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000589entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000590; ALL-LABEL: f32_fcmp_ogt_i32_val:
591
592; 32-DAG: mtc1 $6, $[[F2:f[0-9]+]]
593; 32-DAG: mtc1 $7, $[[F3:f[0-9]+]]
594; 32: c.ule.s $[[F2]], $[[F3]]
595; 32: movf $5, $4, $fcc0
596; 32: move $2, $5
597
598; 32R2-DAG: mtc1 $6, $[[F2:f[0-9]+]]
599; 32R2-DAG: mtc1 $7, $[[F3:f[0-9]+]]
600; 32R2: c.ule.s $[[F2]], $[[F3]]
601; 32R2: movf $5, $4, $fcc0
602; 32R2: move $2, $5
603
604; 32R6-DAG: mtc1 $6, $[[F2:f[0-9]+]]
605; 32R6-DAG: mtc1 $7, $[[F3:f[0-9]+]]
Daniel Sandersdc067182014-07-09 10:40:20 +0000606; 32R6: cmp.lt.s $[[CC:f[0-9]+]], $[[F3]], $[[F2]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000607; 32R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000608; 32R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000609; 32R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000610; 32R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
611; 32R6: or $2, $[[NE]], $[[EQ]]
612
613; 64: c.ule.s $f14, $f15
614; 64: movf $5, $4, $fcc0
615; 64: move $2, $5
616
617; 64R2: c.ule.s $f14, $f15
618; 64R2: movf $5, $4, $fcc0
619; 64R2: move $2, $5
620
Daniel Sandersdc067182014-07-09 10:40:20 +0000621; 64R6: cmp.lt.s $[[CC:f[0-9]+]], $f15, $f14
Daniel Sanders0fa60412014-06-12 13:39:06 +0000622; 64R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000623; 64R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000624; 64R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000625; 64R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
626; 64R6: or $2, $[[NE]], $[[EQ]]
627
Akira Hatanakaa5352702011-03-31 18:26:17 +0000628 %cmp = fcmp ogt float %f2, %f3
629 %cond = select i1 %cmp, i32 %f0, i32 %f1
630 ret i32 %cond
631}
632
Daniel Sanders0fa60412014-06-12 13:39:06 +0000633define i32 @f64_fcmp_oeq_i32_val(i32 %f0, i32 %f1) nounwind readonly {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000634entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000635; ALL-LABEL: f64_fcmp_oeq_i32_val:
636
637; 32-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
638; 32-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
639; 32-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
640; 32-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
641; 32-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
642; 32-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
643; 32: c.eq.d $[[TMP]], $[[TMP1]]
644; 32: movt $5, $4, $fcc0
645; 32: move $2, $5
646
647; 32R2-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
648; 32R2-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
649; 32R2-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
650; 32R2-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
651; 32R2-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
652; 32R2-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
653; 32R2: c.eq.d $[[TMP]], $[[TMP1]]
654; 32R2: movt $5, $4, $fcc0
655; 32R2: move $2, $5
656
657; 32R6-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
658; 32R6-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
659; 32R6-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
660; 32R6-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
661; 32R6-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
662; 32R6-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
663; 32R6: cmp.eq.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
664; 32R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000665; 32R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000666; 32R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000667; 32R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
668; 32R6: or $2, $[[NE]], $[[EQ]]
669
670; 64-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_oeq_i32_val)))
671; 64-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
672; 64-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
673; 64-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
674; 64-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
675; 64-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
676; 64: c.eq.d $[[TMP]], $[[TMP1]]
677; 64: movt $5, $4, $fcc0
678; 64: move $2, $5
679
680; 64R2-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_oeq_i32_val)))
681; 64R2-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
682; 64R2-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
683; 64R2-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
684; 64R2-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
685; 64R2-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
686; 64R2: c.eq.d $[[TMP]], $[[TMP1]]
687; 64R2: movt $5, $4, $fcc0
688; 64R2: move $2, $5
689
690; 64R6-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_oeq_i32_val)))
691; 64R6-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
692; 64R6-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
693; 64R6-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
694; 64R6-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
695; 64R6-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
696; 64R6: cmp.eq.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
697; 64R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000698; 64R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000699; 64R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000700; 64R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
701; 64R6: or $2, $[[NE]], $[[EQ]]
702
Manman Ren1a5ff282013-04-30 17:52:57 +0000703 %tmp = load double* @d2, align 8
704 %tmp1 = load double* @d3, align 8
Akira Hatanakaa5352702011-03-31 18:26:17 +0000705 %cmp = fcmp oeq double %tmp, %tmp1
706 %cond = select i1 %cmp, i32 %f0, i32 %f1
707 ret i32 %cond
708}
709
Daniel Sanders0fa60412014-06-12 13:39:06 +0000710define i32 @f64_fcmp_olt_i32_val(i32 %f0, i32 %f1) nounwind readonly {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000711entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000712; ALL-LABEL: f64_fcmp_olt_i32_val:
713
714; 32-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
715; 32-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
716; 32-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
717; 32-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
718; 32-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
719; 32-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
720; 32: c.olt.d $[[TMP]], $[[TMP1]]
721; 32: movt $5, $4, $fcc0
722; 32: move $2, $5
723
724; 32R2-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
725; 32R2-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
726; 32R2-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
727; 32R2-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
728; 32R2-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
729; 32R2-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
730; 32R2: c.olt.d $[[TMP]], $[[TMP1]]
731; 32R2: movt $5, $4, $fcc0
732; 32R2: move $2, $5
733
734; 32R6-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
735; 32R6-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
736; 32R6-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
737; 32R6-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
738; 32R6-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
739; 32R6-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
Daniel Sandersdc067182014-07-09 10:40:20 +0000740; 32R6: cmp.lt.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000741; 32R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000742; 32R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000743; 32R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000744; 32R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
745; 32R6: or $2, $[[NE]], $[[EQ]]
746
747; 64-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_olt_i32_val)))
748; 64-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
749; 64-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
750; 64-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
751; 64-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
752; 64-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
753; 64: c.olt.d $[[TMP]], $[[TMP1]]
754; 64: movt $5, $4, $fcc0
755; 64: move $2, $5
756
757; 64R2-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_olt_i32_val)))
758; 64R2-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
759; 64R2-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
760; 64R2-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
761; 64R2-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
762; 64R2-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
763; 64R2: c.olt.d $[[TMP]], $[[TMP1]]
764; 64R2: movt $5, $4, $fcc0
765; 64R2: move $2, $5
766
767; 64R6-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_olt_i32_val)))
768; 64R6-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
769; 64R6-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
770; 64R6-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
771; 64R6-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
772; 64R6-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
Daniel Sandersdc067182014-07-09 10:40:20 +0000773; 64R6: cmp.lt.d $[[CC:f[0-9]+]], $[[TMP]], $[[TMP1]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000774; 64R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000775; 64R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000776; 64R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000777; 64R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
778; 64R6: or $2, $[[NE]], $[[EQ]]
779
Manman Ren1a5ff282013-04-30 17:52:57 +0000780 %tmp = load double* @d2, align 8
781 %tmp1 = load double* @d3, align 8
Akira Hatanakaa5352702011-03-31 18:26:17 +0000782 %cmp = fcmp olt double %tmp, %tmp1
783 %cond = select i1 %cmp, i32 %f0, i32 %f1
784 ret i32 %cond
785}
786
Daniel Sanders0fa60412014-06-12 13:39:06 +0000787define i32 @f64_fcmp_ogt_i32_val(i32 %f0, i32 %f1) nounwind readonly {
Akira Hatanakaa5352702011-03-31 18:26:17 +0000788entry:
Daniel Sanders0fa60412014-06-12 13:39:06 +0000789; ALL-LABEL: f64_fcmp_ogt_i32_val:
790
791; 32-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
792; 32-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
793; 32-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
794; 32-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
795; 32-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
796; 32-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
797; 32: c.ule.d $[[TMP]], $[[TMP1]]
798; 32: movf $5, $4, $fcc0
799; 32: move $2, $5
800
801; 32R2-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
802; 32R2-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
803; 32R2-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
804; 32R2-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
805; 32R2-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
806; 32R2-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
807; 32R2: c.ule.d $[[TMP]], $[[TMP1]]
808; 32R2: movf $5, $4, $fcc0
809; 32R2: move $2, $5
810
811; 32R6-DAG: addiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(_gp_disp)
812; 32R6-DAG: addu $[[GOT:[0-9]+]], $[[T0]], $25
813; 32R6-DAG: lw $[[D2:[0-9]+]], %got(d2)($1)
814; 32R6-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
815; 32R6-DAG: lw $[[D3:[0-9]+]], %got(d3)($1)
816; 32R6-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
Daniel Sandersdc067182014-07-09 10:40:20 +0000817; 32R6: cmp.lt.d $[[CC:f[0-9]+]], $[[TMP1]], $[[TMP]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000818; 32R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000819; 32R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000820; 32R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000821; 32R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
822; 32R6: or $2, $[[NE]], $[[EQ]]
823
824; 64-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_ogt_i32_val)))
825; 64-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
826; 64-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
827; 64-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
828; 64-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
829; 64-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
830; 64: c.ule.d $[[TMP]], $[[TMP1]]
831; 64: movf $5, $4, $fcc0
832; 64: move $2, $5
833
834; 64R2-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_ogt_i32_val)))
835; 64R2-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
836; 64R2-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
837; 64R2-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
838; 64R2-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
839; 64R2-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
840; 64R2: c.ule.d $[[TMP]], $[[TMP1]]
841; 64R2: movf $5, $4, $fcc0
842; 64R2: move $2, $5
843
844; 64R6-DAG: daddiu $[[T0:[0-9]+]], ${{[0-9]+}}, %lo(%neg(%gp_rel(f64_fcmp_ogt_i32_val)))
845; 64R6-DAG: daddu $[[GOT:[0-9]+]], $[[T0]], $25
846; 64R6-DAG: ld $[[D2:[0-9]+]], %got_disp(d2)($1)
847; 64R6-DAG: ldc1 $[[TMP:f[0-9]+]], 0($[[D2]])
848; 64R6-DAG: ld $[[D3:[0-9]+]], %got_disp(d3)($1)
849; 64R6-DAG: ldc1 $[[TMP1:f[0-9]+]], 0($[[D3]])
Daniel Sandersdc067182014-07-09 10:40:20 +0000850; 64R6: cmp.lt.d $[[CC:f[0-9]+]], $[[TMP1]], $[[TMP]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000851; 64R6: mfc1 $[[CCGPR:[0-9]+]], $[[CC]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000852; 64R6: andi $[[CCGPR]], $[[CCGPR]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000853; 64R6: seleqz $[[EQ:[0-9]+]], $5, $[[CCGPR]]
Daniel Sanders0fa60412014-06-12 13:39:06 +0000854; 64R6: selnez $[[NE:[0-9]+]], $4, $[[CCGPR]]
855; 64R6: or $2, $[[NE]], $[[EQ]]
856
Manman Ren1a5ff282013-04-30 17:52:57 +0000857 %tmp = load double* @d2, align 8
858 %tmp1 = load double* @d3, align 8
Akira Hatanakaa5352702011-03-31 18:26:17 +0000859 %cmp = fcmp ogt double %tmp, %tmp1
860 %cond = select i1 %cmp, i32 %f0, i32 %f1
861 ret i32 %cond
862}