blob: cf71fab714075e4cf5f1aa95433047833c83a3c2 [file] [log] [blame]
Tim Northover00ed9962014-03-29 10:18:08 +00001; RUN: llc < %s -O0 -fast-isel-abort -mtriple=arm64-apple-darwin | FileCheck %s
2
3define zeroext i1 @fcmp_float1(float %a) nounwind ssp {
4entry:
5; CHECK: @fcmp_float1
6; CHECK: fcmp s0, #0.0
7; CHECK: csinc w{{[0-9]+}}, wzr, wzr, eq
8 %cmp = fcmp une float %a, 0.000000e+00
9 ret i1 %cmp
10}
11
12define zeroext i1 @fcmp_float2(float %a, float %b) nounwind ssp {
13entry:
14; CHECK: @fcmp_float2
15; CHECK: fcmp s0, s1
16; CHECK: csinc w{{[0-9]+}}, wzr, wzr, eq
17 %cmp = fcmp une float %a, %b
18 ret i1 %cmp
19}
20
21define zeroext i1 @fcmp_double1(double %a) nounwind ssp {
22entry:
23; CHECK: @fcmp_double1
24; CHECK: fcmp d0, #0.0
25; CHECK: csinc w{{[0-9]+}}, wzr, wzr, eq
26 %cmp = fcmp une double %a, 0.000000e+00
27 ret i1 %cmp
28}
29
30define zeroext i1 @fcmp_double2(double %a, double %b) nounwind ssp {
31entry:
32; CHECK: @fcmp_double2
33; CHECK: fcmp d0, d1
34; CHECK: csinc w{{[0-9]+}}, wzr, wzr, eq
35 %cmp = fcmp une double %a, %b
36 ret i1 %cmp
37}
38
39; Check each fcmp condition
40define float @fcmp_oeq(float %a, float %b) nounwind ssp {
41; CHECK: @fcmp_oeq
42; CHECK: fcmp s0, s1
43; CHECK: csinc w{{[0-9]+}}, wzr, wzr, ne
44 %cmp = fcmp oeq float %a, %b
45 %conv = uitofp i1 %cmp to float
46 ret float %conv
47}
48
49define float @fcmp_ogt(float %a, float %b) nounwind ssp {
50; CHECK: @fcmp_ogt
51; CHECK: fcmp s0, s1
52; CHECK: csinc w{{[0-9]+}}, wzr, wzr, le
53 %cmp = fcmp ogt float %a, %b
54 %conv = uitofp i1 %cmp to float
55 ret float %conv
56}
57
58define float @fcmp_oge(float %a, float %b) nounwind ssp {
59; CHECK: @fcmp_oge
60; CHECK: fcmp s0, s1
61; CHECK: csinc w{{[0-9]+}}, wzr, wzr, lt
62 %cmp = fcmp oge float %a, %b
63 %conv = uitofp i1 %cmp to float
64 ret float %conv
65}
66
67define float @fcmp_olt(float %a, float %b) nounwind ssp {
68; CHECK: @fcmp_olt
69; CHECK: fcmp s0, s1
70; CHECK: csinc w{{[0-9]+}}, wzr, wzr, pl
71 %cmp = fcmp olt float %a, %b
72 %conv = uitofp i1 %cmp to float
73 ret float %conv
74}
75
76define float @fcmp_ole(float %a, float %b) nounwind ssp {
77; CHECK: @fcmp_ole
78; CHECK: fcmp s0, s1
79; CHECK: csinc w{{[0-9]+}}, wzr, wzr, hi
80 %cmp = fcmp ole float %a, %b
81 %conv = uitofp i1 %cmp to float
82 ret float %conv
83}
84
85define float @fcmp_ord(float %a, float %b) nounwind ssp {
86; CHECK: @fcmp_ord
87; CHECK: fcmp s0, s1
88; CHECK: csinc {{w[0-9]+}}, wzr, wzr, vs
89 %cmp = fcmp ord float %a, %b
90 %conv = uitofp i1 %cmp to float
91 ret float %conv
92}
93
94define float @fcmp_uno(float %a, float %b) nounwind ssp {
95; CHECK: @fcmp_uno
96; CHECK: fcmp s0, s1
97; CHECK: csinc {{w[0-9]+}}, wzr, wzr, vc
98 %cmp = fcmp uno float %a, %b
99 %conv = uitofp i1 %cmp to float
100 ret float %conv
101}
102
103define float @fcmp_ugt(float %a, float %b) nounwind ssp {
104; CHECK: @fcmp_ugt
105; CHECK: fcmp s0, s1
106; CHECK: csinc {{w[0-9]+}}, wzr, wzr, ls
107 %cmp = fcmp ugt float %a, %b
108 %conv = uitofp i1 %cmp to float
109 ret float %conv
110}
111
112define float @fcmp_uge(float %a, float %b) nounwind ssp {
113; CHECK: @fcmp_uge
114; CHECK: fcmp s0, s1
115; CHECK: csinc {{w[0-9]+}}, wzr, wzr, mi
116 %cmp = fcmp uge float %a, %b
117 %conv = uitofp i1 %cmp to float
118 ret float %conv
119}
120
121define float @fcmp_ult(float %a, float %b) nounwind ssp {
122; CHECK: @fcmp_ult
123; CHECK: fcmp s0, s1
124; CHECK: csinc {{w[0-9]+}}, wzr, wzr, ge
125 %cmp = fcmp ult float %a, %b
126 %conv = uitofp i1 %cmp to float
127 ret float %conv
128}
129
130define float @fcmp_ule(float %a, float %b) nounwind ssp {
131; CHECK: @fcmp_ule
132; CHECK: fcmp s0, s1
133; CHECK: csinc {{w[0-9]+}}, wzr, wzr, gt
134 %cmp = fcmp ule float %a, %b
135 %conv = uitofp i1 %cmp to float
136 ret float %conv
137}
138
139define float @fcmp_une(float %a, float %b) nounwind ssp {
140; CHECK: @fcmp_une
141; CHECK: fcmp s0, s1
142; CHECK: csinc {{w[0-9]+}}, wzr, wzr, eq
143 %cmp = fcmp une float %a, %b
144 %conv = uitofp i1 %cmp to float
145 ret float %conv
146}