1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.r600.read.tidig.x() #0 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_test_umed3_r_i_i_i32: 7*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, v{{[0-9]+}}, 12, 17 8*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umed3_r_i_i_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) #1 { 9*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() 10*9880d681SAndroid Build Coastguard Worker %gep0 = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid 11*9880d681SAndroid Build Coastguard Worker %outgep = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 12*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %gep0 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker %icmp0 = icmp ugt i32 %a, 12 15*9880d681SAndroid Build Coastguard Worker %i0 = select i1 %icmp0, i32 %a, i32 12 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker %icmp1 = icmp ult i32 %i0, 17 18*9880d681SAndroid Build Coastguard Worker %i1 = select i1 %icmp1, i32 %i0, i32 17 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker store i32 %i1, i32 addrspace(1)* %outgep 21*9880d681SAndroid Build Coastguard Worker ret void 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_test_umed3_multi_use_r_i_i_i32: 25*9880d681SAndroid Build Coastguard Worker; GCN: v_max_u32 26*9880d681SAndroid Build Coastguard Worker; GCN: v_min_u32 27*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umed3_multi_use_r_i_i_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) #1 { 28*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() 29*9880d681SAndroid Build Coastguard Worker %gep0 = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid 30*9880d681SAndroid Build Coastguard Worker %outgep = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 31*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %gep0 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker %icmp0 = icmp ugt i32 %a, 12 34*9880d681SAndroid Build Coastguard Worker %i0 = select i1 %icmp0, i32 %a, i32 12 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker %icmp1 = icmp ult i32 %i0, 17 37*9880d681SAndroid Build Coastguard Worker %i1 = select i1 %icmp1, i32 %i0, i32 17 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker store volatile i32 %i0, i32 addrspace(1)* %outgep 40*9880d681SAndroid Build Coastguard Worker store volatile i32 %i1, i32 addrspace(1)* %outgep 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_test_umed3_r_i_i_constant_order_i32: 45*9880d681SAndroid Build Coastguard Worker; GCN: v_max_u32_e32 v{{[0-9]+}}, 17, v{{[0-9]+}} 46*9880d681SAndroid Build Coastguard Worker; GCN: v_min_u32_e32 v{{[0-9]+}}, 12, v{{[0-9]+}} 47*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umed3_r_i_i_constant_order_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) #1 { 48*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() 49*9880d681SAndroid Build Coastguard Worker %gep0 = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid 50*9880d681SAndroid Build Coastguard Worker %outgep = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 51*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %gep0 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker %icmp0 = icmp ugt i32 %a, 17 54*9880d681SAndroid Build Coastguard Worker %i0 = select i1 %icmp0, i32 %a, i32 17 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker %icmp1 = icmp ult i32 %i0, 12 57*9880d681SAndroid Build Coastguard Worker %i1 = select i1 %icmp1, i32 %i0, i32 12 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker store i32 %i1, i32 addrspace(1)* %outgep 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_test_umed3_r_i_i_sign_mismatch_i32: 64*9880d681SAndroid Build Coastguard Worker; GCN: v_max_i32_e32 v{{[0-9]+}}, 12, v{{[0-9]+}} 65*9880d681SAndroid Build Coastguard Worker; GCN: v_min_u32_e32 v{{[0-9]+}}, 17, v{{[0-9]+}} 66*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umed3_r_i_i_sign_mismatch_i32(i32 addrspace(1)* %out, i32 addrspace(1)* %aptr) #1 { 67*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() 68*9880d681SAndroid Build Coastguard Worker %gep0 = getelementptr i32, i32 addrspace(1)* %aptr, i32 %tid 69*9880d681SAndroid Build Coastguard Worker %outgep = getelementptr i32, i32 addrspace(1)* %out, i32 %tid 70*9880d681SAndroid Build Coastguard Worker %a = load i32, i32 addrspace(1)* %gep0 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker %icmp0 = icmp sgt i32 %a, 12 73*9880d681SAndroid Build Coastguard Worker %i0 = select i1 %icmp0, i32 %a, i32 12 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker %icmp1 = icmp ult i32 %i0, 17 76*9880d681SAndroid Build Coastguard Worker %i1 = select i1 %icmp1, i32 %i0, i32 17 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker store i32 %i1, i32 addrspace(1)* %outgep 79*9880d681SAndroid Build Coastguard Worker ret void 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_test_umed3_r_i_i_i64: 83*9880d681SAndroid Build Coastguard Worker; GCN: v_cmp_lt_u64 84*9880d681SAndroid Build Coastguard Worker; GCN: v_cmp_gt_u64 85*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umed3_r_i_i_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %aptr) #1 { 86*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() 87*9880d681SAndroid Build Coastguard Worker %gep0 = getelementptr i64, i64 addrspace(1)* %aptr, i32 %tid 88*9880d681SAndroid Build Coastguard Worker %outgep = getelementptr i64, i64 addrspace(1)* %out, i32 %tid 89*9880d681SAndroid Build Coastguard Worker %a = load i64, i64 addrspace(1)* %gep0 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Worker %icmp0 = icmp ugt i64 %a, 12 92*9880d681SAndroid Build Coastguard Worker %i0 = select i1 %icmp0, i64 %a, i64 12 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Worker %icmp1 = icmp ult i64 %i0, 17 95*9880d681SAndroid Build Coastguard Worker %i1 = select i1 %icmp1, i64 %i0, i64 17 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Worker store i64 %i1, i64 addrspace(1)* %outgep 98*9880d681SAndroid Build Coastguard Worker ret void 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}v_test_umed3_r_i_i_i16: 102*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, v{{[0-9]+}}, 12, 17 103*9880d681SAndroid Build Coastguard Workerdefine void @v_test_umed3_r_i_i_i16(i16 addrspace(1)* %out, i16 addrspace(1)* %aptr) #1 { 104*9880d681SAndroid Build Coastguard Worker %tid = call i32 @llvm.r600.read.tidig.x() 105*9880d681SAndroid Build Coastguard Worker %gep0 = getelementptr i16, i16 addrspace(1)* %aptr, i32 %tid 106*9880d681SAndroid Build Coastguard Worker %outgep = getelementptr i16, i16 addrspace(1)* %out, i32 %tid 107*9880d681SAndroid Build Coastguard Worker %a = load i16, i16 addrspace(1)* %gep0 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker %icmp0 = icmp ugt i16 %a, 12 110*9880d681SAndroid Build Coastguard Worker %i0 = select i1 %icmp0, i16 %a, i16 12 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker %icmp1 = icmp ult i16 %i0, 17 113*9880d681SAndroid Build Coastguard Worker %i1 = select i1 %icmp1, i16 %i0, i16 17 114*9880d681SAndroid Build Coastguard Worker 115*9880d681SAndroid Build Coastguard Worker store i16 %i1, i16 addrspace(1)* %outgep 116*9880d681SAndroid Build Coastguard Worker ret void 117*9880d681SAndroid Build Coastguard Worker} 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Workerdefine internal i32 @umin(i32 %x, i32 %y) #2 { 120*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i32 %x, %y 121*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp, i32 %x, i32 %y 122*9880d681SAndroid Build Coastguard Worker ret i32 %sel 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Workerdefine internal i32 @umax(i32 %x, i32 %y) #2 { 126*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i32 %x, %y 127*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp, i32 %x, i32 %y 128*9880d681SAndroid Build Coastguard Worker ret i32 %sel 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Workerdefine internal i16 @umin16(i16 %x, i16 %y) #2 { 132*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i16 %x, %y 133*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp, i16 %x, i16 %y 134*9880d681SAndroid Build Coastguard Worker ret i16 %sel 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Workerdefine internal i16 @umax16(i16 %x, i16 %y) #2 { 138*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i16 %x, %y 139*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp, i16 %x, i16 %y 140*9880d681SAndroid Build Coastguard Worker ret i16 %sel 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine internal i8 @umin8(i8 %x, i8 %y) #2 { 144*9880d681SAndroid Build Coastguard Worker %cmp = icmp ult i8 %x, %y 145*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp, i8 %x, i8 %y 146*9880d681SAndroid Build Coastguard Worker ret i8 %sel 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Workerdefine internal i8 @umax8(i8 %x, i8 %y) #2 { 150*9880d681SAndroid Build Coastguard Worker %cmp = icmp ugt i8 %x, %y 151*9880d681SAndroid Build Coastguard Worker %sel = select i1 %cmp, i8 %x, i8 %y 152*9880d681SAndroid Build Coastguard Worker ret i8 %sel 153*9880d681SAndroid Build Coastguard Worker} 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker; 16 combinations 156*9880d681SAndroid Build Coastguard Worker 157*9880d681SAndroid Build Coastguard Worker; 0: max(min(x, y), min(max(x, y), z)) 158*9880d681SAndroid Build Coastguard Worker; 1: max(min(x, y), min(max(y, x), z)) 159*9880d681SAndroid Build Coastguard Worker; 2: max(min(x, y), min(z, max(x, y))) 160*9880d681SAndroid Build Coastguard Worker; 3: max(min(x, y), min(z, max(y, x))) 161*9880d681SAndroid Build Coastguard Worker; 4: max(min(y, x), min(max(x, y), z)) 162*9880d681SAndroid Build Coastguard Worker; 5: max(min(y, x), min(max(y, x), z)) 163*9880d681SAndroid Build Coastguard Worker; 6: max(min(y, x), min(z, max(x, y))) 164*9880d681SAndroid Build Coastguard Worker; 7: max(min(y, x), min(z, max(y, x))) 165*9880d681SAndroid Build Coastguard Worker; 166*9880d681SAndroid Build Coastguard Worker; + commute outermost max 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker; FIXME: In these cases we probably should have used scalar operations 170*9880d681SAndroid Build Coastguard Worker; instead. 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0: 173*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 174*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 175*9880d681SAndroid Build Coastguard Workerbb: 176*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 177*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 178*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 179*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 180*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 181*9880d681SAndroid Build Coastguard Worker ret void 182*9880d681SAndroid Build Coastguard Worker} 183*9880d681SAndroid Build Coastguard Worker 184*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_1: 185*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 186*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_1(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 187*9880d681SAndroid Build Coastguard Workerbb: 188*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 189*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 190*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 191*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 192*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 193*9880d681SAndroid Build Coastguard Worker ret void 194*9880d681SAndroid Build Coastguard Worker} 195*9880d681SAndroid Build Coastguard Worker 196*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_2: 197*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 198*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_2(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 199*9880d681SAndroid Build Coastguard Workerbb: 200*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 201*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 202*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 203*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 204*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 205*9880d681SAndroid Build Coastguard Worker ret void 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_3: 209*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 210*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_3(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 211*9880d681SAndroid Build Coastguard Workerbb: 212*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 213*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 214*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 215*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 216*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 217*9880d681SAndroid Build Coastguard Worker ret void 218*9880d681SAndroid Build Coastguard Worker} 219*9880d681SAndroid Build Coastguard Worker 220*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_4: 221*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 222*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_4(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 223*9880d681SAndroid Build Coastguard Workerbb: 224*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 225*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 226*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 227*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 228*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 229*9880d681SAndroid Build Coastguard Worker ret void 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_5: 233*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 234*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_5(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 235*9880d681SAndroid Build Coastguard Workerbb: 236*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 237*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 238*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 239*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 240*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 241*9880d681SAndroid Build Coastguard Worker ret void 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_6: 245*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 246*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_6(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 247*9880d681SAndroid Build Coastguard Workerbb: 248*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 249*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 250*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 251*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 252*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 253*9880d681SAndroid Build Coastguard Worker ret void 254*9880d681SAndroid Build Coastguard Worker} 255*9880d681SAndroid Build Coastguard Worker 256*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_7: 257*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 258*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_7(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 259*9880d681SAndroid Build Coastguard Workerbb: 260*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 261*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 262*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 263*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 264*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 265*9880d681SAndroid Build Coastguard Worker ret void 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_8: 269*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 270*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_8(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 271*9880d681SAndroid Build Coastguard Workerbb: 272*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 273*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 274*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 275*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 276*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 277*9880d681SAndroid Build Coastguard Worker ret void 278*9880d681SAndroid Build Coastguard Worker} 279*9880d681SAndroid Build Coastguard Worker 280*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_9: 281*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 282*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_9(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 283*9880d681SAndroid Build Coastguard Workerbb: 284*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 285*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 286*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 287*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 288*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 289*9880d681SAndroid Build Coastguard Worker ret void 290*9880d681SAndroid Build Coastguard Worker} 291*9880d681SAndroid Build Coastguard Worker 292*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_10: 293*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 294*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_10(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 295*9880d681SAndroid Build Coastguard Workerbb: 296*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 297*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 298*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 299*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 300*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 301*9880d681SAndroid Build Coastguard Worker ret void 302*9880d681SAndroid Build Coastguard Worker} 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_11: 305*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 306*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_11(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 307*9880d681SAndroid Build Coastguard Workerbb: 308*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 309*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 310*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 311*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 312*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 313*9880d681SAndroid Build Coastguard Worker ret void 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_12: 317*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 318*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_12(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 319*9880d681SAndroid Build Coastguard Workerbb: 320*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 321*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 322*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 323*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 324*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 325*9880d681SAndroid Build Coastguard Worker ret void 326*9880d681SAndroid Build Coastguard Worker} 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_13: 329*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 330*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_13(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 331*9880d681SAndroid Build Coastguard Workerbb: 332*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 333*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 334*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 335*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 336*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 337*9880d681SAndroid Build Coastguard Worker ret void 338*9880d681SAndroid Build Coastguard Worker} 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_14: 341*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 342*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_14(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 343*9880d681SAndroid Build Coastguard Workerbb: 344*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 345*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 346*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 347*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 348*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 349*9880d681SAndroid Build Coastguard Worker ret void 350*9880d681SAndroid Build Coastguard Worker} 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_15: 353*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 354*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_15(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 355*9880d681SAndroid Build Coastguard Workerbb: 356*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %y, i32 %x) 357*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %y, i32 %x) 358*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %z, i32 %tmp1) 359*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp2, i32 %tmp0) 360*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 361*9880d681SAndroid Build Coastguard Worker ret void 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i16_pat_0: 365*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 366*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 367*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 368*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 369*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i16_pat_0(i16 addrspace(1)* %arg, i16 %x, i16 %y, i16 %z) #1 { 370*9880d681SAndroid Build Coastguard Workerbb: 371*9880d681SAndroid Build Coastguard Worker %tmp0 = call i16 @umin16(i16 %x, i16 %y) 372*9880d681SAndroid Build Coastguard Worker %tmp1 = call i16 @umax16(i16 %x, i16 %y) 373*9880d681SAndroid Build Coastguard Worker %tmp2 = call i16 @umin16(i16 %tmp1, i16 %z) 374*9880d681SAndroid Build Coastguard Worker %tmp3 = call i16 @umax16(i16 %tmp0, i16 %tmp2) 375*9880d681SAndroid Build Coastguard Worker store i16 %tmp3, i16 addrspace(1)* %arg 376*9880d681SAndroid Build Coastguard Worker ret void 377*9880d681SAndroid Build Coastguard Worker} 378*9880d681SAndroid Build Coastguard Worker 379*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i8_pat_0: 380*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 381*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 382*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b32 383*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 384*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i8_pat_0(i8 addrspace(1)* %arg, i8 %x, i8 %y, i8 %z) #1 { 385*9880d681SAndroid Build Coastguard Workerbb: 386*9880d681SAndroid Build Coastguard Worker %tmp0 = call i8 @umin8(i8 %x, i8 %y) 387*9880d681SAndroid Build Coastguard Worker %tmp1 = call i8 @umax8(i8 %x, i8 %y) 388*9880d681SAndroid Build Coastguard Worker %tmp2 = call i8 @umin8(i8 %tmp1, i8 %z) 389*9880d681SAndroid Build Coastguard Worker %tmp3 = call i8 @umax8(i8 %tmp0, i8 %tmp2) 390*9880d681SAndroid Build Coastguard Worker store i8 %tmp3, i8 addrspace(1)* %arg 391*9880d681SAndroid Build Coastguard Worker ret void 392*9880d681SAndroid Build Coastguard Worker} 393*9880d681SAndroid Build Coastguard Worker 394*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_multi_use_0: 395*9880d681SAndroid Build Coastguard Worker; GCN-NOT: v_med3_u32 396*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_multi_use_0(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 397*9880d681SAndroid Build Coastguard Workerbb: 398*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 399*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 400*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 401*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 402*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp0, i32 addrspace(1)* %arg 403*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp3, i32 addrspace(1)* %arg 404*9880d681SAndroid Build Coastguard Worker ret void 405*9880d681SAndroid Build Coastguard Worker} 406*9880d681SAndroid Build Coastguard Worker 407*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_multi_use_1: 408*9880d681SAndroid Build Coastguard Worker; GCN-NOT: v_med3_u32 409*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_multi_use_1(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 410*9880d681SAndroid Build Coastguard Workerbb: 411*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 412*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 413*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 414*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 415*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp1, i32 addrspace(1)* %arg 416*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp3, i32 addrspace(1)* %arg 417*9880d681SAndroid Build Coastguard Worker ret void 418*9880d681SAndroid Build Coastguard Worker} 419*9880d681SAndroid Build Coastguard Worker 420*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_multi_use_2: 421*9880d681SAndroid Build Coastguard Worker; GCN-NOT: v_med3_u32 422*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_multi_use_2(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 423*9880d681SAndroid Build Coastguard Workerbb: 424*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 425*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 426*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 427*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 428*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp2, i32 addrspace(1)* %arg 429*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp3, i32 addrspace(1)* %arg 430*9880d681SAndroid Build Coastguard Worker ret void 431*9880d681SAndroid Build Coastguard Worker} 432*9880d681SAndroid Build Coastguard Worker 433*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_multi_use_result: 434*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} 435*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_multi_use_result(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 436*9880d681SAndroid Build Coastguard Workerbb: 437*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 438*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 439*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 440*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 441*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp3, i32 addrspace(1)* %arg 442*9880d681SAndroid Build Coastguard Worker store volatile i32 %tmp3, i32 addrspace(1)* %arg 443*9880d681SAndroid Build Coastguard Worker ret void 444*9880d681SAndroid Build Coastguard Worker} 445*9880d681SAndroid Build Coastguard Worker 446*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_imm_src0: 447*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, 1, v{{[0-9]+}} 448*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_imm_src0(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 449*9880d681SAndroid Build Coastguard Workerbb: 450*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 1, i32 %y) 451*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 1, i32 %y) 452*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 453*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 454*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 455*9880d681SAndroid Build Coastguard Worker ret void 456*9880d681SAndroid Build Coastguard Worker} 457*9880d681SAndroid Build Coastguard Worker 458*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_imm_src1: 459*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, 2, v{{[0-9]+}} 460*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_imm_src1(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 461*9880d681SAndroid Build Coastguard Workerbb: 462*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 2) 463*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 2) 464*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 %z) 465*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 466*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 467*9880d681SAndroid Build Coastguard Worker ret void 468*9880d681SAndroid Build Coastguard Worker} 469*9880d681SAndroid Build Coastguard Worker 470*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_test_umed3_i32_pat_0_imm_src2: 471*9880d681SAndroid Build Coastguard Worker; GCN: v_med3_u32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, 9 472*9880d681SAndroid Build Coastguard Workerdefine void @s_test_umed3_i32_pat_0_imm_src2(i32 addrspace(1)* %arg, i32 %x, i32 %y, i32 %z) #1 { 473*9880d681SAndroid Build Coastguard Workerbb: 474*9880d681SAndroid Build Coastguard Worker %tmp0 = call i32 @umin(i32 %x, i32 %y) 475*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @umax(i32 %x, i32 %y) 476*9880d681SAndroid Build Coastguard Worker %tmp2 = call i32 @umin(i32 %tmp1, i32 9) 477*9880d681SAndroid Build Coastguard Worker %tmp3 = call i32 @umax(i32 %tmp0, i32 %tmp2) 478*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %arg 479*9880d681SAndroid Build Coastguard Worker ret void 480*9880d681SAndroid Build Coastguard Worker} 481*9880d681SAndroid Build Coastguard Worker 482*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 483*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind } 484*9880d681SAndroid Build Coastguard Workerattributes #2 = { nounwind readnone alwaysinline } 485