blob: 0e44c5bded2761ecc6eee4f04307aa7e308fe6cd [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 Kalintiris36901dd2016-03-01 20:25:43 +000032; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000033; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000034; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000035
36; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +000037; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
38; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000039
40; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000041; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
42; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000043
44 %1 = fcmp oeq float %a, %b
45 %2 = zext i1 %1 to i32
46 ret i32 %2
47}
48
49define i32 @ogt_f32(float %a, float %b) nounwind {
50; ALL-LABEL: ogt_f32:
51
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000052; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000053; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000054; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000055
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000056; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000057; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000058; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000059
Daniel Sandersdc067182014-07-09 10:40:20 +000060; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000061; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
62; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000063
Daniel Sandersdc067182014-07-09 10:40:20 +000064; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000065; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
66; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000067
68 %1 = fcmp ogt float %a, %b
69 %2 = zext i1 %1 to i32
70 ret i32 %2
71}
72
73define i32 @oge_f32(float %a, float %b) nounwind {
74; ALL-LABEL: oge_f32:
75
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000076; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000077; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000078; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000079
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000080; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000081; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000082; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000083
Daniel Sandersdc067182014-07-09 10:40:20 +000084; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000085; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
86; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000087
Daniel Sandersdc067182014-07-09 10:40:20 +000088; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +000089; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
90; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000091
92 %1 = fcmp oge float %a, %b
93 %2 = zext i1 %1 to i32
94 ret i32 %2
95}
96
97define i32 @olt_f32(float %a, float %b) nounwind {
98; ALL-LABEL: olt_f32:
99
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000100; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000101; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000102; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000103
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000104; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000105; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000106; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000107
Daniel Sandersdc067182014-07-09 10:40:20 +0000108; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000109; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
110; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000111
Daniel Sandersdc067182014-07-09 10:40:20 +0000112; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000113; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
114; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000115
116 %1 = fcmp olt float %a, %b
117 %2 = zext i1 %1 to i32
118 ret i32 %2
119}
120
121define i32 @ole_f32(float %a, float %b) nounwind {
122; ALL-LABEL: ole_f32:
123
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000124; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000125; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000126; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000127
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000128; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000129; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000130; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000131
Daniel Sandersdc067182014-07-09 10:40:20 +0000132; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000133; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
134; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000135
Daniel Sandersdc067182014-07-09 10:40:20 +0000136; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000137; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
138; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000139
140 %1 = fcmp ole float %a, %b
141 %2 = zext i1 %1 to i32
142 ret i32 %2
143}
144
145define i32 @one_f32(float %a, float %b) nounwind {
146; ALL-LABEL: one_f32:
147
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000148; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000149; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000150; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000151
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000152; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000153; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000154; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000155
156; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
157; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000158; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
159; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000160
161; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
162; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000163; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
164; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000165
166 %1 = fcmp one float %a, %b
167 %2 = zext i1 %1 to i32
168 ret i32 %2
169}
170
171define i32 @ord_f32(float %a, float %b) nounwind {
172; ALL-LABEL: ord_f32:
173
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000174; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000175; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000176; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000177
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000178; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000179; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000180; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000181
182; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
183; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000184; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
185; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000186
187; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
188; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000189; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
190; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000191
192 %1 = fcmp ord float %a, %b
193 %2 = zext i1 %1 to i32
194 ret i32 %2
195}
196
197define i32 @ueq_f32(float %a, float %b) nounwind {
198; ALL-LABEL: ueq_f32:
199
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000200; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000201; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000202; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000203
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000204; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000205; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000206; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000207
208; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000209; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
210; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000211
212; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000213; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
214; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000215
216 %1 = fcmp ueq float %a, %b
217 %2 = zext i1 %1 to i32
218 ret i32 %2
219}
220
221define i32 @ugt_f32(float %a, float %b) nounwind {
222; ALL-LABEL: ugt_f32:
223
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000224; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000225; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000226; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000227
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000228; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000229; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000230; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000231
232; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000233; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
234; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000235
236; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000237; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
238; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000239
240 %1 = fcmp ugt float %a, %b
241 %2 = zext i1 %1 to i32
242 ret i32 %2
243}
244
245define i32 @uge_f32(float %a, float %b) nounwind {
246; ALL-LABEL: uge_f32:
247
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000248; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000249; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000250; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000251
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000252; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000253; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000254; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000255
256; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000257; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
258; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000259
260; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000261; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
262; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000263
264 %1 = fcmp uge float %a, %b
265 %2 = zext i1 %1 to i32
266 ret i32 %2
267}
268
269define i32 @ult_f32(float %a, float %b) nounwind {
270; ALL-LABEL: ult_f32:
271
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000272; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000273; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000274; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000275
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000276; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000277; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000278; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000279
280; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000281; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
282; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000283
284; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000285; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
286; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000287
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000288
Daniel Sanders0fa60412014-06-12 13:39:06 +0000289 %1 = fcmp ult float %a, %b
290 %2 = zext i1 %1 to i32
291 ret i32 %2
292}
293
294define i32 @ule_f32(float %a, float %b) nounwind {
295; ALL-LABEL: ule_f32:
296
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000297; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000298; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000299; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000300
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000301; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000302; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000303; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000304
305; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000306; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
307; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000308
309; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000310; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
311; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000312
313 %1 = fcmp ule float %a, %b
314 %2 = zext i1 %1 to i32
315 ret i32 %2
316}
317
318define i32 @une_f32(float %a, float %b) nounwind {
319; ALL-LABEL: une_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.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000323; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000324
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000325; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000326; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000327; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000328
329; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
330; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000331; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
332; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000333
334; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
335; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000336; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
337; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000338
339 %1 = fcmp une float %a, %b
340 %2 = zext i1 %1 to i32
341 ret i32 %2
342}
343
344define i32 @uno_f32(float %a, float %b) nounwind {
345; ALL-LABEL: uno_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.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000349; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000350
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000351; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000352; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000353; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000354
355; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000356; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
357; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000358
359; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000360; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
361; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000362
363 %1 = fcmp uno float %a, %b
364 %2 = zext i1 %1 to i32
365 ret i32 %2
366}
367
368define i32 @true_f32(float %a, float %b) nounwind {
369; ALL-LABEL: true_f32:
370; ALL: addiu $2, $zero, 1
371
372 %1 = fcmp true float %a, %b
373 %2 = zext i1 %1 to i32
374 ret i32 %2
375}
376
377define i32 @false_f64(double %a, double %b) nounwind {
378; ALL-LABEL: false_f64:
379; ALL: addiu $2, $zero, 0
380
381 %1 = fcmp false double %a, %b
382 %2 = zext i1 %1 to i32
383 ret i32 %2
384}
385
386define i32 @oeq_f64(double %a, double %b) nounwind {
387; ALL-LABEL: oeq_f64:
388
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000389; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000390; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000391; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000392
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000393; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000394; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000395; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000396
397; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000398; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
399; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000400
401; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000402; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
403; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000404
405 %1 = fcmp oeq double %a, %b
406 %2 = zext i1 %1 to i32
407 ret i32 %2
408}
409
410define i32 @ogt_f64(double %a, double %b) nounwind {
411; ALL-LABEL: ogt_f64:
412
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000413; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000414; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000415; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000416
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000417; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000418; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000419; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000420
Daniel Sandersdc067182014-07-09 10:40:20 +0000421; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000422; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
423; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000424
Daniel Sandersdc067182014-07-09 10:40:20 +0000425; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000426; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
427; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000428
429 %1 = fcmp ogt double %a, %b
430 %2 = zext i1 %1 to i32
431 ret i32 %2
432}
433
434define i32 @oge_f64(double %a, double %b) nounwind {
435; ALL-LABEL: oge_f64:
436
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000437; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000438; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000439; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000440
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000441; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000442; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000443; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000444
Daniel Sandersdc067182014-07-09 10:40:20 +0000445; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000446; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
447; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000448
Daniel Sandersdc067182014-07-09 10:40:20 +0000449; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000450; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
451; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000452
453 %1 = fcmp oge double %a, %b
454 %2 = zext i1 %1 to i32
455 ret i32 %2
456}
457
458define i32 @olt_f64(double %a, double %b) nounwind {
459; ALL-LABEL: olt_f64:
460
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000461; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000462; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000463; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000464
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000465; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000466; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000467; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000468
Daniel Sandersdc067182014-07-09 10:40:20 +0000469; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000470; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
471; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000472
Daniel Sandersdc067182014-07-09 10:40:20 +0000473; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000474; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
475; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000476
477 %1 = fcmp olt double %a, %b
478 %2 = zext i1 %1 to i32
479 ret i32 %2
480}
481
482define i32 @ole_f64(double %a, double %b) nounwind {
483; ALL-LABEL: ole_f64:
484
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000485; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000486; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000487; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000488
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000489; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000490; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000491; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000492
Daniel Sandersdc067182014-07-09 10:40:20 +0000493; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000494; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
495; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000496
Daniel Sandersdc067182014-07-09 10:40:20 +0000497; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000498; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
499; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000500
501 %1 = fcmp ole double %a, %b
502 %2 = zext i1 %1 to i32
503 ret i32 %2
504}
505
506define i32 @one_f64(double %a, double %b) nounwind {
507; ALL-LABEL: one_f64:
508
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000509; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000510; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000511; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000512
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000513; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000514; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000515; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000516
517; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
518; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000519; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
520; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000521
522; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
523; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000524; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
525; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000526
527 %1 = fcmp one double %a, %b
528 %2 = zext i1 %1 to i32
529 ret i32 %2
530}
531
532define i32 @ord_f64(double %a, double %b) nounwind {
533; ALL-LABEL: ord_f64:
534
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000535; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000536; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000537; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000538
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000539; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000540; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000541; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000542
543; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
544; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000545; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
546; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000547
548; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
549; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000550; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
551; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000552
553 %1 = fcmp ord double %a, %b
554 %2 = zext i1 %1 to i32
555 ret i32 %2
556}
557
558define i32 @ueq_f64(double %a, double %b) nounwind {
559; ALL-LABEL: ueq_f64:
560
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000561; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000562; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000563; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000564
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000565; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000566; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000567; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000568
569; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000570; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
571; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000572
573; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000574; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
575; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000576
577 %1 = fcmp ueq double %a, %b
578 %2 = zext i1 %1 to i32
579 ret i32 %2
580}
581
582define i32 @ugt_f64(double %a, double %b) nounwind {
583; ALL-LABEL: ugt_f64:
584
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000585; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000586; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000587; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000588
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000589; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000590; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000591; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000592
593; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000594; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
595; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000596
597; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000598; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
599; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000600
601 %1 = fcmp ugt double %a, %b
602 %2 = zext i1 %1 to i32
603 ret i32 %2
604}
605
606define i32 @uge_f64(double %a, double %b) nounwind {
607; ALL-LABEL: uge_f64:
608
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000609; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000610; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000611; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000612
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000613; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000614; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000615; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000616
617; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000618; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
619; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000620
621; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000622; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
623; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000624
625 %1 = fcmp uge double %a, %b
626 %2 = zext i1 %1 to i32
627 ret i32 %2
628}
629
630define i32 @ult_f64(double %a, double %b) nounwind {
631; ALL-LABEL: ult_f64:
632
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000633; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000634; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000635; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000636
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000637; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000638; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000639; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000640
641; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
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]+]], $f12, $f13
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 ult double %a, %b
650 %2 = zext i1 %1 to i32
651 ret i32 %2
652}
653
654define i32 @ule_f64(double %a, double %b) nounwind {
655; ALL-LABEL: ule_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.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000659; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000660
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000661; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000662; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000663; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000664
665; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000666; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
667; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000668
669; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000670; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
671; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000672
673 %1 = fcmp ule double %a, %b
674 %2 = zext i1 %1 to i32
675 ret i32 %2
676}
677
678define i32 @une_f64(double %a, double %b) nounwind {
679; ALL-LABEL: une_f64:
680
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000681; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000682; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000683; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000684
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000685; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000686; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000687; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000688
689; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
690; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000691; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
692; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000693
694; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
695; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000696; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
697; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000698
699 %1 = fcmp une double %a, %b
700 %2 = zext i1 %1 to i32
701 ret i32 %2
702}
703
704define i32 @uno_f64(double %a, double %b) nounwind {
705; ALL-LABEL: uno_f64:
706
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000707; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000708; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000709; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000710
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000711; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000712; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000713; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000714
715; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000716; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
717; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000718
719; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000720; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
721; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000722
723 %1 = fcmp uno double %a, %b
724 %2 = zext i1 %1 to i32
725 ret i32 %2
726}
727
728define i32 @true_f64(double %a, double %b) nounwind {
729; ALL-LABEL: true_f64:
730; ALL: addiu $2, $zero, 1
731
732 %1 = fcmp true double %a, %b
733 %2 = zext i1 %1 to i32
734 ret i32 %2
735}
Daniel Sanders023c8062015-01-15 15:41:03 +0000736
737; The optimizers sometimes produce setlt instead of setolt/setult.
738define float @bug1_f32(float %angle, float %at) #0 {
739entry:
740; ALL-LABEL: bug1_f32:
741
742; 32-C-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
743; 32-C-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
744; 32-C-DAG: c.ole.s $[[T0]], $[[T1]]
745; 32-C-DAG: bc1t
746
747; 32-CMP-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
748; 32-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
749; 32-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
750; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
751; FIXME: This instruction is redundant.
752; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +0000753; 32-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +0000754
755; 64-C-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
756; 64-C-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst($CPI32_0)(
757; 64-C-DAG: c.ole.s $[[T0]], $[[T1]]
758; 64-C-DAG: bc1t
759
760; 64-CMP-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
761; 64-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst($CPI32_0)(
762; 64-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
763; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
764; FIXME: This instruction is redundant.
765; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +0000766; 64-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +0000767
768 %add = fadd fast float %at, %angle
769 %cmp = fcmp ogt float %add, 1.000000e+00
770 br i1 %cmp, label %if.then, label %if.end
771
772if.then:
773 %sub = fadd fast float %add, -1.000000e+00
774 br label %if.end
775
776if.end:
777 %theta.0 = phi float [ %sub, %if.then ], [ %add, %entry ]
778 ret float %theta.0
779}
780
781; The optimizers sometimes produce setlt instead of setolt/setult.
782define double @bug1_f64(double %angle, double %at) #0 {
783entry:
784; ALL-LABEL: bug1_f64:
785
786; 32-C-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
787; 32-C-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
788; 32-C-DAG: c.ole.d $[[T0]], $[[T1]]
789; 32-C-DAG: bc1t
790
791; 32-CMP-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
792; 32-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
793; 32-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
794; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
795; FIXME: This instruction is redundant.
796; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +0000797; 32-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +0000798
799; 64-C-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
800; 64-C-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst($CPI33_0)(
801; 64-C-DAG: c.ole.d $[[T0]], $[[T1]]
802; 64-C-DAG: bc1t
803
804; 64-CMP-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
805; 64-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst($CPI33_0)(
806; 64-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
807; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
808; FIXME: This instruction is redundant.
809; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +0000810; 64-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +0000811
812 %add = fadd fast double %at, %angle
813 %cmp = fcmp ogt double %add, 1.000000e+00
814 br i1 %cmp, label %if.then, label %if.end
815
816if.then:
817 %sub = fadd fast double %add, -1.000000e+00
818 br label %if.end
819
820if.end:
821 %theta.0 = phi double [ %sub, %if.then ], [ %add, %entry ]
822 ret double %theta.0
823}
824
825attributes #0 = { nounwind readnone "no-nans-fp-math"="true" }