1 ;RUN: llc < %s -march=amdgcn -mcpu=SI -verify-machineinstrs| FileCheck --check-prefix=SI --check-prefix=FUNC %s
3 ; XXX: Merge this into setcc, once R600 supports 64-bit operations
5 ;;;==========================================================================;;;
7 ;;;==========================================================================;;;
9 ; FUNC-LABEL: {{^}}f64_oeq:
11 define void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) {
13 %0 = fcmp oeq double %a, %b
14 %1 = sext i1 %0 to i32
15 store i32 %1, i32 addrspace(1)* %out
19 ; FUNC-LABEL: {{^}}f64_ogt:
21 define void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) {
23 %0 = fcmp ogt double %a, %b
24 %1 = sext i1 %0 to i32
25 store i32 %1, i32 addrspace(1)* %out
29 ; FUNC-LABEL: {{^}}f64_oge:
31 define void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) {
33 %0 = fcmp oge double %a, %b
34 %1 = sext i1 %0 to i32
35 store i32 %1, i32 addrspace(1)* %out
39 ; FUNC-LABEL: {{^}}f64_olt:
41 define void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) {
43 %0 = fcmp olt double %a, %b
44 %1 = sext i1 %0 to i32
45 store i32 %1, i32 addrspace(1)* %out
49 ; FUNC-LABEL: {{^}}f64_ole:
51 define void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) {
53 %0 = fcmp ole double %a, %b
54 %1 = sext i1 %0 to i32
55 store i32 %1, i32 addrspace(1)* %out
59 ; FUNC-LABEL: {{^}}f64_one:
60 ; SI: v_cmp_lg_f64_e32 vcc
61 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
62 define void @f64_one(i32 addrspace(1)* %out, double %a, double %b) {
64 %0 = fcmp one double %a, %b
65 %1 = sext i1 %0 to i32
66 store i32 %1, i32 addrspace(1)* %out
70 ; FUNC-LABEL: {{^}}f64_ord:
72 define void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) {
74 %0 = fcmp ord double %a, %b
75 %1 = sext i1 %0 to i32
76 store i32 %1, i32 addrspace(1)* %out
80 ; FUNC-LABEL: {{^}}f64_ueq:
81 ; SI: v_cmp_nlg_f64_e32 vcc
82 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
83 define void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) {
85 %0 = fcmp ueq double %a, %b
86 %1 = sext i1 %0 to i32
87 store i32 %1, i32 addrspace(1)* %out
91 ; FUNC-LABEL: {{^}}f64_ugt:
93 ; SI: v_cmp_nle_f64_e32 vcc
94 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
95 define void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) {
97 %0 = fcmp ugt double %a, %b
98 %1 = sext i1 %0 to i32
99 store i32 %1, i32 addrspace(1)* %out
103 ; FUNC-LABEL: {{^}}f64_uge:
104 ; SI: v_cmp_nlt_f64_e32 vcc
105 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
106 define void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) {
108 %0 = fcmp uge double %a, %b
109 %1 = sext i1 %0 to i32
110 store i32 %1, i32 addrspace(1)* %out
114 ; FUNC-LABEL: {{^}}f64_ult:
115 ; SI: v_cmp_nge_f64_e32 vcc
116 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
117 define void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) {
119 %0 = fcmp ult double %a, %b
120 %1 = sext i1 %0 to i32
121 store i32 %1, i32 addrspace(1)* %out
125 ; FUNC-LABEL: {{^}}f64_ule:
126 ; SI: v_cmp_ngt_f64_e32 vcc
127 ; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
128 define void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) {
130 %0 = fcmp ule double %a, %b
131 %1 = sext i1 %0 to i32
132 store i32 %1, i32 addrspace(1)* %out
136 ; FUNC-LABEL: {{^}}f64_une:
138 define void @f64_une(i32 addrspace(1)* %out, double %a, double %b) {
140 %0 = fcmp une double %a, %b
141 %1 = sext i1 %0 to i32
142 store i32 %1, i32 addrspace(1)* %out
146 ; FUNC-LABEL: {{^}}f64_uno:
148 define void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) {
150 %0 = fcmp uno double %a, %b
151 %1 = sext i1 %0 to i32
152 store i32 %1, i32 addrspace(1)* %out
156 ;;;==========================================================================;;;
157 ;; 64-bit integer comparisons
158 ;;;==========================================================================;;;
160 ; FUNC-LABEL: {{^}}i64_eq:
162 define void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) {
164 %0 = icmp eq i64 %a, %b
165 %1 = sext i1 %0 to i32
166 store i32 %1, i32 addrspace(1)* %out
170 ; FUNC-LABEL: {{^}}i64_ne:
172 define void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) {
174 %0 = icmp ne i64 %a, %b
175 %1 = sext i1 %0 to i32
176 store i32 %1, i32 addrspace(1)* %out
180 ; FUNC-LABEL: {{^}}i64_ugt:
182 define void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
184 %0 = icmp ugt i64 %a, %b
185 %1 = sext i1 %0 to i32
186 store i32 %1, i32 addrspace(1)* %out
190 ; FUNC-LABEL: {{^}}i64_uge:
192 define void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
194 %0 = icmp uge i64 %a, %b
195 %1 = sext i1 %0 to i32
196 store i32 %1, i32 addrspace(1)* %out
200 ; FUNC-LABEL: {{^}}i64_ult:
202 define void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) {
204 %0 = icmp ult i64 %a, %b
205 %1 = sext i1 %0 to i32
206 store i32 %1, i32 addrspace(1)* %out
210 ; FUNC-LABEL: {{^}}i64_ule:
212 define void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) {
214 %0 = icmp ule i64 %a, %b
215 %1 = sext i1 %0 to i32
216 store i32 %1, i32 addrspace(1)* %out
220 ; FUNC-LABEL: {{^}}i64_sgt:
222 define void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
224 %0 = icmp sgt i64 %a, %b
225 %1 = sext i1 %0 to i32
226 store i32 %1, i32 addrspace(1)* %out
230 ; FUNC-LABEL: {{^}}i64_sge:
232 define void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) {
234 %0 = icmp sge i64 %a, %b
235 %1 = sext i1 %0 to i32
236 store i32 %1, i32 addrspace(1)* %out
240 ; FUNC-LABEL: {{^}}i64_slt:
242 define void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) {
244 %0 = icmp slt i64 %a, %b
245 %1 = sext i1 %0 to i32
246 store i32 %1, i32 addrspace(1)* %out
250 ; FUNC-LABEL: {{^}}i64_sle:
252 define void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) {
254 %0 = icmp sle i64 %a, %b
255 %1 = sext i1 %0 to i32
256 store i32 %1, i32 addrspace(1)* %out