blob: 1f1bdb055302c365f904ffbac6dd4022da7fde39 [file] [log] [blame]
Matt Arsenault2920f622016-12-22 03:21:45 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s| FileCheck -check-prefix=GCN -check-prefix=SI %s
Matt Arsenault7aad8fd2017-01-24 22:02:15 +00002; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s
Tom Stellardc0845332013-11-22 23:07:58 +00003
4; XXX: Merge this into setcc, once R600 supports 64-bit operations
5
6;;;==========================================================================;;;
7;; Double comparisons
8;;;==========================================================================;;;
9
Matt Arsenault2920f622016-12-22 03:21:45 +000010; GCN-LABEL: {{^}}f64_oeq:
11; GCN: v_cmp_eq_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000012define amdgpu_kernel void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000013entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000014 %tmp0 = fcmp oeq double %a, %b
15 %tmp1 = sext i1 %tmp0 to i32
16 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000017 ret void
18}
19
Matt Arsenault2920f622016-12-22 03:21:45 +000020; GCN-LABEL: {{^}}f64_ogt:
21; GCN: v_cmp_gt_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000022define amdgpu_kernel void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000023entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000024 %tmp0 = fcmp ogt double %a, %b
25 %tmp1 = sext i1 %tmp0 to i32
26 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000027 ret void
28}
29
Matt Arsenault2920f622016-12-22 03:21:45 +000030; GCN-LABEL: {{^}}f64_oge:
31; GCN: v_cmp_ge_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000032define amdgpu_kernel void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000033entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000034 %tmp0 = fcmp oge double %a, %b
35 %tmp1 = sext i1 %tmp0 to i32
36 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000037 ret void
38}
39
Matt Arsenault2920f622016-12-22 03:21:45 +000040; GCN-LABEL: {{^}}f64_olt:
41; GCN: v_cmp_lt_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000042define amdgpu_kernel void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000043entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000044 %tmp0 = fcmp olt double %a, %b
45 %tmp1 = sext i1 %tmp0 to i32
46 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000047 ret void
48}
49
Matt Arsenault2920f622016-12-22 03:21:45 +000050; GCN-LABEL: {{^}}f64_ole:
51; GCN: v_cmp_le_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000052define amdgpu_kernel void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000053entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000054 %tmp0 = fcmp ole double %a, %b
55 %tmp1 = sext i1 %tmp0 to i32
56 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000057 ret void
58}
59
Matt Arsenault2920f622016-12-22 03:21:45 +000060; GCN-LABEL: {{^}}f64_one:
61; GCN: v_cmp_lg_f64_e32 vcc
62; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000063define amdgpu_kernel void @f64_one(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000064entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000065 %tmp0 = fcmp one double %a, %b
66 %tmp1 = sext i1 %tmp0 to i32
67 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000068 ret void
69}
70
Matt Arsenault2920f622016-12-22 03:21:45 +000071; GCN-LABEL: {{^}}f64_ord:
72; GCN: v_cmp_o_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000073define amdgpu_kernel void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000074entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000075 %tmp0 = fcmp ord double %a, %b
76 %tmp1 = sext i1 %tmp0 to i32
77 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000078 ret void
79}
80
Matt Arsenault2920f622016-12-22 03:21:45 +000081; GCN-LABEL: {{^}}f64_ueq:
82; GCN: v_cmp_nlg_f64_e32 vcc
83; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000084define amdgpu_kernel void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000085entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000086 %tmp0 = fcmp ueq double %a, %b
87 %tmp1 = sext i1 %tmp0 to i32
88 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +000089 ret void
90}
91
Matt Arsenault2920f622016-12-22 03:21:45 +000092; GCN-LABEL: {{^}}f64_ugt:
Matt Arsenault8b989ef2014-12-11 22:15:39 +000093
Matt Arsenault2920f622016-12-22 03:21:45 +000094; GCN: v_cmp_nle_f64_e32 vcc
95; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000096define amdgpu_kernel void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +000097entry:
Matt Arsenault2920f622016-12-22 03:21:45 +000098 %tmp0 = fcmp ugt double %a, %b
99 %tmp1 = sext i1 %tmp0 to i32
100 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000101 ret void
102}
103
Matt Arsenault2920f622016-12-22 03:21:45 +0000104; GCN-LABEL: {{^}}f64_uge:
105; GCN: v_cmp_nlt_f64_e32 vcc
106; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000107define amdgpu_kernel void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000108entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000109 %tmp0 = fcmp uge double %a, %b
110 %tmp1 = sext i1 %tmp0 to i32
111 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000112 ret void
113}
114
Matt Arsenault2920f622016-12-22 03:21:45 +0000115; GCN-LABEL: {{^}}f64_ult:
116; GCN: v_cmp_nge_f64_e32 vcc
117; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000118define amdgpu_kernel void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000119entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000120 %tmp0 = fcmp ult double %a, %b
121 %tmp1 = sext i1 %tmp0 to i32
122 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000123 ret void
124}
125
Matt Arsenault2920f622016-12-22 03:21:45 +0000126; GCN-LABEL: {{^}}f64_ule:
127; GCN: v_cmp_ngt_f64_e32 vcc
128; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000129define amdgpu_kernel void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000130entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000131 %tmp0 = fcmp ule double %a, %b
132 %tmp1 = sext i1 %tmp0 to i32
133 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000134 ret void
135}
136
Matt Arsenault2920f622016-12-22 03:21:45 +0000137; GCN-LABEL: {{^}}f64_une:
138; GCN: v_cmp_neq_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000139define amdgpu_kernel void @f64_une(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000140entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000141 %tmp0 = fcmp une double %a, %b
142 %tmp1 = sext i1 %tmp0 to i32
143 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000144 ret void
145}
146
Matt Arsenault2920f622016-12-22 03:21:45 +0000147; GCN-LABEL: {{^}}f64_uno:
148; GCN: v_cmp_u_f64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000149define amdgpu_kernel void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000150entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000151 %tmp0 = fcmp uno double %a, %b
152 %tmp1 = sext i1 %tmp0 to i32
153 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000154 ret void
155}
156
157;;;==========================================================================;;;
158;; 64-bit integer comparisons
159;;;==========================================================================;;;
160
Matt Arsenault2920f622016-12-22 03:21:45 +0000161; GCN-LABEL: {{^}}i64_eq:
162; GCN: v_cmp_eq_u64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000163define amdgpu_kernel void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000164entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000165 %tmp0 = icmp eq i64 %a, %b
166 %tmp1 = sext i1 %tmp0 to i32
167 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000168 ret void
169}
170
Matt Arsenault2920f622016-12-22 03:21:45 +0000171; GCN-LABEL: {{^}}i64_ne:
172; GCN: v_cmp_ne_u64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000173define amdgpu_kernel void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000174entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000175 %tmp0 = icmp ne i64 %a, %b
176 %tmp1 = sext i1 %tmp0 to i32
177 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000178 ret void
179}
180
Matt Arsenault2920f622016-12-22 03:21:45 +0000181; GCN-LABEL: {{^}}i64_ugt:
182; GCN: v_cmp_gt_u64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000183define amdgpu_kernel void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000184entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000185 %tmp0 = icmp ugt i64 %a, %b
186 %tmp1 = sext i1 %tmp0 to i32
187 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000188 ret void
189}
190
Matt Arsenault2920f622016-12-22 03:21:45 +0000191; GCN-LABEL: {{^}}i64_uge:
192; GCN: v_cmp_ge_u64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000193define amdgpu_kernel void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000194entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000195 %tmp0 = icmp uge i64 %a, %b
196 %tmp1 = sext i1 %tmp0 to i32
197 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000198 ret void
199}
200
Matt Arsenault2920f622016-12-22 03:21:45 +0000201; GCN-LABEL: {{^}}i64_ult:
202; GCN: v_cmp_lt_u64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000203define amdgpu_kernel void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000204entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000205 %tmp0 = icmp ult i64 %a, %b
206 %tmp1 = sext i1 %tmp0 to i32
207 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000208 ret void
209}
210
Matt Arsenault2920f622016-12-22 03:21:45 +0000211; GCN-LABEL: {{^}}i64_ule:
212; GCN: v_cmp_le_u64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000213define amdgpu_kernel void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000214entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000215 %tmp0 = icmp ule i64 %a, %b
216 %tmp1 = sext i1 %tmp0 to i32
217 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000218 ret void
219}
220
Matt Arsenault2920f622016-12-22 03:21:45 +0000221; GCN-LABEL: {{^}}i64_sgt:
222; GCN: v_cmp_gt_i64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000223define amdgpu_kernel void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000224entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000225 %tmp0 = icmp sgt i64 %a, %b
226 %tmp1 = sext i1 %tmp0 to i32
227 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000228 ret void
229}
230
Matt Arsenault2920f622016-12-22 03:21:45 +0000231; GCN-LABEL: {{^}}i64_sge:
232; GCN: v_cmp_ge_i64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000233define amdgpu_kernel void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000234entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000235 %tmp0 = icmp sge i64 %a, %b
236 %tmp1 = sext i1 %tmp0 to i32
237 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000238 ret void
239}
240
Matt Arsenault2920f622016-12-22 03:21:45 +0000241; GCN-LABEL: {{^}}i64_slt:
242; GCN: v_cmp_lt_i64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000243define amdgpu_kernel void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000244entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000245 %tmp0 = icmp slt i64 %a, %b
246 %tmp1 = sext i1 %tmp0 to i32
247 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000248 ret void
249}
250
Matt Arsenault2920f622016-12-22 03:21:45 +0000251; GCN-LABEL: {{^}}i64_sle:
252; GCN: v_cmp_le_i64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000253define amdgpu_kernel void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 {
Tom Stellardc0845332013-11-22 23:07:58 +0000254entry:
Matt Arsenault2920f622016-12-22 03:21:45 +0000255 %tmp0 = icmp sle i64 %a, %b
256 %tmp1 = sext i1 %tmp0 to i32
257 store i32 %tmp1, i32 addrspace(1)* %out
Tom Stellardc0845332013-11-22 23:07:58 +0000258 ret void
259}
Matt Arsenault2920f622016-12-22 03:21:45 +0000260
261attributes #0 = { nounwind }