blob: 4613f698bd0972d087394637396dbb31ec648d46 [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
Daniel Sanders0fa60412014-06-12 13:39:06 +000015
16define i32 @false_f32(float %a, float %b) nounwind {
17; ALL-LABEL: false_f32:
18; ALL: addiu $2, $zero, 0
19
20 %1 = fcmp false float %a, %b
21 %2 = zext i1 %1 to i32
22 ret i32 %2
23}
24
25define i32 @oeq_f32(float %a, float %b) nounwind {
26; ALL-LABEL: oeq_f32:
27
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000028; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000029; 32-C-DAG: c.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000030; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000031
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000032; FIXME: Remove redundant sign extension.
33; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000034; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000035; 64-C-DAG: movf $[[T0]], $zero, $fcc0
36; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +000037
38; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +000039; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
40; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000041
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000042; FIXME: The sign extension below is redundant.
Daniel Sanders0fa60412014-06-12 13:39:06 +000043; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000044; 64-CMP-DAG: dmfc1 $[[T1:[0-9]+]], $[[T0]]
45; 64-CMP-DAG: sll $[[T2:[0-9]+]], $[[T1]], 0
46; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000047
48 %1 = fcmp oeq float %a, %b
49 %2 = zext i1 %1 to i32
50 ret i32 %2
51}
52
53define i32 @ogt_f32(float %a, float %b) nounwind {
54; ALL-LABEL: ogt_f32:
55
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000056; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000057; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000058; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000059
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000060; FIXME: Remove redundant sign extension.
61; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000062; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000063; 64-C-DAG: movt $[[T0]], $zero, $fcc0
64; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +000065
Daniel Sandersdc067182014-07-09 10:40:20 +000066; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000067; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
68; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000069
Daniel Sandersdc067182014-07-09 10:40:20 +000070; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000071; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
72; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000073
74 %1 = fcmp ogt float %a, %b
75 %2 = zext i1 %1 to i32
76 ret i32 %2
77}
78
79define i32 @oge_f32(float %a, float %b) nounwind {
80; ALL-LABEL: oge_f32:
81
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000082; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000083; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000084; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000085
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000086; FIXME: Remove redundant sign extension.
87; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000088; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +000089; 64-C-DAG: movt $[[T0]], $zero, $fcc0
90; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +000091
Daniel Sandersdc067182014-07-09 10:40:20 +000092; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000093; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
94; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000095
Daniel Sandersdc067182014-07-09 10:40:20 +000096; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000097; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
98; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000099
100 %1 = fcmp oge float %a, %b
101 %2 = zext i1 %1 to i32
102 ret i32 %2
103}
104
105define i32 @olt_f32(float %a, float %b) nounwind {
106; ALL-LABEL: olt_f32:
107
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000108; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000109; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000110; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000111
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000112; FIXME: Remove redundant sign extension.
113; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000114; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000115; 64-C-DAG: movf $[[T0]], $zero, $fcc0
116; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000117
Daniel Sandersdc067182014-07-09 10:40:20 +0000118; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000119; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
120; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000121
Daniel Sandersdc067182014-07-09 10:40:20 +0000122; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000123; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
124; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000125
126 %1 = fcmp olt float %a, %b
127 %2 = zext i1 %1 to i32
128 ret i32 %2
129}
130
131define i32 @ole_f32(float %a, float %b) nounwind {
132; ALL-LABEL: ole_f32:
133
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000134; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000135; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000136; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000137
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000138; FIXME: Remove redundant sign extension.
139; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000140; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000141; 64-C-DAG: movf $[[T0]], $zero, $fcc0
142; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000143
Daniel Sandersdc067182014-07-09 10:40:20 +0000144; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000145; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
146; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000147
Daniel Sandersdc067182014-07-09 10:40:20 +0000148; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000149; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
150; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000151
152 %1 = fcmp ole float %a, %b
153 %2 = zext i1 %1 to i32
154 ret i32 %2
155}
156
157define i32 @one_f32(float %a, float %b) nounwind {
158; ALL-LABEL: one_f32:
159
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000160; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000161; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000162; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000163
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000164; FIXME: Remove redundant sign extension.
165; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000166; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000167; 64-C-DAG: movt $[[T0]], $zero, $fcc0
168; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000169
170; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
171; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000172; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
173; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000174
175; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
176; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000177; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
178; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000179
180 %1 = fcmp one float %a, %b
181 %2 = zext i1 %1 to i32
182 ret i32 %2
183}
184
185define i32 @ord_f32(float %a, float %b) nounwind {
186; ALL-LABEL: ord_f32:
187
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000188; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000189; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000190; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000191
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000192; FIXME: Remove redundant sign extension.
193; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000194; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000195; 64-C-DAG: movt $[[T0]], $zero, $fcc0
196; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000197
198; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
199; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000200; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
201; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000202
203; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
204; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000205; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
206; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000207
208 %1 = fcmp ord float %a, %b
209 %2 = zext i1 %1 to i32
210 ret i32 %2
211}
212
213define i32 @ueq_f32(float %a, float %b) nounwind {
214; ALL-LABEL: ueq_f32:
215
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000216; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000217; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000218; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000219
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000220; FIXME: Remove redundant sign extension.
221; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000222; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000223; 64-C-DAG: movf $[[T0]], $zero, $fcc0
224; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000225
226; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000227; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
228; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000229
230; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000231; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
232; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000233
234 %1 = fcmp ueq float %a, %b
235 %2 = zext i1 %1 to i32
236 ret i32 %2
237}
238
239define i32 @ugt_f32(float %a, float %b) nounwind {
240; ALL-LABEL: ugt_f32:
241
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000242; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000243; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000244; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000245
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000246; FIXME: Remove redundant sign extension.
247; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000248; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000249; 64-C-DAG: movt $[[T0]], $zero, $fcc0
250; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000251
252; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000253; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
254; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000255
256; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000257; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
258; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000259
260 %1 = fcmp ugt float %a, %b
261 %2 = zext i1 %1 to i32
262 ret i32 %2
263}
264
265define i32 @uge_f32(float %a, float %b) nounwind {
266; ALL-LABEL: uge_f32:
267
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000268; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000269; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000270; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000271
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000272; FIXME: Remove redundant sign extension.
273; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000274; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000275; 64-C-DAG: movt $[[T0]], $zero, $fcc0
276; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000277
278; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000279; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
280; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000281
282; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000283; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
284; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000285
286 %1 = fcmp uge float %a, %b
287 %2 = zext i1 %1 to i32
288 ret i32 %2
289}
290
291define i32 @ult_f32(float %a, float %b) nounwind {
292; ALL-LABEL: ult_f32:
293
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000294; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000295; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000296; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000297
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000298; FIXME: Remove redundant sign extension.
299; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000300; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000301; 64-C-DAG: movf $[[T0]], $zero, $fcc0
302; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000303
304; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000305; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
306; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000307
308; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000309; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
310; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000311
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000312
Daniel Sanders0fa60412014-06-12 13:39:06 +0000313 %1 = fcmp ult float %a, %b
314 %2 = zext i1 %1 to i32
315 ret i32 %2
316}
317
318define i32 @ule_f32(float %a, float %b) nounwind {
319; ALL-LABEL: ule_f32:
320
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000321; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000322; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000323; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000324
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000325; FIXME: Remove redundant sign extension.
326; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000327; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000328; 64-C-DAG: movf $[[T0]], $zero, $fcc0
329; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000330
331; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000332; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
333; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000334
335; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000336; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
337; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000338
339 %1 = fcmp ule float %a, %b
340 %2 = zext i1 %1 to i32
341 ret i32 %2
342}
343
344define i32 @une_f32(float %a, float %b) nounwind {
345; ALL-LABEL: une_f32:
346
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000347; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000348; 32-C-DAG: c.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000349; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000350
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000351; FIXME: Remove redundant sign extension.
352; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000353; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000354; 64-C-DAG: movt $[[T0]], $zero, $fcc0
355; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000356
357; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
358; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000359; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
360; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000361
362; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
363; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000364; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
365; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000366
367 %1 = fcmp une float %a, %b
368 %2 = zext i1 %1 to i32
369 ret i32 %2
370}
371
372define i32 @uno_f32(float %a, float %b) nounwind {
373; ALL-LABEL: uno_f32:
374
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000375; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000376; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000377; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000378
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000379; FIXME: Remove redundant sign extension.
380; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000381; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000382; 64-C-DAG: movf $[[T0]], $zero, $fcc0
383; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000384
385; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000386; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
387; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000388
389; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000390; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
391; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000392
393 %1 = fcmp uno float %a, %b
394 %2 = zext i1 %1 to i32
395 ret i32 %2
396}
397
398define i32 @true_f32(float %a, float %b) nounwind {
399; ALL-LABEL: true_f32:
400; ALL: addiu $2, $zero, 1
401
402 %1 = fcmp true float %a, %b
403 %2 = zext i1 %1 to i32
404 ret i32 %2
405}
406
407define i32 @false_f64(double %a, double %b) nounwind {
408; ALL-LABEL: false_f64:
409; ALL: addiu $2, $zero, 0
410
411 %1 = fcmp false double %a, %b
412 %2 = zext i1 %1 to i32
413 ret i32 %2
414}
415
416define i32 @oeq_f64(double %a, double %b) nounwind {
417; ALL-LABEL: oeq_f64:
418
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000419; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000420; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000421; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000422
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000423; FIXME: Remove redundant sign extension.
424; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000425; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000426; 64-C-DAG: movf $[[T0]], $zero, $fcc0
427; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000428
429; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000430; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
431; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000432
433; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000434; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
435; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000436
437 %1 = fcmp oeq double %a, %b
438 %2 = zext i1 %1 to i32
439 ret i32 %2
440}
441
442define i32 @ogt_f64(double %a, double %b) nounwind {
443; ALL-LABEL: ogt_f64:
444
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000445; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000446; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000447; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000448
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000449; FIXME: Remove redundant sign extension.
450; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000451; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000452; 64-C-DAG: movt $[[T0]], $zero, $fcc0
453; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000454
Daniel Sandersdc067182014-07-09 10:40:20 +0000455; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000456; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
457; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000458
Daniel Sandersdc067182014-07-09 10:40:20 +0000459; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000460; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
461; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000462
463 %1 = fcmp ogt double %a, %b
464 %2 = zext i1 %1 to i32
465 ret i32 %2
466}
467
468define i32 @oge_f64(double %a, double %b) nounwind {
469; ALL-LABEL: oge_f64:
470
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000471; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000472; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000473; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000474
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000475; FIXME: Remove redundant sign extension.
476; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000477; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000478; 64-C-DAG: movt $[[T0]], $zero, $fcc0
479; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000480
Daniel Sandersdc067182014-07-09 10:40:20 +0000481; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000482; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
483; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000484
Daniel Sandersdc067182014-07-09 10:40:20 +0000485; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000486; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
487; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000488
489 %1 = fcmp oge double %a, %b
490 %2 = zext i1 %1 to i32
491 ret i32 %2
492}
493
494define i32 @olt_f64(double %a, double %b) nounwind {
495; ALL-LABEL: olt_f64:
496
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000497; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000498; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000499; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000500
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000501; FIXME: Remove redundant sign extension.
502; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000503; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000504; 64-C-DAG: movf $[[T0]], $zero, $fcc0
505; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000506
Daniel Sandersdc067182014-07-09 10:40:20 +0000507; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000508; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
509; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000510
Daniel Sandersdc067182014-07-09 10:40:20 +0000511; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000512; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
513; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000514
515 %1 = fcmp olt double %a, %b
516 %2 = zext i1 %1 to i32
517 ret i32 %2
518}
519
520define i32 @ole_f64(double %a, double %b) nounwind {
521; ALL-LABEL: ole_f64:
522
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000523; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000524; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000525; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000526
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000527; FIXME: Remove redundant sign extension.
528; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000529; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000530; 64-C-DAG: movf $[[T0]], $zero, $fcc0
531; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000532
Daniel Sandersdc067182014-07-09 10:40:20 +0000533; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000534; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
535; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000536
Daniel Sandersdc067182014-07-09 10:40:20 +0000537; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000538; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
539; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000540
541 %1 = fcmp ole double %a, %b
542 %2 = zext i1 %1 to i32
543 ret i32 %2
544}
545
546define i32 @one_f64(double %a, double %b) nounwind {
547; ALL-LABEL: one_f64:
548
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000549; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000550; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000551; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000552
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000553; FIXME: Remove redundant sign extension.
554; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000555; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000556; 64-C-DAG: movt $[[T0]], $zero, $fcc0
557; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000558
559; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
560; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000561; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
562; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000563
564; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
565; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000566; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
567; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000568
569 %1 = fcmp one double %a, %b
570 %2 = zext i1 %1 to i32
571 ret i32 %2
572}
573
574define i32 @ord_f64(double %a, double %b) nounwind {
575; ALL-LABEL: ord_f64:
576
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000577; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000578; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000579; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000580
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000581; FIXME: Remove redundant sign extension.
582; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000583; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000584; 64-C-DAG: movt $[[T0]], $zero, $fcc0
585; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000586
587; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
588; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000589; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
590; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000591
592; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
593; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000594; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
595; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000596
597 %1 = fcmp ord double %a, %b
598 %2 = zext i1 %1 to i32
599 ret i32 %2
600}
601
602define i32 @ueq_f64(double %a, double %b) nounwind {
603; ALL-LABEL: ueq_f64:
604
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000605; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000606; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000607; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000608
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000609; FIXME: Remove redundant sign extension.
610; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000611; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000612; 64-C-DAG: movf $[[T0]], $zero, $fcc0
613; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000614
615; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000616; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
617; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000618
619; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000620; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
621; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000622
623 %1 = fcmp ueq double %a, %b
624 %2 = zext i1 %1 to i32
625 ret i32 %2
626}
627
628define i32 @ugt_f64(double %a, double %b) nounwind {
629; ALL-LABEL: ugt_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.ole.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 Kalintiris3a8f7f92016-03-01 10:08:01 +0000635; FIXME: Remove redundant sign extension.
636; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000637; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000638; 64-C-DAG: movt $[[T0]], $zero, $fcc0
639; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000640
641; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000642; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
643; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000644
645; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000646; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
647; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000648
649 %1 = fcmp ugt double %a, %b
650 %2 = zext i1 %1 to i32
651 ret i32 %2
652}
653
654define i32 @uge_f64(double %a, double %b) nounwind {
655; ALL-LABEL: uge_f64:
656
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000657; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000658; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000659; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000660
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000661; FIXME: Remove redundant sign extension.
662; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000663; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000664; 64-C-DAG: movt $[[T0]], $zero, $fcc0
665; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000666
667; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000668; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
669; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000670
671; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000672; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
673; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000674
675 %1 = fcmp uge double %a, %b
676 %2 = zext i1 %1 to i32
677 ret i32 %2
678}
679
680define i32 @ult_f64(double %a, double %b) nounwind {
681; ALL-LABEL: ult_f64:
682
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000683; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000684; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000685; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000686
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000687; FIXME: Remove redundant sign extension.
688; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000689; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000690; 64-C-DAG: movf $[[T0]], $zero, $fcc0
691; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000692
693; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000694; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
695; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000696
697; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000698; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
699; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000700
701 %1 = fcmp ult double %a, %b
702 %2 = zext i1 %1 to i32
703 ret i32 %2
704}
705
706define i32 @ule_f64(double %a, double %b) nounwind {
707; ALL-LABEL: ule_f64:
708
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000709; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000710; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000711; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000712
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000713; FIXME: Remove redundant sign extension.
714; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000715; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000716; 64-C-DAG: movf $[[T0]], $zero, $fcc0
717; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000718
719; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000720; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
721; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000722
723; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000724; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
725; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000726
727 %1 = fcmp ule double %a, %b
728 %2 = zext i1 %1 to i32
729 ret i32 %2
730}
731
732define i32 @une_f64(double %a, double %b) nounwind {
733; ALL-LABEL: une_f64:
734
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000735; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000736; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000737; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000738
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000739; FIXME: Remove redundant sign extension.
740; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000741; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000742; 64-C-DAG: movt $[[T0]], $zero, $fcc0
743; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000744
745; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
746; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000747; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
748; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000749
750; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
751; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000752; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
753; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000754
755 %1 = fcmp une double %a, %b
756 %2 = zext i1 %1 to i32
757 ret i32 %2
758}
759
760define i32 @uno_f64(double %a, double %b) nounwind {
761; ALL-LABEL: uno_f64:
762
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000763; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000764; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000765; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000766
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000767; FIXME: Remove redundant sign extension.
768; 64-C-DAG: daddiu $[[T0:[0-9]+]], $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000769; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris3a8f7f92016-03-01 10:08:01 +0000770; 64-C-DAG: movf $[[T0]], $zero, $fcc0
771; 64-C: sll $2, $[[T0]], 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000772
773; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000774; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
775; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000776
777; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000778; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
779; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000780
781 %1 = fcmp uno double %a, %b
782 %2 = zext i1 %1 to i32
783 ret i32 %2
784}
785
786define i32 @true_f64(double %a, double %b) nounwind {
787; ALL-LABEL: true_f64:
788; ALL: addiu $2, $zero, 1
789
790 %1 = fcmp true double %a, %b
791 %2 = zext i1 %1 to i32
792 ret i32 %2
793}
Daniel Sanders023c8062015-01-15 15:41:03 +0000794
795; The optimizers sometimes produce setlt instead of setolt/setult.
796define float @bug1_f32(float %angle, float %at) #0 {
797entry:
798; ALL-LABEL: bug1_f32:
799
800; 32-C-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
801; 32-C-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
802; 32-C-DAG: c.ole.s $[[T0]], $[[T1]]
803; 32-C-DAG: bc1t
804
805; 32-CMP-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
806; 32-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
807; 32-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
808; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
809; FIXME: This instruction is redundant.
810; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
811; 32-CMP-DAG: bnez $[[T4]],
812
813; 64-C-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
814; 64-C-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst($CPI32_0)(
815; 64-C-DAG: c.ole.s $[[T0]], $[[T1]]
816; 64-C-DAG: bc1t
817
818; 64-CMP-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
819; 64-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst($CPI32_0)(
820; 64-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
821; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
822; FIXME: This instruction is redundant.
823; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
824; 64-CMP-DAG: bnez $[[T4]],
825
826 %add = fadd fast float %at, %angle
827 %cmp = fcmp ogt float %add, 1.000000e+00
828 br i1 %cmp, label %if.then, label %if.end
829
830if.then:
831 %sub = fadd fast float %add, -1.000000e+00
832 br label %if.end
833
834if.end:
835 %theta.0 = phi float [ %sub, %if.then ], [ %add, %entry ]
836 ret float %theta.0
837}
838
839; The optimizers sometimes produce setlt instead of setolt/setult.
840define double @bug1_f64(double %angle, double %at) #0 {
841entry:
842; ALL-LABEL: bug1_f64:
843
844; 32-C-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
845; 32-C-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
846; 32-C-DAG: c.ole.d $[[T0]], $[[T1]]
847; 32-C-DAG: bc1t
848
849; 32-CMP-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
850; 32-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
851; 32-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
852; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
853; FIXME: This instruction is redundant.
854; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
855; 32-CMP-DAG: bnez $[[T4]],
856
857; 64-C-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
858; 64-C-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst($CPI33_0)(
859; 64-C-DAG: c.ole.d $[[T0]], $[[T1]]
860; 64-C-DAG: bc1t
861
862; 64-CMP-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
863; 64-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst($CPI33_0)(
864; 64-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
865; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
866; FIXME: This instruction is redundant.
867; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
868; 64-CMP-DAG: bnez $[[T4]],
869
870 %add = fadd fast double %at, %angle
871 %cmp = fcmp ogt double %add, 1.000000e+00
872 br i1 %cmp, label %if.then, label %if.end
873
874if.then:
875 %sub = fadd fast double %add, -1.000000e+00
876 br label %if.end
877
878if.end:
879 %theta.0 = phi double [ %sub, %if.then ], [ %add, %entry ]
880 ret double %theta.0
881}
882
883attributes #0 = { nounwind readnone "no-nans-fp-math"="true" }