xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/salu-to-valu.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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