1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=SI -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood -show-mc-encoding -verify-machineinstrs < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.AMDGPU.bfe.i32(i32, i32, i32) nounwind readnone 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_arg_arg_arg: 8*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 9*9880d681SAndroid Build Coastguard Worker; EG: BFE_INT 10*9880d681SAndroid Build Coastguard Worker; EG: encoding: [{{[x0-9a-f]+,[x0-9a-f]+,[x0-9a-f]+,[x0-9a-f]+,[x0-9a-f]+}},0xac 11*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_arg_arg_arg(i32 addrspace(1)* %out, i32 %src0, i32 %src1, i32 %src2) nounwind { 12*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 %src1, i32 %src1) nounwind readnone 13*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 14*9880d681SAndroid Build Coastguard Worker ret void 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_arg_arg_imm: 18*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 19*9880d681SAndroid Build Coastguard Worker; EG: BFE_INT 20*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_arg_arg_imm(i32 addrspace(1)* %out, i32 %src0, i32 %src1) nounwind { 21*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 %src1, i32 123) nounwind readnone 22*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 23*9880d681SAndroid Build Coastguard Worker ret void 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_arg_imm_arg: 27*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 28*9880d681SAndroid Build Coastguard Worker; EG: BFE_INT 29*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_arg_imm_arg(i32 addrspace(1)* %out, i32 %src0, i32 %src2) nounwind { 30*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 123, i32 %src2) nounwind readnone 31*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_imm_arg_arg: 36*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 37*9880d681SAndroid Build Coastguard Worker; EG: BFE_INT 38*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_imm_arg_arg(i32 addrspace(1)* %out, i32 %src1, i32 %src2) nounwind { 39*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 123, i32 %src1, i32 %src2) nounwind readnone 40*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}v_bfe_print_arg: 45*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 2, 8 46*9880d681SAndroid Build Coastguard Workerdefine void @v_bfe_print_arg(i32 addrspace(1)* %out, i32 addrspace(1)* %src0) nounwind { 47*9880d681SAndroid Build Coastguard Worker %load = load i32, i32 addrspace(1)* %src0, align 4 48*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %load, i32 2, i32 8) nounwind readnone 49*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_arg_0_width_reg_offset: 54*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 55*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 56*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 57*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_arg_0_width_reg_offset(i32 addrspace(1)* %out, i32 %src0, i32 %src1) nounwind { 58*9880d681SAndroid Build Coastguard Worker %bfe_u32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 %src1, i32 0) nounwind readnone 59*9880d681SAndroid Build Coastguard Worker store i32 %bfe_u32, i32 addrspace(1)* %out, align 4 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_arg_0_width_imm_offset: 64*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 65*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 66*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 67*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_arg_0_width_imm_offset(i32 addrspace(1)* %out, i32 %src0, i32 %src1) nounwind { 68*9880d681SAndroid Build Coastguard Worker %bfe_u32 = call i32 @llvm.AMDGPU.bfe.i32(i32 %src0, i32 8, i32 0) nounwind readnone 69*9880d681SAndroid Build Coastguard Worker store i32 %bfe_u32, i32 addrspace(1)* %out, align 4 70*9880d681SAndroid Build Coastguard Worker ret void 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_test_6: 74*9880d681SAndroid Build Coastguard Worker; SI: v_lshlrev_b32_e32 v{{[0-9]+}}, 31, v{{[0-9]+}} 75*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 1, v{{[0-9]+}} 76*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 77*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_6(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 78*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 79*9880d681SAndroid Build Coastguard Worker %shl = shl i32 %x, 31 80*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 1, i32 31) 81*9880d681SAndroid Build Coastguard Worker store i32 %bfe, i32 addrspace(1)* %out, align 4 82*9880d681SAndroid Build Coastguard Worker ret void 83*9880d681SAndroid Build Coastguard Worker} 84*9880d681SAndroid Build Coastguard Worker 85*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_test_7: 86*9880d681SAndroid Build Coastguard Worker; SI-NOT: shl 87*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 88*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 89*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 90*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 91*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_7(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 92*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 93*9880d681SAndroid Build Coastguard Worker %shl = shl i32 %x, 31 94*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 0, i32 31) 95*9880d681SAndroid Build Coastguard Worker store i32 %bfe, 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: {{^}}bfe_i32_test_8: 100*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword 101*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 v{{[0-9]+}}, v{{[0-9]+}}, 0, 1 102*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 103*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_8(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 104*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 105*9880d681SAndroid Build Coastguard Worker %shl = shl i32 %x, 31 106*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 31, i32 1) 107*9880d681SAndroid Build Coastguard Worker store i32 %bfe, i32 addrspace(1)* %out, align 4 108*9880d681SAndroid Build Coastguard Worker ret void 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_test_9: 112*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 113*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 31, v{{[0-9]+}} 114*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 115*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 116*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_9(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 117*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 118*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 31, i32 1) 119*9880d681SAndroid Build Coastguard Worker store i32 %bfe, 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: {{^}}bfe_i32_test_10: 124*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 125*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 1, v{{[0-9]+}} 126*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 127*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 128*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_10(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 129*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 130*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 1, i32 31) 131*9880d681SAndroid Build Coastguard Worker store i32 %bfe, i32 addrspace(1)* %out, align 4 132*9880d681SAndroid Build Coastguard Worker ret void 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_test_11: 136*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 137*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 8, v{{[0-9]+}} 138*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 139*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 140*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_11(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 141*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 142*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 8, i32 24) 143*9880d681SAndroid Build Coastguard Worker store i32 %bfe, 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: {{^}}bfe_i32_test_12: 148*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 149*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 v{{[0-9]+}}, 24, v{{[0-9]+}} 150*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 151*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 152*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_12(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 153*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 154*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 24, i32 8) 155*9880d681SAndroid Build Coastguard Worker store i32 %bfe, i32 addrspace(1)* %out, align 4 156*9880d681SAndroid Build Coastguard Worker ret void 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_test_13: 160*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 {{v[0-9]+}}, 31, {{v[0-9]+}} 161*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 162*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 163*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_13(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 164*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 165*9880d681SAndroid Build Coastguard Worker %shl = ashr i32 %x, 31 166*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 31, i32 1) 167*9880d681SAndroid Build Coastguard Worker store i32 %bfe, i32 addrspace(1)* %out, align 4 ret void 168*9880d681SAndroid Build Coastguard Worker} 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_test_14: 171*9880d681SAndroid Build Coastguard Worker; SI-NOT: lshr 172*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 173*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 174*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_test_14(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 175*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 176*9880d681SAndroid Build Coastguard Worker %shl = lshr i32 %x, 31 177*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %shl, i32 31, i32 1) 178*9880d681SAndroid Build Coastguard Worker store i32 %bfe, i32 addrspace(1)* %out, align 4 ret void 179*9880d681SAndroid Build Coastguard Worker} 180*9880d681SAndroid Build Coastguard Worker 181*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_0: 182*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 183*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 184*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 185*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 186*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 187*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_0(i32 addrspace(1)* %out) nounwind { 188*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 0, i32 0, i32 0) nounwind readnone 189*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, 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: {{^}}bfe_i32_constant_fold_test_1: 194*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 195*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 196*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 197*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 198*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 199*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_1(i32 addrspace(1)* %out) nounwind { 200*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 12334, i32 0, i32 0) nounwind readnone 201*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 202*9880d681SAndroid Build Coastguard Worker ret void 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_2: 206*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 207*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 208*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 209*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 210*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 211*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_2(i32 addrspace(1)* %out) nounwind { 212*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 0, i32 0, i32 1) nounwind readnone 213*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, 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; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_3: 218*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 219*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1 220*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 221*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 222*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 223*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_3(i32 addrspace(1)* %out) nounwind { 224*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 1, i32 0, i32 1) nounwind readnone 225*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 226*9880d681SAndroid Build Coastguard Worker ret void 227*9880d681SAndroid Build Coastguard Worker} 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_4: 230*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 231*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1 232*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 233*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 234*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 235*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_4(i32 addrspace(1)* %out) nounwind { 236*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 4294967295, i32 0, i32 1) nounwind readnone 237*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 238*9880d681SAndroid Build Coastguard Worker ret void 239*9880d681SAndroid Build Coastguard Worker} 240*9880d681SAndroid Build Coastguard Worker 241*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_5: 242*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 243*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1 244*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 245*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 246*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 247*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_5(i32 addrspace(1)* %out) nounwind { 248*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 128, i32 7, i32 1) nounwind readnone 249*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 250*9880d681SAndroid Build Coastguard Worker ret void 251*9880d681SAndroid Build Coastguard Worker} 252*9880d681SAndroid Build Coastguard Worker 253*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_6: 254*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 255*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0xffffff80 256*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 257*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 258*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 259*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_6(i32 addrspace(1)* %out) nounwind { 260*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 128, i32 0, i32 8) nounwind readnone 261*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 262*9880d681SAndroid Build Coastguard Worker ret void 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_7: 266*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 267*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0x7f 268*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 269*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 270*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 271*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_7(i32 addrspace(1)* %out) nounwind { 272*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 127, i32 0, i32 8) nounwind readnone 273*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 274*9880d681SAndroid Build Coastguard Worker ret void 275*9880d681SAndroid Build Coastguard Worker} 276*9880d681SAndroid Build Coastguard Worker 277*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_8: 278*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 279*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 1 280*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 281*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 282*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 283*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_8(i32 addrspace(1)* %out) nounwind { 284*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 127, i32 6, i32 8) nounwind readnone 285*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 286*9880d681SAndroid Build Coastguard Worker ret void 287*9880d681SAndroid Build Coastguard Worker} 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_9: 290*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 291*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 1 292*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 293*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 294*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 295*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_9(i32 addrspace(1)* %out) nounwind { 296*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 65536, i32 16, i32 8) nounwind readnone 297*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 298*9880d681SAndroid Build Coastguard Worker ret void 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_10: 302*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 303*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 304*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 305*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 306*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 307*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_10(i32 addrspace(1)* %out) nounwind { 308*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 65535, i32 16, i32 16) nounwind readnone 309*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 310*9880d681SAndroid Build Coastguard Worker ret void 311*9880d681SAndroid Build Coastguard Worker} 312*9880d681SAndroid Build Coastguard Worker 313*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_11: 314*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 315*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -6 316*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 317*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 318*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 319*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_11(i32 addrspace(1)* %out) nounwind { 320*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 4, i32 4) nounwind readnone 321*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 322*9880d681SAndroid Build Coastguard Worker ret void 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_12: 326*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 327*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 328*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 329*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 330*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 331*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_12(i32 addrspace(1)* %out) nounwind { 332*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 31, i32 1) nounwind readnone 333*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 334*9880d681SAndroid Build Coastguard Worker ret void 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_13: 338*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 339*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 1 340*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 341*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 342*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 343*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_13(i32 addrspace(1)* %out) nounwind { 344*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 131070, i32 16, i32 16) nounwind readnone 345*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 346*9880d681SAndroid Build Coastguard Worker ret void 347*9880d681SAndroid Build Coastguard Worker} 348*9880d681SAndroid Build Coastguard Worker 349*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_14: 350*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 351*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 40 352*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 353*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 354*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 355*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_14(i32 addrspace(1)* %out) nounwind { 356*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 2, i32 30) nounwind readnone 357*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 358*9880d681SAndroid Build Coastguard Worker ret void 359*9880d681SAndroid Build Coastguard Worker} 360*9880d681SAndroid Build Coastguard Worker 361*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_15: 362*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 363*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 10 364*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 365*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 366*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 367*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_15(i32 addrspace(1)* %out) nounwind { 368*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 160, i32 4, i32 28) nounwind readnone 369*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 370*9880d681SAndroid Build Coastguard Worker ret void 371*9880d681SAndroid Build Coastguard Worker} 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_16: 374*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 375*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], -1 376*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 377*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 378*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 379*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_16(i32 addrspace(1)* %out) nounwind { 380*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 4294967295, i32 1, i32 7) nounwind readnone 381*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 382*9880d681SAndroid Build Coastguard Worker ret void 383*9880d681SAndroid Build Coastguard Worker} 384*9880d681SAndroid Build Coastguard Worker 385*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_17: 386*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 387*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0x7f 388*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 389*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 390*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 391*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_17(i32 addrspace(1)* %out) nounwind { 392*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 255, i32 1, i32 31) nounwind readnone 393*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 394*9880d681SAndroid Build Coastguard Worker ret void 395*9880d681SAndroid Build Coastguard Worker} 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_i32_constant_fold_test_18: 398*9880d681SAndroid Build Coastguard Worker; SI-NOT: {{[^@]}}bfe 399*9880d681SAndroid Build Coastguard Worker; SI: v_mov_b32_e32 [[VREG:v[0-9]+]], 0 400*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[VREG]], 401*9880d681SAndroid Build Coastguard Worker; SI: s_endpgm 402*9880d681SAndroid Build Coastguard Worker; EG-NOT: BFE 403*9880d681SAndroid Build Coastguard Workerdefine void @bfe_i32_constant_fold_test_18(i32 addrspace(1)* %out) nounwind { 404*9880d681SAndroid Build Coastguard Worker %bfe_i32 = call i32 @llvm.AMDGPU.bfe.i32(i32 255, i32 31, i32 1) nounwind readnone 405*9880d681SAndroid Build Coastguard Worker store i32 %bfe_i32, i32 addrspace(1)* %out, align 4 406*9880d681SAndroid Build Coastguard Worker ret void 407*9880d681SAndroid Build Coastguard Worker} 408*9880d681SAndroid Build Coastguard Worker 409*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}bfe_sext_in_reg_i24: 410*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[LOAD:v[0-9]+]], 411*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_lshl 412*9880d681SAndroid Build Coastguard Worker; SI-NOT: v_ashr 413*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 [[BFE:v[0-9]+]], [[LOAD]], 0, 24 414*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[BFE]], 415*9880d681SAndroid Build Coastguard Workerdefine void @bfe_sext_in_reg_i24(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 416*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %in, align 4 417*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %x, i32 0, i32 24) 418*9880d681SAndroid Build Coastguard Worker %shl = shl i32 %bfe, 8 419*9880d681SAndroid Build Coastguard Worker %ashr = ashr i32 %shl, 8 420*9880d681SAndroid Build Coastguard Worker store i32 %ashr, i32 addrspace(1)* %out, align 4 421*9880d681SAndroid Build Coastguard Worker ret void 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: @simplify_demanded_bfe_sdiv 425*9880d681SAndroid Build Coastguard Worker; SI: buffer_load_dword [[LOAD:v[0-9]+]] 426*9880d681SAndroid Build Coastguard Worker; SI: v_bfe_i32 [[BFE:v[0-9]+]], [[LOAD]], 1, 16 427*9880d681SAndroid Build Coastguard Worker; SI: v_lshrrev_b32_e32 [[TMP0:v[0-9]+]], 31, [[BFE]] 428*9880d681SAndroid Build Coastguard Worker; SI: v_add_i32_e32 [[TMP1:v[0-9]+]], vcc, [[TMP0]], [[BFE]] 429*9880d681SAndroid Build Coastguard Worker; SI: v_ashrrev_i32_e32 [[TMP2:v[0-9]+]], 1, [[TMP1]] 430*9880d681SAndroid Build Coastguard Worker; SI: buffer_store_dword [[TMP2]] 431*9880d681SAndroid Build Coastguard Workerdefine void @simplify_demanded_bfe_sdiv(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind { 432*9880d681SAndroid Build Coastguard Worker %src = load i32, i32 addrspace(1)* %in, align 4 433*9880d681SAndroid Build Coastguard Worker %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %src, i32 1, i32 16) nounwind readnone 434*9880d681SAndroid Build Coastguard Worker %div = sdiv i32 %bfe, 2 435*9880d681SAndroid Build Coastguard Worker store i32 %div, i32 addrspace(1)* %out, align 4 436*9880d681SAndroid Build Coastguard Worker ret void 437*9880d681SAndroid Build Coastguard Worker} 438