1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx -mcpu=sm_20 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=nvptx64 -mcpu=sm_20 | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker;; These tests should run for all targets 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker;;===-- Basic instruction selection tests ---------------------------------===;; 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker;;; i64 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_eq_i64(i64 %a, i64 %b) { 12*9880d681SAndroid Build Coastguard Worker; CHECK: setp.eq.s64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 13*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 14*9880d681SAndroid Build Coastguard Worker; CHECK: ret 15*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i64 %a, %b 16*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 17*9880d681SAndroid Build Coastguard Worker ret i64 %ret 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_ne_i64(i64 %a, i64 %b) { 21*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ne.s64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 22*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 23*9880d681SAndroid Build Coastguard Worker; CHECK: ret 24*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i64 %a, %b 25*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 26*9880d681SAndroid Build Coastguard Worker ret i64 %ret 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_ugt_i64(i64 %a, i64 %b) { 30*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.u64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 31*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 32*9880d681SAndroid Build Coastguard Worker; CHECK: ret 33*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i64 %a, %b 34*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 35*9880d681SAndroid Build Coastguard Worker ret i64 %ret 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_uge_i64(i64 %a, i64 %b) { 39*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.u64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 40*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 41*9880d681SAndroid Build Coastguard Worker; CHECK: ret 42*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i64 %a, %b 43*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 44*9880d681SAndroid Build Coastguard Worker ret i64 %ret 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_ult_i64(i64 %a, i64 %b) { 48*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.u64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 49*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 50*9880d681SAndroid Build Coastguard Worker; CHECK: ret 51*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i64 %a, %b 52*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 53*9880d681SAndroid Build Coastguard Worker ret i64 %ret 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_ule_i64(i64 %a, i64 %b) { 57*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.u64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 58*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 59*9880d681SAndroid Build Coastguard Worker; CHECK: ret 60*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i64 %a, %b 61*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 62*9880d681SAndroid Build Coastguard Worker ret i64 %ret 63*9880d681SAndroid Build Coastguard Worker} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_sgt_i64(i64 %a, i64 %b) { 66*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.s64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 67*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 68*9880d681SAndroid Build Coastguard Worker; CHECK: ret 69*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i64 %a, %b 70*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 71*9880d681SAndroid Build Coastguard Worker ret i64 %ret 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_sge_i64(i64 %a, i64 %b) { 75*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.s64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 76*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 77*9880d681SAndroid Build Coastguard Worker; CHECK: ret 78*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i64 %a, %b 79*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 80*9880d681SAndroid Build Coastguard Worker ret i64 %ret 81*9880d681SAndroid Build Coastguard Worker} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_slt_i64(i64 %a, i64 %b) { 84*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.s64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 85*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 86*9880d681SAndroid Build Coastguard Worker; CHECK: ret 87*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i64 %a, %b 88*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 89*9880d681SAndroid Build Coastguard Worker ret i64 %ret 90*9880d681SAndroid Build Coastguard Worker} 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine i64 @icmp_sle_i64(i64 %a, i64 %b) { 93*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.s64 %p[[P0:[0-9]+]], %rd{{[0-9]+}}, %rd{{[0-9]+}} 94*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u64 %rd{{[0-9]+}}, 1, 0, %p[[P0]] 95*9880d681SAndroid Build Coastguard Worker; CHECK: ret 96*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i64 %a, %b 97*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i64 98*9880d681SAndroid Build Coastguard Worker ret i64 %ret 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker;;; i32 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_eq_i32(i32 %a, i32 %b) { 104*9880d681SAndroid Build Coastguard Worker; CHECK: setp.eq.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 105*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 106*9880d681SAndroid Build Coastguard Worker; CHECK: ret 107*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %a, %b 108*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 109*9880d681SAndroid Build Coastguard Worker ret i32 %ret 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ne_i32(i32 %a, i32 %b) { 113*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ne.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 114*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 115*9880d681SAndroid Build Coastguard Worker; CHECK: ret 116*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i32 %a, %b 117*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 118*9880d681SAndroid Build Coastguard Worker ret i32 %ret 119*9880d681SAndroid Build Coastguard Worker} 120*9880d681SAndroid Build Coastguard Worker 121*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ugt_i32(i32 %a, i32 %b) { 122*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 123*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 124*9880d681SAndroid Build Coastguard Worker; CHECK: ret 125*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %a, %b 126*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 127*9880d681SAndroid Build Coastguard Worker ret i32 %ret 128*9880d681SAndroid Build Coastguard Worker} 129*9880d681SAndroid Build Coastguard Worker 130*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_uge_i32(i32 %a, i32 %b) { 131*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 132*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 133*9880d681SAndroid Build Coastguard Worker; CHECK: ret 134*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %a, %b 135*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 136*9880d681SAndroid Build Coastguard Worker ret i32 %ret 137*9880d681SAndroid Build Coastguard Worker} 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ult_i32(i32 %a, i32 %b) { 140*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 141*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 142*9880d681SAndroid Build Coastguard Worker; CHECK: ret 143*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %a, %b 144*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 145*9880d681SAndroid Build Coastguard Worker ret i32 %ret 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_ule_i32(i32 %a, i32 %b) { 149*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.u32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 150*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 151*9880d681SAndroid Build Coastguard Worker; CHECK: ret 152*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i32 %a, %b 153*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 154*9880d681SAndroid Build Coastguard Worker ret i32 %ret 155*9880d681SAndroid Build Coastguard Worker} 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_sgt_i32(i32 %a, i32 %b) { 158*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 159*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 160*9880d681SAndroid Build Coastguard Worker; CHECK: ret 161*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a, %b 162*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 163*9880d681SAndroid Build Coastguard Worker ret i32 %ret 164*9880d681SAndroid Build Coastguard Worker} 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_sge_i32(i32 %a, i32 %b) { 167*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 168*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 169*9880d681SAndroid Build Coastguard Worker; CHECK: ret 170*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %a, %b 171*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 172*9880d681SAndroid Build Coastguard Worker ret i32 %ret 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_slt_i32(i32 %a, i32 %b) { 176*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 177*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 178*9880d681SAndroid Build Coastguard Worker; CHECK: ret 179*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i32 %a, %b 180*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 181*9880d681SAndroid Build Coastguard Worker ret i32 %ret 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Workerdefine i32 @icmp_sle_i32(i32 %a, i32 %b) { 185*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.s32 %p[[P0:[0-9]+]], %r{{[0-9]+}}, %r{{[0-9]+}} 186*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 187*9880d681SAndroid Build Coastguard Worker; CHECK: ret 188*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i32 %a, %b 189*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i32 190*9880d681SAndroid Build Coastguard Worker ret i32 %ret 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker 194*9880d681SAndroid Build Coastguard Worker;;; i16 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_eq_i16(i16 %a, i16 %b) { 197*9880d681SAndroid Build Coastguard Worker; CHECK: setp.eq.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 198*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 199*9880d681SAndroid Build Coastguard Worker; CHECK: ret 200*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i16 %a, %b 201*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 202*9880d681SAndroid Build Coastguard Worker ret i16 %ret 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_ne_i16(i16 %a, i16 %b) { 206*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ne.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 207*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 208*9880d681SAndroid Build Coastguard Worker; CHECK: ret 209*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i16 %a, %b 210*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 211*9880d681SAndroid Build Coastguard Worker ret i16 %ret 212*9880d681SAndroid Build Coastguard Worker} 213*9880d681SAndroid Build Coastguard Worker 214*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_ugt_i16(i16 %a, i16 %b) { 215*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 216*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 217*9880d681SAndroid Build Coastguard Worker; CHECK: ret 218*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i16 %a, %b 219*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 220*9880d681SAndroid Build Coastguard Worker ret i16 %ret 221*9880d681SAndroid Build Coastguard Worker} 222*9880d681SAndroid Build Coastguard Worker 223*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_uge_i16(i16 %a, i16 %b) { 224*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 225*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 226*9880d681SAndroid Build Coastguard Worker; CHECK: ret 227*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i16 %a, %b 228*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 229*9880d681SAndroid Build Coastguard Worker ret i16 %ret 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_ult_i16(i16 %a, i16 %b) { 233*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 234*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 235*9880d681SAndroid Build Coastguard Worker; CHECK: ret 236*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i16 %a, %b 237*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 238*9880d681SAndroid Build Coastguard Worker ret i16 %ret 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_ule_i16(i16 %a, i16 %b) { 242*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 243*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 244*9880d681SAndroid Build Coastguard Worker; CHECK: ret 245*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i16 %a, %b 246*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 247*9880d681SAndroid Build Coastguard Worker ret i16 %ret 248*9880d681SAndroid Build Coastguard Worker} 249*9880d681SAndroid Build Coastguard Worker 250*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_sgt_i16(i16 %a, i16 %b) { 251*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 252*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 253*9880d681SAndroid Build Coastguard Worker; CHECK: ret 254*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i16 %a, %b 255*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 256*9880d681SAndroid Build Coastguard Worker ret i16 %ret 257*9880d681SAndroid Build Coastguard Worker} 258*9880d681SAndroid Build Coastguard Worker 259*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_sge_i16(i16 %a, i16 %b) { 260*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 261*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 262*9880d681SAndroid Build Coastguard Worker; CHECK: ret 263*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i16 %a, %b 264*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 265*9880d681SAndroid Build Coastguard Worker ret i16 %ret 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_slt_i16(i16 %a, i16 %b) { 269*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 270*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 271*9880d681SAndroid Build Coastguard Worker; CHECK: ret 272*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i16 %a, %b 273*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 274*9880d681SAndroid Build Coastguard Worker ret i16 %ret 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Workerdefine i16 @icmp_sle_i16(i16 %a, i16 %b) { 278*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 279*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 280*9880d681SAndroid Build Coastguard Worker; CHECK: ret 281*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i16 %a, %b 282*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i16 283*9880d681SAndroid Build Coastguard Worker ret i16 %ret 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Worker;;; i8 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_eq_i8(i8 %a, i8 %b) { 290*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 291*9880d681SAndroid Build Coastguard Worker; CHECK: setp.eq.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 292*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 293*9880d681SAndroid Build Coastguard Worker; CHECK: ret 294*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i8 %a, %b 295*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 296*9880d681SAndroid Build Coastguard Worker ret i8 %ret 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_ne_i8(i8 %a, i8 %b) { 300*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 301*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ne.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 302*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 303*9880d681SAndroid Build Coastguard Worker; CHECK: ret 304*9880d681SAndroid Build Coastguard Worker %cmp = icmp ne i8 %a, %b 305*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 306*9880d681SAndroid Build Coastguard Worker ret i8 %ret 307*9880d681SAndroid Build Coastguard Worker} 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_ugt_i8(i8 %a, i8 %b) { 310*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 311*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 312*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 313*9880d681SAndroid Build Coastguard Worker; CHECK: ret 314*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i8 %a, %b 315*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 316*9880d681SAndroid Build Coastguard Worker ret i8 %ret 317*9880d681SAndroid Build Coastguard Worker} 318*9880d681SAndroid Build Coastguard Worker 319*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_uge_i8(i8 %a, i8 %b) { 320*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 321*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 322*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 323*9880d681SAndroid Build Coastguard Worker; CHECK: ret 324*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i8 %a, %b 325*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 326*9880d681SAndroid Build Coastguard Worker ret i8 %ret 327*9880d681SAndroid Build Coastguard Worker} 328*9880d681SAndroid Build Coastguard Worker 329*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_ult_i8(i8 %a, i8 %b) { 330*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 331*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 332*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 333*9880d681SAndroid Build Coastguard Worker; CHECK: ret 334*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i8 %a, %b 335*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 336*9880d681SAndroid Build Coastguard Worker ret i8 %ret 337*9880d681SAndroid Build Coastguard Worker} 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_ule_i8(i8 %a, i8 %b) { 340*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 341*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.u16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 342*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 343*9880d681SAndroid Build Coastguard Worker; CHECK: ret 344*9880d681SAndroid Build Coastguard Worker %cmp = icmp ule i8 %a, %b 345*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 346*9880d681SAndroid Build Coastguard Worker ret i8 %ret 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_sgt_i8(i8 %a, i8 %b) { 350*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 351*9880d681SAndroid Build Coastguard Worker; CHECK: setp.gt.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 352*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 353*9880d681SAndroid Build Coastguard Worker; CHECK: ret 354*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i8 %a, %b 355*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 356*9880d681SAndroid Build Coastguard Worker ret i8 %ret 357*9880d681SAndroid Build Coastguard Worker} 358*9880d681SAndroid Build Coastguard Worker 359*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_sge_i8(i8 %a, i8 %b) { 360*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 361*9880d681SAndroid Build Coastguard Worker; CHECK: setp.ge.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 362*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 363*9880d681SAndroid Build Coastguard Worker; CHECK: ret 364*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i8 %a, %b 365*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 366*9880d681SAndroid Build Coastguard Worker ret i8 %ret 367*9880d681SAndroid Build Coastguard Worker} 368*9880d681SAndroid Build Coastguard Worker 369*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_slt_i8(i8 %a, i8 %b) { 370*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 371*9880d681SAndroid Build Coastguard Worker; CHECK: setp.lt.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 372*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 373*9880d681SAndroid Build Coastguard Worker; CHECK: ret 374*9880d681SAndroid Build Coastguard Worker %cmp = icmp slt i8 %a, %b 375*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 376*9880d681SAndroid Build Coastguard Worker ret i8 %ret 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Workerdefine i8 @icmp_sle_i8(i8 %a, i8 %b) { 380*9880d681SAndroid Build Coastguard Worker; Comparison happens in 16-bit 381*9880d681SAndroid Build Coastguard Worker; CHECK: setp.le.s16 %p[[P0:[0-9]+]], %rs{{[0-9]+}}, %rs{{[0-9]+}} 382*9880d681SAndroid Build Coastguard Worker; CHECK: selp.u32 %r{{[0-9]+}}, 1, 0, %p[[P0]] 383*9880d681SAndroid Build Coastguard Worker; CHECK: ret 384*9880d681SAndroid Build Coastguard Worker %cmp = icmp sle i8 %a, %b 385*9880d681SAndroid Build Coastguard Worker %ret = zext i1 %cmp to i8 386*9880d681SAndroid Build Coastguard Worker ret i8 %ret 387*9880d681SAndroid Build Coastguard Worker} 388