blob: e22b12a5d5340f8630588c103d7cb6bb2b4ba198 [file] [log] [blame]
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00001; RUN: llc < %s -march=mips -mcpu=mips32 | \
Daniel Sanders0d972702016-06-24 12:23:17 +00002; RUN: FileCheck %s -check-prefixes=ALL,32-C
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00003; RUN: llc < %s -march=mips -mcpu=mips32r2 | \
Daniel Sanders0d972702016-06-24 12:23:17 +00004; RUN: FileCheck %s -check-prefixes=ALL,32-C
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00005; RUN: llc < %s -march=mips -mcpu=mips32r6 | \
Daniel Sanders0d972702016-06-24 12:23:17 +00006; RUN: FileCheck %s -check-prefixes=ALL,32-CMP
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00007; RUN: llc < %s -march=mips64 -mcpu=mips4 | \
Daniel Sanders0d972702016-06-24 12:23:17 +00008; RUN: FileCheck %s -check-prefixes=ALL,64-C
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00009; RUN: llc < %s -march=mips64 -mcpu=mips64 | \
Daniel Sanders0d972702016-06-24 12:23:17 +000010; RUN: FileCheck %s -check-prefixes=ALL,64-C
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000011; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | \
Daniel Sanders0d972702016-06-24 12:23:17 +000012; RUN: FileCheck %s -check-prefixes=ALL,64-C
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000013; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | \
Daniel Sanders0d972702016-06-24 12:23:17 +000014; RUN: FileCheck %s -check-prefixes=ALL,64-CMP
Zlatko Buljancd242c12016-06-09 11:15:53 +000015; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
Daniel Sanders0d972702016-06-24 12:23:17 +000016; RUN: -check-prefixes=ALL,MM,MM32R3
Zlatko Buljancd242c12016-06-09 11:15:53 +000017; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
Daniel Sanders0d972702016-06-24 12:23:17 +000018; RUN: -check-prefixes=ALL,MM,MMR6,MM32R6
Daniel Sandersde393322016-06-23 12:42:53 +000019; RUN: llc < %s -march=mips64 -mcpu=mips64r6 -mattr=+micromips | FileCheck %s \
Daniel Sanders0d972702016-06-24 12:23:17 +000020; RUN: -check-prefixes=ALL,MM,MMR6,MM64R6
Daniel Sanders0fa60412014-06-12 13:39:06 +000021
22define i32 @false_f32(float %a, float %b) nounwind {
23; ALL-LABEL: false_f32:
Zlatko Buljancd242c12016-06-09 11:15:53 +000024; 32-C: addiu $2, $zero, 0
25
26; 32-CMP: addiu $2, $zero, 0
27
28; 64-C: addiu $2, $zero, 0
29
30; 64-CMP: addiu $2, $zero, 0
31
Simon Dardis61897522016-07-25 09:57:28 +000032; MM-DAG: li16 $2, 0
Daniel Sanders0fa60412014-06-12 13:39:06 +000033
34 %1 = fcmp false float %a, %b
35 %2 = zext i1 %1 to i32
36 ret i32 %2
37}
38
39define i32 @oeq_f32(float %a, float %b) nounwind {
40; ALL-LABEL: oeq_f32:
41
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000042; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000043; 32-C-DAG: c.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +000044; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000045
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000046; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000047; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000048; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +000049
50; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +000051; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
52; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000053
54; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +000055; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
56; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +000057
Simon Dardisba92b032016-09-09 11:06:01 +000058; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
59; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +000060; MM32R3-DAG: c.eq.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +000061; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +000062
63; MM32R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
64; MM64R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
65; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
66; MMR6-DAG: andi16 $2, $[[T1]], 1
67
Daniel Sanders0fa60412014-06-12 13:39:06 +000068 %1 = fcmp oeq float %a, %b
69 %2 = zext i1 %1 to i32
70 ret i32 %2
71}
72
73define i32 @ogt_f32(float %a, float %b) nounwind {
74; ALL-LABEL: ogt_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.ule.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.ule.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.lt.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.lt.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
Simon Dardisba92b032016-09-09 11:06:01 +000092; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
93; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +000094; MM32R3-DAG: c.ule.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +000095; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +000096
97; MM32R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f14, $f12
98; MM64R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f13, $f12
99; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
100; MMR6-DAG: andi16 $2, $[[T1]], 1
101
Daniel Sanders0fa60412014-06-12 13:39:06 +0000102 %1 = fcmp ogt float %a, %b
103 %2 = zext i1 %1 to i32
104 ret i32 %2
105}
106
107define i32 @oge_f32(float %a, float %b) nounwind {
108; ALL-LABEL: oge_f32:
109
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000110; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000111; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000112; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000113
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000114; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000115; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000116; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000117
Daniel Sandersdc067182014-07-09 10:40:20 +0000118; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
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.le.s $[[T0:f[0-9]+]], $f13, $f12
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
Simon Dardisba92b032016-09-09 11:06:01 +0000126; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
127; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000128; MM32R3-DAG: c.ult.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000129; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000130
131; MM32R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f14, $f12
132; MM64R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f13, $f12
133; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
134; MMR6-DAG: andi16 $2, $[[T1]], 1
135
Daniel Sanders0fa60412014-06-12 13:39:06 +0000136 %1 = fcmp oge float %a, %b
137 %2 = zext i1 %1 to i32
138 ret i32 %2
139}
140
141define i32 @olt_f32(float %a, float %b) nounwind {
142; ALL-LABEL: olt_f32:
143
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000144; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000145; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000146; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000147
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000148; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000149; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000150; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000151
Daniel Sandersdc067182014-07-09 10:40:20 +0000152; 32-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000153; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
154; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000155
Daniel Sandersdc067182014-07-09 10:40:20 +0000156; 64-CMP-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000157; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
158; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000159
Simon Dardisba92b032016-09-09 11:06:01 +0000160; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
161; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000162; MM32R3-DAG: c.olt.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000163; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000164
165; MM32R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f14
166; MM64R6-DAG: cmp.lt.s $[[T0:f[0-9]+]], $f12, $f13
167; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
168; MMR6-DAG: andi16 $2, $[[T1]], 1
169
Daniel Sanders0fa60412014-06-12 13:39:06 +0000170 %1 = fcmp olt float %a, %b
171 %2 = zext i1 %1 to i32
172 ret i32 %2
173}
174
175define i32 @ole_f32(float %a, float %b) nounwind {
176; ALL-LABEL: ole_f32:
177
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000178; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000179; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000180; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000181
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000182; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000183; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000184; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000185
Daniel Sandersdc067182014-07-09 10:40:20 +0000186; 32-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000187; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
188; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000189
Daniel Sandersdc067182014-07-09 10:40:20 +0000190; 64-CMP-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000191; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
192; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000193
Simon Dardisba92b032016-09-09 11:06:01 +0000194; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
195; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000196; MM32R3-DAG: c.ole.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000197; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000198
199; MM32R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f14
200; MM64R6-DAG: cmp.le.s $[[T0:f[0-9]+]], $f12, $f13
201; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
202; MMR6-DAG: andi16 $2, $[[T1]], 1
203
Daniel Sanders0fa60412014-06-12 13:39:06 +0000204 %1 = fcmp ole float %a, %b
205 %2 = zext i1 %1 to i32
206 ret i32 %2
207}
208
209define i32 @one_f32(float %a, float %b) nounwind {
210; ALL-LABEL: one_f32:
211
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000212; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000213; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000214; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000215
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000216; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000217; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000218; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000219
220; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
221; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000222; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
223; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000224
225; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
226; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000227; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
228; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000229
Simon Dardisba92b032016-09-09 11:06:01 +0000230; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
231; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000232; MM32R3-DAG: c.ueq.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000233; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000234
235; MM32R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
236; MM64R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
237; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000238; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000239; MMR6-DAG: andi16 $2, $[[T2]], 1
240
Daniel Sanders0fa60412014-06-12 13:39:06 +0000241 %1 = fcmp one float %a, %b
242 %2 = zext i1 %1 to i32
243 ret i32 %2
244}
245
246define i32 @ord_f32(float %a, float %b) nounwind {
247; ALL-LABEL: ord_f32:
248
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000249; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000250; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000251; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000252
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000253; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000254; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000255; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000256
257; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
258; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000259; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
260; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000261
262; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
263; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000264; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
265; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000266
Simon Dardisba92b032016-09-09 11:06:01 +0000267; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
268; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000269; MM32R3-DAG: c.un.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000270; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000271
272; MM32R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
273; MM64R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
274; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000275; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000276; MMR6-DAG: andi16 $2, $[[T2]], 1
277
Daniel Sanders0fa60412014-06-12 13:39:06 +0000278 %1 = fcmp ord float %a, %b
279 %2 = zext i1 %1 to i32
280 ret i32 %2
281}
282
283define i32 @ueq_f32(float %a, float %b) nounwind {
284; ALL-LABEL: ueq_f32:
285
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000286; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000287; 32-C-DAG: c.ueq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000288; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000289
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000290; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000291; 64-C-DAG: c.ueq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000292; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000293
294; 32-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000295; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
296; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000297
298; 64-CMP-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000299; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
300; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000301
Simon Dardisba92b032016-09-09 11:06:01 +0000302; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
303; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000304; MM32R3-DAG: c.ueq.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000305; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000306
307; MM32R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f14
308; MM64R6-DAG: cmp.ueq.s $[[T0:f[0-9]+]], $f12, $f13
309; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
310; MMR6-DAG: andi16 $2, $[[T1]], 1
311
Daniel Sanders0fa60412014-06-12 13:39:06 +0000312 %1 = fcmp ueq float %a, %b
313 %2 = zext i1 %1 to i32
314 ret i32 %2
315}
316
317define i32 @ugt_f32(float %a, float %b) nounwind {
318; ALL-LABEL: ugt_f32:
319
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000320; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000321; 32-C-DAG: c.ole.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000322; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000323
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000324; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000325; 64-C-DAG: c.ole.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000326; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000327
328; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000329; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
330; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000331
332; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000333; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
334; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000335
Simon Dardisba92b032016-09-09 11:06:01 +0000336; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
337; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000338; MM32R3-DAG: c.ole.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000339; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000340
341; MM32R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f14, $f12
342; MM64R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f13, $f12
343; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
344; MMR6-DAG: andi16 $2, $[[T1]], 1
345
Daniel Sanders0fa60412014-06-12 13:39:06 +0000346 %1 = fcmp ugt float %a, %b
347 %2 = zext i1 %1 to i32
348 ret i32 %2
349}
350
351define i32 @uge_f32(float %a, float %b) nounwind {
352; ALL-LABEL: uge_f32:
353
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000354; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000355; 32-C-DAG: c.olt.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000356; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000357
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000358; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000359; 64-C-DAG: c.olt.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000360; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000361
362; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000363; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
364; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000365
366; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000367; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
368; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000369
Simon Dardisba92b032016-09-09 11:06:01 +0000370; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
371; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000372; MM32R3-DAG: c.olt.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000373; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000374
375; MM32R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f14, $f12
376; MM64R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f13, $f12
377; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
378; MMR6-DAG: andi16 $2, $[[T1]], 1
379
Daniel Sanders0fa60412014-06-12 13:39:06 +0000380 %1 = fcmp uge float %a, %b
381 %2 = zext i1 %1 to i32
382 ret i32 %2
383}
384
385define i32 @ult_f32(float %a, float %b) nounwind {
386; ALL-LABEL: ult_f32:
387
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000388; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000389; 32-C-DAG: c.ult.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000390; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000391
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000392; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000393; 64-C-DAG: c.ult.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000394; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000395
396; 32-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000397; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
398; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000399
400; 64-CMP-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000401; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
402; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000403
Simon Dardisba92b032016-09-09 11:06:01 +0000404; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
405; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000406; MM32R3-DAG: c.ult.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000407; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000408
409; MM32R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f14
410; MM64R6-DAG: cmp.ult.s $[[T0:f[0-9]+]], $f12, $f13
411; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
412; MMR6-DAG: andi16 $2, $[[T1]], 1
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000413
Daniel Sanders0fa60412014-06-12 13:39:06 +0000414 %1 = fcmp ult float %a, %b
415 %2 = zext i1 %1 to i32
416 ret i32 %2
417}
418
419define i32 @ule_f32(float %a, float %b) nounwind {
420; ALL-LABEL: ule_f32:
421
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000422; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000423; 32-C-DAG: c.ule.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000424; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000425
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000426; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000427; 64-C-DAG: c.ule.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000428; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000429
430; 32-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000431; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
432; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000433
434; 64-CMP-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000435; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
436; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000437
Simon Dardisba92b032016-09-09 11:06:01 +0000438; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
439; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000440; MM32R3-DAG: c.ule.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000441; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000442
443; MM32R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f14
444; MM64R6-DAG: cmp.ule.s $[[T0:f[0-9]+]], $f12, $f13
445; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
446; MMR6-DAG: andi16 $2, $[[T1]], 1
447
Daniel Sanders0fa60412014-06-12 13:39:06 +0000448 %1 = fcmp ule float %a, %b
449 %2 = zext i1 %1 to i32
450 ret i32 %2
451}
452
453define i32 @une_f32(float %a, float %b) nounwind {
454; ALL-LABEL: une_f32:
455
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000456; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000457; 32-C-DAG: c.eq.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000458; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000459
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000460; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000461; 64-C-DAG: c.eq.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000462; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000463
464; 32-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
465; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000466; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
467; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000468
469; 64-CMP-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
470; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000471; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
472; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000473
Simon Dardisba92b032016-09-09 11:06:01 +0000474; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
475; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000476; MM32R3-DAG: c.eq.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000477; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000478
479; MM32R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f14
480; MM64R6-DAG: cmp.eq.s $[[T0:f[0-9]+]], $f12, $f13
481; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000482; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000483; MMR6-DAG: andi16 $2, $[[T2]], 1
484
Daniel Sanders0fa60412014-06-12 13:39:06 +0000485 %1 = fcmp une float %a, %b
486 %2 = zext i1 %1 to i32
487 ret i32 %2
488}
489
490define i32 @uno_f32(float %a, float %b) nounwind {
491; ALL-LABEL: uno_f32:
492
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000493; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000494; 32-C-DAG: c.un.s $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000495; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000496
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000497; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000498; 64-C-DAG: c.un.s $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000499; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000500
501; 32-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000502; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
503; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000504
505; 64-CMP-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000506; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
507; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000508
Simon Dardisba92b032016-09-09 11:06:01 +0000509; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
510; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000511; MM32R3-DAG: c.un.s $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000512; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000513
514; MM32R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f14
515; MM64R6-DAG: cmp.un.s $[[T0:f[0-9]+]], $f12, $f13
516; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
517; MMR6-DAG: andi16 $2, $[[T1]], 1
518
Daniel Sanders0fa60412014-06-12 13:39:06 +0000519 %1 = fcmp uno float %a, %b
520 %2 = zext i1 %1 to i32
521 ret i32 %2
522}
523
524define i32 @true_f32(float %a, float %b) nounwind {
525; ALL-LABEL: true_f32:
Zlatko Buljancd242c12016-06-09 11:15:53 +0000526; 32-C: addiu $2, $zero, 1
527
528; 32-CMP: addiu $2, $zero, 1
529
530; 64-C: addiu $2, $zero, 1
531
532; 64-CMP: addiu $2, $zero, 1
533
534; MM-DAG: li16 $2, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000535
536 %1 = fcmp true float %a, %b
537 %2 = zext i1 %1 to i32
538 ret i32 %2
539}
540
541define i32 @false_f64(double %a, double %b) nounwind {
542; ALL-LABEL: false_f64:
Zlatko Buljancd242c12016-06-09 11:15:53 +0000543; 32-C: addiu $2, $zero, 0
544
545; 32-CMP: addiu $2, $zero, 0
546
547; 64-C: addiu $2, $zero, 0
548
549; 64-CMP: addiu $2, $zero, 0
550
Simon Dardis61897522016-07-25 09:57:28 +0000551; MM-DAG: li16 $2, 0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000552
553 %1 = fcmp false double %a, %b
554 %2 = zext i1 %1 to i32
555 ret i32 %2
556}
557
558define i32 @oeq_f64(double %a, double %b) nounwind {
559; ALL-LABEL: oeq_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.eq.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.eq.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.eq.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.eq.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
Simon Dardisba92b032016-09-09 11:06:01 +0000577; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
578; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000579; MM32R3-DAG: c.eq.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000580; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000581
582; MM32R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
583; MM64R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
584; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
585; MMR6-DAG: andi16 $2, $[[T1]], 1
586
Daniel Sanders0fa60412014-06-12 13:39:06 +0000587 %1 = fcmp oeq double %a, %b
588 %2 = zext i1 %1 to i32
589 ret i32 %2
590}
591
592define i32 @ogt_f64(double %a, double %b) nounwind {
593; ALL-LABEL: ogt_f64:
594
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000595; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000596; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000597; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000598
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000599; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000600; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000601; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000602
Daniel Sandersdc067182014-07-09 10:40:20 +0000603; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000604; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
605; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000606
Daniel Sandersdc067182014-07-09 10:40:20 +0000607; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000608; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
609; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000610
Simon Dardisba92b032016-09-09 11:06:01 +0000611; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
612; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000613; MM32R3-DAG: c.ule.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000614; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000615
616; MM32R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f14, $f12
617; MM64R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f13, $f12
618; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
619; MMR6-DAG: andi16 $2, $[[T1]], 1
620
Daniel Sanders0fa60412014-06-12 13:39:06 +0000621 %1 = fcmp ogt double %a, %b
622 %2 = zext i1 %1 to i32
623 ret i32 %2
624}
625
626define i32 @oge_f64(double %a, double %b) nounwind {
627; ALL-LABEL: oge_f64:
628
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000629; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000630; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000631; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000632
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000633; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000634; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000635; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000636
Daniel Sandersdc067182014-07-09 10:40:20 +0000637; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000638; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
639; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000640
Daniel Sandersdc067182014-07-09 10:40:20 +0000641; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000642; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
643; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000644
Simon Dardisba92b032016-09-09 11:06:01 +0000645; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
646; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000647; MM32R3-DAG: c.ult.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000648; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000649
650; MM32R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f14, $f12
651; MM64R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f13, $f12
652; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
653; MMR6-DAG: andi16 $2, $[[T1]], 1
654
Daniel Sanders0fa60412014-06-12 13:39:06 +0000655 %1 = fcmp oge double %a, %b
656 %2 = zext i1 %1 to i32
657 ret i32 %2
658}
659
660define i32 @olt_f64(double %a, double %b) nounwind {
661; ALL-LABEL: olt_f64:
662
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000663; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000664; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000665; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000666
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000667; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000668; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000669; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000670
Daniel Sandersdc067182014-07-09 10:40:20 +0000671; 32-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000672; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
673; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000674
Daniel Sandersdc067182014-07-09 10:40:20 +0000675; 64-CMP-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000676; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
677; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000678
Simon Dardisba92b032016-09-09 11:06:01 +0000679; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
680; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000681; MM32R3-DAG: c.olt.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000682; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000683
684; MM32R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f14
685; MM64R6-DAG: cmp.lt.d $[[T0:f[0-9]+]], $f12, $f13
686; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
687; MMR6-DAG: andi16 $2, $[[T1]], 1
688
Daniel Sanders0fa60412014-06-12 13:39:06 +0000689 %1 = fcmp olt double %a, %b
690 %2 = zext i1 %1 to i32
691 ret i32 %2
692}
693
694define i32 @ole_f64(double %a, double %b) nounwind {
695; ALL-LABEL: ole_f64:
696
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000697; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000698; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000699; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000700
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000701; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000702; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000703; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000704
Daniel Sandersdc067182014-07-09 10:40:20 +0000705; 32-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000706; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
707; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000708
Daniel Sandersdc067182014-07-09 10:40:20 +0000709; 64-CMP-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000710; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
711; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000712
Simon Dardisba92b032016-09-09 11:06:01 +0000713; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
714; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000715; MM32R3-DAG: c.ole.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000716; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000717
718; MM32R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f14
719; MM64R6-DAG: cmp.le.d $[[T0:f[0-9]+]], $f12, $f13
720; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
721; MMR6-DAG: andi16 $2, $[[T1]], 1
722
Daniel Sanders0fa60412014-06-12 13:39:06 +0000723 %1 = fcmp ole double %a, %b
724 %2 = zext i1 %1 to i32
725 ret i32 %2
726}
727
728define i32 @one_f64(double %a, double %b) nounwind {
729; ALL-LABEL: one_f64:
730
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000731; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000732; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000733; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000734
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000735; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000736; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000737; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000738
739; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
740; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000741; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
742; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000743
744; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
745; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000746; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
747; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000748
Simon Dardisba92b032016-09-09 11:06:01 +0000749; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
750; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000751; MM32R3-DAG: c.ueq.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000752; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000753
754; MM32R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
755; MM64R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
756; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000757; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000758; MMR6-DAG: andi16 $2, $[[T2]], 1
759
Daniel Sanders0fa60412014-06-12 13:39:06 +0000760 %1 = fcmp one double %a, %b
761 %2 = zext i1 %1 to i32
762 ret i32 %2
763}
764
765define i32 @ord_f64(double %a, double %b) nounwind {
766; ALL-LABEL: ord_f64:
767
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000768; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000769; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000770; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000771
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000772; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000773; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000774; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000775
776; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
777; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000778; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
779; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000780
781; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
782; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000783; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
784; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000785
Simon Dardisba92b032016-09-09 11:06:01 +0000786; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
787; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000788; MM32R3-DAG: c.un.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000789; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000790
791; MM32R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
792; MM64R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
793; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +0000794; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +0000795; MMR6-DAG: andi16 $2, $[[T2]], 1
796
Daniel Sanders0fa60412014-06-12 13:39:06 +0000797 %1 = fcmp ord double %a, %b
798 %2 = zext i1 %1 to i32
799 ret i32 %2
800}
801
802define i32 @ueq_f64(double %a, double %b) nounwind {
803; ALL-LABEL: ueq_f64:
804
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000805; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000806; 32-C-DAG: c.ueq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000807; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000808
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000809; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000810; 64-C-DAG: c.ueq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000811; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000812
813; 32-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000814; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
815; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000816
817; 64-CMP-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000818; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
819; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000820
Simon Dardisba92b032016-09-09 11:06:01 +0000821; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
822; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000823; MM32R3-DAG: c.ueq.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000824; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000825
826; MM32R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f14
827; MM64R6-DAG: cmp.ueq.d $[[T0:f[0-9]+]], $f12, $f13
828; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
829; MMR6-DAG: andi16 $2, $[[T1]], 1
830
Daniel Sanders0fa60412014-06-12 13:39:06 +0000831 %1 = fcmp ueq double %a, %b
832 %2 = zext i1 %1 to i32
833 ret i32 %2
834}
835
836define i32 @ugt_f64(double %a, double %b) nounwind {
837; ALL-LABEL: ugt_f64:
838
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000839; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000840; 32-C-DAG: c.ole.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000841; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000842
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000843; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000844; 64-C-DAG: c.ole.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000845; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000846
847; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000848; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
849; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000850
851; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000852; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
853; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000854
Simon Dardisba92b032016-09-09 11:06:01 +0000855; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
856; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000857; MM32R3-DAG: c.ole.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000858; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000859
860; MM32R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f14, $f12
861; MM64R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f13, $f12
862; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
863; MMR6-DAG: andi16 $2, $[[T1]], 1
864
Daniel Sanders0fa60412014-06-12 13:39:06 +0000865 %1 = fcmp ugt double %a, %b
866 %2 = zext i1 %1 to i32
867 ret i32 %2
868}
869
870define i32 @uge_f64(double %a, double %b) nounwind {
871; ALL-LABEL: uge_f64:
872
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000873; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000874; 32-C-DAG: c.olt.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000875; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000876
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000877; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000878; 64-C-DAG: c.olt.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000879; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000880
881; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000882; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
883; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000884
885; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000886; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
887; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000888
Simon Dardisba92b032016-09-09 11:06:01 +0000889; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
890; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000891; MM32R3-DAG: c.olt.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000892; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000893
894; MM32R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f14, $f12
895; MM64R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f13, $f12
896; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
897; MMR6-DAG: andi16 $2, $[[T1]], 1
898
Daniel Sanders0fa60412014-06-12 13:39:06 +0000899 %1 = fcmp uge double %a, %b
900 %2 = zext i1 %1 to i32
901 ret i32 %2
902}
903
904define i32 @ult_f64(double %a, double %b) nounwind {
905; ALL-LABEL: ult_f64:
906
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000907; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000908; 32-C-DAG: c.ult.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000909; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000910
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000911; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000912; 64-C-DAG: c.ult.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000913; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000914
915; 32-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000916; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
917; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000918
919; 64-CMP-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000920; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
921; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000922
Simon Dardisba92b032016-09-09 11:06:01 +0000923; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
924; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000925; MM32R3-DAG: c.ult.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000926; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000927
928; MM32R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f14
929; MM64R6-DAG: cmp.ult.d $[[T0:f[0-9]+]], $f12, $f13
930; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
931; MMR6-DAG: andi16 $2, $[[T1]], 1
932
Daniel Sanders0fa60412014-06-12 13:39:06 +0000933 %1 = fcmp ult double %a, %b
934 %2 = zext i1 %1 to i32
935 ret i32 %2
936}
937
938define i32 @ule_f64(double %a, double %b) nounwind {
939; ALL-LABEL: ule_f64:
940
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000941; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000942; 32-C-DAG: c.ule.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000943; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000944
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000945; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000946; 64-C-DAG: c.ule.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000947; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000948
949; 32-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000950; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
951; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000952
953; 64-CMP-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000954; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
955; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000956
Simon Dardisba92b032016-09-09 11:06:01 +0000957; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
958; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000959; MM32R3-DAG: c.ule.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000960; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000961
962; MM32R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f14
963; MM64R6-DAG: cmp.ule.d $[[T0:f[0-9]+]], $f12, $f13
964; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
965; MMR6-DAG: andi16 $2, $[[T1]], 1
966
Daniel Sanders0fa60412014-06-12 13:39:06 +0000967 %1 = fcmp ule double %a, %b
968 %2 = zext i1 %1 to i32
969 ret i32 %2
970}
971
972define i32 @une_f64(double %a, double %b) nounwind {
973; ALL-LABEL: une_f64:
974
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000975; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000976; 32-C-DAG: c.eq.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +0000977; 32-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000978
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000979; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000980; 64-C-DAG: c.eq.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +0000981; 64-C: movt $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +0000982
983; 32-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
984; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000985; 32-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
986; 32-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000987
988; 64-CMP-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
989; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Daniel Sanderscbd44c52014-07-10 10:18:12 +0000990; 64-CMP-DAG: not $[[T2:[0-9]+]], $[[T1]]
991; 64-CMP-DAG: andi $2, $[[T2]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +0000992
Simon Dardisba92b032016-09-09 11:06:01 +0000993; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
994; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +0000995; MM32R3-DAG: c.eq.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +0000996; MM32R3-DAG: movt $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +0000997
998; MM32R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f14
999; MM64R6-DAG: cmp.eq.d $[[T0:f[0-9]+]], $f12, $f13
1000; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
Zlatko Buljand2ed9c62016-06-15 07:46:24 +00001001; MMR6-DAG: not $[[T2:[0-9]+]], $[[T1]]
Zlatko Buljancd242c12016-06-09 11:15:53 +00001002; MMR6-DAG: andi16 $2, $[[T2]], 1
1003
Daniel Sanders0fa60412014-06-12 13:39:06 +00001004 %1 = fcmp une double %a, %b
1005 %2 = zext i1 %1 to i32
1006 ret i32 %2
1007}
1008
1009define i32 @uno_f64(double %a, double %b) nounwind {
1010; ALL-LABEL: uno_f64:
1011
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00001012; 32-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001013; 32-C-DAG: c.un.d $f12, $f14
Vasileios Kalintirise741eb22015-03-02 12:47:32 +00001014; 32-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +00001015
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +00001016; 64-C-DAG: addiu $2, $zero, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001017; 64-C-DAG: c.un.d $f12, $f13
Vasileios Kalintiris36901dd2016-03-01 20:25:43 +00001018; 64-C: movf $2, $zero, $fcc0
Daniel Sanders0fa60412014-06-12 13:39:06 +00001019
1020; 32-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
Daniel Sanderscbd44c52014-07-10 10:18:12 +00001021; 32-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
1022; 32-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001023
1024; 64-CMP-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
Daniel Sanderscbd44c52014-07-10 10:18:12 +00001025; 64-CMP-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
1026; 64-CMP-DAG: andi $2, $[[T1]], 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001027
Simon Dardisba92b032016-09-09 11:06:01 +00001028; MM32R3-DAG: li16 $[[T0:[0-9]+]], 0
1029; MM32R3-DAG: li16 $[[T1:[0-9]+]], 1
Zlatko Buljancd242c12016-06-09 11:15:53 +00001030; MM32R3-DAG: c.un.d $f12, $f14
Simon Dardisba92b032016-09-09 11:06:01 +00001031; MM32R3-DAG: movf $[[T1]], $[[T0]], $fcc0
Zlatko Buljancd242c12016-06-09 11:15:53 +00001032
1033; MM32R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f14
1034; MM64R6-DAG: cmp.un.d $[[T0:f[0-9]+]], $f12, $f13
1035; MMR6-DAG: mfc1 $[[T1:[0-9]+]], $[[T0]]
1036; MMR6-DAG: andi16 $2, $[[T1]], 1
1037
Daniel Sanders0fa60412014-06-12 13:39:06 +00001038 %1 = fcmp uno double %a, %b
1039 %2 = zext i1 %1 to i32
1040 ret i32 %2
1041}
1042
1043define i32 @true_f64(double %a, double %b) nounwind {
1044; ALL-LABEL: true_f64:
Zlatko Buljancd242c12016-06-09 11:15:53 +00001045; 32-C: addiu $2, $zero, 1
1046
1047; 32-CMP: addiu $2, $zero, 1
1048
1049; 64-C: addiu $2, $zero, 1
1050
1051; 64-CMP: addiu $2, $zero, 1
1052
1053; MM-DAG: li16 $2, 1
Daniel Sanders0fa60412014-06-12 13:39:06 +00001054
1055 %1 = fcmp true double %a, %b
1056 %2 = zext i1 %1 to i32
1057 ret i32 %2
1058}
Daniel Sanders023c8062015-01-15 15:41:03 +00001059
1060; The optimizers sometimes produce setlt instead of setolt/setult.
1061define float @bug1_f32(float %angle, float %at) #0 {
1062entry:
1063; ALL-LABEL: bug1_f32:
1064
1065; 32-C-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1066; 32-C-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
1067; 32-C-DAG: c.ole.s $[[T0]], $[[T1]]
1068; 32-C-DAG: bc1t
1069
1070; 32-CMP-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1071; 32-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %lo($CPI32_0)(
1072; 32-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1073; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1074; FIXME: This instruction is redundant.
1075; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001076; 32-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001077
1078; 64-C-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanders6a738832016-07-19 10:49:03 +00001079; 64-C-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst(.LCPI32_0)(
Daniel Sanders023c8062015-01-15 15:41:03 +00001080; 64-C-DAG: c.ole.s $[[T0]], $[[T1]]
1081; 64-C-DAG: bc1t
1082
1083; 64-CMP-DAG: add.s $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanders6a738832016-07-19 10:49:03 +00001084; 64-CMP-DAG: lwc1 $[[T1:f[0-9]+]], %got_ofst(.LCPI32_0)(
Daniel Sanders023c8062015-01-15 15:41:03 +00001085; 64-CMP-DAG: cmp.le.s $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1086; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1087; FIXME: This instruction is redundant.
1088; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001089; 64-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001090
Zlatko Buljancd242c12016-06-09 11:15:53 +00001091; MM32R3-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1092; MM32R3-DAG: lui $[[T1:[0-9]+]], %hi($CPI32_0)
1093; MM32R3-DAG: lwc1 $[[T2:f[0-9]+]], %lo($CPI32_0)($[[T1]])
1094; MM32R3-DAG: c.ole.s $[[T0]], $[[T2]]
1095; MM32R3-DAG: bc1t
1096
1097; MM32R6-DAG: add.s $[[T0:f[0-9]+]], $f14, $f12
1098; MM32R6-DAG: lui $[[T1:[0-9]+]], %hi($CPI32_0)
1099; MM32R6-DAG: lwc1 $[[T2:f[0-9]+]], %lo($CPI32_0)($[[T1]])
1100; MM32R6-DAG: cmp.le.s $[[T3:f[0-9]+]], $[[T0]], $[[T2]]
1101; MM32R6-DAG: mfc1 $[[T4:[0-9]+]], $[[T3:f[0-9]+]]
1102; MM32R6-DAG: andi16 $[[T5:[0-9]+]], $[[T4]], 1
1103; MM32R6-DAG: bnez $[[T5]],
1104
1105; MM64R6-DAG: lui $[[T0:[0-9]+]], %hi(%neg(%gp_rel(bug1_f32)))
1106; MM64R6-DAG: daddu $[[T1:[0-9]+]], $[[T0]], $25
1107; MM64R6-DAG: daddiu $[[T2:[0-9]+]], $[[T1]], %lo(%neg(%gp_rel(bug1_f32)))
1108; MM64R6-DAG: add.s $[[T3:f[0-9]+]], $f13, $f12
Daniel Sanders6a738832016-07-19 10:49:03 +00001109; MM64R6-DAG: ld $[[T4:[0-9]+]], %got_page(.LCPI32_0)($[[T2]])
1110; MM64R6-DAG: lwc1 $[[T5:f[0-9]+]], %got_ofst(.LCPI32_0)($[[T4]])
Zlatko Buljancd242c12016-06-09 11:15:53 +00001111; MM64R6-DAG: cmp.le.s $[[T6:f[0-9]+]], $[[T3]], $[[T5]]
1112; MM64R6-DAG: mfc1 $[[T7:[0-9]+]], $[[T6]]
1113; MM64R6-DAG: andi16 $[[T8:[0-9]+]], $[[T7]], 1
1114; MM64R6-DAG: bnez $[[T8]],
1115
Daniel Sanders023c8062015-01-15 15:41:03 +00001116 %add = fadd fast float %at, %angle
1117 %cmp = fcmp ogt float %add, 1.000000e+00
1118 br i1 %cmp, label %if.then, label %if.end
1119
1120if.then:
1121 %sub = fadd fast float %add, -1.000000e+00
1122 br label %if.end
1123
1124if.end:
1125 %theta.0 = phi float [ %sub, %if.then ], [ %add, %entry ]
1126 ret float %theta.0
1127}
1128
1129; The optimizers sometimes produce setlt instead of setolt/setult.
1130define double @bug1_f64(double %angle, double %at) #0 {
1131entry:
1132; ALL-LABEL: bug1_f64:
1133
1134; 32-C-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1135; 32-C-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
1136; 32-C-DAG: c.ole.d $[[T0]], $[[T1]]
1137; 32-C-DAG: bc1t
1138
1139; 32-CMP-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1140; 32-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %lo($CPI33_0)(
1141; 32-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1142; 32-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1143; FIXME: This instruction is redundant.
1144; 32-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001145; 32-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001146
1147; 64-C-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanders6a738832016-07-19 10:49:03 +00001148; 64-C-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst(.LCPI33_0)(
Daniel Sanders023c8062015-01-15 15:41:03 +00001149; 64-C-DAG: c.ole.d $[[T0]], $[[T1]]
1150; 64-C-DAG: bc1t
1151
1152; 64-CMP-DAG: add.d $[[T0:f[0-9]+]], $f13, $f12
Daniel Sanders6a738832016-07-19 10:49:03 +00001153; 64-CMP-DAG: ldc1 $[[T1:f[0-9]+]], %got_ofst(.LCPI33_0)(
Daniel Sanders023c8062015-01-15 15:41:03 +00001154; 64-CMP-DAG: cmp.le.d $[[T2:f[0-9]+]], $[[T0]], $[[T1]]
1155; 64-CMP-DAG: mfc1 $[[T3:[0-9]+]], $[[T2]]
1156; FIXME: This instruction is redundant.
1157; 64-CMP-DAG: andi $[[T4:[0-9]+]], $[[T3]], 1
Daniel Sanderse8efff32016-03-14 16:24:05 +00001158; 64-CMP-DAG: bnezc $[[T4]],
Daniel Sanders023c8062015-01-15 15:41:03 +00001159
Zlatko Buljancd242c12016-06-09 11:15:53 +00001160; MM32R3-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1161; MM32R3-DAG: lui $[[T1:[0-9]+]], %hi($CPI33_0)
1162; MM32R3-DAG: ldc1 $[[T2:f[0-9]+]], %lo($CPI33_0)($[[T1]])
1163; MM32R3-DAG: c.ole.d $[[T0]], $[[T2]]
1164; MM32R3-DAG: bc1t
1165
1166; MM32R6-DAG: add.d $[[T0:f[0-9]+]], $f14, $f12
1167; MM32R6-DAG: lui $[[T1:[0-9]+]], %hi($CPI33_0)
1168; MM32R6-DAG: ldc1 $[[T2:f[0-9]+]], %lo($CPI33_0)($[[T1]])
1169; MM32R6-DAG: cmp.le.d $[[T3:f[0-9]+]], $[[T0]], $[[T2]]
1170; MM32R6-DAG: mfc1 $[[T4:[0-9]+]], $[[T3]]
1171; MM32R6-DAG: andi16 $[[T5:[0-9]+]], $[[T4]], 1
1172; MM32R6-DAG: bnez $[[T5]],
1173
1174; MM64R6-DAG: lui $[[T0:[0-9]+]], %hi(%neg(%gp_rel(bug1_f64)))
1175; MM64R6-DAG: daddu $[[T1:[0-9]+]], $[[T0]], $25
1176; MM64R6-DAG: daddiu $[[T2:[0-9]+]], $[[T1]], %lo(%neg(%gp_rel(bug1_f64)))
1177; MM64R6-DAG: add.d $[[T3:f[0-9]+]], $f13, $f12
Daniel Sanders6a738832016-07-19 10:49:03 +00001178; MM64R6-DAG: ld $[[T4:[0-9]+]], %got_page(.LCPI33_0)($[[T2]])
1179; MM64R6-DAG: ldc1 $[[T5:f[0-9]+]], %got_ofst(.LCPI33_0)($[[T4]])
Zlatko Buljancd242c12016-06-09 11:15:53 +00001180; MM64R6-DAG: cmp.le.d $[[T6:f[0-9]+]], $[[T3]], $[[T5]]
1181; MM64R6-DAG: mfc1 $[[T7:[0-9]+]], $[[T6]]
1182; MM64R6-DAG: andi16 $[[T8:[0-9]+]], $[[T7]], 1
1183; MM64R6-DAG: bnez $[[T8]],
1184
Daniel Sanders023c8062015-01-15 15:41:03 +00001185 %add = fadd fast double %at, %angle
1186 %cmp = fcmp ogt double %add, 1.000000e+00
1187 br i1 %cmp, label %if.then, label %if.end
1188
1189if.then:
1190 %sub = fadd fast double %add, -1.000000e+00
1191 br label %if.end
1192
1193if.end:
1194 %theta.0 = phi double [ %sub, %if.then ], [ %add, %entry ]
1195 ret double %theta.0
1196}
1197
1198attributes #0 = { nounwind readnone "no-nans-fp-math"="true" }