1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
3; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX8 %s
4; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX7 %s
5; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s
6
7define amdgpu_ps i128 @extractelement_sgpr_v4i128_sgpr_idx(<4 x i128> addrspace(4)* inreg %ptr, i32 inreg %idx) {
8; GCN-LABEL: extractelement_sgpr_v4i128_sgpr_idx:
9; GCN:       ; %bb.0:
10; GCN-NEXT:    s_load_dwordx16 s[8:23], s[2:3], 0x0
11; GCN-NEXT:    s_lshl_b32 m0, s4, 1
12; GCN-NEXT:    s_waitcnt lgkmcnt(0)
13; GCN-NEXT:    s_movrels_b64 s[0:1], s[8:9]
14; GCN-NEXT:    s_movrels_b64 s[2:3], s[10:11]
15; GCN-NEXT:    ; return to shader part epilog
16;
17; GFX10-LABEL: extractelement_sgpr_v4i128_sgpr_idx:
18; GFX10:       ; %bb.0:
19; GFX10-NEXT:    s_load_dwordx16 s[8:23], s[2:3], 0x0
20; GFX10-NEXT:    s_lshl_b32 m0, s4, 1
21; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
22; GFX10-NEXT:    s_movrels_b64 s[0:1], s[8:9]
23; GFX10-NEXT:    s_movrels_b64 s[2:3], s[10:11]
24; GFX10-NEXT:    ; return to shader part epilog
25  %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr
26  %element = extractelement <4 x i128> %vector, i32 %idx
27  ret i128 %element
28}
29
30define amdgpu_ps i128 @extractelement_vgpr_v4i128_sgpr_idx(<4 x i128> addrspace(1)* %ptr, i32 inreg %idx) {
31; GFX9-LABEL: extractelement_vgpr_v4i128_sgpr_idx:
32; GFX9:       ; %bb.0:
33; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
34; GFX9-NEXT:    global_load_dwordx4 v[6:9], v[0:1], off offset:16
35; GFX9-NEXT:    global_load_dwordx4 v[10:13], v[0:1], off offset:32
36; GFX9-NEXT:    global_load_dwordx4 v[14:17], v[0:1], off offset:48
37; GFX9-NEXT:    s_lshl_b32 s0, s2, 1
38; GFX9-NEXT:    s_lshl_b32 s2, s0, 1
39; GFX9-NEXT:    s_waitcnt vmcnt(0)
40; GFX9-NEXT:    s_set_gpr_idx_on s2, gpr_idx(SRC0)
41; GFX9-NEXT:    v_mov_b32_e32 v0, v2
42; GFX9-NEXT:    v_mov_b32_e32 v1, v3
43; GFX9-NEXT:    v_mov_b32_e32 v18, v2
44; GFX9-NEXT:    s_set_gpr_idx_off
45; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
46; GFX9-NEXT:    v_readfirstlane_b32 s1, v1
47; GFX9-NEXT:    s_set_gpr_idx_on s2, gpr_idx(SRC0)
48; GFX9-NEXT:    v_mov_b32_e32 v3, v3
49; GFX9-NEXT:    s_set_gpr_idx_off
50; GFX9-NEXT:    v_readfirstlane_b32 s2, v18
51; GFX9-NEXT:    v_readfirstlane_b32 s3, v3
52; GFX9-NEXT:    ; return to shader part epilog
53;
54; GFX8-LABEL: extractelement_vgpr_v4i128_sgpr_idx:
55; GFX8:       ; %bb.0:
56; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 16, v0
57; GFX8-NEXT:    v_addc_u32_e32 v7, vcc, 0, v1, vcc
58; GFX8-NEXT:    v_add_u32_e32 v10, vcc, 32, v0
59; GFX8-NEXT:    v_addc_u32_e32 v11, vcc, 0, v1, vcc
60; GFX8-NEXT:    flat_load_dwordx4 v[2:5], v[0:1]
61; GFX8-NEXT:    flat_load_dwordx4 v[6:9], v[6:7]
62; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 48, v0
63; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
64; GFX8-NEXT:    flat_load_dwordx4 v[10:13], v[10:11]
65; GFX8-NEXT:    flat_load_dwordx4 v[14:17], v[0:1]
66; GFX8-NEXT:    s_lshl_b32 s0, s2, 1
67; GFX8-NEXT:    s_lshl_b32 m0, s0, 1
68; GFX8-NEXT:    s_waitcnt vmcnt(0)
69; GFX8-NEXT:    v_movrels_b32_e32 v1, v3
70; GFX8-NEXT:    v_movrels_b32_e32 v0, v2
71; GFX8-NEXT:    v_mov_b32_e32 v3, v1
72; GFX8-NEXT:    v_mov_b32_e32 v2, v0
73; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
74; GFX8-NEXT:    v_readfirstlane_b32 s1, v1
75; GFX8-NEXT:    v_readfirstlane_b32 s2, v2
76; GFX8-NEXT:    v_readfirstlane_b32 s3, v3
77; GFX8-NEXT:    ; return to shader part epilog
78;
79; GFX7-LABEL: extractelement_vgpr_v4i128_sgpr_idx:
80; GFX7:       ; %bb.0:
81; GFX7-NEXT:    s_mov_b32 s6, 0
82; GFX7-NEXT:    s_mov_b32 s7, 0xf000
83; GFX7-NEXT:    s_mov_b64 s[4:5], 0
84; GFX7-NEXT:    buffer_load_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64
85; GFX7-NEXT:    buffer_load_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:16
86; GFX7-NEXT:    buffer_load_dwordx4 v[10:13], v[0:1], s[4:7], 0 addr64 offset:32
87; GFX7-NEXT:    buffer_load_dwordx4 v[14:17], v[0:1], s[4:7], 0 addr64 offset:48
88; GFX7-NEXT:    s_lshl_b32 s0, s2, 1
89; GFX7-NEXT:    s_lshl_b32 m0, s0, 1
90; GFX7-NEXT:    s_waitcnt vmcnt(0)
91; GFX7-NEXT:    v_movrels_b32_e32 v1, v3
92; GFX7-NEXT:    v_movrels_b32_e32 v0, v2
93; GFX7-NEXT:    v_mov_b32_e32 v3, v1
94; GFX7-NEXT:    v_mov_b32_e32 v2, v0
95; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
96; GFX7-NEXT:    v_readfirstlane_b32 s1, v1
97; GFX7-NEXT:    v_readfirstlane_b32 s2, v2
98; GFX7-NEXT:    v_readfirstlane_b32 s3, v3
99; GFX7-NEXT:    ; return to shader part epilog
100;
101; GFX10-LABEL: extractelement_vgpr_v4i128_sgpr_idx:
102; GFX10:       ; %bb.0:
103; GFX10-NEXT:    s_clause 0x3
104; GFX10-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
105; GFX10-NEXT:    global_load_dwordx4 v[6:9], v[0:1], off offset:16
106; GFX10-NEXT:    global_load_dwordx4 v[10:13], v[0:1], off offset:32
107; GFX10-NEXT:    global_load_dwordx4 v[14:17], v[0:1], off offset:48
108; GFX10-NEXT:    s_lshl_b32 s0, s2, 1
109; GFX10-NEXT:    s_lshl_b32 m0, s0, 1
110; GFX10-NEXT:    s_waitcnt vmcnt(0)
111; GFX10-NEXT:    v_movrels_b32_e32 v1, v3
112; GFX10-NEXT:    v_movrels_b32_e32 v0, v2
113; GFX10-NEXT:    v_mov_b32_e32 v3, v1
114; GFX10-NEXT:    v_mov_b32_e32 v2, v0
115; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
116; GFX10-NEXT:    v_readfirstlane_b32 s1, v1
117; GFX10-NEXT:    v_readfirstlane_b32 s3, v3
118; GFX10-NEXT:    v_readfirstlane_b32 s2, v2
119; GFX10-NEXT:    ; return to shader part epilog
120  %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr
121  %element = extractelement <4 x i128> %vector, i32 %idx
122  ret i128 %element
123}
124
125define i128 @extractelement_vgpr_v4i128_vgpr_idx(<4 x i128> addrspace(1)* %ptr, i32 %idx) {
126; GFX9-LABEL: extractelement_vgpr_v4i128_vgpr_idx:
127; GFX9:       ; %bb.0:
128; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
129; GFX9-NEXT:    v_lshlrev_b32_e32 v16, 1, v2
130; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
131; GFX9-NEXT:    global_load_dwordx4 v[6:9], v[0:1], off offset:16
132; GFX9-NEXT:    v_add_u32_e32 v17, 1, v16
133; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v17
134; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v16
135; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 6, v16
136; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 7, v16
137; GFX9-NEXT:    s_waitcnt vmcnt(1)
138; GFX9-NEXT:    v_cndmask_b32_e64 v10, v2, v4, s[4:5]
139; GFX9-NEXT:    v_cndmask_b32_e64 v11, v3, v5, s[4:5]
140; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
141; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
142; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v16
143; GFX9-NEXT:    s_waitcnt vmcnt(0)
144; GFX9-NEXT:    v_cndmask_b32_e32 v4, v10, v6, vcc
145; GFX9-NEXT:    v_cndmask_b32_e32 v5, v11, v7, vcc
146; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v17
147; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
148; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v7, vcc
149; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v16
150; GFX9-NEXT:    v_cndmask_b32_e32 v4, v4, v8, vcc
151; GFX9-NEXT:    v_cndmask_b32_e32 v5, v5, v9, vcc
152; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v17
153; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v8, vcc
154; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
155; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:32
156; GFX9-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:48
157; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v16
158; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 7, v17
159; GFX9-NEXT:    s_waitcnt vmcnt(1)
160; GFX9-NEXT:    v_cndmask_b32_e32 v0, v4, v8, vcc
161; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
162; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v17
163; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v8, vcc
164; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
165; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v16
166; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v10, vcc
167; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v11, vcc
168; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v17
169; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v10, vcc
170; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v11, vcc
171; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v17
172; GFX9-NEXT:    s_waitcnt vmcnt(0)
173; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
174; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v12, s[6:7]
175; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v13, s[6:7]
176; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v13, vcc
177; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v14, s[8:9]
178; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v15, s[8:9]
179; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v14, s[4:5]
180; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v15, s[4:5]
181; GFX9-NEXT:    s_setpc_b64 s[30:31]
182;
183; GFX8-LABEL: extractelement_vgpr_v4i128_vgpr_idx:
184; GFX8:       ; %bb.0:
185; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
186; GFX8-NEXT:    v_add_u32_e32 v3, vcc, 16, v0
187; GFX8-NEXT:    v_addc_u32_e32 v4, vcc, 0, v1, vcc
188; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[0:1]
189; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[3:4]
190; GFX8-NEXT:    v_lshlrev_b32_e32 v16, 1, v2
191; GFX8-NEXT:    v_add_u32_e32 v17, vcc, 1, v16
192; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v17
193; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v16
194; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 6, v16
195; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 7, v16
196; GFX8-NEXT:    s_waitcnt vmcnt(1)
197; GFX8-NEXT:    v_cndmask_b32_e64 v2, v8, v10, s[4:5]
198; GFX8-NEXT:    v_cndmask_b32_e64 v3, v9, v11, s[4:5]
199; GFX8-NEXT:    v_cndmask_b32_e32 v8, v8, v10, vcc
200; GFX8-NEXT:    v_cndmask_b32_e32 v9, v9, v11, vcc
201; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v16
202; GFX8-NEXT:    s_waitcnt vmcnt(0)
203; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
204; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
205; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v17
206; GFX8-NEXT:    v_cndmask_b32_e32 v4, v8, v4, vcc
207; GFX8-NEXT:    v_cndmask_b32_e32 v5, v9, v5, vcc
208; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v16
209; GFX8-NEXT:    v_cndmask_b32_e32 v18, v2, v6, vcc
210; GFX8-NEXT:    v_cndmask_b32_e32 v19, v3, v7, vcc
211; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v17
212; GFX8-NEXT:    v_cndmask_b32_e32 v4, v4, v6, vcc
213; GFX8-NEXT:    v_cndmask_b32_e32 v5, v5, v7, vcc
214; GFX8-NEXT:    v_add_u32_e32 v2, vcc, 32, v0
215; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc
216; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 48, v0
217; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
218; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[2:3]
219; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[0:1]
220; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v16
221; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 7, v17
222; GFX8-NEXT:    s_waitcnt vmcnt(1)
223; GFX8-NEXT:    v_cndmask_b32_e32 v0, v18, v8, vcc
224; GFX8-NEXT:    v_cndmask_b32_e32 v1, v19, v9, vcc
225; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v17
226; GFX8-NEXT:    v_cndmask_b32_e32 v2, v4, v8, vcc
227; GFX8-NEXT:    v_cndmask_b32_e32 v3, v5, v9, vcc
228; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v16
229; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v10, vcc
230; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v11, vcc
231; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v17
232; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v10, vcc
233; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v11, vcc
234; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v17
235; GFX8-NEXT:    s_waitcnt vmcnt(0)
236; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
237; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v12, s[6:7]
238; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v13, s[6:7]
239; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v13, vcc
240; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v14, s[8:9]
241; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v15, s[8:9]
242; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v14, s[4:5]
243; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v15, s[4:5]
244; GFX8-NEXT:    s_setpc_b64 s[30:31]
245;
246; GFX7-LABEL: extractelement_vgpr_v4i128_vgpr_idx:
247; GFX7:       ; %bb.0:
248; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
249; GFX7-NEXT:    s_mov_b32 s10, 0
250; GFX7-NEXT:    s_mov_b32 s11, 0xf000
251; GFX7-NEXT:    s_mov_b64 s[8:9], 0
252; GFX7-NEXT:    v_lshlrev_b32_e32 v16, 1, v2
253; GFX7-NEXT:    buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64
254; GFX7-NEXT:    buffer_load_dwordx4 v[6:9], v[0:1], s[8:11], 0 addr64 offset:16
255; GFX7-NEXT:    v_add_i32_e32 v17, vcc, 1, v16
256; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v17
257; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 1, v16
258; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 6, v16
259; GFX7-NEXT:    s_waitcnt vmcnt(1)
260; GFX7-NEXT:    v_cndmask_b32_e64 v10, v2, v4, s[4:5]
261; GFX7-NEXT:    v_cndmask_b32_e64 v11, v3, v5, s[4:5]
262; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
263; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
264; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v16
265; GFX7-NEXT:    s_waitcnt vmcnt(0)
266; GFX7-NEXT:    v_cndmask_b32_e32 v4, v10, v6, vcc
267; GFX7-NEXT:    v_cndmask_b32_e32 v5, v11, v7, vcc
268; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v17
269; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
270; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v7, vcc
271; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v16
272; GFX7-NEXT:    v_cndmask_b32_e32 v4, v4, v8, vcc
273; GFX7-NEXT:    v_cndmask_b32_e32 v5, v5, v9, vcc
274; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v17
275; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v8, vcc
276; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
277; GFX7-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:32
278; GFX7-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[8:11], 0 addr64 offset:48
279; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v16
280; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 7, v17
281; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 7, v16
282; GFX7-NEXT:    s_waitcnt vmcnt(1)
283; GFX7-NEXT:    v_cndmask_b32_e32 v0, v4, v8, vcc
284; GFX7-NEXT:    v_cndmask_b32_e32 v1, v5, v9, vcc
285; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v17
286; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v8, vcc
287; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
288; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v16
289; GFX7-NEXT:    v_cndmask_b32_e32 v0, v0, v10, vcc
290; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v11, vcc
291; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v17
292; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v10, vcc
293; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v11, vcc
294; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v17
295; GFX7-NEXT:    s_waitcnt vmcnt(0)
296; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
297; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v12, s[6:7]
298; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v13, s[6:7]
299; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v13, vcc
300; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v14, s[8:9]
301; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v15, s[8:9]
302; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v14, s[4:5]
303; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v15, s[4:5]
304; GFX7-NEXT:    s_setpc_b64 s[30:31]
305;
306; GFX10-LABEL: extractelement_vgpr_v4i128_vgpr_idx:
307; GFX10:       ; %bb.0:
308; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
309; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
310; GFX10-NEXT:    s_clause 0x1
311; GFX10-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
312; GFX10-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off offset:16
313; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 1, v2
314; GFX10-NEXT:    global_load_dwordx4 v[11:14], v[0:1], off offset:32
315; GFX10-NEXT:    v_add_nc_u32_e32 v19, 1, v2
316; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v2
317; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 1, v19
318; GFX10-NEXT:    s_waitcnt vmcnt(2)
319; GFX10-NEXT:    v_cndmask_b32_e32 v15, v3, v5, vcc_lo
320; GFX10-NEXT:    v_cndmask_b32_e32 v16, v4, v6, vcc_lo
321; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 2, v2
322; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s4
323; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v6, s4
324; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 2, v19
325; GFX10-NEXT:    s_waitcnt vmcnt(1)
326; GFX10-NEXT:    v_cndmask_b32_e32 v5, v15, v7, vcc_lo
327; GFX10-NEXT:    v_cndmask_b32_e32 v6, v16, v8, vcc_lo
328; GFX10-NEXT:    global_load_dwordx4 v[15:18], v[0:1], off offset:48
329; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s4
330; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 3, v2
331; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v8, s4
332; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 3, v19
333; GFX10-NEXT:    v_cndmask_b32_e32 v5, v5, v9, vcc_lo
334; GFX10-NEXT:    v_cndmask_b32_e32 v6, v6, v10, vcc_lo
335; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s4
336; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v10, s4
337; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 4, v2
338; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 4, v19
339; GFX10-NEXT:    s_waitcnt vmcnt(1)
340; GFX10-NEXT:    v_cndmask_b32_e32 v0, v5, v11, vcc_lo
341; GFX10-NEXT:    v_cndmask_b32_e32 v1, v6, v12, vcc_lo
342; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 5, v2
343; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v11, s4
344; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v12, s4
345; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 5, v19
346; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v13, vcc_lo
347; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v14, vcc_lo
348; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 6, v2
349; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v13, s4
350; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v14, s4
351; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 6, v19
352; GFX10-NEXT:    s_waitcnt vmcnt(0)
353; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v15, vcc_lo
354; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v16, vcc_lo
355; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v15, s4
356; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 7, v2
357; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v16, s4
358; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 7, v19
359; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v17, vcc_lo
360; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v18, vcc_lo
361; GFX10-NEXT:    v_cndmask_b32_e64 v2, v3, v17, s4
362; GFX10-NEXT:    v_cndmask_b32_e64 v3, v4, v18, s4
363; GFX10-NEXT:    s_setpc_b64 s[30:31]
364  %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr
365  %element = extractelement <4 x i128> %vector, i32 %idx
366  ret i128 %element
367}
368
369define amdgpu_ps i128 @extractelement_sgpr_v4i128_vgpr_idx(<4 x i128> addrspace(4)* inreg %ptr, i32 %idx) {
370; GFX9-LABEL: extractelement_sgpr_v4i128_vgpr_idx:
371; GFX9:       ; %bb.0:
372; GFX9-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
373; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
374; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
375; GFX9-NEXT:    v_add_u32_e32 v19, 1, v0
376; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
377; GFX9-NEXT:    v_mov_b32_e32 v1, s0
378; GFX9-NEXT:    v_mov_b32_e32 v2, s1
379; GFX9-NEXT:    v_mov_b32_e32 v3, s2
380; GFX9-NEXT:    v_mov_b32_e32 v4, s3
381; GFX9-NEXT:    v_mov_b32_e32 v5, s4
382; GFX9-NEXT:    v_mov_b32_e32 v6, s5
383; GFX9-NEXT:    v_cndmask_b32_e32 v17, v1, v3, vcc
384; GFX9-NEXT:    v_cndmask_b32_e32 v18, v2, v4, vcc
385; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v0
386; GFX9-NEXT:    v_mov_b32_e32 v7, s6
387; GFX9-NEXT:    v_mov_b32_e32 v8, s7
388; GFX9-NEXT:    v_cndmask_b32_e32 v17, v17, v5, vcc
389; GFX9-NEXT:    v_cndmask_b32_e32 v18, v18, v6, vcc
390; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v0
391; GFX9-NEXT:    v_mov_b32_e32 v9, s8
392; GFX9-NEXT:    v_mov_b32_e32 v10, s9
393; GFX9-NEXT:    v_cndmask_b32_e32 v17, v17, v7, vcc
394; GFX9-NEXT:    v_cndmask_b32_e32 v18, v18, v8, vcc
395; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v0
396; GFX9-NEXT:    v_mov_b32_e32 v11, s10
397; GFX9-NEXT:    v_mov_b32_e32 v12, s11
398; GFX9-NEXT:    v_cndmask_b32_e32 v17, v17, v9, vcc
399; GFX9-NEXT:    v_cndmask_b32_e32 v18, v18, v10, vcc
400; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v0
401; GFX9-NEXT:    v_mov_b32_e32 v13, s12
402; GFX9-NEXT:    v_mov_b32_e32 v14, s13
403; GFX9-NEXT:    v_cndmask_b32_e32 v17, v17, v11, vcc
404; GFX9-NEXT:    v_cndmask_b32_e32 v18, v18, v12, vcc
405; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v0
406; GFX9-NEXT:    v_cndmask_b32_e32 v17, v17, v13, vcc
407; GFX9-NEXT:    v_cndmask_b32_e32 v18, v18, v14, vcc
408; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v19
409; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
410; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
411; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v19
412; GFX9-NEXT:    v_mov_b32_e32 v15, s14
413; GFX9-NEXT:    v_mov_b32_e32 v16, s15
414; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 7, v0
415; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
416; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
417; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 3, v19
418; GFX9-NEXT:    v_cndmask_b32_e32 v0, v17, v15, vcc
419; GFX9-NEXT:    v_cndmask_b32_e64 v3, v1, v7, s[0:1]
420; GFX9-NEXT:    v_cndmask_b32_e32 v1, v18, v16, vcc
421; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v8, s[0:1]
422; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v19
423; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
424; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v10, vcc
425; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v19
426; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v11, vcc
427; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
428; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v19
429; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v13, vcc
430; GFX9-NEXT:    v_cndmask_b32_e32 v4, v2, v14, vcc
431; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 7, v19
432; GFX9-NEXT:    v_cndmask_b32_e32 v2, v3, v15, vcc
433; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v16, vcc
434; GFX9-NEXT:    v_readfirstlane_b32 s0, v0
435; GFX9-NEXT:    v_readfirstlane_b32 s1, v1
436; GFX9-NEXT:    v_readfirstlane_b32 s2, v2
437; GFX9-NEXT:    v_readfirstlane_b32 s3, v3
438; GFX9-NEXT:    ; return to shader part epilog
439;
440; GFX8-LABEL: extractelement_sgpr_v4i128_vgpr_idx:
441; GFX8:       ; %bb.0:
442; GFX8-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
443; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
444; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
445; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
446; GFX8-NEXT:    v_mov_b32_e32 v1, s0
447; GFX8-NEXT:    v_mov_b32_e32 v2, s1
448; GFX8-NEXT:    v_mov_b32_e32 v3, s2
449; GFX8-NEXT:    v_mov_b32_e32 v4, s3
450; GFX8-NEXT:    v_mov_b32_e32 v5, s4
451; GFX8-NEXT:    v_mov_b32_e32 v6, s5
452; GFX8-NEXT:    v_cndmask_b32_e32 v17, v1, v3, vcc
453; GFX8-NEXT:    v_cndmask_b32_e32 v18, v2, v4, vcc
454; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v0
455; GFX8-NEXT:    v_mov_b32_e32 v7, s6
456; GFX8-NEXT:    v_mov_b32_e32 v8, s7
457; GFX8-NEXT:    v_cndmask_b32_e32 v17, v17, v5, vcc
458; GFX8-NEXT:    v_cndmask_b32_e32 v18, v18, v6, vcc
459; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v0
460; GFX8-NEXT:    v_mov_b32_e32 v9, s8
461; GFX8-NEXT:    v_mov_b32_e32 v10, s9
462; GFX8-NEXT:    v_cndmask_b32_e32 v17, v17, v7, vcc
463; GFX8-NEXT:    v_cndmask_b32_e32 v18, v18, v8, vcc
464; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v0
465; GFX8-NEXT:    v_mov_b32_e32 v11, s10
466; GFX8-NEXT:    v_mov_b32_e32 v12, s11
467; GFX8-NEXT:    v_cndmask_b32_e32 v17, v17, v9, vcc
468; GFX8-NEXT:    v_cndmask_b32_e32 v18, v18, v10, vcc
469; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v0
470; GFX8-NEXT:    v_mov_b32_e32 v13, s12
471; GFX8-NEXT:    v_mov_b32_e32 v14, s13
472; GFX8-NEXT:    v_cndmask_b32_e32 v17, v17, v11, vcc
473; GFX8-NEXT:    v_cndmask_b32_e32 v18, v18, v12, vcc
474; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v0
475; GFX8-NEXT:    v_cndmask_b32_e32 v17, v17, v13, vcc
476; GFX8-NEXT:    v_cndmask_b32_e32 v18, v18, v14, vcc
477; GFX8-NEXT:    v_add_u32_e32 v19, vcc, 1, v0
478; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v19
479; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
480; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
481; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v19
482; GFX8-NEXT:    v_mov_b32_e32 v15, s14
483; GFX8-NEXT:    v_mov_b32_e32 v16, s15
484; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 7, v0
485; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
486; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
487; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 3, v19
488; GFX8-NEXT:    v_cndmask_b32_e32 v0, v17, v15, vcc
489; GFX8-NEXT:    v_cndmask_b32_e64 v3, v1, v7, s[0:1]
490; GFX8-NEXT:    v_cndmask_b32_e32 v1, v18, v16, vcc
491; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v8, s[0:1]
492; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v19
493; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
494; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v10, vcc
495; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v19
496; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v11, vcc
497; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
498; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v19
499; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v13, vcc
500; GFX8-NEXT:    v_cndmask_b32_e32 v4, v2, v14, vcc
501; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 7, v19
502; GFX8-NEXT:    v_cndmask_b32_e32 v2, v3, v15, vcc
503; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v16, vcc
504; GFX8-NEXT:    v_readfirstlane_b32 s0, v0
505; GFX8-NEXT:    v_readfirstlane_b32 s1, v1
506; GFX8-NEXT:    v_readfirstlane_b32 s2, v2
507; GFX8-NEXT:    v_readfirstlane_b32 s3, v3
508; GFX8-NEXT:    ; return to shader part epilog
509;
510; GFX7-LABEL: extractelement_sgpr_v4i128_vgpr_idx:
511; GFX7:       ; %bb.0:
512; GFX7-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
513; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
514; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
515; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
516; GFX7-NEXT:    v_mov_b32_e32 v1, s0
517; GFX7-NEXT:    v_mov_b32_e32 v2, s1
518; GFX7-NEXT:    v_mov_b32_e32 v3, s2
519; GFX7-NEXT:    v_mov_b32_e32 v4, s3
520; GFX7-NEXT:    v_mov_b32_e32 v5, s4
521; GFX7-NEXT:    v_mov_b32_e32 v6, s5
522; GFX7-NEXT:    v_cndmask_b32_e32 v17, v1, v3, vcc
523; GFX7-NEXT:    v_cndmask_b32_e32 v18, v2, v4, vcc
524; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 2, v0
525; GFX7-NEXT:    v_mov_b32_e32 v7, s6
526; GFX7-NEXT:    v_mov_b32_e32 v8, s7
527; GFX7-NEXT:    v_cndmask_b32_e32 v17, v17, v5, vcc
528; GFX7-NEXT:    v_cndmask_b32_e32 v18, v18, v6, vcc
529; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 3, v0
530; GFX7-NEXT:    v_mov_b32_e32 v9, s8
531; GFX7-NEXT:    v_mov_b32_e32 v10, s9
532; GFX7-NEXT:    v_cndmask_b32_e32 v17, v17, v7, vcc
533; GFX7-NEXT:    v_cndmask_b32_e32 v18, v18, v8, vcc
534; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v0
535; GFX7-NEXT:    v_mov_b32_e32 v11, s10
536; GFX7-NEXT:    v_mov_b32_e32 v12, s11
537; GFX7-NEXT:    v_cndmask_b32_e32 v17, v17, v9, vcc
538; GFX7-NEXT:    v_cndmask_b32_e32 v18, v18, v10, vcc
539; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v0
540; GFX7-NEXT:    v_mov_b32_e32 v13, s12
541; GFX7-NEXT:    v_mov_b32_e32 v14, s13
542; GFX7-NEXT:    v_cndmask_b32_e32 v17, v17, v11, vcc
543; GFX7-NEXT:    v_cndmask_b32_e32 v18, v18, v12, vcc
544; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v0
545; GFX7-NEXT:    v_cndmask_b32_e32 v17, v17, v13, vcc
546; GFX7-NEXT:    v_cndmask_b32_e32 v18, v18, v14, vcc
547; GFX7-NEXT:    v_add_i32_e32 v19, vcc, 1, v0
548; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v19
549; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
550; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
551; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v19
552; GFX7-NEXT:    v_mov_b32_e32 v15, s14
553; GFX7-NEXT:    v_mov_b32_e32 v16, s15
554; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 7, v0
555; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
556; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
557; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 3, v19
558; GFX7-NEXT:    v_cndmask_b32_e32 v0, v17, v15, vcc
559; GFX7-NEXT:    v_cndmask_b32_e64 v3, v1, v7, s[0:1]
560; GFX7-NEXT:    v_cndmask_b32_e32 v1, v18, v16, vcc
561; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v8, s[0:1]
562; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 4, v19
563; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
564; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v10, vcc
565; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 5, v19
566; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v11, vcc
567; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
568; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 6, v19
569; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v13, vcc
570; GFX7-NEXT:    v_cndmask_b32_e32 v4, v2, v14, vcc
571; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 7, v19
572; GFX7-NEXT:    v_cndmask_b32_e32 v2, v3, v15, vcc
573; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v16, vcc
574; GFX7-NEXT:    v_readfirstlane_b32 s0, v0
575; GFX7-NEXT:    v_readfirstlane_b32 s1, v1
576; GFX7-NEXT:    v_readfirstlane_b32 s2, v2
577; GFX7-NEXT:    v_readfirstlane_b32 s3, v3
578; GFX7-NEXT:    ; return to shader part epilog
579;
580; GFX10-LABEL: extractelement_sgpr_v4i128_vgpr_idx:
581; GFX10:       ; %bb.0:
582; GFX10-NEXT:    s_load_dwordx16 s[4:19], s[2:3], 0x0
583; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
584; GFX10-NEXT:    v_add_nc_u32_e32 v1, 1, v0
585; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
586; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 1, v1
587; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
588; GFX10-NEXT:    v_mov_b32_e32 v2, s6
589; GFX10-NEXT:    v_mov_b32_e32 v3, s7
590; GFX10-NEXT:    v_cndmask_b32_e32 v4, s4, v2, vcc_lo
591; GFX10-NEXT:    v_cndmask_b32_e32 v5, s5, v3, vcc_lo
592; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 2, v0
593; GFX10-NEXT:    v_cndmask_b32_e64 v2, s4, v2, s0
594; GFX10-NEXT:    v_cndmask_b32_e64 v3, s5, v3, s0
595; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v1
596; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, s8, vcc_lo
597; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, s9, vcc_lo
598; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 3, v0
599; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s8, s0
600; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, s9, s0
601; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 3, v1
602; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, s10, vcc_lo
603; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, s11, vcc_lo
604; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 4, v0
605; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s10, s0
606; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, s11, s0
607; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 4, v1
608; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, s12, vcc_lo
609; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, s13, vcc_lo
610; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 5, v0
611; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s12, s0
612; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, s13, s0
613; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 5, v1
614; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, s14, vcc_lo
615; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, s15, vcc_lo
616; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 6, v0
617; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s14, s0
618; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, s15, s0
619; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 6, v1
620; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, s16, vcc_lo
621; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, s17, vcc_lo
622; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 7, v0
623; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s16, s0
624; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, s17, s0
625; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 7, v1
626; GFX10-NEXT:    v_cndmask_b32_e64 v0, v4, s18, vcc_lo
627; GFX10-NEXT:    v_cndmask_b32_e64 v1, v5, s19, vcc_lo
628; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s18, s0
629; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, s19, s0
630; GFX10-NEXT:    v_readfirstlane_b32 s0, v0
631; GFX10-NEXT:    v_readfirstlane_b32 s1, v1
632; GFX10-NEXT:    v_readfirstlane_b32 s2, v2
633; GFX10-NEXT:    v_readfirstlane_b32 s3, v3
634; GFX10-NEXT:    ; return to shader part epilog
635  %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr
636  %element = extractelement <4 x i128> %vector, i32 %idx
637  ret i128 %element
638}
639
640define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx0(<4 x i128> addrspace(4)* inreg %ptr) {
641; GCN-LABEL: extractelement_sgpr_v4i128_idx0:
642; GCN:       ; %bb.0:
643; GCN-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
644; GCN-NEXT:    s_waitcnt lgkmcnt(0)
645; GCN-NEXT:    ; return to shader part epilog
646;
647; GFX10-LABEL: extractelement_sgpr_v4i128_idx0:
648; GFX10:       ; %bb.0:
649; GFX10-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
650; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
651; GFX10-NEXT:    ; return to shader part epilog
652  %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr
653  %element = extractelement <4 x i128> %vector, i32 0
654  ret i128 %element
655}
656
657define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx1(<4 x i128> addrspace(4)* inreg %ptr) {
658; GCN-LABEL: extractelement_sgpr_v4i128_idx1:
659; GCN:       ; %bb.0:
660; GCN-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
661; GCN-NEXT:    s_waitcnt lgkmcnt(0)
662; GCN-NEXT:    s_mov_b32 s0, s4
663; GCN-NEXT:    s_mov_b32 s1, s5
664; GCN-NEXT:    s_mov_b32 s2, s6
665; GCN-NEXT:    s_mov_b32 s3, s7
666; GCN-NEXT:    ; return to shader part epilog
667;
668; GFX10-LABEL: extractelement_sgpr_v4i128_idx1:
669; GFX10:       ; %bb.0:
670; GFX10-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
671; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
672; GFX10-NEXT:    s_mov_b32 s0, s4
673; GFX10-NEXT:    s_mov_b32 s1, s5
674; GFX10-NEXT:    s_mov_b32 s2, s6
675; GFX10-NEXT:    s_mov_b32 s3, s7
676; GFX10-NEXT:    ; return to shader part epilog
677  %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr
678  %element = extractelement <4 x i128> %vector, i32 1
679  ret i128 %element
680}
681
682define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx2(<4 x i128> addrspace(4)* inreg %ptr) {
683; GCN-LABEL: extractelement_sgpr_v4i128_idx2:
684; GCN:       ; %bb.0:
685; GCN-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
686; GCN-NEXT:    s_waitcnt lgkmcnt(0)
687; GCN-NEXT:    s_mov_b32 s0, s8
688; GCN-NEXT:    s_mov_b32 s1, s9
689; GCN-NEXT:    s_mov_b32 s2, s10
690; GCN-NEXT:    s_mov_b32 s3, s11
691; GCN-NEXT:    ; return to shader part epilog
692;
693; GFX10-LABEL: extractelement_sgpr_v4i128_idx2:
694; GFX10:       ; %bb.0:
695; GFX10-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
696; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
697; GFX10-NEXT:    s_mov_b32 s0, s8
698; GFX10-NEXT:    s_mov_b32 s1, s9
699; GFX10-NEXT:    s_mov_b32 s2, s10
700; GFX10-NEXT:    s_mov_b32 s3, s11
701; GFX10-NEXT:    ; return to shader part epilog
702  %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr
703  %element = extractelement <4 x i128> %vector, i32 2
704  ret i128 %element
705}
706
707define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx3(<4 x i128> addrspace(4)* inreg %ptr) {
708; GCN-LABEL: extractelement_sgpr_v4i128_idx3:
709; GCN:       ; %bb.0:
710; GCN-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
711; GCN-NEXT:    s_waitcnt lgkmcnt(0)
712; GCN-NEXT:    s_mov_b32 s0, s12
713; GCN-NEXT:    s_mov_b32 s1, s13
714; GCN-NEXT:    s_mov_b32 s2, s14
715; GCN-NEXT:    s_mov_b32 s3, s15
716; GCN-NEXT:    ; return to shader part epilog
717;
718; GFX10-LABEL: extractelement_sgpr_v4i128_idx3:
719; GFX10:       ; %bb.0:
720; GFX10-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
721; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
722; GFX10-NEXT:    s_mov_b32 s0, s12
723; GFX10-NEXT:    s_mov_b32 s1, s13
724; GFX10-NEXT:    s_mov_b32 s2, s14
725; GFX10-NEXT:    s_mov_b32 s3, s15
726; GFX10-NEXT:    ; return to shader part epilog
727  %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr
728  %element = extractelement <4 x i128> %vector, i32 3
729  ret i128 %element
730}
731
732define i128 @extractelement_vgpr_v4i128_idx0(<4 x i128> addrspace(1)* %ptr) {
733; GFX9-LABEL: extractelement_vgpr_v4i128_idx0:
734; GFX9:       ; %bb.0:
735; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
736; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
737; GFX9-NEXT:    s_waitcnt vmcnt(0)
738; GFX9-NEXT:    s_setpc_b64 s[30:31]
739;
740; GFX8-LABEL: extractelement_vgpr_v4i128_idx0:
741; GFX8:       ; %bb.0:
742; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
743; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
744; GFX8-NEXT:    s_waitcnt vmcnt(0)
745; GFX8-NEXT:    s_setpc_b64 s[30:31]
746;
747; GFX7-LABEL: extractelement_vgpr_v4i128_idx0:
748; GFX7:       ; %bb.0:
749; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
750; GFX7-NEXT:    s_mov_b32 s6, 0
751; GFX7-NEXT:    s_mov_b32 s7, 0xf000
752; GFX7-NEXT:    s_mov_b64 s[4:5], 0
753; GFX7-NEXT:    buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64
754; GFX7-NEXT:    s_waitcnt vmcnt(0)
755; GFX7-NEXT:    s_setpc_b64 s[30:31]
756;
757; GFX10-LABEL: extractelement_vgpr_v4i128_idx0:
758; GFX10:       ; %bb.0:
759; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
760; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
761; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
762; GFX10-NEXT:    s_waitcnt vmcnt(0)
763; GFX10-NEXT:    s_setpc_b64 s[30:31]
764  %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr
765  %element = extractelement <4 x i128> %vector, i32 0
766  ret i128 %element
767}
768
769define i128 @extractelement_vgpr_v4i128_idx1(<4 x i128> addrspace(1)* %ptr) {
770; GFX9-LABEL: extractelement_vgpr_v4i128_idx1:
771; GFX9:       ; %bb.0:
772; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
773; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
774; GFX9-NEXT:    s_waitcnt vmcnt(0)
775; GFX9-NEXT:    v_mov_b32_e32 v0, v4
776; GFX9-NEXT:    v_mov_b32_e32 v1, v5
777; GFX9-NEXT:    v_mov_b32_e32 v2, v6
778; GFX9-NEXT:    v_mov_b32_e32 v3, v7
779; GFX9-NEXT:    s_setpc_b64 s[30:31]
780;
781; GFX8-LABEL: extractelement_vgpr_v4i128_idx1:
782; GFX8:       ; %bb.0:
783; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
784; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v0
785; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
786; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
787; GFX8-NEXT:    s_waitcnt vmcnt(0)
788; GFX8-NEXT:    v_mov_b32_e32 v0, v4
789; GFX8-NEXT:    v_mov_b32_e32 v1, v5
790; GFX8-NEXT:    v_mov_b32_e32 v2, v6
791; GFX8-NEXT:    v_mov_b32_e32 v3, v7
792; GFX8-NEXT:    s_setpc_b64 s[30:31]
793;
794; GFX7-LABEL: extractelement_vgpr_v4i128_idx1:
795; GFX7:       ; %bb.0:
796; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
797; GFX7-NEXT:    s_mov_b32 s6, 0
798; GFX7-NEXT:    s_mov_b32 s7, 0xf000
799; GFX7-NEXT:    s_mov_b64 s[4:5], 0
800; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64 offset:16
801; GFX7-NEXT:    s_waitcnt vmcnt(0)
802; GFX7-NEXT:    v_mov_b32_e32 v0, v4
803; GFX7-NEXT:    v_mov_b32_e32 v1, v5
804; GFX7-NEXT:    v_mov_b32_e32 v2, v6
805; GFX7-NEXT:    v_mov_b32_e32 v3, v7
806; GFX7-NEXT:    s_setpc_b64 s[30:31]
807;
808; GFX10-LABEL: extractelement_vgpr_v4i128_idx1:
809; GFX10:       ; %bb.0:
810; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
811; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
812; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off offset:16
813; GFX10-NEXT:    s_waitcnt vmcnt(0)
814; GFX10-NEXT:    v_mov_b32_e32 v0, v4
815; GFX10-NEXT:    v_mov_b32_e32 v1, v5
816; GFX10-NEXT:    v_mov_b32_e32 v2, v6
817; GFX10-NEXT:    v_mov_b32_e32 v3, v7
818; GFX10-NEXT:    s_setpc_b64 s[30:31]
819  %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr
820  %element = extractelement <4 x i128> %vector, i32 1
821  ret i128 %element
822}
823
824define i128 @extractelement_vgpr_v4i128_idx2(<4 x i128> addrspace(1)* %ptr) {
825; GFX9-LABEL: extractelement_vgpr_v4i128_idx2:
826; GFX9:       ; %bb.0:
827; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
828; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:32
829; GFX9-NEXT:    s_waitcnt vmcnt(0)
830; GFX9-NEXT:    v_mov_b32_e32 v0, v8
831; GFX9-NEXT:    v_mov_b32_e32 v1, v9
832; GFX9-NEXT:    v_mov_b32_e32 v2, v10
833; GFX9-NEXT:    v_mov_b32_e32 v3, v11
834; GFX9-NEXT:    s_setpc_b64 s[30:31]
835;
836; GFX8-LABEL: extractelement_vgpr_v4i128_idx2:
837; GFX8:       ; %bb.0:
838; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
839; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 32, v0
840; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
841; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[0:1]
842; GFX8-NEXT:    s_waitcnt vmcnt(0)
843; GFX8-NEXT:    v_mov_b32_e32 v0, v8
844; GFX8-NEXT:    v_mov_b32_e32 v1, v9
845; GFX8-NEXT:    v_mov_b32_e32 v2, v10
846; GFX8-NEXT:    v_mov_b32_e32 v3, v11
847; GFX8-NEXT:    s_setpc_b64 s[30:31]
848;
849; GFX7-LABEL: extractelement_vgpr_v4i128_idx2:
850; GFX7:       ; %bb.0:
851; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
852; GFX7-NEXT:    s_mov_b32 s6, 0
853; GFX7-NEXT:    s_mov_b32 s7, 0xf000
854; GFX7-NEXT:    s_mov_b64 s[4:5], 0
855; GFX7-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[4:7], 0 addr64 offset:32
856; GFX7-NEXT:    s_waitcnt vmcnt(0)
857; GFX7-NEXT:    v_mov_b32_e32 v0, v8
858; GFX7-NEXT:    v_mov_b32_e32 v1, v9
859; GFX7-NEXT:    v_mov_b32_e32 v2, v10
860; GFX7-NEXT:    v_mov_b32_e32 v3, v11
861; GFX7-NEXT:    s_setpc_b64 s[30:31]
862;
863; GFX10-LABEL: extractelement_vgpr_v4i128_idx2:
864; GFX10:       ; %bb.0:
865; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
866; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
867; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:32
868; GFX10-NEXT:    s_waitcnt vmcnt(0)
869; GFX10-NEXT:    v_mov_b32_e32 v0, v8
870; GFX10-NEXT:    v_mov_b32_e32 v1, v9
871; GFX10-NEXT:    v_mov_b32_e32 v2, v10
872; GFX10-NEXT:    v_mov_b32_e32 v3, v11
873; GFX10-NEXT:    s_setpc_b64 s[30:31]
874  %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr
875  %element = extractelement <4 x i128> %vector, i32 2
876  ret i128 %element
877}
878
879define i128 @extractelement_vgpr_v4i128_idx3(<4 x i128> addrspace(1)* %ptr) {
880; GFX9-LABEL: extractelement_vgpr_v4i128_idx3:
881; GFX9:       ; %bb.0:
882; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
883; GFX9-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:48
884; GFX9-NEXT:    s_waitcnt vmcnt(0)
885; GFX9-NEXT:    v_mov_b32_e32 v0, v12
886; GFX9-NEXT:    v_mov_b32_e32 v1, v13
887; GFX9-NEXT:    v_mov_b32_e32 v2, v14
888; GFX9-NEXT:    v_mov_b32_e32 v3, v15
889; GFX9-NEXT:    s_setpc_b64 s[30:31]
890;
891; GFX8-LABEL: extractelement_vgpr_v4i128_idx3:
892; GFX8:       ; %bb.0:
893; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
894; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 48, v0
895; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
896; GFX8-NEXT:    flat_load_dwordx4 v[12:15], v[0:1]
897; GFX8-NEXT:    s_waitcnt vmcnt(0)
898; GFX8-NEXT:    v_mov_b32_e32 v0, v12
899; GFX8-NEXT:    v_mov_b32_e32 v1, v13
900; GFX8-NEXT:    v_mov_b32_e32 v2, v14
901; GFX8-NEXT:    v_mov_b32_e32 v3, v15
902; GFX8-NEXT:    s_setpc_b64 s[30:31]
903;
904; GFX7-LABEL: extractelement_vgpr_v4i128_idx3:
905; GFX7:       ; %bb.0:
906; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
907; GFX7-NEXT:    s_mov_b32 s6, 0
908; GFX7-NEXT:    s_mov_b32 s7, 0xf000
909; GFX7-NEXT:    s_mov_b64 s[4:5], 0
910; GFX7-NEXT:    buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:48
911; GFX7-NEXT:    s_waitcnt vmcnt(0)
912; GFX7-NEXT:    v_mov_b32_e32 v0, v12
913; GFX7-NEXT:    v_mov_b32_e32 v1, v13
914; GFX7-NEXT:    v_mov_b32_e32 v2, v14
915; GFX7-NEXT:    v_mov_b32_e32 v3, v15
916; GFX7-NEXT:    s_setpc_b64 s[30:31]
917;
918; GFX10-LABEL: extractelement_vgpr_v4i128_idx3:
919; GFX10:       ; %bb.0:
920; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
921; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
922; GFX10-NEXT:    global_load_dwordx4 v[12:15], v[0:1], off offset:48
923; GFX10-NEXT:    s_waitcnt vmcnt(0)
924; GFX10-NEXT:    v_mov_b32_e32 v0, v12
925; GFX10-NEXT:    v_mov_b32_e32 v1, v13
926; GFX10-NEXT:    v_mov_b32_e32 v2, v14
927; GFX10-NEXT:    v_mov_b32_e32 v3, v15
928; GFX10-NEXT:    s_setpc_b64 s[30:31]
929  %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr
930  %element = extractelement <4 x i128> %vector, i32 3
931  ret i128 %element
932}
933