1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=cypress < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_test_imax_sge_i32: 6*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 9*9880d681SAndroid Build Coastguard Workerdefine void @v_test_imax_sge_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr) nounwind { 10*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 11*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %bptr, align 4 12*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %a, %b 13*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 14*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 15*9880d681SAndroid Build Coastguard Worker ret void 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_test_imax_sge_v4i32: 19*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 20*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 21*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 22*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; These could be merged into one 25*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 26*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 27*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 28*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 29*9880d681SAndroid Build Coastguard Workerdefine void @v_test_imax_sge_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %aptr, <4 x i32> addrspace(1)* %bptr) nounwind { 30*9880d681SAndroid Build Coastguard Worker %a = load <4 x i32>, <4 x i32> addrspace(1)* %aptr, align 4 31*9880d681SAndroid Build Coastguard Worker %b = load <4 x i32>, <4 x i32> addrspace(1)* %bptr, align 4 32*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge <4 x i32> %a, %b 33*9880d681SAndroid Build Coastguard Worker %val = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b 34*9880d681SAndroid Build Coastguard Worker store <4 x i32> %val, <4 x i32> addrspace(1)* %out, align 4 35*9880d681SAndroid Build Coastguard Worker ret void 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @s_test_imax_sge_i32 39*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 42*9880d681SAndroid Build Coastguard Workerdefine void @s_test_imax_sge_i32(i32 addrspace(1)* %out, i32 %a, i32 %b) nounwind { 43*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %a, %b 44*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 45*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 46*9880d681SAndroid Build Coastguard Worker ret void 47*9880d681SAndroid Build Coastguard Worker} 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_imax_sge_imm_i32: 50*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 {{s[0-9]+}}, {{s[0-9]+}}, 9 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT {{.*}}literal.{{[xyzw]}} 53*9880d681SAndroid Build Coastguard Workerdefine void @s_test_imax_sge_imm_i32(i32 addrspace(1)* %out, i32 %a) nounwind { 54*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i32 %a, 9 55*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 9 56*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 57*9880d681SAndroid Build Coastguard Worker ret void 58*9880d681SAndroid Build Coastguard Worker} 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_test_imax_sge_i8: 61*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_sbyte 62*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_sbyte 63*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 66*9880d681SAndroid Build Coastguard Workerdefine void @v_test_imax_sge_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %aptr, i8 addrspace(1)* %bptr) nounwind { 67*9880d681SAndroid Build Coastguard Worker %a = load i8, i8 addrspace(1)* %aptr, align 1 68*9880d681SAndroid Build Coastguard Worker %b = load i8, i8 addrspace(1)* %bptr, align 1 69*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i8 %a, %b 70*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i8 %a, i8 %b 71*9880d681SAndroid Build Coastguard Worker store i8 %val, i8 addrspace(1)* %out, align 1 72*9880d681SAndroid Build Coastguard Worker ret void 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_imax_sgt_imm_i32: 76*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 {{s[0-9]+}}, {{s[0-9]+}}, 9 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT {{.*}}literal.{{[xyzw]}} 79*9880d681SAndroid Build Coastguard Workerdefine void @s_test_imax_sgt_imm_i32(i32 addrspace(1)* %out, i32 %a) nounwind { 80*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a, 9 81*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 9 82*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 83*9880d681SAndroid Build Coastguard Worker ret void 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_imax_sgt_imm_v2i32: 87*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 {{s[0-9]+}}, {{s[0-9]+}}, 9 88*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 {{s[0-9]+}}, {{s[0-9]+}}, 9 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT {{.*}}literal.{{[xyzw]}} 91*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT {{.*}}literal.{{[xyzw]}} 92*9880d681SAndroid Build Coastguard Workerdefine void @s_test_imax_sgt_imm_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a) nounwind { 93*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt <2 x i32> %a, <i32 9, i32 9> 94*9880d681SAndroid Build Coastguard Worker %val = select <2 x i1> %cmp, <2 x i32> %a, <2 x i32> <i32 9, i32 9> 95*9880d681SAndroid Build Coastguard Worker store <2 x i32> %val, <2 x i32> addrspace(1)* %out, align 4 96*9880d681SAndroid Build Coastguard Worker ret void 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @v_test_imax_sgt_i32 100*9880d681SAndroid Build Coastguard Worker; SI: v_max_i32_e32 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 103*9880d681SAndroid Build Coastguard Workerdefine void @v_test_imax_sgt_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr) nounwind { 104*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 105*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %bptr, align 4 106*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a, %b 107*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 108*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 109*9880d681SAndroid Build Coastguard Worker ret void 110*9880d681SAndroid Build Coastguard Worker} 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @s_test_imax_sgt_i32 113*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 116*9880d681SAndroid Build Coastguard Workerdefine void @s_test_imax_sgt_i32(i32 addrspace(1)* %out, i32 %a, i32 %b) nounwind { 117*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a, %b 118*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 119*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 120*9880d681SAndroid Build Coastguard Worker ret void 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @v_test_umax_uge_i32 124*9880d681SAndroid Build Coastguard Worker; SI: v_max_u32_e32 125*9880d681SAndroid Build Coastguard Worker 126*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 127*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umax_uge_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr) nounwind { 128*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 129*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %bptr, align 4 130*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %a, %b 131*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 132*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 133*9880d681SAndroid Build Coastguard Worker ret void 134*9880d681SAndroid Build Coastguard Worker} 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @s_test_umax_uge_i32 137*9880d681SAndroid Build Coastguard Worker; SI: s_max_u32 138*9880d681SAndroid Build Coastguard Worker 139*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 140*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umax_uge_i32(i32 addrspace(1)* %out, i32 %a, i32 %b) nounwind { 141*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i32 %a, %b 142*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 143*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 144*9880d681SAndroid Build Coastguard Worker ret void 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_umax_uge_v3i32: 148*9880d681SAndroid Build Coastguard Worker; SI: s_max_u32 149*9880d681SAndroid Build Coastguard Worker; SI: s_max_u32 150*9880d681SAndroid Build Coastguard Worker; SI: s_max_u32 151*9880d681SAndroid Build Coastguard Worker; SI-NOT: s_max_u32 152*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 153*9880d681SAndroid Build Coastguard Worker 154*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 155*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 156*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 157*9880d681SAndroid Build Coastguard Worker; EG-NOT: MAX_UINT 158*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umax_uge_v3i32(<3 x i32> addrspace(1)* %out, <3 x i32> %a, <3 x i32> %b) nounwind { 159*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge <3 x i32> %a, %b 160*9880d681SAndroid Build Coastguard Worker %val = select <3 x i1> %cmp, <3 x i32> %a, <3 x i32> %b 161*9880d681SAndroid Build Coastguard Worker store <3 x i32> %val, <3 x i32> addrspace(1)* %out, align 4 162*9880d681SAndroid Build Coastguard Worker ret void 163*9880d681SAndroid Build Coastguard Worker} 164*9880d681SAndroid Build Coastguard Worker 165*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_test_umax_uge_i8: 166*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_ubyte 167*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_ubyte 168*9880d681SAndroid Build Coastguard Worker; SI: v_max_u32_e32 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 171*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umax_uge_i8(i8 addrspace(1)* %out, i8 addrspace(1)* %aptr, i8 addrspace(1)* %bptr) nounwind { 172*9880d681SAndroid Build Coastguard Worker %a = load i8, i8 addrspace(1)* %aptr, align 1 173*9880d681SAndroid Build Coastguard Worker %b = load i8, i8 addrspace(1)* %bptr, align 1 174*9880d681SAndroid Build Coastguard Worker %cmp = icmp uge i8 %a, %b 175*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i8 %a, i8 %b 176*9880d681SAndroid Build Coastguard Worker store i8 %val, i8 addrspace(1)* %out, align 1 177*9880d681SAndroid Build Coastguard Worker ret void 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @v_test_umax_ugt_i32 181*9880d681SAndroid Build Coastguard Worker; SI: v_max_u32_e32 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 184*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umax_ugt_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr, i32 addrspace(1)* %bptr) nounwind { 185*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %aptr, align 4 186*9880d681SAndroid Build Coastguard Worker %b = load i32, i32 addrspace(1)* %bptr, align 4 187*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %a, %b 188*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 189*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 190*9880d681SAndroid Build Coastguard Worker ret void 191*9880d681SAndroid Build Coastguard Worker} 192*9880d681SAndroid Build Coastguard Worker 193*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_umax_ugt_i32: 194*9880d681SAndroid Build Coastguard Worker; SI: s_max_u32 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 197*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umax_ugt_i32(i32 addrspace(1)* %out, i32 %a, i32 %b) nounwind { 198*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %a, %b 199*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a, i32 %b 200*9880d681SAndroid Build Coastguard Worker store i32 %val, i32 addrspace(1)* %out, align 4 201*9880d681SAndroid Build Coastguard Worker ret void 202*9880d681SAndroid Build Coastguard Worker} 203*9880d681SAndroid Build Coastguard Worker 204*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_umax_ugt_imm_v2i32: 205*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_max_u32 {{s[0-9]+}}, {{s[0-9]+}}, 15 206*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_max_u32 {{s[0-9]+}}, {{s[0-9]+}}, 23 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT {{.*}}literal.{{[xyzw]}} 209*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT {{.*}}literal.{{[xyzw]}} 210*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umax_ugt_imm_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a) nounwind { 211*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt <2 x i32> %a, <i32 15, i32 23> 212*9880d681SAndroid Build Coastguard Worker %val = select <2 x i1> %cmp, <2 x i32> %a, <2 x i32> <i32 15, i32 23> 213*9880d681SAndroid Build Coastguard Worker store <2 x i32> %val, <2 x i32> addrspace(1)* %out, align 4 214*9880d681SAndroid Build Coastguard Worker ret void 215*9880d681SAndroid Build Coastguard Worker} 216*9880d681SAndroid Build Coastguard Worker 217*9880d681SAndroid Build Coastguard Worker; Make sure redundant and removed 218*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}simplify_demanded_bits_test_umax_ugt_i16: 219*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_load_dword [[A:s[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, 0xb 220*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_load_dword [[B:s[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, 0xc 221*9880d681SAndroid Build Coastguard Worker; SI: s_max_u32 [[MAX:s[0-9]+]], [[A]], [[B]] 222*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VMAX:v[0-9]+]], [[MAX]] 223*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VMAX]] 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 226*9880d681SAndroid Build Coastguard Workerdefine void @simplify_demanded_bits_test_umax_ugt_i16(i32 addrspace(1)* %out, i16 zeroext %a, i16 zeroext %b) nounwind { 227*9880d681SAndroid Build Coastguard Worker %a.ext = zext i16 %a to i32 228*9880d681SAndroid Build Coastguard Worker %b.ext = zext i16 %b to i32 229*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %a.ext, %b.ext 230*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a.ext, i32 %b.ext 231*9880d681SAndroid Build Coastguard Worker %mask = and i32 %val, 65535 232*9880d681SAndroid Build Coastguard Worker store i32 %mask, i32 addrspace(1)* %out 233*9880d681SAndroid Build Coastguard Worker ret void 234*9880d681SAndroid Build Coastguard Worker} 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Worker; Make sure redundant sign_extend_inreg removed. 237*9880d681SAndroid Build Coastguard Worker 238*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}simplify_demanded_bits_test_max_slt_i16: 239*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_load_dword [[A:s[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, 0xb 240*9880d681SAndroid Build Coastguard Worker; SI-DAG: s_load_dword [[B:s[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, 0xc 241*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 [[MAX:s[0-9]+]], [[A]], [[B]] 242*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VMAX:v[0-9]+]], [[MAX]] 243*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VMAX]] 244*9880d681SAndroid Build Coastguard Worker 245*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 246*9880d681SAndroid Build Coastguard Workerdefine void @simplify_demanded_bits_test_max_slt_i16(i32 addrspace(1)* %out, i16 signext %a, i16 signext %b) nounwind { 247*9880d681SAndroid Build Coastguard Worker %a.ext = sext i16 %a to i32 248*9880d681SAndroid Build Coastguard Worker %b.ext = sext i16 %b to i32 249*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i32 %a.ext, %b.ext 250*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i32 %a.ext, i32 %b.ext 251*9880d681SAndroid Build Coastguard Worker %shl = shl i32 %val, 16 252*9880d681SAndroid Build Coastguard Worker %sextinreg = ashr i32 %shl, 16 253*9880d681SAndroid Build Coastguard Worker store i32 %sextinreg, i32 addrspace(1)* %out 254*9880d681SAndroid Build Coastguard Worker ret void 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}s_test_imax_sge_i16: 258*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword 259*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword 260*9880d681SAndroid Build Coastguard Worker; SI: s_sext_i32_i16 261*9880d681SAndroid Build Coastguard Worker; SI: s_sext_i32_i16 262*9880d681SAndroid Build Coastguard Worker; SI: s_max_i32 263*9880d681SAndroid Build Coastguard Worker 264*9880d681SAndroid Build Coastguard Worker; EG: MAX_INT 265*9880d681SAndroid Build Coastguard Workerdefine void @s_test_imax_sge_i16(i16 addrspace(1)* %out, i16 %a, i16 %b) nounwind { 266*9880d681SAndroid Build Coastguard Worker %cmp = icmp sge i16 %a, %b 267*9880d681SAndroid Build Coastguard Worker %val = select i1 %cmp, i16 %a, i16 %b 268*9880d681SAndroid Build Coastguard Worker store i16 %val, i16 addrspace(1)* %out 269*9880d681SAndroid Build Coastguard Worker ret void 270*9880d681SAndroid Build Coastguard Worker} 271*9880d681SAndroid Build Coastguard Worker 272*9880d681SAndroid Build Coastguard Worker; 64 bit 273*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_umax_ugt_i64 274*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 277*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 278*9880d681SAndroid Build Coastguard Workerdefine void @test_umax_ugt_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) nounwind { 279*9880d681SAndroid Build Coastguard Worker %tmp = icmp ugt i64 %a, %b 280*9880d681SAndroid Build Coastguard Worker %val = select i1 %tmp, i64 %a, i64 %b 281*9880d681SAndroid Build Coastguard Worker store i64 %val, i64 addrspace(1)* %out, align 8 282*9880d681SAndroid Build Coastguard Worker ret void 283*9880d681SAndroid Build Coastguard Worker} 284*9880d681SAndroid Build Coastguard Worker 285*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_umax_uge_i64 286*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 287*9880d681SAndroid Build Coastguard Worker 288*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 289*9880d681SAndroid Build Coastguard Worker; EG: MAX_UINT 290*9880d681SAndroid Build Coastguard Workerdefine void @test_umax_uge_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) nounwind { 291*9880d681SAndroid Build Coastguard Worker %tmp = icmp uge i64 %a, %b 292*9880d681SAndroid Build Coastguard Worker %val = select i1 %tmp, i64 %a, i64 %b 293*9880d681SAndroid Build Coastguard Worker store i64 %val, i64 addrspace(1)* %out, align 8 294*9880d681SAndroid Build Coastguard Worker ret void 295*9880d681SAndroid Build Coastguard Worker} 296*9880d681SAndroid Build Coastguard Worker 297*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_imax_sgt_i64 298*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 299*9880d681SAndroid Build Coastguard Worker 300*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_UINT 301*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_INT 302*9880d681SAndroid Build Coastguard Workerdefine void @test_imax_sgt_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) nounwind { 303*9880d681SAndroid Build Coastguard Worker %tmp = icmp sgt i64 %a, %b 304*9880d681SAndroid Build Coastguard Worker %val = select i1 %tmp, i64 %a, i64 %b 305*9880d681SAndroid Build Coastguard Worker store i64 %val, i64 addrspace(1)* %out, align 8 306*9880d681SAndroid Build Coastguard Worker ret void 307*9880d681SAndroid Build Coastguard Worker} 308*9880d681SAndroid Build Coastguard Worker 309*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}test_imax_sge_i64 310*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_UINT 313*9880d681SAndroid Build Coastguard Worker; EG-DAG: MAX_INT 314*9880d681SAndroid Build Coastguard Workerdefine void @test_imax_sge_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) nounwind { 315*9880d681SAndroid Build Coastguard Worker %tmp = icmp sge i64 %a, %b 316*9880d681SAndroid Build Coastguard Worker %val = select i1 %tmp, i64 %a, i64 %b 317*9880d681SAndroid Build Coastguard Worker store i64 %val, i64 addrspace(1)* %out, align 8 318*9880d681SAndroid Build Coastguard Worker ret void 319*9880d681SAndroid Build Coastguard Worker} 320