blob: 59e847b8844a90725cada073577fadabee76228a [file] [log] [blame]
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00001; RUN: llc < %s -march=mips -mcpu=mips32 | \
2; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32-C
3; RUN: llc < %s -march=mips -mcpu=mips32r2 | \
4; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32-C
5; RUN: llc < %s -march=mips -mcpu=mips32r6 | \
6; RUN: FileCheck %s -check-prefix=ALL -check-prefix=32-CMP
7; RUN: llc < %s -march=mips64 -mcpu=mips4 | \
8; RUN: FileCheck %s -check-prefix=ALL -check-prefix=64-C
9; RUN: llc < %s -march=mips64 -mcpu=mips64 | \
10; RUN: FileCheck %s -check-prefix=ALL -check-prefix=64-C
11; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | \
12; RUN: FileCheck %s -check-prefix=ALL -check-prefix=64-C
13; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | \
14; RUN: FileCheck %s -check-prefix=ALL -check-prefix=64-CMP
Zlatko Buljancd242c12016-06-09 11:15:53 +000015; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
16; RUN: -check-prefix=ALL -check-prefix=MM -check-prefix=MM32R3
17; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
18; RUN: -check-prefix=ALL -check-prefix=MM -check-prefix=MMR6 \
19; RUN: -check-prefix=MM32R6
20; RUN: llc < %s -march=mips -mcpu=mips64r6 -mattr=+micromips | FileCheck %s \
21; RUN: -check-prefix=ALL -check-prefix=MM -check-prefix=MMR6 \
22; RUN: -check-prefix=MM64R6
Daniel Sanders0fa60412014-06-12 13:39:06 +000023
24define i32 @false_f32(float %a, float %b) nounwind {
25; ALL-LABEL: false_f32:
Zlatko Buljancd242c12016-06-09 11:15:53 +000026; 32-C: addiu $2, $zero, 0
27
28; 32-CMP: addiu $2, $zero, 0
29
30; 64-C: addiu $2, $zero, 0
31
32; 64-CMP: addiu $2, $zero, 0
33
34; MM-DAG: lui $2, 0
Daniel Sanders0fa60412014-06-12 13:39:06 +000035
36 %1 = fcmp false float %a, %b
37 %2 = zext i1 %1 to i32
38 ret i32 %2
39}
40
41define i32 @oeq_f32(float %a, float %b) nounwind {
42; ALL-LABEL: oeq_f32:
43
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000044; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000045; 32-C-DAG: c.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000046; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000047
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000048; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000049; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000050; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000051
52; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +000053; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
54; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000055
56; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000057; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
58; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000059
Zlatko Buljancd242c12016-06-09 11:15:53 +000060; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
61; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
62; MM32R3-DAG: c.eq.s $f12, $f14
63; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
64
65; MM32R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
66; MM64R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
67; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
68; MMR6-DAG: andi16 $2, $[[T1]], 1
69
Daniel Sanders0fa60412014-06-12 13:39:06 +000070 %1 = fcmp oeq float %a, %b
71 %2 = zext i1 %1 to i32
72 ret i32 %2
73}
74
75define i32 @ogt_f32(float %a, float %b) nounwind {
76; ALL-LABEL: ogt_f32:
77
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000078; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000079; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000080; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000081
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000082; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000083; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000084; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000085
Daniel Sandersdc067182014-07-09 10:40:20 +000086; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000087; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
88; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000089
Daniel Sandersdc067182014-07-09 10:40:20 +000090; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000091; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
92; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000093
Zlatko Buljancd242c12016-06-09 11:15:53 +000094; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
95; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
96; MM32R3-DAG: c.ule.s $f12, $f14
97; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
98
99; MM32R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f14, $f12
100; MM64R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f13, $f12
101; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
102; MMR6-DAG: andi16 $2, $[[T1]], 1
103
Daniel Sanders0fa60412014-06-12 13:39:06 +0000104 %1 = fcmp ogt float %a, %b
105 %2 = zext i1 %1 to i32
106 ret i32 %2
107}
108
109define i32 @oge_f32(float %a, float %b) nounwind {
110; ALL-LABEL: oge_f32:
111
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000112; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000113; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000114; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000115
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000116; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000117; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000118; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000119
Daniel Sandersdc067182014-07-09 10:40:20 +0000120; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000121; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
122; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000123
Daniel Sandersdc067182014-07-09 10:40:20 +0000124; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000125; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
126; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000127
Zlatko Buljancd242c12016-06-09 11:15:53 +0000128; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
129; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
130; MM32R3-DAG: c.ult.s $f12, $f14
131; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
132
133; MM32R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
134; MM64R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f13, $f12
135; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
136; MMR6-DAG: andi16 $2, $[[T1]], 1
137
Daniel Sanders0fa60412014-06-12 13:39:06 +0000138 %1 = fcmp oge float %a, %b
139 %2 = zext i1 %1 to i32
140 ret i32 %2
141}
142
143define i32 @olt_f32(float %a, float %b) nounwind {
144; ALL-LABEL: olt_f32:
145
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000146; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000147; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000148; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000149
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000150; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000151; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000152; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000153
Daniel Sandersdc067182014-07-09 10:40:20 +0000154; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000155; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
156; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000157
Daniel Sandersdc067182014-07-09 10:40:20 +0000158; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000159; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
160; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000161
Zlatko Buljancd242c12016-06-09 11:15:53 +0000162; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
163; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
164; MM32R3-DAG: c.olt.s $f12, $f14
165; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
166
167; MM32R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
168; MM64R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
169; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
170; MMR6-DAG: andi16 $2, $[[T1]], 1
171
Daniel Sanders0fa60412014-06-12 13:39:06 +0000172 %1 = fcmp olt float %a, %b
173 %2 = zext i1 %1 to i32
174 ret i32 %2
175}
176
177define i32 @ole_f32(float %a, float %b) nounwind {
178; ALL-LABEL: ole_f32:
179
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000180; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000181; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000182; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000183
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000184; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000185; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000186; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000187
Daniel Sandersdc067182014-07-09 10:40:20 +0000188; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000189; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
190; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000191
Daniel Sandersdc067182014-07-09 10:40:20 +0000192; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000193; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
194; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000195
Zlatko Buljancd242c12016-06-09 11:15:53 +0000196; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
197; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
198; MM32R3-DAG: c.ole.s $f12, $f14
199; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
200
201; MM32R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
202; MM64R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
203; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
204; MMR6-DAG: andi16 $2, $[[T1]], 1
205
Daniel Sanders0fa60412014-06-12 13:39:06 +0000206 %1 = fcmp ole float %a, %b
207 %2 = zext i1 %1 to i32
208 ret i32 %2
209}
210
211define i32 @one_f32(float %a, float %b) nounwind {
212; ALL-LABEL: one_f32:
213
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000214; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000215; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000216; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000217
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000218; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000219; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000220; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000221
222; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
223; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000224; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
225; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000226
227; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
228; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000229; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
230; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000231
Zlatko Buljancd242c12016-06-09 11:15:53 +0000232; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
233; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
234; MM32R3-DAG: c.ueq.s $f12, $f14
235; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
236
237; MM32R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
238; MM64R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
239; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000240; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000241; MMR6-DAG: andi16 $2, $[[T2]], 1
242
Daniel Sanders0fa60412014-06-12 13:39:06 +0000243 %1 = fcmp one float %a, %b
244 %2 = zext i1 %1 to i32
245 ret i32 %2
246}
247
248define i32 @ord_f32(float %a, float %b) nounwind {
249; ALL-LABEL: ord_f32:
250
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000251; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000252; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000253; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000254
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000255; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000256; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000257; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000258
259; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
260; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000261; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
262; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000263
264; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
265; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000266; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
267; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000268
Zlatko Buljancd242c12016-06-09 11:15:53 +0000269; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
270; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
271; MM32R3-DAG: c.un.s $f12, $f14
272; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
273
274; MM32R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
275; MM64R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
276; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000277; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000278; MMR6-DAG: andi16 $2, $[[T2]], 1
279
Daniel Sanders0fa60412014-06-12 13:39:06 +0000280 %1 = fcmp ord float %a, %b
281 %2 = zext i1 %1 to i32
282 ret i32 %2
283}
284
285define i32 @ueq_f32(float %a, float %b) nounwind {
286; ALL-LABEL: ueq_f32:
287
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000288; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000289; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000290; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000291
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000292; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000293; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000294; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000295
296; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000297; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
298; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000299
300; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000301; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
302; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000303
Zlatko Buljancd242c12016-06-09 11:15:53 +0000304; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
305; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
306; MM32R3-DAG: c.ueq.s $f12, $f14
307; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
308
309; MM32R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
310; MM64R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
311; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
312; MMR6-DAG: andi16 $2, $[[T1]], 1
313
Daniel Sanders0fa60412014-06-12 13:39:06 +0000314 %1 = fcmp ueq float %a, %b
315 %2 = zext i1 %1 to i32
316 ret i32 %2
317}
318
319define i32 @ugt_f32(float %a, float %b) nounwind {
320; ALL-LABEL: ugt_f32:
321
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000322; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000323; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000324; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000325
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000326; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000327; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000328; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000329
330; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000331; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
332; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000333
334; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000335; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
336; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000337
Zlatko Buljancd242c12016-06-09 11:15:53 +0000338; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
339; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
340; MM32R3-DAG: c.ole.s $f12, $f14
341; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
342
343; MM32R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
344; MM64R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
345; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
346; MMR6-DAG: andi16 $2, $[[T1]], 1
347
Daniel Sanders0fa60412014-06-12 13:39:06 +0000348 %1 = fcmp ugt float %a, %b
349 %2 = zext i1 %1 to i32
350 ret i32 %2
351}
352
353define i32 @uge_f32(float %a, float %b) nounwind {
354; ALL-LABEL: uge_f32:
355
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000356; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000357; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000358; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000359
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000360; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000361; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000362; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000363
364; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000365; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
366; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000367
368; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000369; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
370; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000371
Zlatko Buljancd242c12016-06-09 11:15:53 +0000372; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
373; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
374; MM32R3-DAG: c.olt.s $f12, $f14
375; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
376
377; MM32R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
378; MM64R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
379; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
380; MMR6-DAG: andi16 $2, $[[T1]], 1
381
Daniel Sanders0fa60412014-06-12 13:39:06 +0000382 %1 = fcmp uge float %a, %b
383 %2 = zext i1 %1 to i32
384 ret i32 %2
385}
386
387define i32 @ult_f32(float %a, float %b) nounwind {
388; ALL-LABEL: ult_f32:
389
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000390; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000391; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000392; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000393
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000394; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000395; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000396; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000397
398; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000399; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
400; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000401
402; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000403; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
404; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000405
Zlatko Buljancd242c12016-06-09 11:15:53 +0000406; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
407; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
408; MM32R3-DAG: c.ult.s $f12, $f14
409; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
410
411; MM32R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
412; MM64R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
413; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
414; MMR6-DAG: andi16 $2, $[[T1]], 1
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000415
Daniel Sanders0fa60412014-06-12 13:39:06 +0000416 %1 = fcmp ult float %a, %b
417 %2 = zext i1 %1 to i32
418 ret i32 %2
419}
420
421define i32 @ule_f32(float %a, float %b) nounwind {
422; ALL-LABEL: ule_f32:
423
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000424; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000425; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000426; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000427
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000428; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000429; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000430; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000431
432; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000433; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
434; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000435
436; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000437; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
438; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000439
Zlatko Buljancd242c12016-06-09 11:15:53 +0000440; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
441; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
442; MM32R3-DAG: c.ule.s $f12, $f14
443; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
444
445; MM32R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
446; MM64R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
447; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
448; MMR6-DAG: andi16 $2, $[[T1]], 1
449
Daniel Sanders0fa60412014-06-12 13:39:06 +0000450 %1 = fcmp ule float %a, %b
451 %2 = zext i1 %1 to i32
452 ret i32 %2
453}
454
455define i32 @une_f32(float %a, float %b) nounwind {
456; ALL-LABEL: une_f32:
457
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000458; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000459; 32-C-DAG: c.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000460; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000461
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000462; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000463; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000464; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000465
466; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
467; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000468; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
469; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000470
471; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
472; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000473; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
474; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000475
Zlatko Buljancd242c12016-06-09 11:15:53 +0000476; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
477; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
478; MM32R3-DAG: c.eq.s $f12, $f14
479; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
480
481; MM32R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
482; MM64R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
483; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000484; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000485; MMR6-DAG: andi16 $2, $[[T2]], 1
486
Daniel Sanders0fa60412014-06-12 13:39:06 +0000487 %1 = fcmp une float %a, %b
488 %2 = zext i1 %1 to i32
489 ret i32 %2
490}
491
492define i32 @uno_f32(float %a, float %b) nounwind {
493; ALL-LABEL: uno_f32:
494
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000495; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000496; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000497; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000498
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000499; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000500; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000501; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000502
503; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000504; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
505; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000506
507; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000508; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
509; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000510
Zlatko Buljancd242c12016-06-09 11:15:53 +0000511; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
512; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
513; MM32R3-DAG: c.un.s $f12, $f14
514; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
515
516; MM32R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
517; MM64R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
518; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
519; MMR6-DAG: andi16 $2, $[[T1]], 1
520
Daniel Sanders0fa60412014-06-12 13:39:06 +0000521 %1 = fcmp uno float %a, %b
522 %2 = zext i1 %1 to i32
523 ret i32 %2
524}
525
526define i32 @true_f32(float %a, float %b) nounwind {
527; ALL-LABEL: true_f32:
Zlatko Buljancd242c12016-06-09 11:15:53 +0000528; 32-C: addiu $2, $zero, 1
529
530; 32-CMP: addiu $2, $zero, 1
531
532; 64-C: addiu $2, $zero, 1
533
534; 64-CMP: addiu $2, $zero, 1
535
536; MM-DAG: li16 $2, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000537
538 %1 = fcmp true float %a, %b
539 %2 = zext i1 %1 to i32
540 ret i32 %2
541}
542
543define i32 @false_f64(double %a, double %b) nounwind {
544; ALL-LABEL: false_f64:
Zlatko Buljancd242c12016-06-09 11:15:53 +0000545; 32-C: addiu $2, $zero, 0
546
547; 32-CMP: addiu $2, $zero, 0
548
549; 64-C: addiu $2, $zero, 0
550
551; 64-CMP: addiu $2, $zero, 0
552
553; MM-DAG: lui $2, 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000554
555 %1 = fcmp false double %a, %b
556 %2 = zext i1 %1 to i32
557 ret i32 %2
558}
559
560define i32 @oeq_f64(double %a, double %b) nounwind {
561; ALL-LABEL: oeq_f64:
562
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000563; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000564; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000565; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000566
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000567; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000568; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000569; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000570
571; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000572; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
573; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000574
575; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000576; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
577; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000578
Zlatko Buljancd242c12016-06-09 11:15:53 +0000579; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
580; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
581; MM32R3-DAG: c.eq.d $f12, $f14
582; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
583
584; MM32R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
585; MM64R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
586; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
587; MMR6-DAG: andi16 $2, $[[T1]], 1
588
Daniel Sanders0fa60412014-06-12 13:39:06 +0000589 %1 = fcmp oeq double %a, %b
590 %2 = zext i1 %1 to i32
591 ret i32 %2
592}
593
594define i32 @ogt_f64(double %a, double %b) nounwind {
595; ALL-LABEL: ogt_f64:
596
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000597; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000598; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000599; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000600
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000601; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000602; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000603; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000604
Daniel Sandersdc067182014-07-09 10:40:20 +0000605; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000606; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
607; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000608
Daniel Sandersdc067182014-07-09 10:40:20 +0000609; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000610; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
611; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000612
Zlatko Buljancd242c12016-06-09 11:15:53 +0000613; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
614; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
615; MM32R3-DAG: c.ule.d $f12, $f14
616; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
617
618; MM32R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
619; MM64R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
620; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
621; MMR6-DAG: andi16 $2, $[[T1]], 1
622
Daniel Sanders0fa60412014-06-12 13:39:06 +0000623 %1 = fcmp ogt double %a, %b
624 %2 = zext i1 %1 to i32
625 ret i32 %2
626}
627
628define i32 @oge_f64(double %a, double %b) nounwind {
629; ALL-LABEL: oge_f64:
630
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000631; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000632; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000633; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000634
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000635; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000636; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000637; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000638
Daniel Sandersdc067182014-07-09 10:40:20 +0000639; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000640; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
641; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000642
Daniel Sandersdc067182014-07-09 10:40:20 +0000643; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000644; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
645; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000646
Zlatko Buljancd242c12016-06-09 11:15:53 +0000647; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
648; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
649; MM32R3-DAG: c.ult.d $f12, $f14
650; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
651
652; MM32R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
653; MM64R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
654; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
655; MMR6-DAG: andi16 $2, $[[T1]], 1
656
Daniel Sanders0fa60412014-06-12 13:39:06 +0000657 %1 = fcmp oge double %a, %b
658 %2 = zext i1 %1 to i32
659 ret i32 %2
660}
661
662define i32 @olt_f64(double %a, double %b) nounwind {
663; ALL-LABEL: olt_f64:
664
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000665; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000666; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000667; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000668
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000669; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000670; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000671; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000672
Daniel Sandersdc067182014-07-09 10:40:20 +0000673; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000674; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
675; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000676
Daniel Sandersdc067182014-07-09 10:40:20 +0000677; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000678; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
679; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000680
Zlatko Buljancd242c12016-06-09 11:15:53 +0000681; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
682; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
683; MM32R3-DAG: c.olt.d $f12, $f14
684; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
685
686; MM32R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
687; MM64R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
688; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
689; MMR6-DAG: andi16 $2, $[[T1]], 1
690
Daniel Sanders0fa60412014-06-12 13:39:06 +0000691 %1 = fcmp olt double %a, %b
692 %2 = zext i1 %1 to i32
693 ret i32 %2
694}
695
696define i32 @ole_f64(double %a, double %b) nounwind {
697; ALL-LABEL: ole_f64:
698
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000699; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000700; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000701; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000702
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000703; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000704; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000705; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000706
Daniel Sandersdc067182014-07-09 10:40:20 +0000707; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000708; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
709; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000710
Daniel Sandersdc067182014-07-09 10:40:20 +0000711; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000712; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
713; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000714
Zlatko Buljancd242c12016-06-09 11:15:53 +0000715; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
716; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
717; MM32R3-DAG: c.ole.d $f12, $f14
718; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
719
720; MM32R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
721; MM64R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
722; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
723; MMR6-DAG: andi16 $2, $[[T1]], 1
724
Daniel Sanders0fa60412014-06-12 13:39:06 +0000725 %1 = fcmp ole double %a, %b
726 %2 = zext i1 %1 to i32
727 ret i32 %2
728}
729
730define i32 @one_f64(double %a, double %b) nounwind {
731; ALL-LABEL: one_f64:
732
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000733; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000734; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000735; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000736
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000737; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000738; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000739; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000740
741; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
742; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000743; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
744; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000745
746; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
747; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000748; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
749; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000750
Zlatko Buljancd242c12016-06-09 11:15:53 +0000751; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
752; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
753; MM32R3-DAG: c.ueq.d $f12, $f14
754; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
755
756; MM32R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
757; MM64R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
758; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000759; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000760; MMR6-DAG: andi16 $2, $[[T2]], 1
761
Daniel Sanders0fa60412014-06-12 13:39:06 +0000762 %1 = fcmp one double %a, %b
763 %2 = zext i1 %1 to i32
764 ret i32 %2
765}
766
767define i32 @ord_f64(double %a, double %b) nounwind {
768; ALL-LABEL: ord_f64:
769
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000770; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000771; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000772; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000773
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000774; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000775; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000776; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000777
778; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
779; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000780; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
781; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000782
783; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
784; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000785; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
786; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000787
Zlatko Buljancd242c12016-06-09 11:15:53 +0000788; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
789; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
790; MM32R3-DAG: c.un.d $f12, $f14
791; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
792
793; MM32R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
794; MM64R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
795; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000796; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000797; MMR6-DAG: andi16 $2, $[[T2]], 1
798
Daniel Sanders0fa60412014-06-12 13:39:06 +0000799 %1 = fcmp ord double %a, %b
800 %2 = zext i1 %1 to i32
801 ret i32 %2
802}
803
804define i32 @ueq_f64(double %a, double %b) nounwind {
805; ALL-LABEL: ueq_f64:
806
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000807; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000808; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000809; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000810
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000811; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000812; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000813; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000814
815; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000816; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
817; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000818
819; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000820; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
821; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000822
Zlatko Buljancd242c12016-06-09 11:15:53 +0000823; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
824; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
825; MM32R3-DAG: c.ueq.d $f12, $f14
826; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
827
828; MM32R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
829; MM64R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
830; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
831; MMR6-DAG: andi16 $2, $[[T1]], 1
832
Daniel Sanders0fa60412014-06-12 13:39:06 +0000833 %1 = fcmp ueq double %a, %b
834 %2 = zext i1 %1 to i32
835 ret i32 %2
836}
837
838define i32 @ugt_f64(double %a, double %b) nounwind {
839; ALL-LABEL: ugt_f64:
840
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000841; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000842; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000843; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000844
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000845; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000846; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000847; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000848
849; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000850; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
851; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000852
853; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000854; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
855; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000856
Zlatko Buljancd242c12016-06-09 11:15:53 +0000857; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
858; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
859; MM32R3-DAG: c.ole.d $f12, $f14
860; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
861
862; MM32R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
863; MM64R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
864; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
865; MMR6-DAG: andi16 $2, $[[T1]], 1
866
Daniel Sanders0fa60412014-06-12 13:39:06 +0000867 %1 = fcmp ugt double %a, %b
868 %2 = zext i1 %1 to i32
869 ret i32 %2
870}
871
872define i32 @uge_f64(double %a, double %b) nounwind {
873; ALL-LABEL: uge_f64:
874
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000875; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000876; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000877; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000878
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000879; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000880; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000881; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000882
883; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000884; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
885; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000886
887; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000888; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
889; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000890
Zlatko Buljancd242c12016-06-09 11:15:53 +0000891; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
892; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
893; MM32R3-DAG: c.olt.d $f12, $f14
894; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
895
896; MM32R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
897; MM64R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
898; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
899; MMR6-DAG: andi16 $2, $[[T1]], 1
900
Daniel Sanders0fa60412014-06-12 13:39:06 +0000901 %1 = fcmp uge double %a, %b
902 %2 = zext i1 %1 to i32
903 ret i32 %2
904}
905
906define i32 @ult_f64(double %a, double %b) nounwind {
907; ALL-LABEL: ult_f64:
908
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000909; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000910; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000911; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000912
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000913; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000914; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000915; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000916
917; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000918; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
919; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000920
921; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000922; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
923; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000924
Zlatko Buljancd242c12016-06-09 11:15:53 +0000925; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
926; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
927; MM32R3-DAG: c.ult.d $f12, $f14
928; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
929
930; MM32R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
931; MM64R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f13
932; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
933; MMR6-DAG: andi16 $2, $[[T1]], 1
934
Daniel Sanders0fa60412014-06-12 13:39:06 +0000935 %1 = fcmp ult double %a, %b
936 %2 = zext i1 %1 to i32
937 ret i32 %2
938}
939
940define i32 @ule_f64(double %a, double %b) nounwind {
941; ALL-LABEL: ule_f64:
942
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000943; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000944; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000945; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000946
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000947; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000948; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000949; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000950
951; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000952; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
953; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000954
955; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000956; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
957; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000958
Zlatko Buljancd242c12016-06-09 11:15:53 +0000959; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
960; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
961; MM32R3-DAG: c.ule.d $f12, $f14
962; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
963
964; MM32R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
965; MM64R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
966; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
967; MMR6-DAG: andi16 $2, $[[T1]], 1
968
Daniel Sanders0fa60412014-06-12 13:39:06 +0000969 %1 = fcmp ule double %a, %b
970 %2 = zext i1 %1 to i32
971 ret i32 %2
972}
973
974define i32 @une_f64(double %a, double %b) nounwind {
975; ALL-LABEL: une_f64:
976
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000977; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000978; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000979; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000980
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000981; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000982; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000983; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000984
985; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
986; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000987; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
988; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000989
990; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
991; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000992; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
993; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000994
Zlatko Buljancd242c12016-06-09 11:15:53 +0000995; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
996; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
997; MM32R3-DAG: c.eq.d $f12, $f14
998; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
999
1000; MM32R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
1001; MM64R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
1002; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +00001003; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +00001004; MMR6-DAG: andi16 $2, $[[T2]], 1
1005
Daniel Sanders0fa60412014-06-12 13:39:06 +00001006 %1 = fcmp une double %a, %b
1007 %2 = zext i1 %1 to i32
1008 ret i32 %2
1009}
1010
1011define i32 @uno_f64(double %a, double %b) nounwind {
1012; ALL-LABEL: uno_f64:
1013
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00001014; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001015; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00001016; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +00001017
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +00001018; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001019; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +00001020; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +00001021
1022; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +00001023; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
1024; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001025
1026; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +00001027; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
1028; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001029
Zlatko Buljancd242c12016-06-09 11:15:53 +00001030; MM32R3-DAG: lui $[[T0:[0-9]+]], 0
1031; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
1032; MM32R3-DAG: c.un.d $f12, $f14
1033; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
1034
1035; MM32R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
1036; MM64R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
1037; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
1038; MMR6-DAG: andi16 $2, $[[T1]], 1
1039
Daniel Sanders0fa60412014-06-12 13:39:06 +00001040 %1 = fcmp uno double %a, %b
1041 %2 = zext i1 %1 to i32
1042 ret i32 %2
1043}
1044
1045define i32 @true_f64(double %a, double %b) nounwind {
1046; ALL-LABEL: true_f64:
Zlatko Buljancd242c12016-06-09 11:15:53 +00001047; 32-C: addiu $2, $zero, 1
1048
1049; 32-CMP: addiu $2, $zero, 1
1050
1051; 64-C: addiu $2, $zero, 1
1052
1053; 64-CMP: addiu $2, $zero, 1
1054
1055; MM-DAG: li16 $2, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001056
1057 %1 = fcmp true double %a, %b
1058 %2 = zext i1 %1 to i32
1059 ret i32 %2
1060}
Daniel Sanders023c8062015-01-15 15:41:03 +00001061
1062; The optimizers sometimes produce setlt instead of setolt/setult.
1063define float @bug1_f32(float %angle, float %at) #0 {
1064entry:
1065; ALL-LABEL: bug1_f32:
1066
1067; 32-C-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1068; 32-C-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
1069; 32-C-DAG: c.ole.s $[[T0]], $[[T1]]
1070; 32-C-DAG: bc1t
1071
1072; 32-CMP-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1073; 32-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
1074; 32-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1075; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1076; FIXME: This instruction is redundant.
1077; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001078; 32-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001079
1080; 64-C-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
1081; 64-C-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst($CPI32_0)(
1082; 64-C-DAG: c.ole.s $[[T0]], $[[T1]]
1083; 64-C-DAG: bc1t
1084
1085; 64-CMP-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
1086; 64-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst($CPI32_0)(
1087; 64-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1088; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1089; FIXME: This instruction is redundant.
1090; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001091; 64-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001092
Zlatko Buljancd242c12016-06-09 11:15:53 +00001093; MM32R3-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1094; MM32R3-DAG: lui $[[T1:[0-9]+]], %hi($CPI32_0)
1095; MM32R3-DAG: lwc1 $[[T2:f[0-9]+]], %lo($CPI32_0)($[[T1]])
1096; MM32R3-DAG: c.ole.s $[[T0]], $[[T2]]
1097; MM32R3-DAG: bc1t
1098
1099; MM32R6-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1100; MM32R6-DAG: lui $[[T1:[0-9]+]], %hi($CPI32_0)
1101; MM32R6-DAG: lwc1 $[[T2:f[0-9]+]], %lo($CPI32_0)($[[T1]])
1102; MM32R6-DAG: cmp.le.s $[[T3:f[0-9]+]], $[[T0]], $[[T2]]
1103; MM32R6-DAG: mfc1 $[[T4:[0-9]+]], $[[T3:f[0-9]+]]
1104; MM32R6-DAG: andi16 $[[T5:[0-9]+]], $[[T4]], 1
1105; MM32R6-DAG: bnez $[[T5]],
1106
1107; MM64R6-DAG: lui $[[T0:[0-9]+]], %hi(%neg(%gp_rel(bug1_f32)))
1108; MM64R6-DAG: daddu $[[T1:[0-9]+]], $[[T0]], $25
1109; MM64R6-DAG: daddiu $[[T2:[0-9]+]], $[[T1]], %lo(%neg(%gp_rel(bug1_f32)))
1110; MM64R6-DAG: add.s $[[T3:f[0-9]+]], $f13, $f12
1111; MM64R6-DAG: ld $[[T4:[0-9]+]], %got_page($CPI32_0)($[[T2]])
1112; MM64R6-DAG: lwc1 $[[T5:f[0-9]+]], %got_ofst($CPI32_0)($[[T4]])
1113; MM64R6-DAG: cmp.le.s $[[T6:f[0-9]+]], $[[T3]], $[[T5]]
1114; MM64R6-DAG: mfc1 $[[T7:[0-9]+]], $[[T6]]
1115; MM64R6-DAG: andi16 $[[T8:[0-9]+]], $[[T7]], 1
1116; MM64R6-DAG: bnez $[[T8]],
1117
Daniel Sanders023c8062015-01-15 15:41:03 +00001118 %add = fadd fast float %at, %angle
1119 %cmp = fcmp ogt float %add, 1.000000e+00
1120 br i1 %cmp, label %if.then, label %if.end
1121
1122if.then:
1123 %sub = fadd fast float %add, -1.000000e+00
1124 br label %if.end
1125
1126if.end:
1127 %theta.0 = phi float [ %sub, %if.then ], [ %add, %entry ]
1128 ret float %theta.0
1129}
1130
1131; The optimizers sometimes produce setlt instead of setolt/setult.
1132define double @bug1_f64(double %angle, double %at) #0 {
1133entry:
1134; ALL-LABEL: bug1_f64:
1135
1136; 32-C-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1137; 32-C-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
1138; 32-C-DAG: c.ole.d $[[T0]], $[[T1]]
1139; 32-C-DAG: bc1t
1140
1141; 32-CMP-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1142; 32-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
1143; 32-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1144; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1145; FIXME: This instruction is redundant.
1146; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001147; 32-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001148
1149; 64-C-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
1150; 64-C-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst($CPI33_0)(
1151; 64-C-DAG: c.ole.d $[[T0]], $[[T1]]
1152; 64-C-DAG: bc1t
1153
1154; 64-CMP-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
1155; 64-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst($CPI33_0)(
1156; 64-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1157; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1158; FIXME: This instruction is redundant.
1159; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001160; 64-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001161
Zlatko Buljancd242c12016-06-09 11:15:53 +00001162; MM32R3-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1163; MM32R3-DAG: lui $[[T1:[0-9]+]], %hi($CPI33_0)
1164; MM32R3-DAG: ldc1 $[[T2:f[0-9]+]], %lo($CPI33_0)($[[T1]])
1165; MM32R3-DAG: c.ole.d $[[T0]], $[[T2]]
1166; MM32R3-DAG: bc1t
1167
1168; MM32R6-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1169; MM32R6-DAG: lui $[[T1:[0-9]+]], %hi($CPI33_0)
1170; MM32R6-DAG: ldc1 $[[T2:f[0-9]+]], %lo($CPI33_0)($[[T1]])
1171; MM32R6-DAG: cmp.le.d $[[T3:f[0-9]+]], $[[T0]], $[[T2]]
1172; MM32R6-DAG: mfc1 $[[T4:[0-9]+]], $[[T3]]
1173; MM32R6-DAG: andi16 $[[T5:[0-9]+]], $[[T4]], 1
1174; MM32R6-DAG: bnez $[[T5]],
1175
1176; MM64R6-DAG: lui $[[T0:[0-9]+]], %hi(%neg(%gp_rel(bug1_f64)))
1177; MM64R6-DAG: daddu $[[T1:[0-9]+]], $[[T0]], $25
1178; MM64R6-DAG: daddiu $[[T2:[0-9]+]], $[[T1]], %lo(%neg(%gp_rel(bug1_f64)))
1179; MM64R6-DAG: add.d $[[T3:f[0-9]+]], $f13, $f12
1180; MM64R6-DAG: ld $[[T4:[0-9]+]], %got_page($CPI33_0)($[[T2]])
1181; MM64R6-DAG: ldc1 $[[T5:f[0-9]+]], %got_ofst($CPI33_0)($[[T4]])
1182; MM64R6-DAG: cmp.le.d $[[T6:f[0-9]+]], $[[T3]], $[[T5]]
1183; MM64R6-DAG: mfc1 $[[T7:[0-9]+]], $[[T6]]
1184; MM64R6-DAG: andi16 $[[T8:[0-9]+]], $[[T7]], 1
1185; MM64R6-DAG: bnez $[[T8]],
1186
Daniel Sanders023c8062015-01-15 15:41:03 +00001187 %add = fadd fast double %at, %angle
1188 %cmp = fcmp ogt double %add, 1.000000e+00
1189 br i1 %cmp, label %if.then, label %if.end
1190
1191if.then:
1192 %sub = fadd fast double %add, -1.000000e+00
1193 br label %if.end
1194
1195if.end:
1196 %theta.0 = phi double [ %sub, %if.then ], [ %add, %entry ]
1197 ret double %theta.0
1198}
1199
1200attributes #0 = { nounwind readnone "no-nans-fp-math"="true" }