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