1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=amdgcn -verify-machineinstrs | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=R600 --check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() nounwind readnone 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}setcc_v2i32: 7*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW]}}, KC0[3].X, KC0[3].Z 8*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW]}}, KC0[2].W, KC0[3].Y 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine void @setcc_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a, <2 x i32> %b) { 11*9880d681SAndroid Build Coastguard Worker %result = icmp eq <2 x i32> %a, %b 12*9880d681SAndroid Build Coastguard Worker %sext = sext <2 x i1> %result to <2 x i32> 13*9880d681SAndroid Build Coastguard Worker store <2 x i32> %sext, <2 x i32> addrspace(1)* %out 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}setcc_v4i32: 18*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 19*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 20*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 21*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_INT * T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine void @setcc_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) { 24*9880d681SAndroid Build Coastguard Worker %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1 25*9880d681SAndroid Build Coastguard Worker %a = load <4 x i32>, <4 x i32> addrspace(1) * %in 26*9880d681SAndroid Build Coastguard Worker %b = load <4 x i32>, <4 x i32> addrspace(1) * %b_ptr 27*9880d681SAndroid Build Coastguard Worker %result = icmp eq <4 x i32> %a, %b 28*9880d681SAndroid Build Coastguard Worker %sext = sext <4 x i1> %result to <4 x i32> 29*9880d681SAndroid Build Coastguard Worker store <4 x i32> %sext, <4 x i32> addrspace(1)* %out 30*9880d681SAndroid Build Coastguard Worker ret void 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;; 34*9880d681SAndroid Build Coastguard Worker;; Float comparisons 35*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;; 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_oeq: 38*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10 39*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_eq_f32 40*9880d681SAndroid Build Coastguard Workerdefine void @f32_oeq(i32 addrspace(1)* %out, float %a, float %b) { 41*9880d681SAndroid Build Coastguard Workerentry: 42*9880d681SAndroid Build Coastguard Worker %0 = fcmp oeq float %a, %b 43*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 44*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 45*9880d681SAndroid Build Coastguard Worker ret void 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ogt: 49*9880d681SAndroid Build Coastguard Worker; R600: SETGT_DX10 50*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_f32 51*9880d681SAndroid Build Coastguard Workerdefine void @f32_ogt(i32 addrspace(1)* %out, float %a, float %b) { 52*9880d681SAndroid Build Coastguard Workerentry: 53*9880d681SAndroid Build Coastguard Worker %0 = fcmp ogt float %a, %b 54*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 55*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 56*9880d681SAndroid Build Coastguard Worker ret void 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_oge: 60*9880d681SAndroid Build Coastguard Worker; R600: SETGE_DX10 61*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_f32 62*9880d681SAndroid Build Coastguard Workerdefine void @f32_oge(i32 addrspace(1)* %out, float %a, float %b) { 63*9880d681SAndroid Build Coastguard Workerentry: 64*9880d681SAndroid Build Coastguard Worker %0 = fcmp oge float %a, %b 65*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 66*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 67*9880d681SAndroid Build Coastguard Worker ret void 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_olt: 71*9880d681SAndroid Build Coastguard Worker; R600: SETGT_DX10 72*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_f32 73*9880d681SAndroid Build Coastguard Workerdefine void @f32_olt(i32 addrspace(1)* %out, float %a, float %b) { 74*9880d681SAndroid Build Coastguard Workerentry: 75*9880d681SAndroid Build Coastguard Worker %0 = fcmp olt float %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: {{^}}f32_ole: 82*9880d681SAndroid Build Coastguard Worker; R600: SETGE_DX10 83*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_f32 84*9880d681SAndroid Build Coastguard Workerdefine void @f32_ole(i32 addrspace(1)* %out, float %a, float %b) { 85*9880d681SAndroid Build Coastguard Workerentry: 86*9880d681SAndroid Build Coastguard Worker %0 = fcmp ole float %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: {{^}}f32_one: 93*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10 94*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10 95*9880d681SAndroid Build Coastguard Worker; R600-DAG: AND_INT 96*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_DX10 97*9880d681SAndroid Build Coastguard Worker; R600-DAG: AND_INT 98*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_INT 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lg_f32_e32 vcc 101*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 102*9880d681SAndroid Build Coastguard Workerdefine void @f32_one(i32 addrspace(1)* %out, float %a, float %b) { 103*9880d681SAndroid Build Coastguard Workerentry: 104*9880d681SAndroid Build Coastguard Worker %0 = fcmp one float %a, %b 105*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 106*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 107*9880d681SAndroid Build Coastguard Worker ret void 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ord: 111*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10 112*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10 113*9880d681SAndroid Build Coastguard Worker; R600-DAG: AND_INT 114*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_INT 115*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_o_f32 116*9880d681SAndroid Build Coastguard Workerdefine void @f32_ord(i32 addrspace(1)* %out, float %a, float %b) { 117*9880d681SAndroid Build Coastguard Workerentry: 118*9880d681SAndroid Build Coastguard Worker %0 = fcmp ord float %a, %b 119*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 120*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 121*9880d681SAndroid Build Coastguard Worker ret void 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ueq: 125*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_DX10 126*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_DX10 127*9880d681SAndroid Build Coastguard Worker; R600-DAG: OR_INT 128*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETE_DX10 129*9880d681SAndroid Build Coastguard Worker; R600-DAG: OR_INT 130*9880d681SAndroid Build Coastguard Worker; R600-DAG: SETNE_INT 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nlg_f32_e32 vcc 133*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 134*9880d681SAndroid Build Coastguard Workerdefine void @f32_ueq(i32 addrspace(1)* %out, float %a, float %b) { 135*9880d681SAndroid Build Coastguard Workerentry: 136*9880d681SAndroid Build Coastguard Worker %0 = fcmp ueq float %a, %b 137*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 138*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 139*9880d681SAndroid Build Coastguard Worker ret void 140*9880d681SAndroid Build Coastguard Worker} 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ugt: 143*9880d681SAndroid Build Coastguard Worker; R600: SETGE 144*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10 145*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nle_f32_e32 vcc 146*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 147*9880d681SAndroid Build Coastguard Workerdefine void @f32_ugt(i32 addrspace(1)* %out, float %a, float %b) { 148*9880d681SAndroid Build Coastguard Workerentry: 149*9880d681SAndroid Build Coastguard Worker %0 = fcmp ugt float %a, %b 150*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 151*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 152*9880d681SAndroid Build Coastguard Worker ret void 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_uge: 156*9880d681SAndroid Build Coastguard Worker; R600: SETGT 157*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nlt_f32_e32 vcc 160*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 161*9880d681SAndroid Build Coastguard Workerdefine void @f32_uge(i32 addrspace(1)* %out, float %a, float %b) { 162*9880d681SAndroid Build Coastguard Workerentry: 163*9880d681SAndroid Build Coastguard Worker %0 = fcmp uge float %a, %b 164*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 165*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 166*9880d681SAndroid Build Coastguard Worker ret void 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ult: 170*9880d681SAndroid Build Coastguard Worker; R600: SETGE 171*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_nge_f32_e32 vcc 174*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 175*9880d681SAndroid Build Coastguard Workerdefine void @f32_ult(i32 addrspace(1)* %out, float %a, float %b) { 176*9880d681SAndroid Build Coastguard Workerentry: 177*9880d681SAndroid Build Coastguard Worker %0 = fcmp ult float %a, %b 178*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 179*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 180*9880d681SAndroid Build Coastguard Worker ret void 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_ule: 184*9880d681SAndroid Build Coastguard Worker; R600: SETGT 185*9880d681SAndroid Build Coastguard Worker; R600: SETE_DX10 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ngt_f32_e32 vcc 188*9880d681SAndroid Build Coastguard Worker; SI-NEXT: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, vcc 189*9880d681SAndroid Build Coastguard Workerdefine void @f32_ule(i32 addrspace(1)* %out, float %a, float %b) { 190*9880d681SAndroid Build Coastguard Workerentry: 191*9880d681SAndroid Build Coastguard Worker %0 = fcmp ule float %a, %b 192*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 193*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 194*9880d681SAndroid Build Coastguard Worker ret void 195*9880d681SAndroid Build Coastguard Worker} 196*9880d681SAndroid Build Coastguard Worker 197*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_une: 198*9880d681SAndroid Build Coastguard Worker; R600: SETNE_DX10 199*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_neq_f32 200*9880d681SAndroid Build Coastguard Workerdefine void @f32_une(i32 addrspace(1)* %out, float %a, float %b) { 201*9880d681SAndroid Build Coastguard Workerentry: 202*9880d681SAndroid Build Coastguard Worker %0 = fcmp une float %a, %b 203*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 204*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 205*9880d681SAndroid Build Coastguard Worker ret void 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}f32_uno: 209*9880d681SAndroid Build Coastguard Worker; R600: SETNE_DX10 210*9880d681SAndroid Build Coastguard Worker; R600: SETNE_DX10 211*9880d681SAndroid Build Coastguard Worker; R600: OR_INT 212*9880d681SAndroid Build Coastguard Worker; R600: SETNE_INT 213*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_u_f32 214*9880d681SAndroid Build Coastguard Workerdefine void @f32_uno(i32 addrspace(1)* %out, float %a, float %b) { 215*9880d681SAndroid Build Coastguard Workerentry: 216*9880d681SAndroid Build Coastguard Worker %0 = fcmp uno float %a, %b 217*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 218*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 219*9880d681SAndroid Build Coastguard Worker ret void 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;; 223*9880d681SAndroid Build Coastguard Worker;; 32-bit integer comparisons 224*9880d681SAndroid Build Coastguard Worker;;;==========================================================================;;; 225*9880d681SAndroid Build Coastguard Worker 226*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_eq: 227*9880d681SAndroid Build Coastguard Worker; R600: SETE_INT 228*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_eq_i32 229*9880d681SAndroid Build Coastguard Workerdefine void @i32_eq(i32 addrspace(1)* %out, i32 %a, i32 %b) { 230*9880d681SAndroid Build Coastguard Workerentry: 231*9880d681SAndroid Build Coastguard Worker %0 = icmp eq i32 %a, %b 232*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 233*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 234*9880d681SAndroid Build Coastguard Worker ret void 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ne: 238*9880d681SAndroid Build Coastguard Worker; R600: SETNE_INT 239*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ne_i32 240*9880d681SAndroid Build Coastguard Workerdefine void @i32_ne(i32 addrspace(1)* %out, i32 %a, i32 %b) { 241*9880d681SAndroid Build Coastguard Workerentry: 242*9880d681SAndroid Build Coastguard Worker %0 = icmp ne i32 %a, %b 243*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 244*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 245*9880d681SAndroid Build Coastguard Worker ret void 246*9880d681SAndroid Build Coastguard Worker} 247*9880d681SAndroid Build Coastguard Worker 248*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ugt: 249*9880d681SAndroid Build Coastguard Worker; R600: SETGT_UINT 250*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_u32 251*9880d681SAndroid Build Coastguard Workerdefine void @i32_ugt(i32 addrspace(1)* %out, i32 %a, i32 %b) { 252*9880d681SAndroid Build Coastguard Workerentry: 253*9880d681SAndroid Build Coastguard Worker %0 = icmp ugt i32 %a, %b 254*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 255*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 256*9880d681SAndroid Build Coastguard Worker ret void 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_uge: 260*9880d681SAndroid Build Coastguard Worker; R600: SETGE_UINT 261*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_u32 262*9880d681SAndroid Build Coastguard Workerdefine void @i32_uge(i32 addrspace(1)* %out, i32 %a, i32 %b) { 263*9880d681SAndroid Build Coastguard Workerentry: 264*9880d681SAndroid Build Coastguard Worker %0 = icmp uge i32 %a, %b 265*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 266*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 267*9880d681SAndroid Build Coastguard Worker ret void 268*9880d681SAndroid Build Coastguard Worker} 269*9880d681SAndroid Build Coastguard Worker 270*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ult: 271*9880d681SAndroid Build Coastguard Worker; R600: SETGT_UINT 272*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_u32 273*9880d681SAndroid Build Coastguard Workerdefine void @i32_ult(i32 addrspace(1)* %out, i32 %a, i32 %b) { 274*9880d681SAndroid Build Coastguard Workerentry: 275*9880d681SAndroid Build Coastguard Worker %0 = icmp ult i32 %a, %b 276*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 277*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 278*9880d681SAndroid Build Coastguard Worker ret void 279*9880d681SAndroid Build Coastguard Worker} 280*9880d681SAndroid Build Coastguard Worker 281*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_ule: 282*9880d681SAndroid Build Coastguard Worker; R600: SETGE_UINT 283*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_u32 284*9880d681SAndroid Build Coastguard Workerdefine void @i32_ule(i32 addrspace(1)* %out, i32 %a, i32 %b) { 285*9880d681SAndroid Build Coastguard Workerentry: 286*9880d681SAndroid Build Coastguard Worker %0 = icmp ule i32 %a, %b 287*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 288*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 289*9880d681SAndroid Build Coastguard Worker ret void 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_sgt: 293*9880d681SAndroid Build Coastguard Worker; R600: SETGT_INT 294*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_gt_i32 295*9880d681SAndroid Build Coastguard Workerdefine void @i32_sgt(i32 addrspace(1)* %out, i32 %a, i32 %b) { 296*9880d681SAndroid Build Coastguard Workerentry: 297*9880d681SAndroid Build Coastguard Worker %0 = icmp sgt i32 %a, %b 298*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 299*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 300*9880d681SAndroid Build Coastguard Worker ret void 301*9880d681SAndroid Build Coastguard Worker} 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_sge: 304*9880d681SAndroid Build Coastguard Worker; R600: SETGE_INT 305*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_ge_i32 306*9880d681SAndroid Build Coastguard Workerdefine void @i32_sge(i32 addrspace(1)* %out, i32 %a, i32 %b) { 307*9880d681SAndroid Build Coastguard Workerentry: 308*9880d681SAndroid Build Coastguard Worker %0 = icmp sge i32 %a, %b 309*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 310*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 311*9880d681SAndroid Build Coastguard Worker ret void 312*9880d681SAndroid Build Coastguard Worker} 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_slt: 315*9880d681SAndroid Build Coastguard Worker; R600: SETGT_INT 316*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_lt_i32 317*9880d681SAndroid Build Coastguard Workerdefine void @i32_slt(i32 addrspace(1)* %out, i32 %a, i32 %b) { 318*9880d681SAndroid Build Coastguard Workerentry: 319*9880d681SAndroid Build Coastguard Worker %0 = icmp slt i32 %a, %b 320*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 321*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 322*9880d681SAndroid Build Coastguard Worker ret void 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}i32_sle: 326*9880d681SAndroid Build Coastguard Worker; R600: SETGE_INT 327*9880d681SAndroid Build Coastguard Worker; SI: v_cmp_le_i32 328*9880d681SAndroid Build Coastguard Workerdefine void @i32_sle(i32 addrspace(1)* %out, i32 %a, i32 %b) { 329*9880d681SAndroid Build Coastguard Workerentry: 330*9880d681SAndroid Build Coastguard Worker %0 = icmp sle i32 %a, %b 331*9880d681SAndroid Build Coastguard Worker %1 = sext i1 %0 to i32 332*9880d681SAndroid Build Coastguard Worker store i32 %1, i32 addrspace(1)* %out 333*9880d681SAndroid Build Coastguard Worker ret void 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker; FIXME: This does 4 compares 337*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v3i32_eq: 338*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32 339*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, 340*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32 341*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, 342*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32 343*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, 344*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 345*9880d681SAndroid Build Coastguard Workerdefine void @v3i32_eq(<3 x i32> addrspace(1)* %out, <3 x i32> addrspace(1)* %ptra, <3 x i32> addrspace(1)* %ptrb) { 346*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() nounwind readnone 347*9880d681SAndroid Build Coastguard Worker %gep.a = getelementptr <3 x i32>, <3 x i32> addrspace(1)* %ptra, i32 %tid 348*9880d681SAndroid Build Coastguard Worker %gep.b = getelementptr <3 x i32>, <3 x i32> addrspace(1)* %ptrb, i32 %tid 349*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr <3 x i32>, <3 x i32> addrspace(1)* %out, i32 %tid 350*9880d681SAndroid Build Coastguard Worker %a = load <3 x i32>, <3 x i32> addrspace(1)* %gep.a 351*9880d681SAndroid Build Coastguard Worker %b = load <3 x i32>, <3 x i32> addrspace(1)* %gep.b 352*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <3 x i32> %a, %b 353*9880d681SAndroid Build Coastguard Worker %ext = sext <3 x i1> %cmp to <3 x i32> 354*9880d681SAndroid Build Coastguard Worker store <3 x i32> %ext, <3 x i32> addrspace(1)* %gep.out 355*9880d681SAndroid Build Coastguard Worker ret void 356*9880d681SAndroid Build Coastguard Worker} 357*9880d681SAndroid Build Coastguard Worker 358*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v3i8_eq: 359*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32 360*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, 361*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32 362*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, 363*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_eq_i32 364*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cndmask_b32_e64 {{v[0-9]+}}, 0, -1, 365*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 366*9880d681SAndroid Build Coastguard Workerdefine void @v3i8_eq(<3 x i8> addrspace(1)* %out, <3 x i8> addrspace(1)* %ptra, <3 x i8> addrspace(1)* %ptrb) { 367*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() nounwind readnone 368*9880d681SAndroid Build Coastguard Worker %gep.a = getelementptr <3 x i8>, <3 x i8> addrspace(1)* %ptra, i32 %tid 369*9880d681SAndroid Build Coastguard Worker %gep.b = getelementptr <3 x i8>, <3 x i8> addrspace(1)* %ptrb, i32 %tid 370*9880d681SAndroid Build Coastguard Worker %gep.out = getelementptr <3 x i8>, <3 x i8> addrspace(1)* %out, i32 %tid 371*9880d681SAndroid Build Coastguard Worker %a = load <3 x i8>, <3 x i8> addrspace(1)* %gep.a 372*9880d681SAndroid Build Coastguard Worker %b = load <3 x i8>, <3 x i8> addrspace(1)* %gep.b 373*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq <3 x i8> %a, %b 374*9880d681SAndroid Build Coastguard Worker %ext = sext <3 x i1> %cmp to <3 x i8> 375*9880d681SAndroid Build Coastguard Worker store <3 x i8> %ext, <3 x i8> addrspace(1)* %gep.out 376*9880d681SAndroid Build Coastguard Worker ret void 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Worker; Make sure we don't try to emit i1 setcc ops 380*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: setcc-i1 381*9880d681SAndroid Build Coastguard Worker; SI: s_and_b32 [[AND:s[0-9]+]], s{{[0-9]+}}, 1 382*9880d681SAndroid Build Coastguard Worker; SI: s_cmp_eq_i32 [[AND]], 0 383*9880d681SAndroid Build Coastguard Workerdefine void @setcc-i1(i32 %in) { 384*9880d681SAndroid Build Coastguard Worker %and = and i32 %in, 1 385*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %and, 0 386*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %endif, label %if 387*9880d681SAndroid Build Coastguard Workerif: 388*9880d681SAndroid Build Coastguard Worker unreachable 389*9880d681SAndroid Build Coastguard Workerendif: 390*9880d681SAndroid Build Coastguard Worker ret void 391*9880d681SAndroid Build Coastguard Worker} 392*9880d681SAndroid Build Coastguard Worker 393*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: setcc-i1-and-xor 394*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_le_f32_e64 [[A:s\[[0-9]+:[0-9]+\]]], 0, s{{[0-9]+}} 395*9880d681SAndroid Build Coastguard Worker; SI-DAG: v_cmp_ge_f32_e64 [[B:s\[[0-9]+:[0-9]+\]]], 1.0, s{{[0-9]+}} 396*9880d681SAndroid Build Coastguard Worker; SI: s_and_b64 s[2:3], [[A]], [[B]] 397*9880d681SAndroid Build Coastguard Workerdefine void @setcc-i1-and-xor(i32 addrspace(1)* %out, float %cond) #0 { 398*9880d681SAndroid Build Coastguard Workerbb0: 399*9880d681SAndroid Build Coastguard Worker %tmp5 = fcmp oge float %cond, 0.000000e+00 400*9880d681SAndroid Build Coastguard Worker %tmp7 = fcmp ole float %cond, 1.000000e+00 401*9880d681SAndroid Build Coastguard Worker %tmp9 = and i1 %tmp5, %tmp7 402*9880d681SAndroid Build Coastguard Worker %tmp11 = xor i1 %tmp9, 1 403*9880d681SAndroid Build Coastguard Worker br i1 %tmp11, label %bb2, label %bb1 404*9880d681SAndroid Build Coastguard Worker 405*9880d681SAndroid Build Coastguard Workerbb1: 406*9880d681SAndroid Build Coastguard Worker store i32 0, i32 addrspace(1)* %out 407*9880d681SAndroid Build Coastguard Worker br label %bb2 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Workerbb2: 410*9880d681SAndroid Build Coastguard Worker ret void 411*9880d681SAndroid Build Coastguard Worker} 412