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 i16 @extractelement_sgpr_v4i16_sgpr_idx(<4 x i16> addrspace(4)* inreg %ptr, i32 inreg %idx) { 8; GCN-LABEL: extractelement_sgpr_v4i16_sgpr_idx: 9; GCN: ; %bb.0: 10; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 11; GCN-NEXT: s_lshr_b32 s2, s4, 1 12; GCN-NEXT: s_cmp_eq_u32 s2, 1 13; GCN-NEXT: s_waitcnt lgkmcnt(0) 14; GCN-NEXT: s_cselect_b32 s0, s1, s0 15; GCN-NEXT: s_and_b32 s1, s4, 1 16; GCN-NEXT: s_lshl_b32 s1, s1, 4 17; GCN-NEXT: s_lshr_b32 s0, s0, s1 18; GCN-NEXT: ; return to shader part epilog 19; 20; GFX10-LABEL: extractelement_sgpr_v4i16_sgpr_idx: 21; GFX10: ; %bb.0: 22; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 23; GFX10-NEXT: s_lshr_b32 s2, s4, 1 24; GFX10-NEXT: s_cmp_eq_u32 s2, 1 25; GFX10-NEXT: s_waitcnt lgkmcnt(0) 26; GFX10-NEXT: s_cselect_b32 s0, s1, s0 27; GFX10-NEXT: s_and_b32 s1, s4, 1 28; GFX10-NEXT: s_lshl_b32 s1, s1, 4 29; GFX10-NEXT: s_lshr_b32 s0, s0, s1 30; GFX10-NEXT: ; return to shader part epilog 31 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 32 %element = extractelement <4 x i16> %vector, i32 %idx 33 ret i16 %element 34} 35 36define amdgpu_ps i16 @extractelement_vgpr_v4i16_sgpr_idx(<4 x i16> addrspace(1)* %ptr, i32 inreg %idx) { 37; GFX9-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 38; GFX9: ; %bb.0: 39; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 40; GFX9-NEXT: s_lshr_b32 s0, s2, 1 41; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 42; GFX9-NEXT: s_and_b32 s1, s2, 1 43; GFX9-NEXT: s_lshl_b32 s0, s1, 4 44; GFX9-NEXT: s_waitcnt vmcnt(0) 45; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 46; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 47; GFX9-NEXT: v_readfirstlane_b32 s0, v0 48; GFX9-NEXT: ; return to shader part epilog 49; 50; GFX8-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 51; GFX8: ; %bb.0: 52; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 53; GFX8-NEXT: s_lshr_b32 s0, s2, 1 54; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 55; GFX8-NEXT: s_and_b32 s1, s2, 1 56; GFX8-NEXT: s_lshl_b32 s0, s1, 4 57; GFX8-NEXT: s_waitcnt vmcnt(0) 58; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 59; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 60; GFX8-NEXT: v_readfirstlane_b32 s0, v0 61; GFX8-NEXT: ; return to shader part epilog 62; 63; GFX7-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 64; GFX7: ; %bb.0: 65; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 66; GFX7-NEXT: s_lshr_b32 s0, s2, 1 67; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 68; GFX7-NEXT: s_and_b32 s1, s2, 1 69; GFX7-NEXT: s_lshl_b32 s0, s1, 4 70; GFX7-NEXT: s_waitcnt vmcnt(0) 71; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 72; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 73; GFX7-NEXT: v_readfirstlane_b32 s0, v0 74; GFX7-NEXT: ; return to shader part epilog 75; 76; GFX10-LABEL: extractelement_vgpr_v4i16_sgpr_idx: 77; GFX10: ; %bb.0: 78; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 79; GFX10-NEXT: s_lshr_b32 s0, s2, 1 80; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 81; GFX10-NEXT: s_and_b32 s0, s2, 1 82; GFX10-NEXT: s_lshl_b32 s0, s0, 4 83; GFX10-NEXT: s_waitcnt vmcnt(0) 84; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 85; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 86; GFX10-NEXT: v_readfirstlane_b32 s0, v0 87; GFX10-NEXT: ; return to shader part epilog 88 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 89 %element = extractelement <4 x i16> %vector, i32 %idx 90 ret i16 %element 91} 92 93define i16 @extractelement_vgpr_v4i16_vgpr_idx(<4 x i16> addrspace(1)* %ptr, i32 %idx) { 94; GFX9-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 95; GFX9: ; %bb.0: 96; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 97; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 98; GFX9-NEXT: v_lshrrev_b32_e32 v3, 1, v2 99; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 100; GFX9-NEXT: v_and_b32_e32 v2, 1, v2 101; GFX9-NEXT: s_waitcnt vmcnt(0) 102; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 103; GFX9-NEXT: v_lshlrev_b32_e32 v1, 4, v2 104; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 105; GFX9-NEXT: s_setpc_b64 s[30:31] 106; 107; GFX8-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 108; GFX8: ; %bb.0: 109; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 110; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 111; GFX8-NEXT: v_lshrrev_b32_e32 v3, 1, v2 112; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 113; GFX8-NEXT: v_and_b32_e32 v2, 1, v2 114; GFX8-NEXT: s_waitcnt vmcnt(0) 115; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 116; GFX8-NEXT: v_lshlrev_b32_e32 v1, 4, v2 117; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 118; GFX8-NEXT: s_setpc_b64 s[30:31] 119; 120; GFX7-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 121; GFX7: ; %bb.0: 122; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 123; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 124; GFX7-NEXT: v_lshrrev_b32_e32 v3, 1, v2 125; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 126; GFX7-NEXT: v_and_b32_e32 v2, 1, v2 127; GFX7-NEXT: s_waitcnt vmcnt(0) 128; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 129; GFX7-NEXT: v_lshlrev_b32_e32 v1, 4, v2 130; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 131; GFX7-NEXT: s_setpc_b64 s[30:31] 132; 133; GFX10-LABEL: extractelement_vgpr_v4i16_vgpr_idx: 134; GFX10: ; %bb.0: 135; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 136; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 137; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 138; GFX10-NEXT: v_lshrrev_b32_e32 v3, 1, v2 139; GFX10-NEXT: v_and_b32_e32 v2, 1, v2 140; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v3 141; GFX10-NEXT: s_waitcnt vmcnt(0) 142; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 143; GFX10-NEXT: v_lshlrev_b32_e32 v1, 4, v2 144; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 145; GFX10-NEXT: s_setpc_b64 s[30:31] 146 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 147 %element = extractelement <4 x i16> %vector, i32 %idx 148 ret i16 %element 149} 150 151define amdgpu_ps i16 @extractelement_sgpr_v4i16_vgpr_idx(<4 x i16> addrspace(4)* inreg %ptr, i32 %idx) { 152; GCN-LABEL: extractelement_sgpr_v4i16_vgpr_idx: 153; GCN: ; %bb.0: 154; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 155; GCN-NEXT: v_lshrrev_b32_e32 v1, 1, v0 156; GCN-NEXT: v_and_b32_e32 v0, 1, v0 157; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1 158; GCN-NEXT: v_lshlrev_b32_e32 v0, 4, v0 159; GCN-NEXT: s_waitcnt lgkmcnt(0) 160; GCN-NEXT: v_mov_b32_e32 v2, s0 161; GCN-NEXT: v_mov_b32_e32 v3, s1 162; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc 163; GCN-NEXT: v_lshrrev_b32_e32 v0, v0, v1 164; GCN-NEXT: v_readfirstlane_b32 s0, v0 165; GCN-NEXT: ; return to shader part epilog 166; 167; GFX10-LABEL: extractelement_sgpr_v4i16_vgpr_idx: 168; GFX10: ; %bb.0: 169; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 170; GFX10-NEXT: v_lshrrev_b32_e32 v1, 1, v0 171; GFX10-NEXT: v_and_b32_e32 v0, 1, v0 172; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 173; GFX10-NEXT: v_lshlrev_b32_e32 v0, 4, v0 174; GFX10-NEXT: s_waitcnt lgkmcnt(0) 175; GFX10-NEXT: v_mov_b32_e32 v2, s1 176; GFX10-NEXT: v_cndmask_b32_e32 v1, s0, v2, vcc_lo 177; GFX10-NEXT: v_lshrrev_b32_e32 v0, v0, v1 178; GFX10-NEXT: v_readfirstlane_b32 s0, v0 179; GFX10-NEXT: ; return to shader part epilog 180 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 181 %element = extractelement <4 x i16> %vector, i32 %idx 182 ret i16 %element 183} 184 185define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx0(<4 x i16> addrspace(4)* inreg %ptr) { 186; GCN-LABEL: extractelement_sgpr_v4i16_idx0: 187; GCN: ; %bb.0: 188; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 189; GCN-NEXT: s_waitcnt lgkmcnt(0) 190; GCN-NEXT: ; return to shader part epilog 191; 192; GFX10-LABEL: extractelement_sgpr_v4i16_idx0: 193; GFX10: ; %bb.0: 194; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 195; GFX10-NEXT: s_waitcnt lgkmcnt(0) 196; GFX10-NEXT: ; return to shader part epilog 197 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 198 %element = extractelement <4 x i16> %vector, i32 0 199 ret i16 %element 200} 201 202define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx1(<4 x i16> addrspace(4)* inreg %ptr) { 203; GCN-LABEL: extractelement_sgpr_v4i16_idx1: 204; GCN: ; %bb.0: 205; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 206; GCN-NEXT: s_waitcnt lgkmcnt(0) 207; GCN-NEXT: s_lshr_b32 s0, s0, 16 208; GCN-NEXT: ; return to shader part epilog 209; 210; GFX10-LABEL: extractelement_sgpr_v4i16_idx1: 211; GFX10: ; %bb.0: 212; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 213; GFX10-NEXT: s_waitcnt lgkmcnt(0) 214; GFX10-NEXT: s_lshr_b32 s0, s0, 16 215; GFX10-NEXT: ; return to shader part epilog 216 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 217 %element = extractelement <4 x i16> %vector, i32 1 218 ret i16 %element 219} 220 221define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx2(<4 x i16> addrspace(4)* inreg %ptr) { 222; GCN-LABEL: extractelement_sgpr_v4i16_idx2: 223; GCN: ; %bb.0: 224; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 225; GCN-NEXT: s_waitcnt lgkmcnt(0) 226; GCN-NEXT: s_mov_b32 s0, s1 227; GCN-NEXT: ; return to shader part epilog 228; 229; GFX10-LABEL: extractelement_sgpr_v4i16_idx2: 230; GFX10: ; %bb.0: 231; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 232; GFX10-NEXT: s_waitcnt lgkmcnt(0) 233; GFX10-NEXT: s_mov_b32 s0, s1 234; GFX10-NEXT: ; return to shader part epilog 235 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 236 %element = extractelement <4 x i16> %vector, i32 2 237 ret i16 %element 238} 239 240define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx3(<4 x i16> addrspace(4)* inreg %ptr) { 241; GCN-LABEL: extractelement_sgpr_v4i16_idx3: 242; GCN: ; %bb.0: 243; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 244; GCN-NEXT: s_waitcnt lgkmcnt(0) 245; GCN-NEXT: s_lshr_b32 s0, s1, 16 246; GCN-NEXT: ; return to shader part epilog 247; 248; GFX10-LABEL: extractelement_sgpr_v4i16_idx3: 249; GFX10: ; %bb.0: 250; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 251; GFX10-NEXT: s_waitcnt lgkmcnt(0) 252; GFX10-NEXT: s_lshr_b32 s0, s1, 16 253; GFX10-NEXT: ; return to shader part epilog 254 %vector = load <4 x i16>, <4 x i16> addrspace(4)* %ptr 255 %element = extractelement <4 x i16> %vector, i32 3 256 ret i16 %element 257} 258 259define i16 @extractelement_vgpr_v4i16_idx0(<4 x i16> addrspace(1)* %ptr) { 260; GFX9-LABEL: extractelement_vgpr_v4i16_idx0: 261; GFX9: ; %bb.0: 262; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 263; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 264; GFX9-NEXT: s_waitcnt vmcnt(0) 265; GFX9-NEXT: s_setpc_b64 s[30:31] 266; 267; GFX8-LABEL: extractelement_vgpr_v4i16_idx0: 268; GFX8: ; %bb.0: 269; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 270; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 271; GFX8-NEXT: s_waitcnt vmcnt(0) 272; GFX8-NEXT: s_setpc_b64 s[30:31] 273; 274; GFX7-LABEL: extractelement_vgpr_v4i16_idx0: 275; GFX7: ; %bb.0: 276; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 277; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 278; GFX7-NEXT: s_waitcnt vmcnt(0) 279; GFX7-NEXT: s_setpc_b64 s[30:31] 280; 281; GFX10-LABEL: extractelement_vgpr_v4i16_idx0: 282; GFX10: ; %bb.0: 283; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 284; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 285; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 286; GFX10-NEXT: s_waitcnt vmcnt(0) 287; GFX10-NEXT: s_setpc_b64 s[30:31] 288 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 289 %element = extractelement <4 x i16> %vector, i32 0 290 ret i16 %element 291} 292 293define i16 @extractelement_vgpr_v4i16_idx1(<4 x i16> addrspace(1)* %ptr) { 294; GFX9-LABEL: extractelement_vgpr_v4i16_idx1: 295; GFX9: ; %bb.0: 296; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 297; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 298; GFX9-NEXT: s_waitcnt vmcnt(0) 299; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 300; GFX9-NEXT: s_setpc_b64 s[30:31] 301; 302; GFX8-LABEL: extractelement_vgpr_v4i16_idx1: 303; GFX8: ; %bb.0: 304; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 305; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 306; GFX8-NEXT: s_waitcnt vmcnt(0) 307; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 308; GFX8-NEXT: s_setpc_b64 s[30:31] 309; 310; GFX7-LABEL: extractelement_vgpr_v4i16_idx1: 311; GFX7: ; %bb.0: 312; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 313; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 314; GFX7-NEXT: s_waitcnt vmcnt(0) 315; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 316; GFX7-NEXT: s_setpc_b64 s[30:31] 317; 318; GFX10-LABEL: extractelement_vgpr_v4i16_idx1: 319; GFX10: ; %bb.0: 320; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 321; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 322; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 323; GFX10-NEXT: s_waitcnt vmcnt(0) 324; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 325; GFX10-NEXT: s_setpc_b64 s[30:31] 326 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 327 %element = extractelement <4 x i16> %vector, i32 1 328 ret i16 %element 329} 330 331define i16 @extractelement_vgpr_v4i16_idx2(<4 x i16> addrspace(1)* %ptr) { 332; GFX9-LABEL: extractelement_vgpr_v4i16_idx2: 333; GFX9: ; %bb.0: 334; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 335; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 336; GFX9-NEXT: s_waitcnt vmcnt(0) 337; GFX9-NEXT: v_mov_b32_e32 v0, v1 338; GFX9-NEXT: s_setpc_b64 s[30:31] 339; 340; GFX8-LABEL: extractelement_vgpr_v4i16_idx2: 341; GFX8: ; %bb.0: 342; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 343; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 344; GFX8-NEXT: s_waitcnt vmcnt(0) 345; GFX8-NEXT: v_mov_b32_e32 v0, v1 346; GFX8-NEXT: s_setpc_b64 s[30:31] 347; 348; GFX7-LABEL: extractelement_vgpr_v4i16_idx2: 349; GFX7: ; %bb.0: 350; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 351; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 352; GFX7-NEXT: s_waitcnt vmcnt(0) 353; GFX7-NEXT: v_mov_b32_e32 v0, v1 354; GFX7-NEXT: s_setpc_b64 s[30:31] 355; 356; GFX10-LABEL: extractelement_vgpr_v4i16_idx2: 357; GFX10: ; %bb.0: 358; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 359; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 360; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 361; GFX10-NEXT: s_waitcnt vmcnt(0) 362; GFX10-NEXT: v_mov_b32_e32 v0, v1 363; GFX10-NEXT: s_setpc_b64 s[30:31] 364 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 365 %element = extractelement <4 x i16> %vector, i32 2 366 ret i16 %element 367} 368 369define i16 @extractelement_vgpr_v4i16_idx3(<4 x i16> addrspace(1)* %ptr) { 370; GFX9-LABEL: extractelement_vgpr_v4i16_idx3: 371; GFX9: ; %bb.0: 372; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 373; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 374; GFX9-NEXT: s_waitcnt vmcnt(0) 375; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v1 376; GFX9-NEXT: s_setpc_b64 s[30:31] 377; 378; GFX8-LABEL: extractelement_vgpr_v4i16_idx3: 379; GFX8: ; %bb.0: 380; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 381; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 382; GFX8-NEXT: s_waitcnt vmcnt(0) 383; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v1 384; GFX8-NEXT: s_setpc_b64 s[30:31] 385; 386; GFX7-LABEL: extractelement_vgpr_v4i16_idx3: 387; GFX7: ; %bb.0: 388; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 389; GFX7-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 390; GFX7-NEXT: s_waitcnt vmcnt(0) 391; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v1 392; GFX7-NEXT: s_setpc_b64 s[30:31] 393; 394; GFX10-LABEL: extractelement_vgpr_v4i16_idx3: 395; GFX10: ; %bb.0: 396; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 397; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 398; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 399; GFX10-NEXT: s_waitcnt vmcnt(0) 400; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v1 401; GFX10-NEXT: s_setpc_b64 s[30:31] 402 %vector = load <4 x i16>, <4 x i16> addrspace(1)* %ptr 403 %element = extractelement <4 x i16> %vector, i32 3 404 ret i16 %element 405} 406 407define amdgpu_ps i16 @extractelement_sgpr_v8i16_sgpr_idx(<8 x i16> addrspace(4)* inreg %ptr, i32 inreg %idx) { 408; GCN-LABEL: extractelement_sgpr_v8i16_sgpr_idx: 409; GCN: ; %bb.0: 410; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 411; GCN-NEXT: s_lshr_b32 s5, s4, 1 412; GCN-NEXT: s_cmp_eq_u32 s5, 1 413; GCN-NEXT: s_waitcnt lgkmcnt(0) 414; GCN-NEXT: s_cselect_b32 s0, s1, s0 415; GCN-NEXT: s_cmp_eq_u32 s5, 2 416; GCN-NEXT: s_cselect_b32 s0, s2, s0 417; GCN-NEXT: s_cmp_eq_u32 s5, 3 418; GCN-NEXT: s_cselect_b32 s0, s3, s0 419; GCN-NEXT: s_and_b32 s1, s4, 1 420; GCN-NEXT: s_lshl_b32 s1, s1, 4 421; GCN-NEXT: s_lshr_b32 s0, s0, s1 422; GCN-NEXT: ; return to shader part epilog 423; 424; GFX10-LABEL: extractelement_sgpr_v8i16_sgpr_idx: 425; GFX10: ; %bb.0: 426; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 427; GFX10-NEXT: s_lshr_b32 s5, s4, 1 428; GFX10-NEXT: s_cmp_eq_u32 s5, 1 429; GFX10-NEXT: s_waitcnt lgkmcnt(0) 430; GFX10-NEXT: s_cselect_b32 s0, s1, s0 431; GFX10-NEXT: s_cmp_eq_u32 s5, 2 432; GFX10-NEXT: s_cselect_b32 s0, s2, s0 433; GFX10-NEXT: s_cmp_eq_u32 s5, 3 434; GFX10-NEXT: s_cselect_b32 s0, s3, s0 435; GFX10-NEXT: s_and_b32 s1, s4, 1 436; GFX10-NEXT: s_lshl_b32 s1, s1, 4 437; GFX10-NEXT: s_lshr_b32 s0, s0, s1 438; GFX10-NEXT: ; return to shader part epilog 439 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 440 %element = extractelement <8 x i16> %vector, i32 %idx 441 ret i16 %element 442} 443 444define amdgpu_ps i16 @extractelement_vgpr_v8i16_sgpr_idx(<8 x i16> addrspace(1)* %ptr, i32 inreg %idx) { 445; GFX9-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 446; GFX9: ; %bb.0: 447; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 448; GFX9-NEXT: s_lshr_b32 s0, s2, 1 449; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 450; GFX9-NEXT: s_and_b32 s1, s2, 1 451; GFX9-NEXT: s_waitcnt vmcnt(0) 452; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 453; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 454; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 455; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 456; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 457; GFX9-NEXT: s_lshl_b32 s0, s1, 4 458; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 459; GFX9-NEXT: v_readfirstlane_b32 s0, v0 460; GFX9-NEXT: ; return to shader part epilog 461; 462; GFX8-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 463; GFX8: ; %bb.0: 464; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 465; GFX8-NEXT: s_lshr_b32 s0, s2, 1 466; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 467; GFX8-NEXT: s_and_b32 s1, s2, 1 468; GFX8-NEXT: s_waitcnt vmcnt(0) 469; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 470; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 471; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 472; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 473; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 474; GFX8-NEXT: s_lshl_b32 s0, s1, 4 475; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 476; GFX8-NEXT: v_readfirstlane_b32 s0, v0 477; GFX8-NEXT: ; return to shader part epilog 478; 479; GFX7-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 480; GFX7: ; %bb.0: 481; GFX7-NEXT: s_mov_b32 s6, 0 482; GFX7-NEXT: s_mov_b32 s7, 0xf000 483; GFX7-NEXT: s_mov_b64 s[4:5], 0 484; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 485; GFX7-NEXT: s_lshr_b32 s0, s2, 1 486; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 487; GFX7-NEXT: s_and_b32 s1, s2, 1 488; GFX7-NEXT: s_waitcnt vmcnt(0) 489; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 490; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 491; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 492; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 493; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 494; GFX7-NEXT: s_lshl_b32 s0, s1, 4 495; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 496; GFX7-NEXT: v_readfirstlane_b32 s0, v0 497; GFX7-NEXT: ; return to shader part epilog 498; 499; GFX10-LABEL: extractelement_vgpr_v8i16_sgpr_idx: 500; GFX10: ; %bb.0: 501; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 502; GFX10-NEXT: s_lshr_b32 s0, s2, 1 503; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 504; GFX10-NEXT: s_waitcnt vmcnt(0) 505; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 506; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 2 507; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo 508; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 3 509; GFX10-NEXT: s_and_b32 s0, s2, 1 510; GFX10-NEXT: s_lshl_b32 s0, s0, 4 511; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc_lo 512; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 513; GFX10-NEXT: v_readfirstlane_b32 s0, v0 514; GFX10-NEXT: ; return to shader part epilog 515 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 516 %element = extractelement <8 x i16> %vector, i32 %idx 517 ret i16 %element 518} 519 520define i16 @extractelement_vgpr_v8i16_vgpr_idx(<8 x i16> addrspace(1)* %ptr, i32 %idx) { 521; GFX9-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 522; GFX9: ; %bb.0: 523; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 524; GFX9-NEXT: global_load_dwordx4 v[3:6], v[0:1], off 525; GFX9-NEXT: v_lshrrev_b32_e32 v0, 1, v2 526; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 527; GFX9-NEXT: v_and_b32_e32 v1, 1, v2 528; GFX9-NEXT: v_lshlrev_b32_e32 v1, 4, v1 529; GFX9-NEXT: s_waitcnt vmcnt(0) 530; GFX9-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 531; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 532; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc 533; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 534; GFX9-NEXT: v_cndmask_b32_e32 v0, v2, v6, vcc 535; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 536; GFX9-NEXT: s_setpc_b64 s[30:31] 537; 538; GFX8-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 539; GFX8: ; %bb.0: 540; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 541; GFX8-NEXT: flat_load_dwordx4 v[3:6], v[0:1] 542; GFX8-NEXT: v_lshrrev_b32_e32 v0, 1, v2 543; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 544; GFX8-NEXT: v_and_b32_e32 v1, 1, v2 545; GFX8-NEXT: v_lshlrev_b32_e32 v1, 4, v1 546; GFX8-NEXT: s_waitcnt vmcnt(0) 547; GFX8-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 548; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 549; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc 550; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 551; GFX8-NEXT: v_cndmask_b32_e32 v0, v2, v6, vcc 552; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 553; GFX8-NEXT: s_setpc_b64 s[30:31] 554; 555; GFX7-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 556; GFX7: ; %bb.0: 557; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 558; GFX7-NEXT: s_mov_b32 s6, 0 559; GFX7-NEXT: s_mov_b32 s7, 0xf000 560; GFX7-NEXT: s_mov_b64 s[4:5], 0 561; GFX7-NEXT: buffer_load_dwordx4 v[3:6], v[0:1], s[4:7], 0 addr64 562; GFX7-NEXT: v_lshrrev_b32_e32 v0, 1, v2 563; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 564; GFX7-NEXT: v_and_b32_e32 v1, 1, v2 565; GFX7-NEXT: v_lshlrev_b32_e32 v1, 4, v1 566; GFX7-NEXT: s_waitcnt vmcnt(0) 567; GFX7-NEXT: v_cndmask_b32_e32 v2, v3, v4, vcc 568; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 569; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v5, vcc 570; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 571; GFX7-NEXT: v_cndmask_b32_e32 v0, v2, v6, vcc 572; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 573; GFX7-NEXT: s_setpc_b64 s[30:31] 574; 575; GFX10-LABEL: extractelement_vgpr_v8i16_vgpr_idx: 576; GFX10: ; %bb.0: 577; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 578; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 579; GFX10-NEXT: global_load_dwordx4 v[3:6], v[0:1], off 580; GFX10-NEXT: v_lshrrev_b32_e32 v0, 1, v2 581; GFX10-NEXT: v_and_b32_e32 v2, 1, v2 582; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v0 583; GFX10-NEXT: s_waitcnt vmcnt(0) 584; GFX10-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc_lo 585; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v0 586; GFX10-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc_lo 587; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v0 588; GFX10-NEXT: v_cndmask_b32_e32 v0, v1, v6, vcc_lo 589; GFX10-NEXT: v_lshlrev_b32_e32 v1, 4, v2 590; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 591; GFX10-NEXT: s_setpc_b64 s[30:31] 592 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 593 %element = extractelement <8 x i16> %vector, i32 %idx 594 ret i16 %element 595} 596 597define amdgpu_ps i16 @extractelement_sgpr_v8i16_vgpr_idx(<8 x i16> addrspace(4)* inreg %ptr, i32 %idx) { 598; GCN-LABEL: extractelement_sgpr_v8i16_vgpr_idx: 599; GCN: ; %bb.0: 600; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 601; GCN-NEXT: v_lshrrev_b32_e32 v1, 1, v0 602; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1 603; GCN-NEXT: v_and_b32_e32 v0, 1, v0 604; GCN-NEXT: v_lshlrev_b32_e32 v0, 4, v0 605; GCN-NEXT: s_waitcnt lgkmcnt(0) 606; GCN-NEXT: v_mov_b32_e32 v2, s0 607; GCN-NEXT: v_mov_b32_e32 v3, s1 608; GCN-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc 609; GCN-NEXT: v_mov_b32_e32 v4, s2 610; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 2, v1 611; GCN-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 612; GCN-NEXT: v_mov_b32_e32 v5, s3 613; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 3, v1 614; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v5, vcc 615; GCN-NEXT: v_lshrrev_b32_e32 v0, v0, v1 616; GCN-NEXT: v_readfirstlane_b32 s0, v0 617; GCN-NEXT: ; return to shader part epilog 618; 619; GFX10-LABEL: extractelement_sgpr_v8i16_vgpr_idx: 620; GFX10: ; %bb.0: 621; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 622; GFX10-NEXT: v_lshrrev_b32_e32 v1, 1, v0 623; GFX10-NEXT: v_and_b32_e32 v0, 1, v0 624; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 625; GFX10-NEXT: v_lshlrev_b32_e32 v0, 4, v0 626; GFX10-NEXT: s_waitcnt lgkmcnt(0) 627; GFX10-NEXT: v_mov_b32_e32 v2, s1 628; GFX10-NEXT: v_cndmask_b32_e32 v2, s0, v2, vcc_lo 629; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v1 630; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, s2, vcc_lo 631; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v1 632; GFX10-NEXT: v_cndmask_b32_e64 v1, v2, s3, vcc_lo 633; GFX10-NEXT: v_lshrrev_b32_e32 v0, v0, v1 634; GFX10-NEXT: v_readfirstlane_b32 s0, v0 635; GFX10-NEXT: ; return to shader part epilog 636 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 637 %element = extractelement <8 x i16> %vector, i32 %idx 638 ret i16 %element 639} 640 641define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx0(<8 x i16> addrspace(4)* inreg %ptr) { 642; GCN-LABEL: extractelement_sgpr_v8i16_idx0: 643; GCN: ; %bb.0: 644; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 645; GCN-NEXT: s_waitcnt lgkmcnt(0) 646; GCN-NEXT: ; return to shader part epilog 647; 648; GFX10-LABEL: extractelement_sgpr_v8i16_idx0: 649; GFX10: ; %bb.0: 650; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 651; GFX10-NEXT: s_waitcnt lgkmcnt(0) 652; GFX10-NEXT: ; return to shader part epilog 653 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 654 %element = extractelement <8 x i16> %vector, i32 0 655 ret i16 %element 656} 657 658define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx1(<8 x i16> addrspace(4)* inreg %ptr) { 659; GCN-LABEL: extractelement_sgpr_v8i16_idx1: 660; GCN: ; %bb.0: 661; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 662; GCN-NEXT: s_waitcnt lgkmcnt(0) 663; GCN-NEXT: s_lshr_b32 s0, s0, 16 664; GCN-NEXT: ; return to shader part epilog 665; 666; GFX10-LABEL: extractelement_sgpr_v8i16_idx1: 667; GFX10: ; %bb.0: 668; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 669; GFX10-NEXT: s_waitcnt lgkmcnt(0) 670; GFX10-NEXT: s_lshr_b32 s0, s0, 16 671; GFX10-NEXT: ; return to shader part epilog 672 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 673 %element = extractelement <8 x i16> %vector, i32 1 674 ret i16 %element 675} 676 677define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx2(<8 x i16> addrspace(4)* inreg %ptr) { 678; GCN-LABEL: extractelement_sgpr_v8i16_idx2: 679; GCN: ; %bb.0: 680; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 681; GCN-NEXT: s_waitcnt lgkmcnt(0) 682; GCN-NEXT: s_mov_b32 s0, s1 683; GCN-NEXT: ; return to shader part epilog 684; 685; GFX10-LABEL: extractelement_sgpr_v8i16_idx2: 686; GFX10: ; %bb.0: 687; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 688; GFX10-NEXT: s_waitcnt lgkmcnt(0) 689; GFX10-NEXT: s_mov_b32 s0, s1 690; GFX10-NEXT: ; return to shader part epilog 691 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 692 %element = extractelement <8 x i16> %vector, i32 2 693 ret i16 %element 694} 695 696define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx3(<8 x i16> addrspace(4)* inreg %ptr) { 697; GCN-LABEL: extractelement_sgpr_v8i16_idx3: 698; GCN: ; %bb.0: 699; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 700; GCN-NEXT: s_waitcnt lgkmcnt(0) 701; GCN-NEXT: s_lshr_b32 s0, s1, 16 702; GCN-NEXT: ; return to shader part epilog 703; 704; GFX10-LABEL: extractelement_sgpr_v8i16_idx3: 705; GFX10: ; %bb.0: 706; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 707; GFX10-NEXT: s_waitcnt lgkmcnt(0) 708; GFX10-NEXT: s_lshr_b32 s0, s1, 16 709; GFX10-NEXT: ; return to shader part epilog 710 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 711 %element = extractelement <8 x i16> %vector, i32 3 712 ret i16 %element 713} 714 715define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx4(<8 x i16> addrspace(4)* inreg %ptr) { 716; GCN-LABEL: extractelement_sgpr_v8i16_idx4: 717; GCN: ; %bb.0: 718; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 719; GCN-NEXT: s_waitcnt lgkmcnt(0) 720; GCN-NEXT: s_mov_b32 s0, s2 721; GCN-NEXT: ; return to shader part epilog 722; 723; GFX10-LABEL: extractelement_sgpr_v8i16_idx4: 724; GFX10: ; %bb.0: 725; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 726; GFX10-NEXT: s_waitcnt lgkmcnt(0) 727; GFX10-NEXT: s_mov_b32 s0, s2 728; GFX10-NEXT: ; return to shader part epilog 729 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 730 %element = extractelement <8 x i16> %vector, i32 4 731 ret i16 %element 732} 733 734define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx5(<8 x i16> addrspace(4)* inreg %ptr) { 735; GCN-LABEL: extractelement_sgpr_v8i16_idx5: 736; GCN: ; %bb.0: 737; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 738; GCN-NEXT: s_waitcnt lgkmcnt(0) 739; GCN-NEXT: s_lshr_b32 s0, s2, 16 740; GCN-NEXT: ; return to shader part epilog 741; 742; GFX10-LABEL: extractelement_sgpr_v8i16_idx5: 743; GFX10: ; %bb.0: 744; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 745; GFX10-NEXT: s_waitcnt lgkmcnt(0) 746; GFX10-NEXT: s_lshr_b32 s0, s2, 16 747; GFX10-NEXT: ; return to shader part epilog 748 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 749 %element = extractelement <8 x i16> %vector, i32 5 750 ret i16 %element 751} 752 753define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx6(<8 x i16> addrspace(4)* inreg %ptr) { 754; GCN-LABEL: extractelement_sgpr_v8i16_idx6: 755; GCN: ; %bb.0: 756; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 757; GCN-NEXT: s_waitcnt lgkmcnt(0) 758; GCN-NEXT: s_mov_b32 s0, s3 759; GCN-NEXT: ; return to shader part epilog 760; 761; GFX10-LABEL: extractelement_sgpr_v8i16_idx6: 762; GFX10: ; %bb.0: 763; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 764; GFX10-NEXT: s_waitcnt lgkmcnt(0) 765; GFX10-NEXT: s_mov_b32 s0, s3 766; GFX10-NEXT: ; return to shader part epilog 767 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 768 %element = extractelement <8 x i16> %vector, i32 6 769 ret i16 %element 770} 771 772define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx7(<8 x i16> addrspace(4)* inreg %ptr) { 773; GCN-LABEL: extractelement_sgpr_v8i16_idx7: 774; GCN: ; %bb.0: 775; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 776; GCN-NEXT: s_waitcnt lgkmcnt(0) 777; GCN-NEXT: s_lshr_b32 s0, s3, 16 778; GCN-NEXT: ; return to shader part epilog 779; 780; GFX10-LABEL: extractelement_sgpr_v8i16_idx7: 781; GFX10: ; %bb.0: 782; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 783; GFX10-NEXT: s_waitcnt lgkmcnt(0) 784; GFX10-NEXT: s_lshr_b32 s0, s3, 16 785; GFX10-NEXT: ; return to shader part epilog 786 %vector = load <8 x i16>, <8 x i16> addrspace(4)* %ptr 787 %element = extractelement <8 x i16> %vector, i32 7 788 ret i16 %element 789} 790 791define i16 @extractelement_vgpr_v8i16_idx0(<8 x i16> addrspace(1)* %ptr) { 792; GFX9-LABEL: extractelement_vgpr_v8i16_idx0: 793; GFX9: ; %bb.0: 794; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 795; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 796; GFX9-NEXT: s_waitcnt vmcnt(0) 797; GFX9-NEXT: s_setpc_b64 s[30:31] 798; 799; GFX8-LABEL: extractelement_vgpr_v8i16_idx0: 800; GFX8: ; %bb.0: 801; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 802; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 803; GFX8-NEXT: s_waitcnt vmcnt(0) 804; GFX8-NEXT: s_setpc_b64 s[30:31] 805; 806; GFX7-LABEL: extractelement_vgpr_v8i16_idx0: 807; GFX7: ; %bb.0: 808; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 809; GFX7-NEXT: s_mov_b32 s6, 0 810; GFX7-NEXT: s_mov_b32 s7, 0xf000 811; GFX7-NEXT: s_mov_b64 s[4:5], 0 812; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 813; GFX7-NEXT: s_waitcnt vmcnt(0) 814; GFX7-NEXT: s_setpc_b64 s[30:31] 815; 816; GFX10-LABEL: extractelement_vgpr_v8i16_idx0: 817; GFX10: ; %bb.0: 818; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 819; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 820; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 821; GFX10-NEXT: s_waitcnt vmcnt(0) 822; GFX10-NEXT: s_setpc_b64 s[30:31] 823 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 824 %element = extractelement <8 x i16> %vector, i32 0 825 ret i16 %element 826} 827 828define i16 @extractelement_vgpr_v8i16_idx1(<8 x i16> addrspace(1)* %ptr) { 829; GFX9-LABEL: extractelement_vgpr_v8i16_idx1: 830; GFX9: ; %bb.0: 831; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 832; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 833; GFX9-NEXT: s_waitcnt vmcnt(0) 834; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 835; GFX9-NEXT: s_setpc_b64 s[30:31] 836; 837; GFX8-LABEL: extractelement_vgpr_v8i16_idx1: 838; GFX8: ; %bb.0: 839; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 840; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 841; GFX8-NEXT: s_waitcnt vmcnt(0) 842; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 843; GFX8-NEXT: s_setpc_b64 s[30:31] 844; 845; GFX7-LABEL: extractelement_vgpr_v8i16_idx1: 846; GFX7: ; %bb.0: 847; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 848; GFX7-NEXT: s_mov_b32 s6, 0 849; GFX7-NEXT: s_mov_b32 s7, 0xf000 850; GFX7-NEXT: s_mov_b64 s[4:5], 0 851; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 852; GFX7-NEXT: s_waitcnt vmcnt(0) 853; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 854; GFX7-NEXT: s_setpc_b64 s[30:31] 855; 856; GFX10-LABEL: extractelement_vgpr_v8i16_idx1: 857; GFX10: ; %bb.0: 858; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 859; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 860; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 861; GFX10-NEXT: s_waitcnt vmcnt(0) 862; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 863; GFX10-NEXT: s_setpc_b64 s[30:31] 864 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 865 %element = extractelement <8 x i16> %vector, i32 1 866 ret i16 %element 867} 868 869define i16 @extractelement_vgpr_v8i16_idx2(<8 x i16> addrspace(1)* %ptr) { 870; GFX9-LABEL: extractelement_vgpr_v8i16_idx2: 871; GFX9: ; %bb.0: 872; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 873; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 874; GFX9-NEXT: s_waitcnt vmcnt(0) 875; GFX9-NEXT: v_mov_b32_e32 v0, v1 876; GFX9-NEXT: s_setpc_b64 s[30:31] 877; 878; GFX8-LABEL: extractelement_vgpr_v8i16_idx2: 879; GFX8: ; %bb.0: 880; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 881; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 882; GFX8-NEXT: s_waitcnt vmcnt(0) 883; GFX8-NEXT: v_mov_b32_e32 v0, v1 884; GFX8-NEXT: s_setpc_b64 s[30:31] 885; 886; GFX7-LABEL: extractelement_vgpr_v8i16_idx2: 887; GFX7: ; %bb.0: 888; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 889; GFX7-NEXT: s_mov_b32 s6, 0 890; GFX7-NEXT: s_mov_b32 s7, 0xf000 891; GFX7-NEXT: s_mov_b64 s[4:5], 0 892; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 893; GFX7-NEXT: s_waitcnt vmcnt(0) 894; GFX7-NEXT: v_mov_b32_e32 v0, v1 895; GFX7-NEXT: s_setpc_b64 s[30:31] 896; 897; GFX10-LABEL: extractelement_vgpr_v8i16_idx2: 898; GFX10: ; %bb.0: 899; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 900; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 901; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 902; GFX10-NEXT: s_waitcnt vmcnt(0) 903; GFX10-NEXT: v_mov_b32_e32 v0, v1 904; GFX10-NEXT: s_setpc_b64 s[30:31] 905 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 906 %element = extractelement <8 x i16> %vector, i32 2 907 ret i16 %element 908} 909 910define i16 @extractelement_vgpr_v8i16_idx3(<8 x i16> addrspace(1)* %ptr) { 911; GFX9-LABEL: extractelement_vgpr_v8i16_idx3: 912; GFX9: ; %bb.0: 913; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 914; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 915; GFX9-NEXT: s_waitcnt vmcnt(0) 916; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v1 917; GFX9-NEXT: s_setpc_b64 s[30:31] 918; 919; GFX8-LABEL: extractelement_vgpr_v8i16_idx3: 920; GFX8: ; %bb.0: 921; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 922; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 923; GFX8-NEXT: s_waitcnt vmcnt(0) 924; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v1 925; GFX8-NEXT: s_setpc_b64 s[30:31] 926; 927; GFX7-LABEL: extractelement_vgpr_v8i16_idx3: 928; GFX7: ; %bb.0: 929; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 930; GFX7-NEXT: s_mov_b32 s6, 0 931; GFX7-NEXT: s_mov_b32 s7, 0xf000 932; GFX7-NEXT: s_mov_b64 s[4:5], 0 933; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 934; GFX7-NEXT: s_waitcnt vmcnt(0) 935; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v1 936; GFX7-NEXT: s_setpc_b64 s[30:31] 937; 938; GFX10-LABEL: extractelement_vgpr_v8i16_idx3: 939; GFX10: ; %bb.0: 940; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 941; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 942; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 943; GFX10-NEXT: s_waitcnt vmcnt(0) 944; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v1 945; GFX10-NEXT: s_setpc_b64 s[30:31] 946 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 947 %element = extractelement <8 x i16> %vector, i32 3 948 ret i16 %element 949} 950 951define i16 @extractelement_vgpr_v8i16_idx4(<8 x i16> addrspace(1)* %ptr) { 952; GFX9-LABEL: extractelement_vgpr_v8i16_idx4: 953; GFX9: ; %bb.0: 954; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 955; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 956; GFX9-NEXT: s_waitcnt vmcnt(0) 957; GFX9-NEXT: v_mov_b32_e32 v0, v2 958; GFX9-NEXT: s_setpc_b64 s[30:31] 959; 960; GFX8-LABEL: extractelement_vgpr_v8i16_idx4: 961; GFX8: ; %bb.0: 962; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 963; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 964; GFX8-NEXT: s_waitcnt vmcnt(0) 965; GFX8-NEXT: v_mov_b32_e32 v0, v2 966; GFX8-NEXT: s_setpc_b64 s[30:31] 967; 968; GFX7-LABEL: extractelement_vgpr_v8i16_idx4: 969; GFX7: ; %bb.0: 970; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 971; GFX7-NEXT: s_mov_b32 s6, 0 972; GFX7-NEXT: s_mov_b32 s7, 0xf000 973; GFX7-NEXT: s_mov_b64 s[4:5], 0 974; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 975; GFX7-NEXT: s_waitcnt vmcnt(0) 976; GFX7-NEXT: v_mov_b32_e32 v0, v2 977; GFX7-NEXT: s_setpc_b64 s[30:31] 978; 979; GFX10-LABEL: extractelement_vgpr_v8i16_idx4: 980; GFX10: ; %bb.0: 981; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 982; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 983; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 984; GFX10-NEXT: s_waitcnt vmcnt(0) 985; GFX10-NEXT: v_mov_b32_e32 v0, v2 986; GFX10-NEXT: s_setpc_b64 s[30:31] 987 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 988 %element = extractelement <8 x i16> %vector, i32 4 989 ret i16 %element 990} 991 992define i16 @extractelement_vgpr_v8i16_idx5(<8 x i16> addrspace(1)* %ptr) { 993; GFX9-LABEL: extractelement_vgpr_v8i16_idx5: 994; GFX9: ; %bb.0: 995; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 996; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 997; GFX9-NEXT: s_waitcnt vmcnt(0) 998; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v2 999; GFX9-NEXT: s_setpc_b64 s[30:31] 1000; 1001; GFX8-LABEL: extractelement_vgpr_v8i16_idx5: 1002; GFX8: ; %bb.0: 1003; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1004; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1005; GFX8-NEXT: s_waitcnt vmcnt(0) 1006; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1007; GFX8-NEXT: s_setpc_b64 s[30:31] 1008; 1009; GFX7-LABEL: extractelement_vgpr_v8i16_idx5: 1010; GFX7: ; %bb.0: 1011; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1012; GFX7-NEXT: s_mov_b32 s6, 0 1013; GFX7-NEXT: s_mov_b32 s7, 0xf000 1014; GFX7-NEXT: s_mov_b64 s[4:5], 0 1015; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1016; GFX7-NEXT: s_waitcnt vmcnt(0) 1017; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1018; GFX7-NEXT: s_setpc_b64 s[30:31] 1019; 1020; GFX10-LABEL: extractelement_vgpr_v8i16_idx5: 1021; GFX10: ; %bb.0: 1022; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1023; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1024; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1025; GFX10-NEXT: s_waitcnt vmcnt(0) 1026; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v2 1027; GFX10-NEXT: s_setpc_b64 s[30:31] 1028 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1029 %element = extractelement <8 x i16> %vector, i32 5 1030 ret i16 %element 1031} 1032 1033define i16 @extractelement_vgpr_v8i16_idx6(<8 x i16> addrspace(1)* %ptr) { 1034; GFX9-LABEL: extractelement_vgpr_v8i16_idx6: 1035; GFX9: ; %bb.0: 1036; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1037; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1038; GFX9-NEXT: s_waitcnt vmcnt(0) 1039; GFX9-NEXT: v_mov_b32_e32 v0, v3 1040; GFX9-NEXT: s_setpc_b64 s[30:31] 1041; 1042; GFX8-LABEL: extractelement_vgpr_v8i16_idx6: 1043; GFX8: ; %bb.0: 1044; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1045; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1046; GFX8-NEXT: s_waitcnt vmcnt(0) 1047; GFX8-NEXT: v_mov_b32_e32 v0, v3 1048; GFX8-NEXT: s_setpc_b64 s[30:31] 1049; 1050; GFX7-LABEL: extractelement_vgpr_v8i16_idx6: 1051; GFX7: ; %bb.0: 1052; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1053; GFX7-NEXT: s_mov_b32 s6, 0 1054; GFX7-NEXT: s_mov_b32 s7, 0xf000 1055; GFX7-NEXT: s_mov_b64 s[4:5], 0 1056; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1057; GFX7-NEXT: s_waitcnt vmcnt(0) 1058; GFX7-NEXT: v_mov_b32_e32 v0, v3 1059; GFX7-NEXT: s_setpc_b64 s[30:31] 1060; 1061; GFX10-LABEL: extractelement_vgpr_v8i16_idx6: 1062; GFX10: ; %bb.0: 1063; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1064; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1065; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1066; GFX10-NEXT: s_waitcnt vmcnt(0) 1067; GFX10-NEXT: v_mov_b32_e32 v0, v3 1068; GFX10-NEXT: s_setpc_b64 s[30:31] 1069 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1070 %element = extractelement <8 x i16> %vector, i32 6 1071 ret i16 %element 1072} 1073 1074define i16 @extractelement_vgpr_v8i16_idx7(<8 x i16> addrspace(1)* %ptr) { 1075; GFX9-LABEL: extractelement_vgpr_v8i16_idx7: 1076; GFX9: ; %bb.0: 1077; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1078; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1079; GFX9-NEXT: s_waitcnt vmcnt(0) 1080; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1081; GFX9-NEXT: s_setpc_b64 s[30:31] 1082; 1083; GFX8-LABEL: extractelement_vgpr_v8i16_idx7: 1084; GFX8: ; %bb.0: 1085; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1086; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 1087; GFX8-NEXT: s_waitcnt vmcnt(0) 1088; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1089; GFX8-NEXT: s_setpc_b64 s[30:31] 1090; 1091; GFX7-LABEL: extractelement_vgpr_v8i16_idx7: 1092; GFX7: ; %bb.0: 1093; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1094; GFX7-NEXT: s_mov_b32 s6, 0 1095; GFX7-NEXT: s_mov_b32 s7, 0xf000 1096; GFX7-NEXT: s_mov_b64 s[4:5], 0 1097; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 1098; GFX7-NEXT: s_waitcnt vmcnt(0) 1099; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1100; GFX7-NEXT: s_setpc_b64 s[30:31] 1101; 1102; GFX10-LABEL: extractelement_vgpr_v8i16_idx7: 1103; GFX10: ; %bb.0: 1104; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1105; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1106; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 1107; GFX10-NEXT: s_waitcnt vmcnt(0) 1108; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v3 1109; GFX10-NEXT: s_setpc_b64 s[30:31] 1110 %vector = load <8 x i16>, <8 x i16> addrspace(1)* %ptr 1111 %element = extractelement <8 x i16> %vector, i32 7 1112 ret i16 %element 1113} 1114