• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -O0 -fast-isel-abort -verify-machineinstrs -mtriple=arm64-apple-darwin | FileCheck %s
2
3define zeroext i1 @fcmp_float1(float %a) nounwind ssp {
4entry:
5; CHECK-LABEL: @fcmp_float1
6; CHECK: fcmp s0, #0.0
7; CHECK: cset w{{[0-9]+}}, ne
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-LABEL: @fcmp_float2
15; CHECK: fcmp s0, s1
16; CHECK: cset w{{[0-9]+}}, ne
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-LABEL: @fcmp_double1
24; CHECK: fcmp d0, #0.0
25; CHECK: cset w{{[0-9]+}}, ne
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-LABEL: @fcmp_double2
33; CHECK: fcmp d0, d1
34; CHECK: cset w{{[0-9]+}}, ne
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-LABEL: @fcmp_oeq
42; CHECK: fcmp s0, s1
43; CHECK: cset w{{[0-9]+}}, eq
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-LABEL: @fcmp_ogt
51; CHECK: fcmp s0, s1
52; CHECK: cset w{{[0-9]+}}, gt
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-LABEL: @fcmp_oge
60; CHECK: fcmp s0, s1
61; CHECK: cset w{{[0-9]+}}, ge
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-LABEL: @fcmp_olt
69; CHECK: fcmp s0, s1
70; CHECK: cset w{{[0-9]+}}, mi
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-LABEL: @fcmp_ole
78; CHECK: fcmp s0, s1
79; CHECK: cset w{{[0-9]+}}, ls
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-LABEL: @fcmp_ord
87; CHECK: fcmp s0, s1
88; CHECK: cset {{w[0-9]+}}, vc
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-LABEL: @fcmp_uno
96; CHECK: fcmp s0, s1
97; CHECK: cset {{w[0-9]+}}, vs
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-LABEL: @fcmp_ugt
105; CHECK: fcmp s0, s1
106; CHECK: cset {{w[0-9]+}}, hi
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-LABEL: @fcmp_uge
114; CHECK: fcmp s0, s1
115; CHECK: cset {{w[0-9]+}}, pl
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-LABEL: @fcmp_ult
123; CHECK: fcmp s0, s1
124; CHECK: cset {{w[0-9]+}}, lt
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-LABEL: @fcmp_ule
132; CHECK: fcmp s0, s1
133; CHECK: cset {{w[0-9]+}}, le
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-LABEL: @fcmp_une
141; CHECK: fcmp s0, s1
142; CHECK: cset {{w[0-9]+}}, ne
143  %cmp = fcmp une float %a, %b
144  %conv = uitofp i1 %cmp to float
145  ret float %conv
146}
147