1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=SI %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=GCN-NOHSA -check-prefix=CI %s 3*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=bonaire -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=CI --check-prefix=GCN-HSA %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.amdgcn.workitem.id.x() #0 6*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.amdgcn.workitem.id.y() #0 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; In this test both the pointer and the offset operands to the 9*9880d681SAndroid Build Coastguard Worker; BUFFER_LOAD instructions end up being stored in vgprs. This 10*9880d681SAndroid Build Coastguard Worker; requires us to add the pointer and offset together, store the 11*9880d681SAndroid Build Coastguard Worker; result in the offset operand (vaddr), and then store 0 in an 12*9880d681SAndroid Build Coastguard Worker; sgpr register pair and use that for the pointer operand 13*9880d681SAndroid Build Coastguard Worker; (low 64-bits of srsrc). 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}mubuf: 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Worker; Make sure we aren't using VGPRs for the source operand of s_mov_b64 18*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_mov_b64 s[{{[0-9]+:[0-9]+}}], v 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; Make sure we aren't using VGPR's for the srsrc operand of BUFFER_LOAD_* 21*9880d681SAndroid Build Coastguard Worker; instructions 22*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}}], s[{{[0-9]+:[0-9]+}}], 0 addr64 23*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_ubyte v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}}], s[{{[0-9]+:[0-9]+}}], 0 addr64 24*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_ubyte v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}} 25*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_ubyte v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerdefine void @mubuf(i32 addrspace(1)* %out, i8 addrspace(1)* %in) #1 { 28*9880d681SAndroid Build Coastguard Workerentry: 29*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 30*9880d681SAndroid Build Coastguard Worker %tmp1 = call i32 @llvm.amdgcn.workitem.id.y() 31*9880d681SAndroid Build Coastguard Worker %tmp2 = sext i32 %tmp to i64 32*9880d681SAndroid Build Coastguard Worker %tmp3 = sext i32 %tmp1 to i64 33*9880d681SAndroid Build Coastguard Worker br label %loop 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerloop: ; preds = %loop, %entry 36*9880d681SAndroid Build Coastguard Worker %tmp4 = phi i64 [ 0, %entry ], [ %tmp5, %loop ] 37*9880d681SAndroid Build Coastguard Worker %tmp5 = add i64 %tmp2, %tmp4 38*9880d681SAndroid Build Coastguard Worker %tmp6 = getelementptr i8, i8 addrspace(1)* %in, i64 %tmp5 39*9880d681SAndroid Build Coastguard Worker %tmp7 = load i8, i8 addrspace(1)* %tmp6, align 1 40*9880d681SAndroid Build Coastguard Worker %tmp8 = or i64 %tmp5, 1 41*9880d681SAndroid Build Coastguard Worker %tmp9 = getelementptr i8, i8 addrspace(1)* %in, i64 %tmp8 42*9880d681SAndroid Build Coastguard Worker %tmp10 = load i8, i8 addrspace(1)* %tmp9, align 1 43*9880d681SAndroid Build Coastguard Worker %tmp11 = add i8 %tmp7, %tmp10 44*9880d681SAndroid Build Coastguard Worker %tmp12 = sext i8 %tmp11 to i32 45*9880d681SAndroid Build Coastguard Worker store i32 %tmp12, i32 addrspace(1)* %out 46*9880d681SAndroid Build Coastguard Worker %tmp13 = icmp slt i64 %tmp5, 10 47*9880d681SAndroid Build Coastguard Worker br i1 %tmp13, label %loop, label %done 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerdone: ; preds = %loop 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Worker; Test moving an SMRD instruction to the VALU 54*9880d681SAndroid Build Coastguard Worker; FIXME: movs can be moved before nop to reduce count 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu: 57*9880d681SAndroid Build Coastguard Worker; SI: s_movk_i32 [[OFFSET:s[0-9]+]], 0x2ee0 58*9880d681SAndroid Build Coastguard Worker; GCN: v_readfirstlane_b32 s[[PTR_LO:[0-9]+]], v{{[0-9]+}} 59*9880d681SAndroid Build Coastguard Worker; GCN: v_readfirstlane_b32 s[[PTR_HI:[0-9]+]], v{{[0-9]+}} 60*9880d681SAndroid Build Coastguard Worker; SI: s_nop 3 61*9880d681SAndroid Build Coastguard Worker; SI: s_load_dword [[OUT:s[0-9]+]], s{{\[}}[[PTR_LO]]:[[PTR_HI]]{{\]}}, [[OFFSET]] 62*9880d681SAndroid Build Coastguard Worker; SI: s_mov_b32 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; CI: s_load_dword [[OUT:s[0-9]+]], s{{\[}}[[PTR_LO]]:[[PTR_HI]]{{\]}}, 0xbb8 65*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[V_OUT:v[0-9]+]], [[OUT]] 66*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword [[V_OUT]] 67*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_store_dword {{.*}}, [[V_OUT]] 68*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu(i32 addrspace(2)* addrspace(1)* %in, i32 %a, i32 %b, i32 addrspace(1)* %out) #1 { 69*9880d681SAndroid Build Coastguard Workerentry: 70*9880d681SAndroid Build Coastguard Worker %tmp = icmp ne i32 %a, 0 71*9880d681SAndroid Build Coastguard Worker br i1 %tmp, label %if, label %else 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Workerif: ; preds = %entry 74*9880d681SAndroid Build Coastguard Worker %tmp1 = load i32 addrspace(2)*, i32 addrspace(2)* addrspace(1)* %in 75*9880d681SAndroid Build Coastguard Worker br label %endif 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerelse: ; preds = %entry 78*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr i32 addrspace(2)*, i32 addrspace(2)* addrspace(1)* %in 79*9880d681SAndroid Build Coastguard Worker %tmp3 = load i32 addrspace(2)*, i32 addrspace(2)* addrspace(1)* %tmp2 80*9880d681SAndroid Build Coastguard Worker br label %endif 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerendif: ; preds = %else, %if 83*9880d681SAndroid Build Coastguard Worker %tmp4 = phi i32 addrspace(2)* [ %tmp1, %if ], [ %tmp3, %else ] 84*9880d681SAndroid Build Coastguard Worker %tmp5 = getelementptr i32, i32 addrspace(2)* %tmp4, i32 3000 85*9880d681SAndroid Build Coastguard Worker %tmp6 = load i32, i32 addrspace(2)* %tmp5 86*9880d681SAndroid Build Coastguard Worker store i32 %tmp6, i32 addrspace(1)* %out 87*9880d681SAndroid Build Coastguard Worker ret void 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; Test moving an SMRD with an immediate offset to the VALU 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu2: 93*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 94*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dword v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], 0 addr64 offset:16{{$}} 95*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dword v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}}] 96*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu2(i32 addrspace(1)* %out, [8 x i32] addrspace(2)* %in) #1 { 97*9880d681SAndroid Build Coastguard Workerentry: 98*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 99*9880d681SAndroid Build Coastguard Worker %tmp1 = add i32 %tmp, 4 100*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr [8 x i32], [8 x i32] addrspace(2)* %in, i32 %tmp, i32 4 101*9880d681SAndroid Build Coastguard Worker %tmp3 = load i32, i32 addrspace(2)* %tmp2 102*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %out 103*9880d681SAndroid Build Coastguard Worker ret void 104*9880d681SAndroid Build Coastguard Worker} 105*9880d681SAndroid Build Coastguard Worker 106*9880d681SAndroid Build Coastguard Worker; Use a big offset that will use the SMRD literal offset on CI 107*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu_ci_offset: 108*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 109*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: s_movk_i32 [[OFFSET:s[0-9]+]], 0x4e20{{$}} 110*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 111*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dword v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET]] addr64{{$}} 112*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 113*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword 114*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dword v{{[0-9]+}}, v[{{[0-9]+:[0-9]+}}] 115*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_store_dword v[{{[0-9]+:[0-9]+}}], v{{[0-9]+}} 116*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu_ci_offset(i32 addrspace(1)* %out, i32 addrspace(2)* %in, i32 %c) #1 { 117*9880d681SAndroid Build Coastguard Workerentry: 118*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 119*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr i32, i32 addrspace(2)* %in, i32 %tmp 120*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr i32, i32 addrspace(2)* %tmp2, i32 5000 121*9880d681SAndroid Build Coastguard Worker %tmp4 = load i32, i32 addrspace(2)* %tmp3 122*9880d681SAndroid Build Coastguard Worker %tmp5 = add i32 %tmp4, %c 123*9880d681SAndroid Build Coastguard Worker store i32 %tmp5, i32 addrspace(1)* %out 124*9880d681SAndroid Build Coastguard Worker ret void 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu_ci_offset_x2: 128*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 129*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: s_mov_b32 [[OFFSET:s[0-9]+]], 0x9c40{{$}} 130*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 131*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx2 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET]] addr64{{$}} 132*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 133*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 134*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx2 135*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx2 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] 136*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu_ci_offset_x2(i64 addrspace(1)* %out, i64 addrspace(2)* %in, i64 %c) #1 { 137*9880d681SAndroid Build Coastguard Workerentry: 138*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 139*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr i64, i64 addrspace(2)* %in, i32 %tmp 140*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr i64, i64 addrspace(2)* %tmp2, i32 5000 141*9880d681SAndroid Build Coastguard Worker %tmp4 = load i64, i64 addrspace(2)* %tmp3 142*9880d681SAndroid Build Coastguard Worker %tmp5 = or i64 %tmp4, %c 143*9880d681SAndroid Build Coastguard Worker store i64 %tmp5, i64 addrspace(1)* %out 144*9880d681SAndroid Build Coastguard Worker ret void 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu_ci_offset_x4: 148*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 149*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: s_movk_i32 [[OFFSET:s[0-9]+]], 0x4d20{{$}} 150*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 151*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET]] addr64{{$}} 152*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 153*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 154*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 155*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 156*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 157*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 v[{{[0-9]+:[0-9]+}}], v[{{[0-9]+:[0-9]+}}] 158*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu_ci_offset_x4(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(2)* %in, <4 x i32> %c) #1 { 159*9880d681SAndroid Build Coastguard Workerentry: 160*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 161*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr <4 x i32>, <4 x i32> addrspace(2)* %in, i32 %tmp 162*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr <4 x i32>, <4 x i32> addrspace(2)* %tmp2, i32 1234 163*9880d681SAndroid Build Coastguard Worker %tmp4 = load <4 x i32>, <4 x i32> addrspace(2)* %tmp3 164*9880d681SAndroid Build Coastguard Worker %tmp5 = or <4 x i32> %tmp4, %c 165*9880d681SAndroid Build Coastguard Worker store <4 x i32> %tmp5, <4 x i32> addrspace(1)* %out 166*9880d681SAndroid Build Coastguard Worker ret void 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Worker; Original scalar load uses SGPR offset on SI and 32-bit literal on 170*9880d681SAndroid Build Coastguard Worker; CI. 171*9880d681SAndroid Build Coastguard Worker 172*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu_ci_offset_x8: 173*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 174*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: s_mov_b32 [[OFFSET0:s[0-9]+]], 0x9a40{{$}} 175*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 176*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET0]] addr64{{$}} 177*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 178*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: s_mov_b32 [[OFFSET1:s[0-9]+]], 0x9a50{{$}} 179*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 180*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET1]] addr64{{$}} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 183*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 184*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 185*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 186*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 187*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 188*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 189*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 190*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 191*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 192*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 193*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 194*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu_ci_offset_x8(<8 x i32> addrspace(1)* %out, <8 x i32> addrspace(2)* %in, <8 x i32> %c) #1 { 195*9880d681SAndroid Build Coastguard Workerentry: 196*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 197*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr <8 x i32>, <8 x i32> addrspace(2)* %in, i32 %tmp 198*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr <8 x i32>, <8 x i32> addrspace(2)* %tmp2, i32 1234 199*9880d681SAndroid Build Coastguard Worker %tmp4 = load <8 x i32>, <8 x i32> addrspace(2)* %tmp3 200*9880d681SAndroid Build Coastguard Worker %tmp5 = or <8 x i32> %tmp4, %c 201*9880d681SAndroid Build Coastguard Worker store <8 x i32> %tmp5, <8 x i32> addrspace(1)* %out 202*9880d681SAndroid Build Coastguard Worker ret void 203*9880d681SAndroid Build Coastguard Worker} 204*9880d681SAndroid Build Coastguard Worker 205*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu_ci_offset_x16: 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: s_mov_b32 [[OFFSET0:s[0-9]+]], 0x13480{{$}} 208*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET0]] addr64{{$}} 209*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: s_mov_b32 [[OFFSET1:s[0-9]+]], 0x13490{{$}} 210*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET1]] addr64{{$}} 211*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: s_mov_b32 [[OFFSET2:s[0-9]+]], 0x134a0{{$}} 212*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET2]] addr64{{$}} 213*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: s_mov_b32 [[OFFSET3:s[0-9]+]], 0x134b0{{$}} 214*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-DAG: buffer_load_dwordx4 v{{\[[0-9]+:[0-9]+\]}}, v{{\[[0-9]+:[0-9]+\]}}, s[{{[0-9]+:[0-9]+}}], [[OFFSET3]] addr64{{$}} 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 217*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 218*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 219*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 220*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 221*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 222*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 223*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_or_b32_e32 {{v[0-9]+}}, {{s[0-9]+}}, {{v[0-9]+}} 224*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 225*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 226*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 227*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dwordx4 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 230*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 231*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 232*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 233*9880d681SAndroid Build Coastguard Worker 234*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm 235*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu_ci_offset_x16(<16 x i32> addrspace(1)* %out, <16 x i32> addrspace(2)* %in, <16 x i32> %c) #1 { 236*9880d681SAndroid Build Coastguard Workerentry: 237*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 238*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr <16 x i32>, <16 x i32> addrspace(2)* %in, i32 %tmp 239*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr <16 x i32>, <16 x i32> addrspace(2)* %tmp2, i32 1234 240*9880d681SAndroid Build Coastguard Worker %tmp4 = load <16 x i32>, <16 x i32> addrspace(2)* %tmp3 241*9880d681SAndroid Build Coastguard Worker %tmp5 = or <16 x i32> %tmp4, %c 242*9880d681SAndroid Build Coastguard Worker store <16 x i32> %tmp5, <16 x i32> addrspace(1)* %out 243*9880d681SAndroid Build Coastguard Worker ret void 244*9880d681SAndroid Build Coastguard Worker} 245*9880d681SAndroid Build Coastguard Worker 246*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu2_salu_user: 247*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dword [[MOVED:v[0-9]+]], v{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:16{{$}} 248*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dword [[MOVED:v[0-9]+]], v[{{[0-9+:[0-9]+}}] 249*9880d681SAndroid Build Coastguard Worker; GCN: v_add_i32_e32 [[ADD:v[0-9]+]], vcc, s{{[0-9]+}}, [[MOVED]] 250*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword [[ADD]] 251*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_store_dword {{.*}}, [[ADD]] 252*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu2_salu_user(i32 addrspace(1)* %out, [8 x i32] addrspace(2)* %in, i32 %a) #1 { 253*9880d681SAndroid Build Coastguard Workerentry: 254*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 255*9880d681SAndroid Build Coastguard Worker %tmp1 = add i32 %tmp, 4 256*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr [8 x i32], [8 x i32] addrspace(2)* %in, i32 %tmp, i32 4 257*9880d681SAndroid Build Coastguard Worker %tmp3 = load i32, i32 addrspace(2)* %tmp2 258*9880d681SAndroid Build Coastguard Worker %tmp4 = add i32 %tmp3, %a 259*9880d681SAndroid Build Coastguard Worker store i32 %tmp4, i32 addrspace(1)* %out 260*9880d681SAndroid Build Coastguard Worker ret void 261*9880d681SAndroid Build Coastguard Worker} 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu2_max_smrd_offset: 264*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dword v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:1020{{$}} 265*9880d681SAndroid Build Coastguard Worker; GCN-HSA flat_load_dword v{{[0-9]}}, v{{[0-9]+:[0-9]+}} 266*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu2_max_smrd_offset(i32 addrspace(1)* %out, [1024 x i32] addrspace(2)* %in) #1 { 267*9880d681SAndroid Build Coastguard Workerentry: 268*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 269*9880d681SAndroid Build Coastguard Worker %tmp1 = add i32 %tmp, 4 270*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr [1024 x i32], [1024 x i32] addrspace(2)* %in, i32 %tmp, i32 255 271*9880d681SAndroid Build Coastguard Worker %tmp3 = load i32, i32 addrspace(2)* %tmp2 272*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %out 273*9880d681SAndroid Build Coastguard Worker ret void 274*9880d681SAndroid Build Coastguard Worker} 275*9880d681SAndroid Build Coastguard Worker 276*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}smrd_valu2_mubuf_offset: 277*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA-NOT: v_add 278*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dword v{{[0-9]+}}, v{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:1024{{$}} 279*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dword v{{[0-9]}}, v[{{[0-9]+:[0-9]+}}] 280*9880d681SAndroid Build Coastguard Workerdefine void @smrd_valu2_mubuf_offset(i32 addrspace(1)* %out, [1024 x i32] addrspace(2)* %in) #1 { 281*9880d681SAndroid Build Coastguard Workerentry: 282*9880d681SAndroid Build Coastguard Worker %tmp = call i32 @llvm.amdgcn.workitem.id.x() 283*9880d681SAndroid Build Coastguard Worker %tmp1 = add i32 %tmp, 4 284*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr [1024 x i32], [1024 x i32] addrspace(2)* %in, i32 %tmp, i32 256 285*9880d681SAndroid Build Coastguard Worker %tmp3 = load i32, i32 addrspace(2)* %tmp2 286*9880d681SAndroid Build Coastguard Worker store i32 %tmp3, i32 addrspace(1)* %out 287*9880d681SAndroid Build Coastguard Worker ret void 288*9880d681SAndroid Build Coastguard Worker} 289*9880d681SAndroid Build Coastguard Worker 290*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_load_imm_v8i32: 291*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 292*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 293*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 294*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 295*9880d681SAndroid Build Coastguard Workerdefine void @s_load_imm_v8i32(<8 x i32> addrspace(1)* %out, i32 addrspace(2)* nocapture readonly %in) #1 { 296*9880d681SAndroid Build Coastguard Workerentry: 297*9880d681SAndroid Build Coastguard Worker %tmp0 = tail call i32 @llvm.amdgcn.workitem.id.x() 298*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr inbounds i32, i32 addrspace(2)* %in, i32 %tmp0 299*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast i32 addrspace(2)* %tmp1 to <8 x i32> addrspace(2)* 300*9880d681SAndroid Build Coastguard Worker %tmp3 = load <8 x i32>, <8 x i32> addrspace(2)* %tmp2, align 4 301*9880d681SAndroid Build Coastguard Worker store <8 x i32> %tmp3, <8 x i32> addrspace(1)* %out, align 32 302*9880d681SAndroid Build Coastguard Worker ret void 303*9880d681SAndroid Build Coastguard Worker} 304*9880d681SAndroid Build Coastguard Worker 305*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_load_imm_v8i32_salu_user: 306*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 307*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 308*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 309*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 310*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 311*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 312*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 313*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 314*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 315*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword 316*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 317*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 318*9880d681SAndroid Build Coastguard Workerdefine void @s_load_imm_v8i32_salu_user(i32 addrspace(1)* %out, i32 addrspace(2)* nocapture readonly %in) #1 { 319*9880d681SAndroid Build Coastguard Workerentry: 320*9880d681SAndroid Build Coastguard Worker %tmp0 = tail call i32 @llvm.amdgcn.workitem.id.x() 321*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr inbounds i32, i32 addrspace(2)* %in, i32 %tmp0 322*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast i32 addrspace(2)* %tmp1 to <8 x i32> addrspace(2)* 323*9880d681SAndroid Build Coastguard Worker %tmp3 = load <8 x i32>, <8 x i32> addrspace(2)* %tmp2, align 4 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker %elt0 = extractelement <8 x i32> %tmp3, i32 0 326*9880d681SAndroid Build Coastguard Worker %elt1 = extractelement <8 x i32> %tmp3, i32 1 327*9880d681SAndroid Build Coastguard Worker %elt2 = extractelement <8 x i32> %tmp3, i32 2 328*9880d681SAndroid Build Coastguard Worker %elt3 = extractelement <8 x i32> %tmp3, i32 3 329*9880d681SAndroid Build Coastguard Worker %elt4 = extractelement <8 x i32> %tmp3, i32 4 330*9880d681SAndroid Build Coastguard Worker %elt5 = extractelement <8 x i32> %tmp3, i32 5 331*9880d681SAndroid Build Coastguard Worker %elt6 = extractelement <8 x i32> %tmp3, i32 6 332*9880d681SAndroid Build Coastguard Worker %elt7 = extractelement <8 x i32> %tmp3, i32 7 333*9880d681SAndroid Build Coastguard Worker 334*9880d681SAndroid Build Coastguard Worker %add0 = add i32 %elt0, %elt1 335*9880d681SAndroid Build Coastguard Worker %add1 = add i32 %add0, %elt2 336*9880d681SAndroid Build Coastguard Worker %add2 = add i32 %add1, %elt3 337*9880d681SAndroid Build Coastguard Worker %add3 = add i32 %add2, %elt4 338*9880d681SAndroid Build Coastguard Worker %add4 = add i32 %add3, %elt5 339*9880d681SAndroid Build Coastguard Worker %add5 = add i32 %add4, %elt6 340*9880d681SAndroid Build Coastguard Worker %add6 = add i32 %add5, %elt7 341*9880d681SAndroid Build Coastguard Worker 342*9880d681SAndroid Build Coastguard Worker store i32 %add6, i32 addrspace(1)* %out 343*9880d681SAndroid Build Coastguard Worker ret void 344*9880d681SAndroid Build Coastguard Worker} 345*9880d681SAndroid Build Coastguard Worker 346*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_load_imm_v16i32: 347*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 348*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 349*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 350*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 351*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 352*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 353*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 354*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 355*9880d681SAndroid Build Coastguard Workerdefine void @s_load_imm_v16i32(<16 x i32> addrspace(1)* %out, i32 addrspace(2)* nocapture readonly %in) #1 { 356*9880d681SAndroid Build Coastguard Workerentry: 357*9880d681SAndroid Build Coastguard Worker %tmp0 = tail call i32 @llvm.amdgcn.workitem.id.x() 358*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr inbounds i32, i32 addrspace(2)* %in, i32 %tmp0 359*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast i32 addrspace(2)* %tmp1 to <16 x i32> addrspace(2)* 360*9880d681SAndroid Build Coastguard Worker %tmp3 = load <16 x i32>, <16 x i32> addrspace(2)* %tmp2, align 4 361*9880d681SAndroid Build Coastguard Worker store <16 x i32> %tmp3, <16 x i32> addrspace(1)* %out, align 32 362*9880d681SAndroid Build Coastguard Worker ret void 363*9880d681SAndroid Build Coastguard Worker} 364*9880d681SAndroid Build Coastguard Worker 365*9880d681SAndroid Build Coastguard Worker; GCN-LABEL: {{^}}s_load_imm_v16i32_salu_user: 366*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 367*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 368*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 369*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_load_dwordx4 370*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 371*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 372*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 373*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 374*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 375*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 376*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 377*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 378*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 379*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 380*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 381*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 382*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 383*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 384*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: v_add_i32_e32 385*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword 386*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 387*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 388*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 389*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_load_dwordx4 390*9880d681SAndroid Build Coastguard Workerdefine void @s_load_imm_v16i32_salu_user(i32 addrspace(1)* %out, i32 addrspace(2)* nocapture readonly %in) #1 { 391*9880d681SAndroid Build Coastguard Workerentry: 392*9880d681SAndroid Build Coastguard Worker %tmp0 = tail call i32 @llvm.amdgcn.workitem.id.x() 393*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr inbounds i32, i32 addrspace(2)* %in, i32 %tmp0 394*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast i32 addrspace(2)* %tmp1 to <16 x i32> addrspace(2)* 395*9880d681SAndroid Build Coastguard Worker %tmp3 = load <16 x i32>, <16 x i32> addrspace(2)* %tmp2, align 4 396*9880d681SAndroid Build Coastguard Worker 397*9880d681SAndroid Build Coastguard Worker %elt0 = extractelement <16 x i32> %tmp3, i32 0 398*9880d681SAndroid Build Coastguard Worker %elt1 = extractelement <16 x i32> %tmp3, i32 1 399*9880d681SAndroid Build Coastguard Worker %elt2 = extractelement <16 x i32> %tmp3, i32 2 400*9880d681SAndroid Build Coastguard Worker %elt3 = extractelement <16 x i32> %tmp3, i32 3 401*9880d681SAndroid Build Coastguard Worker %elt4 = extractelement <16 x i32> %tmp3, i32 4 402*9880d681SAndroid Build Coastguard Worker %elt5 = extractelement <16 x i32> %tmp3, i32 5 403*9880d681SAndroid Build Coastguard Worker %elt6 = extractelement <16 x i32> %tmp3, i32 6 404*9880d681SAndroid Build Coastguard Worker %elt7 = extractelement <16 x i32> %tmp3, i32 7 405*9880d681SAndroid Build Coastguard Worker %elt8 = extractelement <16 x i32> %tmp3, i32 8 406*9880d681SAndroid Build Coastguard Worker %elt9 = extractelement <16 x i32> %tmp3, i32 9 407*9880d681SAndroid Build Coastguard Worker %elt10 = extractelement <16 x i32> %tmp3, i32 10 408*9880d681SAndroid Build Coastguard Worker %elt11 = extractelement <16 x i32> %tmp3, i32 11 409*9880d681SAndroid Build Coastguard Worker %elt12 = extractelement <16 x i32> %tmp3, i32 12 410*9880d681SAndroid Build Coastguard Worker %elt13 = extractelement <16 x i32> %tmp3, i32 13 411*9880d681SAndroid Build Coastguard Worker %elt14 = extractelement <16 x i32> %tmp3, i32 14 412*9880d681SAndroid Build Coastguard Worker %elt15 = extractelement <16 x i32> %tmp3, i32 15 413*9880d681SAndroid Build Coastguard Worker 414*9880d681SAndroid Build Coastguard Worker %add0 = add i32 %elt0, %elt1 415*9880d681SAndroid Build Coastguard Worker %add1 = add i32 %add0, %elt2 416*9880d681SAndroid Build Coastguard Worker %add2 = add i32 %add1, %elt3 417*9880d681SAndroid Build Coastguard Worker %add3 = add i32 %add2, %elt4 418*9880d681SAndroid Build Coastguard Worker %add4 = add i32 %add3, %elt5 419*9880d681SAndroid Build Coastguard Worker %add5 = add i32 %add4, %elt6 420*9880d681SAndroid Build Coastguard Worker %add6 = add i32 %add5, %elt7 421*9880d681SAndroid Build Coastguard Worker %add7 = add i32 %add6, %elt8 422*9880d681SAndroid Build Coastguard Worker %add8 = add i32 %add7, %elt9 423*9880d681SAndroid Build Coastguard Worker %add9 = add i32 %add8, %elt10 424*9880d681SAndroid Build Coastguard Worker %add10 = add i32 %add9, %elt11 425*9880d681SAndroid Build Coastguard Worker %add11 = add i32 %add10, %elt12 426*9880d681SAndroid Build Coastguard Worker %add12 = add i32 %add11, %elt13 427*9880d681SAndroid Build Coastguard Worker %add13 = add i32 %add12, %elt14 428*9880d681SAndroid Build Coastguard Worker %add14 = add i32 %add13, %elt15 429*9880d681SAndroid Build Coastguard Worker 430*9880d681SAndroid Build Coastguard Worker store i32 %add14, i32 addrspace(1)* %out 431*9880d681SAndroid Build Coastguard Worker ret void 432*9880d681SAndroid Build Coastguard Worker} 433*9880d681SAndroid Build Coastguard Worker 434*9880d681SAndroid Build Coastguard Worker; Make sure we legalize vopc operands after moving an sopc to the value. 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker; {{^}}sopc_vopc_legalize_bug: 437*9880d681SAndroid Build Coastguard Worker; GCN: s_load_dword [[SGPR:s[0-9]+]] 438*9880d681SAndroid Build Coastguard Worker; GCN: v_cmp_le_u32_e32 vcc, [[SGPR]], v{{[0-9]+}} 439*9880d681SAndroid Build Coastguard Worker; GCN: s_and_b64 vcc, exec, vcc 440*9880d681SAndroid Build Coastguard Worker; GCN: s_cbranch_vccnz [[EXIT:[A-Z0-9_]+]] 441*9880d681SAndroid Build Coastguard Worker; GCN: v_mov_b32_e32 [[ONE:v[0-9]+]], 1 442*9880d681SAndroid Build Coastguard Worker; GCN-NOHSA: buffer_store_dword [[ONE]] 443*9880d681SAndroid Build Coastguard Worker; GCN-HSA: flat_store_dword v[{{[0-9]+:[0-9]+}}], [[ONE]] 444*9880d681SAndroid Build Coastguard Worker; GCN; {{^}}[[EXIT]]: 445*9880d681SAndroid Build Coastguard Worker; GCN: s_endpgm 446*9880d681SAndroid Build Coastguard Workerdefine void @sopc_vopc_legalize_bug(i32 %cond, i32 addrspace(1)* %out, i32 addrspace(1)* %in) { 447*9880d681SAndroid Build Coastguard Workerbb3: ; preds = %bb2 448*9880d681SAndroid Build Coastguard Worker %tmp0 = bitcast i32 %cond to float 449*9880d681SAndroid Build Coastguard Worker %tmp1 = fadd float %tmp0, 2.500000e-01 450*9880d681SAndroid Build Coastguard Worker %tmp2 = bitcast float %tmp1 to i32 451*9880d681SAndroid Build Coastguard Worker %tmp3 = icmp ult i32 %tmp2, %cond 452*9880d681SAndroid Build Coastguard Worker br i1 %tmp3, label %bb6, label %bb7 453*9880d681SAndroid Build Coastguard Worker 454*9880d681SAndroid Build Coastguard Workerbb6: 455*9880d681SAndroid Build Coastguard Worker store i32 1, i32 addrspace(1)* %out 456*9880d681SAndroid Build Coastguard Worker br label %bb7 457*9880d681SAndroid Build Coastguard Worker 458*9880d681SAndroid Build Coastguard Workerbb7: ; preds = %bb3 459*9880d681SAndroid Build Coastguard Worker ret void 460*9880d681SAndroid Build Coastguard Worker} 461*9880d681SAndroid Build Coastguard Worker 462*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind readnone } 463*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind } 464