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; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11 %s 7 8define amdgpu_ps i16 @extractelement_sgpr_v4i16_sgpr_idx(<4 x i16> addrspace(4)* inreg %ptr, i32 inreg %idx) { 9; GCN-LABEL: extractelement_sgpr_v4i16_sgpr_idx: 10; GCN: ; %bb.0: 11; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 12; GCN-NEXT: s_lshr_b32 s2, s4, 1 13; GCN-NEXT: s_cmp_eq_u32 s2, 1 14; GCN-NEXT: s_waitcnt lgkmcnt(0) 15; GCN-NEXT: s_cselect_b32 s0, s1, s0 16; GCN-NEXT: s_and_b32 s1, s4, 1 17; GCN-NEXT: s_lshl_b32 s1, s1, 4 18; GCN-NEXT: s_lshr_b32 s0, s0, s1 19; GCN-NEXT: ; return to shader part epilog 20; 21; GFX10-LABEL: extractelement_sgpr_v4i16_sgpr_idx: 22; GFX10: ; %bb.0: 23; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 24; GFX10-NEXT: s_lshr_b32 s2, s4, 1 25; GFX10-NEXT: s_cmp_eq_u32 s2, 1 26; GFX10-NEXT: s_waitcnt lgkmcnt(0) 27; GFX10-NEXT: s_cselect_b32 s0, s1, s0 28; GFX10-NEXT: s_and_b32 s1, s4, 1 29; GFX10-NEXT: s_lshl_b32 s1, s1, 4 30; GFX10-NEXT: s_lshr_b32 s0, s0, s1 31; GFX10-NEXT: ; return to shader part epilog 32; 33; GFX11-LABEL: extractelement_sgpr_v4i16_sgpr_idx: 34; GFX11: ; %bb.0: 35; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x0 36; GFX11-NEXT: s_lshr_b32 s2, s4, 1 37; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1) 38; GFX11-NEXT: s_cmp_eq_u32 s2, 1 39; GFX11-NEXT: s_waitcnt lgkmcnt(0) 40; GFX11-NEXT: s_cselect_b32 s0, s1, s0 41; GFX11-NEXT: s_and_b32 s1, s4, 1 42; GFX11-NEXT: s_lshl_b32 s1, s1, 4 43; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) 44; GFX11-NEXT: s_lshr_b32 s0, s0, s1 45; GFX11-NEXT: ; return to shader part epilog 46 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 47 %element = extractelement <4 x i16> %vector, i32 %idx 48 ret i16 %element 49} 50 51define amdgpu_ps i16 @extractelement_vgpr_v4i16_sgpr_idx(<4 x i16> addrspace(1)* %ptr, i32 inreg %idx) { 52; GFX9-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 53; GFX9: ; %bb.0: 54; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 55; GFX9-NEXT: s_lshr_b32 s0, s2, 1 56; GFX9-NEXT: s_and_b32 s1, s2, 1 57; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 58; GFX9-NEXT: s_lshl_b32 s0, s1, 4 59; GFX9-NEXT: s_waitcnt vmcnt(0) 60; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 61; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 62; GFX9-NEXT: v_readfirstlane_b32 s0, v0 63; GFX9-NEXT: ; return to shader part epilog 64; 65; GFX8-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 66; GFX8: ; %bb.0: 67; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 68; GFX8-NEXT: s_lshr_b32 s0, s2, 1 69; GFX8-NEXT: s_and_b32 s1, s2, 1 70; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 71; GFX8-NEXT: s_lshl_b32 s0, s1, 4 72; GFX8-NEXT: s_waitcnt vmcnt(0) 73; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 74; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 75; GFX8-NEXT: v_readfirstlane_b32 s0, v0 76; GFX8-NEXT: ; return to shader part epilog 77; 78; GFX7-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 79; GFX7: ; %bb.0: 80; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 81; GFX7-NEXT: s_lshr_b32 s0, s2, 1 82; GFX7-NEXT: s_and_b32 s1, s2, 1 83; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 84; GFX7-NEXT: s_lshl_b32 s0, s1, 4 85; GFX7-NEXT: s_waitcnt vmcnt(0) 86; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 87; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 88; GFX7-NEXT: v_readfirstlane_b32 s0, v0 89; GFX7-NEXT: ; return to shader part epilog 90; 91; GFX10-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 92; GFX10: ; %bb.0: 93; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 94; GFX10-NEXT: s_lshr_b32 s0, s2, 1 95; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 96; GFX10-NEXT: s_and_b32 s0, s2, 1 97; GFX10-NEXT: s_lshl_b32 s0, s0, 4 98; GFX10-NEXT: s_waitcnt vmcnt(0) 99; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 100; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 101; GFX10-NEXT: v_readfirstlane_b32 s0, v0 102; GFX10-NEXT: ; return to shader part epilog 103; 104; GFX11-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 105; GFX11: ; %bb.0: 106; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off 107; GFX11-NEXT: s_lshr_b32 s0, s2, 1 108; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1) 109; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 110; GFX11-NEXT: s_and_b32 s0, s2, 1 111; GFX11-NEXT: s_lshl_b32 s0, s0, 4 112; GFX11-NEXT: s_waitcnt vmcnt(0) 113; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 114; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 115; GFX11-NEXT: v_lshrrev_b32_e32 v0, s0, v0 116; GFX11-NEXT: v_readfirstlane_b32 s0, v0 117; GFX11-NEXT: ; return to shader part epilog 118 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 119 %element = extractelement <4 x i16> %vector, i32 %idx 120 ret i16 %element 121} 122 123define i16 @extractelement_vgpr_v4i16_vgpr_idx(<4 x i16> addrspace(1)* %ptr, i32 %idx) { 124; GFX9-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 125; GFX9: ; %bb.0: 126; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 127; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 128; GFX9-NEXT: v_lshrrev_b32_e32 v3, 1, v2 129; GFX9-NEXT: v_and_b32_e32 v2, 1, v2 130; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 131; GFX9-NEXT: s_waitcnt vmcnt(0) 132; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 133; GFX9-NEXT: v_lshlrev_b32_e32 v1, 4, v2 134; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 135; GFX9-NEXT: s_setpc_b64 s[30:31] 136; 137; GFX8-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 138; GFX8: ; %bb.0: 139; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 140; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 141; GFX8-NEXT: v_lshrrev_b32_e32 v3, 1, v2 142; GFX8-NEXT: v_and_b32_e32 v2, 1, v2 143; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 144; GFX8-NEXT: s_waitcnt vmcnt(0) 145; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 146; GFX8-NEXT: v_lshlrev_b32_e32 v1, 4, v2 147; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 148; GFX8-NEXT: s_setpc_b64 s[30:31] 149; 150; GFX7-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 151; GFX7: ; %bb.0: 152; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 153; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 154; GFX7-NEXT: v_lshrrev_b32_e32 v3, 1, v2 155; GFX7-NEXT: v_and_b32_e32 v2, 1, v2 156; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 157; GFX7-NEXT: s_waitcnt vmcnt(0) 158; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 159; GFX7-NEXT: v_lshlrev_b32_e32 v1, 4, v2 160; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 161; GFX7-NEXT: s_setpc_b64 s[30:31] 162; 163; GFX10-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 164; GFX10: ; %bb.0: 165; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 166; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 167; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 168; GFX10-NEXT: v_lshrrev_b32_e32 v3, 1, v2 169; GFX10-NEXT: v_and_b32_e32 v2, 1, v2 170; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v3 171; GFX10-NEXT: s_waitcnt vmcnt(0) 172; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 173; GFX10-NEXT: v_lshlrev_b32_e32 v1, 4, v2 174; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 175; GFX10-NEXT: s_setpc_b64 s[30:31] 176; 177; GFX11-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 178; GFX11: ; %bb.0: 179; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 180; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 181; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off 182; GFX11-NEXT: v_lshrrev_b32_e32 v3, 1, v2 183; GFX11-NEXT: v_and_b32_e32 v2, 1, v2 184; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2) 185; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v3 186; GFX11-NEXT: s_waitcnt vmcnt(0) 187; GFX11-NEXT: v_dual_cndmask_b32 v0, v0, v1 :: v_dual_lshlrev_b32 v1, 4, v2 188; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 189; GFX11-NEXT: v_lshrrev_b32_e32 v0, v1, v0 190; GFX11-NEXT: s_setpc_b64 s[30:31] 191 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 192 %element = extractelement <4 x i16> %vector, i32 %idx 193 ret i16 %element 194} 195 196define amdgpu_ps i16 @extractelement_sgpr_v4i16_vgpr_idx(<4 x i16> addrspace(4)* inreg %ptr, i32 %idx) { 197; GCN-LABEL: extractelement_sgpr_v4i16_vgpr_idx: 198; GCN: ; %bb.0: 199; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 200; GCN-NEXT: v_lshrrev_b32_e32 v1, 1, v0 201; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1 202; GCN-NEXT: v_and_b32_e32 v0, 1, v0 203; GCN-NEXT: v_lshlrev_b32_e32 v0, 4, v0 204; GCN-NEXT: s_waitcnt lgkmcnt(0) 205; GCN-NEXT: v_mov_b32_e32 v2, s0 206; GCN-NEXT: v_mov_b32_e32 v3, s1 207; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc 208; GCN-NEXT: v_lshrrev_b32_e32 v0, v0, v1 209; GCN-NEXT: v_readfirstlane_b32 s0, v0 210; GCN-NEXT: ; return to shader part epilog 211; 212; GFX10-LABEL: extractelement_sgpr_v4i16_vgpr_idx: 213; GFX10: ; %bb.0: 214; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 215; GFX10-NEXT: v_lshrrev_b32_e32 v1, 1, v0 216; GFX10-NEXT: v_and_b32_e32 v0, 1, v0 217; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 218; GFX10-NEXT: v_lshlrev_b32_e32 v0, 4, v0 219; GFX10-NEXT: s_waitcnt lgkmcnt(0) 220; GFX10-NEXT: v_mov_b32_e32 v2, s1 221; GFX10-NEXT: v_cndmask_b32_e32 v1, s0, v2, vcc_lo 222; GFX10-NEXT: v_lshrrev_b32_e32 v0, v0, v1 223; GFX10-NEXT: v_readfirstlane_b32 s0, v0 224; GFX10-NEXT: ; return to shader part epilog 225; 226; GFX11-LABEL: extractelement_sgpr_v4i16_vgpr_idx: 227; GFX11: ; %bb.0: 228; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x0 229; GFX11-NEXT: v_lshrrev_b32_e32 v1, 1, v0 230; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1) 231; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 232; GFX11-NEXT: s_waitcnt lgkmcnt(0) 233; GFX11-NEXT: v_mov_b32_e32 v2, s1 234; GFX11-NEXT: v_dual_cndmask_b32 v1, s0, v2 :: v_dual_and_b32 v0, 1, v0 235; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 236; GFX11-NEXT: v_lshlrev_b32_e32 v0, 4, v0 237; GFX11-NEXT: v_lshrrev_b32_e32 v0, v0, v1 238; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 239; GFX11-NEXT: v_readfirstlane_b32 s0, v0 240; GFX11-NEXT: ; return to shader part epilog 241 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 242 %element = extractelement <4 x i16> %vector, i32 %idx 243 ret i16 %element 244} 245 246define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx0(<4 x i16> addrspace(4)* inreg %ptr) { 247; GCN-LABEL: extractelement_sgpr_v4i16_idx0: 248; GCN: ; %bb.0: 249; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 250; GCN-NEXT: s_waitcnt lgkmcnt(0) 251; GCN-NEXT: ; return to shader part epilog 252; 253; GFX10-LABEL: extractelement_sgpr_v4i16_idx0: 254; GFX10: ; %bb.0: 255; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 256; GFX10-NEXT: s_waitcnt lgkmcnt(0) 257; GFX10-NEXT: ; return to shader part epilog 258; 259; GFX11-LABEL: extractelement_sgpr_v4i16_idx0: 260; GFX11: ; %bb.0: 261; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x0 262; GFX11-NEXT: s_waitcnt lgkmcnt(0) 263; GFX11-NEXT: ; return to shader part epilog 264 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 265 %element = extractelement <4 x i16> %vector, i32 0 266 ret i16 %element 267} 268 269define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx1(<4 x i16> addrspace(4)* inreg %ptr) { 270; GCN-LABEL: extractelement_sgpr_v4i16_idx1: 271; GCN: ; %bb.0: 272; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 273; GCN-NEXT: s_waitcnt lgkmcnt(0) 274; GCN-NEXT: s_lshr_b32 s0, s0, 16 275; GCN-NEXT: ; return to shader part epilog 276; 277; GFX10-LABEL: extractelement_sgpr_v4i16_idx1: 278; GFX10: ; %bb.0: 279; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 280; GFX10-NEXT: s_waitcnt lgkmcnt(0) 281; GFX10-NEXT: s_lshr_b32 s0, s0, 16 282; GFX10-NEXT: ; return to shader part epilog 283; 284; GFX11-LABEL: extractelement_sgpr_v4i16_idx1: 285; GFX11: ; %bb.0: 286; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x0 287; GFX11-NEXT: s_waitcnt lgkmcnt(0) 288; GFX11-NEXT: s_lshr_b32 s0, s0, 16 289; GFX11-NEXT: ; return to shader part epilog 290 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 291 %element = extractelement <4 x i16> %vector, i32 1 292 ret i16 %element 293} 294 295define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx2(<4 x i16> addrspace(4)* inreg %ptr) { 296; GCN-LABEL: extractelement_sgpr_v4i16_idx2: 297; GCN: ; %bb.0: 298; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 299; GCN-NEXT: s_waitcnt lgkmcnt(0) 300; GCN-NEXT: s_mov_b32 s0, s1 301; GCN-NEXT: ; return to shader part epilog 302; 303; GFX10-LABEL: extractelement_sgpr_v4i16_idx2: 304; GFX10: ; %bb.0: 305; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 306; GFX10-NEXT: s_waitcnt lgkmcnt(0) 307; GFX10-NEXT: s_mov_b32 s0, s1 308; GFX10-NEXT: ; return to shader part epilog 309; 310; GFX11-LABEL: extractelement_sgpr_v4i16_idx2: 311; GFX11: ; %bb.0: 312; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x0 313; GFX11-NEXT: s_waitcnt lgkmcnt(0) 314; GFX11-NEXT: s_mov_b32 s0, s1 315; GFX11-NEXT: ; return to shader part epilog 316 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 317 %element = extractelement <4 x i16> %vector, i32 2 318 ret i16 %element 319} 320 321define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx3(<4 x i16> addrspace(4)* inreg %ptr) { 322; GCN-LABEL: extractelement_sgpr_v4i16_idx3: 323; GCN: ; %bb.0: 324; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 325; GCN-NEXT: s_waitcnt lgkmcnt(0) 326; GCN-NEXT: s_lshr_b32 s0, s1, 16 327; GCN-NEXT: ; return to shader part epilog 328; 329; GFX10-LABEL: extractelement_sgpr_v4i16_idx3: 330; GFX10: ; %bb.0: 331; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 332; GFX10-NEXT: s_waitcnt lgkmcnt(0) 333; GFX10-NEXT: s_lshr_b32 s0, s1, 16 334; GFX10-NEXT: ; return to shader part epilog 335; 336; GFX11-LABEL: extractelement_sgpr_v4i16_idx3: 337; GFX11: ; %bb.0: 338; GFX11-NEXT: s_load_b64 s[0:1], s[2:3], 0x0 339; GFX11-NEXT: s_waitcnt lgkmcnt(0) 340; GFX11-NEXT: s_lshr_b32 s0, s1, 16 341; GFX11-NEXT: ; return to shader part epilog 342 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 343 %element = extractelement <4 x i16> %vector, i32 3 344 ret i16 %element 345} 346 347define i16 @extractelement_vgpr_v4i16_idx0(<4 x i16> addrspace(1)* %ptr) { 348; GFX9-LABEL: extractelement_vgpr_v4i16_idx0: 349; GFX9: ; %bb.0: 350; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 351; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 352; GFX9-NEXT: s_waitcnt vmcnt(0) 353; GFX9-NEXT: s_setpc_b64 s[30:31] 354; 355; GFX8-LABEL: extractelement_vgpr_v4i16_idx0: 356; GFX8: ; %bb.0: 357; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 358; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 359; GFX8-NEXT: s_waitcnt vmcnt(0) 360; GFX8-NEXT: s_setpc_b64 s[30:31] 361; 362; GFX7-LABEL: extractelement_vgpr_v4i16_idx0: 363; GFX7: ; %bb.0: 364; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 365; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 366; GFX7-NEXT: s_waitcnt vmcnt(0) 367; GFX7-NEXT: s_setpc_b64 s[30:31] 368; 369; GFX10-LABEL: extractelement_vgpr_v4i16_idx0: 370; GFX10: ; %bb.0: 371; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 372; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 373; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 374; GFX10-NEXT: s_waitcnt vmcnt(0) 375; GFX10-NEXT: s_setpc_b64 s[30:31] 376; 377; GFX11-LABEL: extractelement_vgpr_v4i16_idx0: 378; GFX11: ; %bb.0: 379; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 380; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 381; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off 382; GFX11-NEXT: s_waitcnt vmcnt(0) 383; GFX11-NEXT: s_setpc_b64 s[30:31] 384 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 385 %element = extractelement <4 x i16> %vector, i32 0 386 ret i16 %element 387} 388 389define i16 @extractelement_vgpr_v4i16_idx1(<4 x i16> addrspace(1)* %ptr) { 390; GFX9-LABEL: extractelement_vgpr_v4i16_idx1: 391; GFX9: ; %bb.0: 392; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 393; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 394; GFX9-NEXT: s_waitcnt vmcnt(0) 395; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 396; GFX9-NEXT: s_setpc_b64 s[30:31] 397; 398; GFX8-LABEL: extractelement_vgpr_v4i16_idx1: 399; GFX8: ; %bb.0: 400; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 401; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 402; GFX8-NEXT: s_waitcnt vmcnt(0) 403; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 404; GFX8-NEXT: s_setpc_b64 s[30:31] 405; 406; GFX7-LABEL: extractelement_vgpr_v4i16_idx1: 407; GFX7: ; %bb.0: 408; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 409; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 410; GFX7-NEXT: s_waitcnt vmcnt(0) 411; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 412; GFX7-NEXT: s_setpc_b64 s[30:31] 413; 414; GFX10-LABEL: extractelement_vgpr_v4i16_idx1: 415; GFX10: ; %bb.0: 416; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 417; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 418; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 419; GFX10-NEXT: s_waitcnt vmcnt(0) 420; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 421; GFX10-NEXT: s_setpc_b64 s[30:31] 422; 423; GFX11-LABEL: extractelement_vgpr_v4i16_idx1: 424; GFX11: ; %bb.0: 425; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 426; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 427; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off 428; GFX11-NEXT: s_waitcnt vmcnt(0) 429; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v0 430; GFX11-NEXT: s_setpc_b64 s[30:31] 431 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 432 %element = extractelement <4 x i16> %vector, i32 1 433 ret i16 %element 434} 435 436define i16 @extractelement_vgpr_v4i16_idx2(<4 x i16> addrspace(1)* %ptr) { 437; GFX9-LABEL: extractelement_vgpr_v4i16_idx2: 438; GFX9: ; %bb.0: 439; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 440; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 441; GFX9-NEXT: s_waitcnt vmcnt(0) 442; GFX9-NEXT: v_mov_b32_e32 v0, v1 443; GFX9-NEXT: s_setpc_b64 s[30:31] 444; 445; GFX8-LABEL: extractelement_vgpr_v4i16_idx2: 446; GFX8: ; %bb.0: 447; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 448; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 449; GFX8-NEXT: s_waitcnt vmcnt(0) 450; GFX8-NEXT: v_mov_b32_e32 v0, v1 451; GFX8-NEXT: s_setpc_b64 s[30:31] 452; 453; GFX7-LABEL: extractelement_vgpr_v4i16_idx2: 454; GFX7: ; %bb.0: 455; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 456; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 457; GFX7-NEXT: s_waitcnt vmcnt(0) 458; GFX7-NEXT: v_mov_b32_e32 v0, v1 459; GFX7-NEXT: s_setpc_b64 s[30:31] 460; 461; GFX10-LABEL: extractelement_vgpr_v4i16_idx2: 462; GFX10: ; %bb.0: 463; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 464; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 465; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 466; GFX10-NEXT: s_waitcnt vmcnt(0) 467; GFX10-NEXT: v_mov_b32_e32 v0, v1 468; GFX10-NEXT: s_setpc_b64 s[30:31] 469; 470; GFX11-LABEL: extractelement_vgpr_v4i16_idx2: 471; GFX11: ; %bb.0: 472; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 473; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 474; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off 475; GFX11-NEXT: s_waitcnt vmcnt(0) 476; GFX11-NEXT: v_mov_b32_e32 v0, v1 477; GFX11-NEXT: s_setpc_b64 s[30:31] 478 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 479 %element = extractelement <4 x i16> %vector, i32 2 480 ret i16 %element 481} 482 483define i16 @extractelement_vgpr_v4i16_idx3(<4 x i16> addrspace(1)* %ptr) { 484; GFX9-LABEL: extractelement_vgpr_v4i16_idx3: 485; GFX9: ; %bb.0: 486; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 487; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 488; GFX9-NEXT: s_waitcnt vmcnt(0) 489; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v1 490; GFX9-NEXT: s_setpc_b64 s[30:31] 491; 492; GFX8-LABEL: extractelement_vgpr_v4i16_idx3: 493; GFX8: ; %bb.0: 494; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 495; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 496; GFX8-NEXT: s_waitcnt vmcnt(0) 497; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v1 498; GFX8-NEXT: s_setpc_b64 s[30:31] 499; 500; GFX7-LABEL: extractelement_vgpr_v4i16_idx3: 501; GFX7: ; %bb.0: 502; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 503; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 504; GFX7-NEXT: s_waitcnt vmcnt(0) 505; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v1 506; GFX7-NEXT: s_setpc_b64 s[30:31] 507; 508; GFX10-LABEL: extractelement_vgpr_v4i16_idx3: 509; GFX10: ; %bb.0: 510; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 511; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 512; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 513; GFX10-NEXT: s_waitcnt vmcnt(0) 514; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v1 515; GFX10-NEXT: s_setpc_b64 s[30:31] 516; 517; GFX11-LABEL: extractelement_vgpr_v4i16_idx3: 518; GFX11: ; %bb.0: 519; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 520; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 521; GFX11-NEXT: global_load_b64 v[0:1], v[0:1], off 522; GFX11-NEXT: s_waitcnt vmcnt(0) 523; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v1 524; GFX11-NEXT: s_setpc_b64 s[30:31] 525 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 526 %element = extractelement <4 x i16> %vector, i32 3 527 ret i16 %element 528} 529 530define amdgpu_ps i16 @extractelement_sgpr_v8i16_sgpr_idx(<8 x i16> addrspace(4)* inreg %ptr, i32 inreg %idx) { 531; GCN-LABEL: extractelement_sgpr_v8i16_sgpr_idx: 532; GCN: ; %bb.0: 533; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 534; GCN-NEXT: s_lshr_b32 s5, s4, 1 535; GCN-NEXT: s_cmp_eq_u32 s5, 1 536; GCN-NEXT: s_waitcnt lgkmcnt(0) 537; GCN-NEXT: s_cselect_b32 s0, s1, s0 538; GCN-NEXT: s_cmp_eq_u32 s5, 2 539; GCN-NEXT: s_cselect_b32 s0, s2, s0 540; GCN-NEXT: s_cmp_eq_u32 s5, 3 541; GCN-NEXT: s_cselect_b32 s0, s3, s0 542; GCN-NEXT: s_and_b32 s1, s4, 1 543; GCN-NEXT: s_lshl_b32 s1, s1, 4 544; GCN-NEXT: s_lshr_b32 s0, s0, s1 545; GCN-NEXT: ; return to shader part epilog 546; 547; GFX10-LABEL: extractelement_sgpr_v8i16_sgpr_idx: 548; GFX10: ; %bb.0: 549; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 550; GFX10-NEXT: s_lshr_b32 s5, s4, 1 551; GFX10-NEXT: s_cmp_eq_u32 s5, 1 552; GFX10-NEXT: s_waitcnt lgkmcnt(0) 553; GFX10-NEXT: s_cselect_b32 s0, s1, s0 554; GFX10-NEXT: s_cmp_eq_u32 s5, 2 555; GFX10-NEXT: s_cselect_b32 s0, s2, s0 556; GFX10-NEXT: s_cmp_eq_u32 s5, 3 557; GFX10-NEXT: s_cselect_b32 s0, s3, s0 558; GFX10-NEXT: s_and_b32 s1, s4, 1 559; GFX10-NEXT: s_lshl_b32 s1, s1, 4 560; GFX10-NEXT: s_lshr_b32 s0, s0, s1 561; GFX10-NEXT: ; return to shader part epilog 562; 563; GFX11-LABEL: extractelement_sgpr_v8i16_sgpr_idx: 564; GFX11: ; %bb.0: 565; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 566; GFX11-NEXT: s_lshr_b32 s5, s4, 1 567; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) 568; GFX11-NEXT: s_cmp_eq_u32 s5, 1 569; GFX11-NEXT: s_waitcnt lgkmcnt(0) 570; GFX11-NEXT: s_cselect_b32 s0, s1, s0 571; GFX11-NEXT: s_cmp_eq_u32 s5, 2 572; GFX11-NEXT: s_cselect_b32 s0, s2, s0 573; GFX11-NEXT: s_cmp_eq_u32 s5, 3 574; GFX11-NEXT: s_cselect_b32 s0, s3, s0 575; GFX11-NEXT: s_and_b32 s1, s4, 1 576; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1) 577; GFX11-NEXT: s_lshl_b32 s1, s1, 4 578; GFX11-NEXT: s_lshr_b32 s0, s0, s1 579; GFX11-NEXT: ; return to shader part epilog 580 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 581 %element = extractelement <8 x i16> %vector, i32 %idx 582 ret i16 %element 583} 584 585define amdgpu_ps i16 @extractelement_vgpr_v8i16_sgpr_idx(<8 x i16> addrspace(1)* %ptr, i32 inreg %idx) { 586; GFX9-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 587; GFX9: ; %bb.0: 588; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 589; GFX9-NEXT: s_lshr_b32 s0, s2, 1 590; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 591; GFX9-NEXT: s_and_b32 s1, s2, 1 592; GFX9-NEXT: s_waitcnt vmcnt(0) 593; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 594; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 595; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 596; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 597; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 598; GFX9-NEXT: s_lshl_b32 s0, s1, 4 599; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 600; GFX9-NEXT: v_readfirstlane_b32 s0, v0 601; GFX9-NEXT: ; return to shader part epilog 602; 603; GFX8-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 604; GFX8: ; %bb.0: 605; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 606; GFX8-NEXT: s_lshr_b32 s0, s2, 1 607; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 608; GFX8-NEXT: s_and_b32 s1, s2, 1 609; GFX8-NEXT: s_waitcnt vmcnt(0) 610; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 611; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 612; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 613; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 614; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 615; GFX8-NEXT: s_lshl_b32 s0, s1, 4 616; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 617; GFX8-NEXT: v_readfirstlane_b32 s0, v0 618; GFX8-NEXT: ; return to shader part epilog 619; 620; GFX7-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 621; GFX7: ; %bb.0: 622; GFX7-NEXT: s_mov_b32 s6, 0 623; GFX7-NEXT: s_mov_b32 s7, 0xf000 624; GFX7-NEXT: s_mov_b64 s[4:5], 0 625; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 626; GFX7-NEXT: s_lshr_b32 s0, s2, 1 627; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 628; GFX7-NEXT: s_and_b32 s1, s2, 1 629; GFX7-NEXT: s_waitcnt vmcnt(0) 630; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 631; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 632; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 633; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 634; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 635; GFX7-NEXT: s_lshl_b32 s0, s1, 4 636; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 637; GFX7-NEXT: v_readfirstlane_b32 s0, v0 638; GFX7-NEXT: ; return to shader part epilog 639; 640; GFX10-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 641; GFX10: ; %bb.0: 642; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 643; GFX10-NEXT: s_lshr_b32 s0, s2, 1 644; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 645; GFX10-NEXT: s_waitcnt vmcnt(0) 646; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 647; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 2 648; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo 649; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 3 650; GFX10-NEXT: s_and_b32 s0, s2, 1 651; GFX10-NEXT: s_lshl_b32 s0, s0, 4 652; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc_lo 653; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 654; GFX10-NEXT: v_readfirstlane_b32 s0, v0 655; GFX10-NEXT: ; return to shader part epilog 656; 657; GFX11-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 658; GFX11: ; %bb.0: 659; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 660; GFX11-NEXT: s_lshr_b32 s0, s2, 1 661; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_3) | instid1(VALU_DEP_2) 662; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 663; GFX11-NEXT: s_waitcnt vmcnt(0) 664; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 665; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 2 666; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo 667; GFX11-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 3 668; GFX11-NEXT: s_and_b32 s0, s2, 1 669; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_2) 670; GFX11-NEXT: s_lshl_b32 s0, s0, 4 671; GFX11-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc_lo 672; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1) 673; GFX11-NEXT: v_lshrrev_b32_e32 v0, s0, v0 674; GFX11-NEXT: v_readfirstlane_b32 s0, v0 675; GFX11-NEXT: ; return to shader part epilog 676 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 677 %element = extractelement <8 x i16> %vector, i32 %idx 678 ret i16 %element 679} 680 681define i16 @extractelement_vgpr_v8i16_vgpr_idx(<8 x i16> addrspace(1)* %ptr, i32 %idx) { 682; GFX9-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 683; GFX9: ; %bb.0: 684; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 685; GFX9-NEXT: global_load_dwordx4 v[3:6], v[0:1], off 686; GFX9-NEXT: v_lshrrev_b32_e32 v0, 1, v2 687; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 688; GFX9-NEXT: v_and_b32_e32 v1, 1, v2 689; GFX9-NEXT: v_lshlrev_b32_e32 v1, 4, v1 690; GFX9-NEXT: s_waitcnt vmcnt(0) 691; GFX9-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 692; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 693; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc 694; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 695; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v6, vcc 696; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 697; GFX9-NEXT: s_setpc_b64 s[30:31] 698; 699; GFX8-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 700; GFX8: ; %bb.0: 701; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 702; GFX8-NEXT: flat_load_dwordx4 v[3:6], v[0:1] 703; GFX8-NEXT: v_lshrrev_b32_e32 v0, 1, v2 704; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 705; GFX8-NEXT: v_and_b32_e32 v1, 1, v2 706; GFX8-NEXT: v_lshlrev_b32_e32 v1, 4, v1 707; GFX8-NEXT: s_waitcnt vmcnt(0) 708; GFX8-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 709; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 710; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc 711; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 712; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v6, vcc 713; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 714; GFX8-NEXT: s_setpc_b64 s[30:31] 715; 716; GFX7-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 717; GFX7: ; %bb.0: 718; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 719; GFX7-NEXT: s_mov_b32 s6, 0 720; GFX7-NEXT: s_mov_b32 s7, 0xf000 721; GFX7-NEXT: s_mov_b64 s[4:5], 0 722; GFX7-NEXT: buffer_load_dwordx4 v[3:6], v[0:1], s[4:7], 0 addr64 723; GFX7-NEXT: v_lshrrev_b32_e32 v0, 1, v2 724; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 725; GFX7-NEXT: v_and_b32_e32 v1, 1, v2 726; GFX7-NEXT: v_lshlrev_b32_e32 v1, 4, v1 727; GFX7-NEXT: s_waitcnt vmcnt(0) 728; GFX7-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 729; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 730; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc 731; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 732; GFX7-NEXT: v_cndmask_b32_e32 v0, v2, v6, vcc 733; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 734; GFX7-NEXT: s_setpc_b64 s[30:31] 735; 736; GFX10-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 737; GFX10: ; %bb.0: 738; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 739; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 740; GFX10-NEXT: global_load_dwordx4 v[3:6], v[0:1], off 741; GFX10-NEXT: v_lshrrev_b32_e32 v0, 1, v2 742; GFX10-NEXT: v_and_b32_e32 v2, 1, v2 743; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0 744; GFX10-NEXT: s_waitcnt vmcnt(0) 745; GFX10-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc_lo 746; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v0 747; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo 748; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v0 749; GFX10-NEXT: v_cndmask_b32_e32 v0, v1, v6, vcc_lo 750; GFX10-NEXT: v_lshlrev_b32_e32 v1, 4, v2 751; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 752; GFX10-NEXT: s_setpc_b64 s[30:31] 753; 754; GFX11-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 755; GFX11: ; %bb.0: 756; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 757; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 758; GFX11-NEXT: global_load_b128 v[3:6], v[0:1], off 759; GFX11-NEXT: v_lshrrev_b32_e32 v0, 1, v2 760; GFX11-NEXT: v_and_b32_e32 v2, 1, v2 761; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2) 762; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0 763; GFX11-NEXT: s_waitcnt vmcnt(0) 764; GFX11-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc_lo 765; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v0 766; GFX11-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo 767; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v0 768; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1) 769; GFX11-NEXT: v_cndmask_b32_e32 v0, v1, v6, vcc_lo 770; GFX11-NEXT: v_lshlrev_b32_e32 v1, 4, v2 771; GFX11-NEXT: v_lshrrev_b32_e32 v0, v1, v0 772; GFX11-NEXT: s_setpc_b64 s[30:31] 773 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 774 %element = extractelement <8 x i16> %vector, i32 %idx 775 ret i16 %element 776} 777 778define amdgpu_ps i16 @extractelement_sgpr_v8i16_vgpr_idx(<8 x i16> addrspace(4)* inreg %ptr, i32 %idx) { 779; GCN-LABEL: extractelement_sgpr_v8i16_vgpr_idx: 780; GCN: ; %bb.0: 781; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 782; GCN-NEXT: v_lshrrev_b32_e32 v1, 1, v0 783; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1 784; GCN-NEXT: v_and_b32_e32 v0, 1, v0 785; GCN-NEXT: v_lshlrev_b32_e32 v0, 4, v0 786; GCN-NEXT: s_waitcnt lgkmcnt(0) 787; GCN-NEXT: v_mov_b32_e32 v2, s0 788; GCN-NEXT: v_mov_b32_e32 v3, s1 789; GCN-NEXT: v_mov_b32_e32 v4, s2 790; GCN-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc 791; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 2, v1 792; GCN-NEXT: v_mov_b32_e32 v5, s3 793; GCN-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 794; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 3, v1 795; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v5, vcc 796; GCN-NEXT: v_lshrrev_b32_e32 v0, v0, v1 797; GCN-NEXT: v_readfirstlane_b32 s0, v0 798; GCN-NEXT: ; return to shader part epilog 799; 800; GFX10-LABEL: extractelement_sgpr_v8i16_vgpr_idx: 801; GFX10: ; %bb.0: 802; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 803; GFX10-NEXT: v_lshrrev_b32_e32 v1, 1, v0 804; GFX10-NEXT: v_and_b32_e32 v0, 1, v0 805; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 806; GFX10-NEXT: v_lshlrev_b32_e32 v0, 4, v0 807; GFX10-NEXT: s_waitcnt lgkmcnt(0) 808; GFX10-NEXT: v_mov_b32_e32 v2, s1 809; GFX10-NEXT: v_cndmask_b32_e32 v2, s0, v2, vcc_lo 810; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v1 811; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, s2, vcc_lo 812; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v1 813; GFX10-NEXT: v_cndmask_b32_e64 v1, v2, s3, vcc_lo 814; GFX10-NEXT: v_lshrrev_b32_e32 v0, v0, v1 815; GFX10-NEXT: v_readfirstlane_b32 s0, v0 816; GFX10-NEXT: ; return to shader part epilog 817; 818; GFX11-LABEL: extractelement_sgpr_v8i16_vgpr_idx: 819; GFX11: ; %bb.0: 820; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 821; GFX11-NEXT: v_lshrrev_b32_e32 v1, 1, v0 822; GFX11-NEXT: v_and_b32_e32 v0, 1, v0 823; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2) 824; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 825; GFX11-NEXT: v_lshlrev_b32_e32 v0, 4, v0 826; GFX11-NEXT: s_waitcnt lgkmcnt(0) 827; GFX11-NEXT: v_mov_b32_e32 v2, s1 828; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2) 829; GFX11-NEXT: v_cndmask_b32_e32 v2, s0, v2, vcc_lo 830; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v1 831; GFX11-NEXT: v_cndmask_b32_e64 v2, v2, s2, vcc_lo 832; GFX11-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v1 833; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1) 834; GFX11-NEXT: v_cndmask_b32_e64 v1, v2, s3, vcc_lo 835; GFX11-NEXT: v_lshrrev_b32_e32 v0, v0, v1 836; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) 837; GFX11-NEXT: v_readfirstlane_b32 s0, v0 838; GFX11-NEXT: ; return to shader part epilog 839 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 840 %element = extractelement <8 x i16> %vector, i32 %idx 841 ret i16 %element 842} 843 844define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx0(<8 x i16> addrspace(4)* inreg %ptr) { 845; GCN-LABEL: extractelement_sgpr_v8i16_idx0: 846; GCN: ; %bb.0: 847; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 848; GCN-NEXT: s_waitcnt lgkmcnt(0) 849; GCN-NEXT: ; return to shader part epilog 850; 851; GFX10-LABEL: extractelement_sgpr_v8i16_idx0: 852; GFX10: ; %bb.0: 853; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 854; GFX10-NEXT: s_waitcnt lgkmcnt(0) 855; GFX10-NEXT: ; return to shader part epilog 856; 857; GFX11-LABEL: extractelement_sgpr_v8i16_idx0: 858; GFX11: ; %bb.0: 859; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 860; GFX11-NEXT: s_waitcnt lgkmcnt(0) 861; GFX11-NEXT: ; return to shader part epilog 862 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 863 %element = extractelement <8 x i16> %vector, i32 0 864 ret i16 %element 865} 866 867define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx1(<8 x i16> addrspace(4)* inreg %ptr) { 868; GCN-LABEL: extractelement_sgpr_v8i16_idx1: 869; GCN: ; %bb.0: 870; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 871; GCN-NEXT: s_waitcnt lgkmcnt(0) 872; GCN-NEXT: s_lshr_b32 s0, s0, 16 873; GCN-NEXT: ; return to shader part epilog 874; 875; GFX10-LABEL: extractelement_sgpr_v8i16_idx1: 876; GFX10: ; %bb.0: 877; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 878; GFX10-NEXT: s_waitcnt lgkmcnt(0) 879; GFX10-NEXT: s_lshr_b32 s0, s0, 16 880; GFX10-NEXT: ; return to shader part epilog 881; 882; GFX11-LABEL: extractelement_sgpr_v8i16_idx1: 883; GFX11: ; %bb.0: 884; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 885; GFX11-NEXT: s_waitcnt lgkmcnt(0) 886; GFX11-NEXT: s_lshr_b32 s0, s0, 16 887; GFX11-NEXT: ; return to shader part epilog 888 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 889 %element = extractelement <8 x i16> %vector, i32 1 890 ret i16 %element 891} 892 893define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx2(<8 x i16> addrspace(4)* inreg %ptr) { 894; GCN-LABEL: extractelement_sgpr_v8i16_idx2: 895; GCN: ; %bb.0: 896; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 897; GCN-NEXT: s_waitcnt lgkmcnt(0) 898; GCN-NEXT: s_mov_b32 s0, s1 899; GCN-NEXT: ; return to shader part epilog 900; 901; GFX10-LABEL: extractelement_sgpr_v8i16_idx2: 902; GFX10: ; %bb.0: 903; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 904; GFX10-NEXT: s_waitcnt lgkmcnt(0) 905; GFX10-NEXT: s_mov_b32 s0, s1 906; GFX10-NEXT: ; return to shader part epilog 907; 908; GFX11-LABEL: extractelement_sgpr_v8i16_idx2: 909; GFX11: ; %bb.0: 910; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 911; GFX11-NEXT: s_waitcnt lgkmcnt(0) 912; GFX11-NEXT: s_mov_b32 s0, s1 913; GFX11-NEXT: ; return to shader part epilog 914 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 915 %element = extractelement <8 x i16> %vector, i32 2 916 ret i16 %element 917} 918 919define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx3(<8 x i16> addrspace(4)* inreg %ptr) { 920; GCN-LABEL: extractelement_sgpr_v8i16_idx3: 921; GCN: ; %bb.0: 922; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 923; GCN-NEXT: s_waitcnt lgkmcnt(0) 924; GCN-NEXT: s_lshr_b32 s0, s1, 16 925; GCN-NEXT: ; return to shader part epilog 926; 927; GFX10-LABEL: extractelement_sgpr_v8i16_idx3: 928; GFX10: ; %bb.0: 929; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 930; GFX10-NEXT: s_waitcnt lgkmcnt(0) 931; GFX10-NEXT: s_lshr_b32 s0, s1, 16 932; GFX10-NEXT: ; return to shader part epilog 933; 934; GFX11-LABEL: extractelement_sgpr_v8i16_idx3: 935; GFX11: ; %bb.0: 936; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 937; GFX11-NEXT: s_waitcnt lgkmcnt(0) 938; GFX11-NEXT: s_lshr_b32 s0, s1, 16 939; GFX11-NEXT: ; return to shader part epilog 940 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 941 %element = extractelement <8 x i16> %vector, i32 3 942 ret i16 %element 943} 944 945define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx4(<8 x i16> addrspace(4)* inreg %ptr) { 946; GCN-LABEL: extractelement_sgpr_v8i16_idx4: 947; GCN: ; %bb.0: 948; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 949; GCN-NEXT: s_waitcnt lgkmcnt(0) 950; GCN-NEXT: s_mov_b32 s0, s2 951; GCN-NEXT: ; return to shader part epilog 952; 953; GFX10-LABEL: extractelement_sgpr_v8i16_idx4: 954; GFX10: ; %bb.0: 955; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 956; GFX10-NEXT: s_waitcnt lgkmcnt(0) 957; GFX10-NEXT: s_mov_b32 s0, s2 958; GFX10-NEXT: ; return to shader part epilog 959; 960; GFX11-LABEL: extractelement_sgpr_v8i16_idx4: 961; GFX11: ; %bb.0: 962; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 963; GFX11-NEXT: s_waitcnt lgkmcnt(0) 964; GFX11-NEXT: s_mov_b32 s0, s2 965; GFX11-NEXT: ; return to shader part epilog 966 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 967 %element = extractelement <8 x i16> %vector, i32 4 968 ret i16 %element 969} 970 971define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx5(<8 x i16> addrspace(4)* inreg %ptr) { 972; GCN-LABEL: extractelement_sgpr_v8i16_idx5: 973; GCN: ; %bb.0: 974; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 975; GCN-NEXT: s_waitcnt lgkmcnt(0) 976; GCN-NEXT: s_lshr_b32 s0, s2, 16 977; GCN-NEXT: ; return to shader part epilog 978; 979; GFX10-LABEL: extractelement_sgpr_v8i16_idx5: 980; GFX10: ; %bb.0: 981; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 982; GFX10-NEXT: s_waitcnt lgkmcnt(0) 983; GFX10-NEXT: s_lshr_b32 s0, s2, 16 984; GFX10-NEXT: ; return to shader part epilog 985; 986; GFX11-LABEL: extractelement_sgpr_v8i16_idx5: 987; GFX11: ; %bb.0: 988; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 989; GFX11-NEXT: s_waitcnt lgkmcnt(0) 990; GFX11-NEXT: s_lshr_b32 s0, s2, 16 991; GFX11-NEXT: ; return to shader part epilog 992 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 993 %element = extractelement <8 x i16> %vector, i32 5 994 ret i16 %element 995} 996 997define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx6(<8 x i16> addrspace(4)* inreg %ptr) { 998; GCN-LABEL: extractelement_sgpr_v8i16_idx6: 999; GCN: ; %bb.0: 1000; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 1001; GCN-NEXT: s_waitcnt lgkmcnt(0) 1002; GCN-NEXT: s_mov_b32 s0, s3 1003; GCN-NEXT: ; return to shader part epilog 1004; 1005; GFX10-LABEL: extractelement_sgpr_v8i16_idx6: 1006; GFX10: ; %bb.0: 1007; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 1008; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1009; GFX10-NEXT: s_mov_b32 s0, s3 1010; GFX10-NEXT: ; return to shader part epilog 1011; 1012; GFX11-LABEL: extractelement_sgpr_v8i16_idx6: 1013; GFX11: ; %bb.0: 1014; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 1015; GFX11-NEXT: s_waitcnt lgkmcnt(0) 1016; GFX11-NEXT: s_mov_b32 s0, s3 1017; GFX11-NEXT: ; return to shader part epilog 1018 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 1019 %element = extractelement <8 x i16> %vector, i32 6 1020 ret i16 %element 1021} 1022 1023define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx7(<8 x i16> addrspace(4)* inreg %ptr) { 1024; GCN-LABEL: extractelement_sgpr_v8i16_idx7: 1025; GCN: ; %bb.0: 1026; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 1027; GCN-NEXT: s_waitcnt lgkmcnt(0) 1028; GCN-NEXT: s_lshr_b32 s0, s3, 16 1029; GCN-NEXT: ; return to shader part epilog 1030; 1031; GFX10-LABEL: extractelement_sgpr_v8i16_idx7: 1032; GFX10: ; %bb.0: 1033; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 1034; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1035; GFX10-NEXT: s_lshr_b32 s0, s3, 16 1036; GFX10-NEXT: ; return to shader part epilog 1037; 1038; GFX11-LABEL: extractelement_sgpr_v8i16_idx7: 1039; GFX11: ; %bb.0: 1040; GFX11-NEXT: s_load_b128 s[0:3], s[2:3], 0x0 1041; GFX11-NEXT: s_waitcnt lgkmcnt(0) 1042; GFX11-NEXT: s_lshr_b32 s0, s3, 16 1043; GFX11-NEXT: ; return to shader part epilog 1044 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 1045 %element = extractelement <8 x i16> %vector, i32 7 1046 ret i16 %element 1047} 1048 1049define i16 @extractelement_vgpr_v8i16_idx0(<8 x i16> addrspace(1)* %ptr) { 1050; GFX9-LABEL: extractelement_vgpr_v8i16_idx0: 1051; GFX9: ; %bb.0: 1052; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1053; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1054; GFX9-NEXT: s_waitcnt vmcnt(0) 1055; GFX9-NEXT: s_setpc_b64 s[30:31] 1056; 1057; GFX8-LABEL: extractelement_vgpr_v8i16_idx0: 1058; GFX8: ; %bb.0: 1059; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1060; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1061; GFX8-NEXT: s_waitcnt vmcnt(0) 1062; GFX8-NEXT: s_setpc_b64 s[30:31] 1063; 1064; GFX7-LABEL: extractelement_vgpr_v8i16_idx0: 1065; GFX7: ; %bb.0: 1066; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1067; GFX7-NEXT: s_mov_b32 s6, 0 1068; GFX7-NEXT: s_mov_b32 s7, 0xf000 1069; GFX7-NEXT: s_mov_b64 s[4:5], 0 1070; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1071; GFX7-NEXT: s_waitcnt vmcnt(0) 1072; GFX7-NEXT: s_setpc_b64 s[30:31] 1073; 1074; GFX10-LABEL: extractelement_vgpr_v8i16_idx0: 1075; GFX10: ; %bb.0: 1076; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1077; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1078; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1079; GFX10-NEXT: s_waitcnt vmcnt(0) 1080; GFX10-NEXT: s_setpc_b64 s[30:31] 1081; 1082; GFX11-LABEL: extractelement_vgpr_v8i16_idx0: 1083; GFX11: ; %bb.0: 1084; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1085; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1086; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1087; GFX11-NEXT: s_waitcnt vmcnt(0) 1088; GFX11-NEXT: s_setpc_b64 s[30:31] 1089 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1090 %element = extractelement <8 x i16> %vector, i32 0 1091 ret i16 %element 1092} 1093 1094define i16 @extractelement_vgpr_v8i16_idx1(<8 x i16> addrspace(1)* %ptr) { 1095; GFX9-LABEL: extractelement_vgpr_v8i16_idx1: 1096; GFX9: ; %bb.0: 1097; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1098; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1099; GFX9-NEXT: s_waitcnt vmcnt(0) 1100; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1101; GFX9-NEXT: s_setpc_b64 s[30:31] 1102; 1103; GFX8-LABEL: extractelement_vgpr_v8i16_idx1: 1104; GFX8: ; %bb.0: 1105; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1106; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1107; GFX8-NEXT: s_waitcnt vmcnt(0) 1108; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1109; GFX8-NEXT: s_setpc_b64 s[30:31] 1110; 1111; GFX7-LABEL: extractelement_vgpr_v8i16_idx1: 1112; GFX7: ; %bb.0: 1113; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1114; GFX7-NEXT: s_mov_b32 s6, 0 1115; GFX7-NEXT: s_mov_b32 s7, 0xf000 1116; GFX7-NEXT: s_mov_b64 s[4:5], 0 1117; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1118; GFX7-NEXT: s_waitcnt vmcnt(0) 1119; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1120; GFX7-NEXT: s_setpc_b64 s[30:31] 1121; 1122; GFX10-LABEL: extractelement_vgpr_v8i16_idx1: 1123; GFX10: ; %bb.0: 1124; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1125; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1126; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1127; GFX10-NEXT: s_waitcnt vmcnt(0) 1128; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1129; GFX10-NEXT: s_setpc_b64 s[30:31] 1130; 1131; GFX11-LABEL: extractelement_vgpr_v8i16_idx1: 1132; GFX11: ; %bb.0: 1133; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1134; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1135; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1136; GFX11-NEXT: s_waitcnt vmcnt(0) 1137; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1138; GFX11-NEXT: s_setpc_b64 s[30:31] 1139 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1140 %element = extractelement <8 x i16> %vector, i32 1 1141 ret i16 %element 1142} 1143 1144define i16 @extractelement_vgpr_v8i16_idx2(<8 x i16> addrspace(1)* %ptr) { 1145; GFX9-LABEL: extractelement_vgpr_v8i16_idx2: 1146; GFX9: ; %bb.0: 1147; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1148; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1149; GFX9-NEXT: s_waitcnt vmcnt(0) 1150; GFX9-NEXT: v_mov_b32_e32 v0, v1 1151; GFX9-NEXT: s_setpc_b64 s[30:31] 1152; 1153; GFX8-LABEL: extractelement_vgpr_v8i16_idx2: 1154; GFX8: ; %bb.0: 1155; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1156; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1157; GFX8-NEXT: s_waitcnt vmcnt(0) 1158; GFX8-NEXT: v_mov_b32_e32 v0, v1 1159; GFX8-NEXT: s_setpc_b64 s[30:31] 1160; 1161; GFX7-LABEL: extractelement_vgpr_v8i16_idx2: 1162; GFX7: ; %bb.0: 1163; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1164; GFX7-NEXT: s_mov_b32 s6, 0 1165; GFX7-NEXT: s_mov_b32 s7, 0xf000 1166; GFX7-NEXT: s_mov_b64 s[4:5], 0 1167; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1168; GFX7-NEXT: s_waitcnt vmcnt(0) 1169; GFX7-NEXT: v_mov_b32_e32 v0, v1 1170; GFX7-NEXT: s_setpc_b64 s[30:31] 1171; 1172; GFX10-LABEL: extractelement_vgpr_v8i16_idx2: 1173; GFX10: ; %bb.0: 1174; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1175; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1176; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1177; GFX10-NEXT: s_waitcnt vmcnt(0) 1178; GFX10-NEXT: v_mov_b32_e32 v0, v1 1179; GFX10-NEXT: s_setpc_b64 s[30:31] 1180; 1181; GFX11-LABEL: extractelement_vgpr_v8i16_idx2: 1182; GFX11: ; %bb.0: 1183; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1184; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1185; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1186; GFX11-NEXT: s_waitcnt vmcnt(0) 1187; GFX11-NEXT: v_mov_b32_e32 v0, v1 1188; GFX11-NEXT: s_setpc_b64 s[30:31] 1189 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1190 %element = extractelement <8 x i16> %vector, i32 2 1191 ret i16 %element 1192} 1193 1194define i16 @extractelement_vgpr_v8i16_idx3(<8 x i16> addrspace(1)* %ptr) { 1195; GFX9-LABEL: extractelement_vgpr_v8i16_idx3: 1196; GFX9: ; %bb.0: 1197; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1198; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1199; GFX9-NEXT: s_waitcnt vmcnt(0) 1200; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v1 1201; GFX9-NEXT: s_setpc_b64 s[30:31] 1202; 1203; GFX8-LABEL: extractelement_vgpr_v8i16_idx3: 1204; GFX8: ; %bb.0: 1205; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1206; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1207; GFX8-NEXT: s_waitcnt vmcnt(0) 1208; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v1 1209; GFX8-NEXT: s_setpc_b64 s[30:31] 1210; 1211; GFX7-LABEL: extractelement_vgpr_v8i16_idx3: 1212; GFX7: ; %bb.0: 1213; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1214; GFX7-NEXT: s_mov_b32 s6, 0 1215; GFX7-NEXT: s_mov_b32 s7, 0xf000 1216; GFX7-NEXT: s_mov_b64 s[4:5], 0 1217; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1218; GFX7-NEXT: s_waitcnt vmcnt(0) 1219; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v1 1220; GFX7-NEXT: s_setpc_b64 s[30:31] 1221; 1222; GFX10-LABEL: extractelement_vgpr_v8i16_idx3: 1223; GFX10: ; %bb.0: 1224; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1225; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1226; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1227; GFX10-NEXT: s_waitcnt vmcnt(0) 1228; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v1 1229; GFX10-NEXT: s_setpc_b64 s[30:31] 1230; 1231; GFX11-LABEL: extractelement_vgpr_v8i16_idx3: 1232; GFX11: ; %bb.0: 1233; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1234; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1235; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1236; GFX11-NEXT: s_waitcnt vmcnt(0) 1237; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v1 1238; GFX11-NEXT: s_setpc_b64 s[30:31] 1239 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1240 %element = extractelement <8 x i16> %vector, i32 3 1241 ret i16 %element 1242} 1243 1244define i16 @extractelement_vgpr_v8i16_idx4(<8 x i16> addrspace(1)* %ptr) { 1245; GFX9-LABEL: extractelement_vgpr_v8i16_idx4: 1246; GFX9: ; %bb.0: 1247; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1248; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1249; GFX9-NEXT: s_waitcnt vmcnt(0) 1250; GFX9-NEXT: v_mov_b32_e32 v0, v2 1251; GFX9-NEXT: s_setpc_b64 s[30:31] 1252; 1253; GFX8-LABEL: extractelement_vgpr_v8i16_idx4: 1254; GFX8: ; %bb.0: 1255; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1256; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1257; GFX8-NEXT: s_waitcnt vmcnt(0) 1258; GFX8-NEXT: v_mov_b32_e32 v0, v2 1259; GFX8-NEXT: s_setpc_b64 s[30:31] 1260; 1261; GFX7-LABEL: extractelement_vgpr_v8i16_idx4: 1262; GFX7: ; %bb.0: 1263; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1264; GFX7-NEXT: s_mov_b32 s6, 0 1265; GFX7-NEXT: s_mov_b32 s7, 0xf000 1266; GFX7-NEXT: s_mov_b64 s[4:5], 0 1267; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1268; GFX7-NEXT: s_waitcnt vmcnt(0) 1269; GFX7-NEXT: v_mov_b32_e32 v0, v2 1270; GFX7-NEXT: s_setpc_b64 s[30:31] 1271; 1272; GFX10-LABEL: extractelement_vgpr_v8i16_idx4: 1273; GFX10: ; %bb.0: 1274; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1275; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1276; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1277; GFX10-NEXT: s_waitcnt vmcnt(0) 1278; GFX10-NEXT: v_mov_b32_e32 v0, v2 1279; GFX10-NEXT: s_setpc_b64 s[30:31] 1280; 1281; GFX11-LABEL: extractelement_vgpr_v8i16_idx4: 1282; GFX11: ; %bb.0: 1283; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1284; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1285; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1286; GFX11-NEXT: s_waitcnt vmcnt(0) 1287; GFX11-NEXT: v_mov_b32_e32 v0, v2 1288; GFX11-NEXT: s_setpc_b64 s[30:31] 1289 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1290 %element = extractelement <8 x i16> %vector, i32 4 1291 ret i16 %element 1292} 1293 1294define i16 @extractelement_vgpr_v8i16_idx5(<8 x i16> addrspace(1)* %ptr) { 1295; GFX9-LABEL: extractelement_vgpr_v8i16_idx5: 1296; GFX9: ; %bb.0: 1297; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1298; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1299; GFX9-NEXT: s_waitcnt vmcnt(0) 1300; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1301; GFX9-NEXT: s_setpc_b64 s[30:31] 1302; 1303; GFX8-LABEL: extractelement_vgpr_v8i16_idx5: 1304; GFX8: ; %bb.0: 1305; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1306; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1307; GFX8-NEXT: s_waitcnt vmcnt(0) 1308; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1309; GFX8-NEXT: s_setpc_b64 s[30:31] 1310; 1311; GFX7-LABEL: extractelement_vgpr_v8i16_idx5: 1312; GFX7: ; %bb.0: 1313; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1314; GFX7-NEXT: s_mov_b32 s6, 0 1315; GFX7-NEXT: s_mov_b32 s7, 0xf000 1316; GFX7-NEXT: s_mov_b64 s[4:5], 0 1317; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1318; GFX7-NEXT: s_waitcnt vmcnt(0) 1319; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1320; GFX7-NEXT: s_setpc_b64 s[30:31] 1321; 1322; GFX10-LABEL: extractelement_vgpr_v8i16_idx5: 1323; GFX10: ; %bb.0: 1324; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1325; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1326; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1327; GFX10-NEXT: s_waitcnt vmcnt(0) 1328; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1329; GFX10-NEXT: s_setpc_b64 s[30:31] 1330; 1331; GFX11-LABEL: extractelement_vgpr_v8i16_idx5: 1332; GFX11: ; %bb.0: 1333; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1334; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1335; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1336; GFX11-NEXT: s_waitcnt vmcnt(0) 1337; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1338; GFX11-NEXT: s_setpc_b64 s[30:31] 1339 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1340 %element = extractelement <8 x i16> %vector, i32 5 1341 ret i16 %element 1342} 1343 1344define i16 @extractelement_vgpr_v8i16_idx6(<8 x i16> addrspace(1)* %ptr) { 1345; GFX9-LABEL: extractelement_vgpr_v8i16_idx6: 1346; GFX9: ; %bb.0: 1347; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1348; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1349; GFX9-NEXT: s_waitcnt vmcnt(0) 1350; GFX9-NEXT: v_mov_b32_e32 v0, v3 1351; GFX9-NEXT: s_setpc_b64 s[30:31] 1352; 1353; GFX8-LABEL: extractelement_vgpr_v8i16_idx6: 1354; GFX8: ; %bb.0: 1355; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1356; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1357; GFX8-NEXT: s_waitcnt vmcnt(0) 1358; GFX8-NEXT: v_mov_b32_e32 v0, v3 1359; GFX8-NEXT: s_setpc_b64 s[30:31] 1360; 1361; GFX7-LABEL: extractelement_vgpr_v8i16_idx6: 1362; GFX7: ; %bb.0: 1363; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1364; GFX7-NEXT: s_mov_b32 s6, 0 1365; GFX7-NEXT: s_mov_b32 s7, 0xf000 1366; GFX7-NEXT: s_mov_b64 s[4:5], 0 1367; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1368; GFX7-NEXT: s_waitcnt vmcnt(0) 1369; GFX7-NEXT: v_mov_b32_e32 v0, v3 1370; GFX7-NEXT: s_setpc_b64 s[30:31] 1371; 1372; GFX10-LABEL: extractelement_vgpr_v8i16_idx6: 1373; GFX10: ; %bb.0: 1374; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1375; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1376; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1377; GFX10-NEXT: s_waitcnt vmcnt(0) 1378; GFX10-NEXT: v_mov_b32_e32 v0, v3 1379; GFX10-NEXT: s_setpc_b64 s[30:31] 1380; 1381; GFX11-LABEL: extractelement_vgpr_v8i16_idx6: 1382; GFX11: ; %bb.0: 1383; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1384; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1385; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1386; GFX11-NEXT: s_waitcnt vmcnt(0) 1387; GFX11-NEXT: v_mov_b32_e32 v0, v3 1388; GFX11-NEXT: s_setpc_b64 s[30:31] 1389 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1390 %element = extractelement <8 x i16> %vector, i32 6 1391 ret i16 %element 1392} 1393 1394define i16 @extractelement_vgpr_v8i16_idx7(<8 x i16> addrspace(1)* %ptr) { 1395; GFX9-LABEL: extractelement_vgpr_v8i16_idx7: 1396; GFX9: ; %bb.0: 1397; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1398; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1399; GFX9-NEXT: s_waitcnt vmcnt(0) 1400; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1401; GFX9-NEXT: s_setpc_b64 s[30:31] 1402; 1403; GFX8-LABEL: extractelement_vgpr_v8i16_idx7: 1404; GFX8: ; %bb.0: 1405; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1406; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1407; GFX8-NEXT: s_waitcnt vmcnt(0) 1408; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1409; GFX8-NEXT: s_setpc_b64 s[30:31] 1410; 1411; GFX7-LABEL: extractelement_vgpr_v8i16_idx7: 1412; GFX7: ; %bb.0: 1413; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1414; GFX7-NEXT: s_mov_b32 s6, 0 1415; GFX7-NEXT: s_mov_b32 s7, 0xf000 1416; GFX7-NEXT: s_mov_b64 s[4:5], 0 1417; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1418; GFX7-NEXT: s_waitcnt vmcnt(0) 1419; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1420; GFX7-NEXT: s_setpc_b64 s[30:31] 1421; 1422; GFX10-LABEL: extractelement_vgpr_v8i16_idx7: 1423; GFX10: ; %bb.0: 1424; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1425; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1426; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1427; GFX10-NEXT: s_waitcnt vmcnt(0) 1428; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1429; GFX10-NEXT: s_setpc_b64 s[30:31] 1430; 1431; GFX11-LABEL: extractelement_vgpr_v8i16_idx7: 1432; GFX11: ; %bb.0: 1433; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1434; GFX11-NEXT: s_waitcnt_vscnt null, 0x0 1435; GFX11-NEXT: global_load_b128 v[0:3], v[0:1], off 1436; GFX11-NEXT: s_waitcnt vmcnt(0) 1437; GFX11-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1438; GFX11-NEXT: s_setpc_b64 s[30:31] 1439 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1440 %element = extractelement <8 x i16> %vector, i32 7 1441 ret i16 %element 1442} 1443