blob: 7fb508f606b28419bd88d6a30cec1faa307f4f3a [file] [log] [blame]
Daniel Sanders0d972702016-06-24 12:23:17 +00001; RUN: llc < %s -march=mipsel -mcpu=mips32 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,FCC,32-FCC
2; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,FCC,32-FCC
3; RUN: llc < %s -march=mipsel -mcpu=mips32r6 -relocation-model=pic | FileCheck %s -check-prefixes=ALL,GPR,32-GPR
4; RUN: llc < %s -march=mips64el -mcpu=mips64 | FileCheck %s -check-prefixes=ALL,FCC,64-FCC
5; RUN: llc < %s -march=mips64el -mcpu=mips64r2 | FileCheck %s -check-prefixes=ALL,FCC,64-FCC
6; RUN: llc < %s -march=mips64el -mcpu=mips64r6 | FileCheck %s -check-prefixes=ALL,GPR,64-GPR
Akira Hatanakaa5352702011-03-31 18:26:17 +00007
8define void @func0(float %f2, float %f3) nounwind {
9entry:
Daniel Sanders3d3ea532014-06-12 15:00:17 +000010; ALL-LABEL: func0:
11
12; 32-FCC: c.eq.s $f12, $f14
Daniel Sanders6a738832016-07-19 10:49:03 +000013; 32-FCC: bc1f $BB0_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000014; 64-FCC: c.eq.s $f12, $f13
Daniel Sanders6a738832016-07-19 10:49:03 +000015; 64-FCC: bc1f .LBB0_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000016
17; 32-GPR: cmp.eq.s $[[FGRCC:f[0-9]+]], $f12, $f14
18; 64-GPR: cmp.eq.s $[[FGRCC:f[0-9]+]], $f12, $f13
19; GPR: mfc1 $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
20; FIXME: We ought to be able to transform not+bnez -> beqz
21; GPR: not $[[GPRCC]], $[[GPRCC]]
Daniel Sanderse8efff32016-03-14 16:24:05 +000022; 32-GPR: bnez $[[GPRCC]], $BB0_2
Daniel Sanders6a738832016-07-19 10:49:03 +000023; 64-GPR: bnezc $[[GPRCC]], .LBB0_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000024
Akira Hatanakaa5352702011-03-31 18:26:17 +000025 %cmp = fcmp oeq float %f2, %f3
26 br i1 %cmp, label %if.then, label %if.else
27
28if.then: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +000029 tail call void (...) @g0() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +000030 br label %if.end
31
32if.else: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +000033 tail call void (...) @g1() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +000034 br label %if.end
35
36if.end: ; preds = %if.else, %if.then
37 ret void
38}
39
40declare void @g0(...)
41
42declare void @g1(...)
43
44define void @func1(float %f2, float %f3) nounwind {
45entry:
Daniel Sanders3d3ea532014-06-12 15:00:17 +000046; ALL-LABEL: func1:
47
48; 32-FCC: c.olt.s $f12, $f14
Daniel Sanders6a738832016-07-19 10:49:03 +000049; 32-FCC: bc1f $BB1_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000050; 64-FCC: c.olt.s $f12, $f13
Daniel Sanders6a738832016-07-19 10:49:03 +000051; 64-FCC: bc1f .LBB1_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000052
53; 32-GPR: cmp.ule.s $[[FGRCC:f[0-9]+]], $f14, $f12
54; 64-GPR: cmp.ule.s $[[FGRCC:f[0-9]+]], $f13, $f12
55; GPR: mfc1 $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
56; GPR-NOT: not $[[GPRCC]], $[[GPRCC]]
Daniel Sanderse8efff32016-03-14 16:24:05 +000057; 32-GPR: bnez $[[GPRCC]], $BB1_2
Daniel Sanders6a738832016-07-19 10:49:03 +000058; 64-GPR: bnezc $[[GPRCC]], .LBB1_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000059
Akira Hatanakaa5352702011-03-31 18:26:17 +000060 %cmp = fcmp olt float %f2, %f3
61 br i1 %cmp, label %if.then, label %if.else
62
63if.then: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +000064 tail call void (...) @g0() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +000065 br label %if.end
66
67if.else: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +000068 tail call void (...) @g1() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +000069 br label %if.end
70
71if.end: ; preds = %if.else, %if.then
72 ret void
73}
74
75define void @func2(float %f2, float %f3) nounwind {
76entry:
Daniel Sanders3d3ea532014-06-12 15:00:17 +000077; ALL-LABEL: func2:
78
79; 32-FCC: c.ole.s $f12, $f14
Daniel Sanders6a738832016-07-19 10:49:03 +000080; 32-FCC: bc1t $BB2_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000081; 64-FCC: c.ole.s $f12, $f13
Daniel Sanders6a738832016-07-19 10:49:03 +000082; 64-FCC: bc1t .LBB2_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000083
84; 32-GPR: cmp.ult.s $[[FGRCC:f[0-9]+]], $f14, $f12
85; 64-GPR: cmp.ult.s $[[FGRCC:f[0-9]+]], $f13, $f12
86; GPR: mfc1 $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
87; GPR-NOT: not $[[GPRCC]], $[[GPRCC]]
Daniel Sanderse8efff32016-03-14 16:24:05 +000088; 32-GPR: beqz $[[GPRCC]], $BB2_2
Daniel Sanders6a738832016-07-19 10:49:03 +000089; 64-GPR: beqzc $[[GPRCC]], .LBB2_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +000090
Akira Hatanakaa5352702011-03-31 18:26:17 +000091 %cmp = fcmp ugt float %f2, %f3
92 br i1 %cmp, label %if.else, label %if.then
93
94if.then: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +000095 tail call void (...) @g0() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +000096 br label %if.end
97
98if.else: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +000099 tail call void (...) @g1() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000100 br label %if.end
101
102if.end: ; preds = %if.else, %if.then
103 ret void
104}
105
106define void @func3(double %f2, double %f3) nounwind {
107entry:
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000108; ALL-LABEL: func3:
109
110; 32-FCC: c.eq.d $f12, $f14
Daniel Sanders6a738832016-07-19 10:49:03 +0000111; 32-FCC: bc1f $BB3_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000112; 64-FCC: c.eq.d $f12, $f13
Daniel Sanders6a738832016-07-19 10:49:03 +0000113; 64-FCC: bc1f .LBB3_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000114
115; 32-GPR: cmp.eq.d $[[FGRCC:f[0-9]+]], $f12, $f14
116; 64-GPR: cmp.eq.d $[[FGRCC:f[0-9]+]], $f12, $f13
117; GPR: mfc1 $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
118; FIXME: We ought to be able to transform not+bnez -> beqz
119; GPR: not $[[GPRCC]], $[[GPRCC]]
Daniel Sanderse8efff32016-03-14 16:24:05 +0000120; 32-GPR: bnez $[[GPRCC]], $BB3_2
Daniel Sanders6a738832016-07-19 10:49:03 +0000121; 64-GPR: bnezc $[[GPRCC]], .LBB3_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000122
Akira Hatanakaa5352702011-03-31 18:26:17 +0000123 %cmp = fcmp oeq double %f2, %f3
124 br i1 %cmp, label %if.then, label %if.else
125
126if.then: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +0000127 tail call void (...) @g0() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000128 br label %if.end
129
130if.else: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +0000131 tail call void (...) @g1() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000132 br label %if.end
133
134if.end: ; preds = %if.else, %if.then
135 ret void
136}
137
138define void @func4(double %f2, double %f3) nounwind {
139entry:
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000140; ALL-LABEL: func4:
141
142; 32-FCC: c.olt.d $f12, $f14
Daniel Sanders6a738832016-07-19 10:49:03 +0000143; 32-FCC: bc1f $BB4_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000144; 64-FCC: c.olt.d $f12, $f13
Daniel Sanders6a738832016-07-19 10:49:03 +0000145; 64-FCC: bc1f .LBB4_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000146
147; 32-GPR: cmp.ule.d $[[FGRCC:f[0-9]+]], $f14, $f12
148; 64-GPR: cmp.ule.d $[[FGRCC:f[0-9]+]], $f13, $f12
149; GPR: mfc1 $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
150; GPR-NOT: not $[[GPRCC]], $[[GPRCC]]
Daniel Sanderse8efff32016-03-14 16:24:05 +0000151; 32-GPR: bnez $[[GPRCC]], $BB4_2
Daniel Sanders6a738832016-07-19 10:49:03 +0000152; 64-GPR: bnezc $[[GPRCC]], .LBB4_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000153
Akira Hatanakaa5352702011-03-31 18:26:17 +0000154 %cmp = fcmp olt double %f2, %f3
155 br i1 %cmp, label %if.then, label %if.else
156
157if.then: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +0000158 tail call void (...) @g0() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000159 br label %if.end
160
161if.else: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +0000162 tail call void (...) @g1() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000163 br label %if.end
164
165if.end: ; preds = %if.else, %if.then
166 ret void
167}
168
169define void @func5(double %f2, double %f3) nounwind {
170entry:
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000171; ALL-LABEL: func5:
172
173; 32-FCC: c.ole.d $f12, $f14
Daniel Sanders6a738832016-07-19 10:49:03 +0000174; 32-FCC: bc1t $BB5_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000175; 64-FCC: c.ole.d $f12, $f13
Daniel Sanders6a738832016-07-19 10:49:03 +0000176; 64-FCC: bc1t .LBB5_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000177
178; 32-GPR: cmp.ult.d $[[FGRCC:f[0-9]+]], $f14, $f12
179; 64-GPR: cmp.ult.d $[[FGRCC:f[0-9]+]], $f13, $f12
180; GPR: mfc1 $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
181; GPR-NOT: not $[[GPRCC]], $[[GPRCC]]
Daniel Sanderse8efff32016-03-14 16:24:05 +0000182; 32-GPR: beqz $[[GPRCC]], $BB5_2
Daniel Sanders6a738832016-07-19 10:49:03 +0000183; 64-GPR: beqzc $[[GPRCC]], .LBB5_2
Daniel Sanders3d3ea532014-06-12 15:00:17 +0000184
Akira Hatanakaa5352702011-03-31 18:26:17 +0000185 %cmp = fcmp ugt double %f2, %f3
186 br i1 %cmp, label %if.else, label %if.then
187
188if.then: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +0000189 tail call void (...) @g0() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000190 br label %if.end
191
192if.else: ; preds = %entry
David Blaikie23af6482015-04-16 23:24:18 +0000193 tail call void (...) @g1() nounwind
Akira Hatanakaa5352702011-03-31 18:26:17 +0000194 br label %if.end
195
196if.end: ; preds = %if.else, %if.then
197 ret void
198}