1; RUN: llc -march=amdgcn -verify-machineinstrs < %s| FileCheck -check-prefix=GCN -check-prefix=SI %s 2; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s 3 4; XXX: Merge this into setcc, once R600 supports 64-bit operations 5 6;;;==========================================================================;;; 7;; Double comparisons 8;;;==========================================================================;;; 9 10; GCN-LABEL: {{^}}f64_oeq: 11; GCN: v_cmp_eq_f64 12define amdgpu_kernel void @f64_oeq(i32 addrspace(1)* %out, double %a, double %b) #0 { 13entry: 14 %tmp0 = fcmp oeq double %a, %b 15 %tmp1 = sext i1 %tmp0 to i32 16 store i32 %tmp1, i32 addrspace(1)* %out 17 ret void 18} 19 20; GCN-LABEL: {{^}}f64_ogt: 21; GCN: v_cmp_gt_f64 22define amdgpu_kernel void @f64_ogt(i32 addrspace(1)* %out, double %a, double %b) #0 { 23entry: 24 %tmp0 = fcmp ogt double %a, %b 25 %tmp1 = sext i1 %tmp0 to i32 26 store i32 %tmp1, i32 addrspace(1)* %out 27 ret void 28} 29 30; GCN-LABEL: {{^}}f64_oge: 31; GCN: v_cmp_ge_f64 32define amdgpu_kernel void @f64_oge(i32 addrspace(1)* %out, double %a, double %b) #0 { 33entry: 34 %tmp0 = fcmp oge double %a, %b 35 %tmp1 = sext i1 %tmp0 to i32 36 store i32 %tmp1, i32 addrspace(1)* %out 37 ret void 38} 39 40; GCN-LABEL: {{^}}f64_olt: 41; GCN: v_cmp_lt_f64 42define amdgpu_kernel void @f64_olt(i32 addrspace(1)* %out, double %a, double %b) #0 { 43entry: 44 %tmp0 = fcmp olt double %a, %b 45 %tmp1 = sext i1 %tmp0 to i32 46 store i32 %tmp1, i32 addrspace(1)* %out 47 ret void 48} 49 50; GCN-LABEL: {{^}}f64_ole: 51; GCN: v_cmp_le_f64 52define amdgpu_kernel void @f64_ole(i32 addrspace(1)* %out, double %a, double %b) #0 { 53entry: 54 %tmp0 = fcmp ole double %a, %b 55 %tmp1 = sext i1 %tmp0 to i32 56 store i32 %tmp1, i32 addrspace(1)* %out 57 ret void 58} 59 60; GCN-LABEL: {{^}}f64_one: 61; GCN: v_cmp_lg_f64_e32 vcc 62; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 63define amdgpu_kernel void @f64_one(i32 addrspace(1)* %out, double %a, double %b) #0 { 64entry: 65 %tmp0 = fcmp one double %a, %b 66 %tmp1 = sext i1 %tmp0 to i32 67 store i32 %tmp1, i32 addrspace(1)* %out 68 ret void 69} 70 71; GCN-LABEL: {{^}}f64_ord: 72; GCN: v_cmp_o_f64 73define amdgpu_kernel void @f64_ord(i32 addrspace(1)* %out, double %a, double %b) #0 { 74entry: 75 %tmp0 = fcmp ord double %a, %b 76 %tmp1 = sext i1 %tmp0 to i32 77 store i32 %tmp1, i32 addrspace(1)* %out 78 ret void 79} 80 81; GCN-LABEL: {{^}}f64_ueq: 82; GCN: v_cmp_nlg_f64_e32 vcc 83; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 84define amdgpu_kernel void @f64_ueq(i32 addrspace(1)* %out, double %a, double %b) #0 { 85entry: 86 %tmp0 = fcmp ueq double %a, %b 87 %tmp1 = sext i1 %tmp0 to i32 88 store i32 %tmp1, i32 addrspace(1)* %out 89 ret void 90} 91 92; GCN-LABEL: {{^}}f64_ugt: 93 94; GCN: v_cmp_nle_f64_e32 vcc 95; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 96define amdgpu_kernel void @f64_ugt(i32 addrspace(1)* %out, double %a, double %b) #0 { 97entry: 98 %tmp0 = fcmp ugt double %a, %b 99 %tmp1 = sext i1 %tmp0 to i32 100 store i32 %tmp1, i32 addrspace(1)* %out 101 ret void 102} 103 104; GCN-LABEL: {{^}}f64_uge: 105; GCN: v_cmp_nlt_f64_e32 vcc 106; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 107define amdgpu_kernel void @f64_uge(i32 addrspace(1)* %out, double %a, double %b) #0 { 108entry: 109 %tmp0 = fcmp uge double %a, %b 110 %tmp1 = sext i1 %tmp0 to i32 111 store i32 %tmp1, i32 addrspace(1)* %out 112 ret void 113} 114 115; GCN-LABEL: {{^}}f64_ult: 116; GCN: v_cmp_nge_f64_e32 vcc 117; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 118define amdgpu_kernel void @f64_ult(i32 addrspace(1)* %out, double %a, double %b) #0 { 119entry: 120 %tmp0 = fcmp ult double %a, %b 121 %tmp1 = sext i1 %tmp0 to i32 122 store i32 %tmp1, i32 addrspace(1)* %out 123 ret void 124} 125 126; GCN-LABEL: {{^}}f64_ule: 127; GCN: v_cmp_ngt_f64_e32 vcc 128; GCN: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 129define amdgpu_kernel void @f64_ule(i32 addrspace(1)* %out, double %a, double %b) #0 { 130entry: 131 %tmp0 = fcmp ule double %a, %b 132 %tmp1 = sext i1 %tmp0 to i32 133 store i32 %tmp1, i32 addrspace(1)* %out 134 ret void 135} 136 137; GCN-LABEL: {{^}}f64_une: 138; GCN: v_cmp_neq_f64 139define amdgpu_kernel void @f64_une(i32 addrspace(1)* %out, double %a, double %b) #0 { 140entry: 141 %tmp0 = fcmp une double %a, %b 142 %tmp1 = sext i1 %tmp0 to i32 143 store i32 %tmp1, i32 addrspace(1)* %out 144 ret void 145} 146 147; GCN-LABEL: {{^}}f64_uno: 148; GCN: v_cmp_u_f64 149define amdgpu_kernel void @f64_uno(i32 addrspace(1)* %out, double %a, double %b) #0 { 150entry: 151 %tmp0 = fcmp uno double %a, %b 152 %tmp1 = sext i1 %tmp0 to i32 153 store i32 %tmp1, i32 addrspace(1)* %out 154 ret void 155} 156 157;;;==========================================================================;;; 158;; 64-bit integer comparisons 159;;;==========================================================================;;; 160 161; GCN-LABEL: {{^}}i64_eq: 162; GCN: v_cmp_eq_u64 163define amdgpu_kernel void @i64_eq(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 164entry: 165 %tmp0 = icmp eq i64 %a, %b 166 %tmp1 = sext i1 %tmp0 to i32 167 store i32 %tmp1, i32 addrspace(1)* %out 168 ret void 169} 170 171; GCN-LABEL: {{^}}i64_ne: 172; GCN: v_cmp_ne_u64 173define amdgpu_kernel void @i64_ne(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 174entry: 175 %tmp0 = icmp ne i64 %a, %b 176 %tmp1 = sext i1 %tmp0 to i32 177 store i32 %tmp1, i32 addrspace(1)* %out 178 ret void 179} 180 181; GCN-LABEL: {{^}}i64_ugt: 182; GCN: v_cmp_gt_u64 183define amdgpu_kernel void @i64_ugt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 184entry: 185 %tmp0 = icmp ugt i64 %a, %b 186 %tmp1 = sext i1 %tmp0 to i32 187 store i32 %tmp1, i32 addrspace(1)* %out 188 ret void 189} 190 191; GCN-LABEL: {{^}}i64_uge: 192; GCN: v_cmp_ge_u64 193define amdgpu_kernel void @i64_uge(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 194entry: 195 %tmp0 = icmp uge i64 %a, %b 196 %tmp1 = sext i1 %tmp0 to i32 197 store i32 %tmp1, i32 addrspace(1)* %out 198 ret void 199} 200 201; GCN-LABEL: {{^}}i64_ult: 202; GCN: v_cmp_lt_u64 203define amdgpu_kernel void @i64_ult(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 204entry: 205 %tmp0 = icmp ult i64 %a, %b 206 %tmp1 = sext i1 %tmp0 to i32 207 store i32 %tmp1, i32 addrspace(1)* %out 208 ret void 209} 210 211; GCN-LABEL: {{^}}i64_ule: 212; GCN: v_cmp_le_u64 213define amdgpu_kernel void @i64_ule(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 214entry: 215 %tmp0 = icmp ule i64 %a, %b 216 %tmp1 = sext i1 %tmp0 to i32 217 store i32 %tmp1, i32 addrspace(1)* %out 218 ret void 219} 220 221; GCN-LABEL: {{^}}i64_sgt: 222; GCN: v_cmp_gt_i64 223define amdgpu_kernel void @i64_sgt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 224entry: 225 %tmp0 = icmp sgt i64 %a, %b 226 %tmp1 = sext i1 %tmp0 to i32 227 store i32 %tmp1, i32 addrspace(1)* %out 228 ret void 229} 230 231; GCN-LABEL: {{^}}i64_sge: 232; GCN: v_cmp_ge_i64 233define amdgpu_kernel void @i64_sge(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 234entry: 235 %tmp0 = icmp sge i64 %a, %b 236 %tmp1 = sext i1 %tmp0 to i32 237 store i32 %tmp1, i32 addrspace(1)* %out 238 ret void 239} 240 241; GCN-LABEL: {{^}}i64_slt: 242; GCN: v_cmp_lt_i64 243define amdgpu_kernel void @i64_slt(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 244entry: 245 %tmp0 = icmp slt i64 %a, %b 246 %tmp1 = sext i1 %tmp0 to i32 247 store i32 %tmp1, i32 addrspace(1)* %out 248 ret void 249} 250 251; GCN-LABEL: {{^}}i64_sle: 252; GCN: v_cmp_le_i64 253define amdgpu_kernel void @i64_sle(i32 addrspace(1)* %out, i64 %a, i64 %b) #0 { 254entry: 255 %tmp0 = icmp sle i64 %a, %b 256 %tmp1 = sext i1 %tmp0 to i32 257 store i32 %tmp1, i32 addrspace(1)* %out 258 ret void 259} 260 261attributes #0 = { nounwind } 262