1681 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s3; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji < %s | FileCheck -check-prefixes=GCN,GFX8 %s4; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii < %s | FileCheck -check-prefixes=GCN,GFX7 %s5; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 < %s | FileCheck -check-prefixes=GFX10 %s6; RUN: llc -global-isel -new-reg-bank-select -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GFX11 %s7 8define amdgpu_ps i16 @extractelement_sgpr_v4i16_sgpr_idx(ptr addrspace(4) inreg %ptr, i32 inreg %idx) {9; GFX9-LABEL: extractelement_sgpr_v4i16_sgpr_idx:10; GFX9: ; %bb.0:11; GFX9-NEXT: s_and_b32 s0, s4, 312; GFX9-NEXT: s_lshl_b32 s0, s0, 113; GFX9-NEXT: v_mov_b32_e32 v0, s014; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]15; GFX9-NEXT: s_waitcnt vmcnt(0)16; GFX9-NEXT: v_readfirstlane_b32 s0, v017; GFX9-NEXT: ; return to shader part epilog18;19; GFX8-LABEL: extractelement_sgpr_v4i16_sgpr_idx:20; GFX8: ; %bb.0:21; GFX8-NEXT: s_and_b32 s0, s4, 322; GFX8-NEXT: s_lshl_b32 s0, s0, 123; GFX8-NEXT: s_add_u32 s0, s2, s024; GFX8-NEXT: s_addc_u32 s1, s3, 025; GFX8-NEXT: v_mov_b32_e32 v0, s026; GFX8-NEXT: v_mov_b32_e32 v1, s127; GFX8-NEXT: flat_load_ushort v0, v[0:1]28; GFX8-NEXT: s_waitcnt vmcnt(0)29; GFX8-NEXT: v_readfirstlane_b32 s0, v030; GFX8-NEXT: ; return to shader part epilog31;32; GFX7-LABEL: extractelement_sgpr_v4i16_sgpr_idx:33; GFX7: ; %bb.0:34; GFX7-NEXT: s_mov_b32 s0, s235; GFX7-NEXT: s_and_b32 s2, s4, 336; GFX7-NEXT: s_lshl_b32 s4, s2, 137; GFX7-NEXT: s_mov_b32 s5, 038; GFX7-NEXT: v_mov_b32_e32 v0, s439; GFX7-NEXT: s_mov_b32 s1, s340; GFX7-NEXT: s_mov_b32 s3, 0xf00041; GFX7-NEXT: s_mov_b32 s2, s542; GFX7-NEXT: v_mov_b32_e32 v1, s543; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr6444; GFX7-NEXT: s_waitcnt vmcnt(0)45; GFX7-NEXT: v_readfirstlane_b32 s0, v046; GFX7-NEXT: ; return to shader part epilog47;48; GFX10-LABEL: extractelement_sgpr_v4i16_sgpr_idx:49; GFX10: ; %bb.0:50; GFX10-NEXT: s_and_b32 s0, s4, 351; GFX10-NEXT: s_lshl_b32 s0, s0, 152; GFX10-NEXT: v_mov_b32_e32 v0, s053; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]54; GFX10-NEXT: s_waitcnt vmcnt(0)55; GFX10-NEXT: v_readfirstlane_b32 s0, v056; GFX10-NEXT: ; return to shader part epilog57;58; GFX11-LABEL: extractelement_sgpr_v4i16_sgpr_idx:59; GFX11: ; %bb.0:60; GFX11-NEXT: s_and_b32 s0, s4, 361; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)62; GFX11-NEXT: s_lshl_b32 s0, s0, 163; GFX11-NEXT: v_mov_b32_e32 v0, s064; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]65; GFX11-NEXT: s_waitcnt vmcnt(0)66; GFX11-NEXT: v_readfirstlane_b32 s0, v067; GFX11-NEXT: ; return to shader part epilog68 %vector = load <4 x i16>, ptr addrspace(4) %ptr69 %element = extractelement <4 x i16> %vector, i32 %idx70 ret i16 %element71}72 73define amdgpu_ps i16 @extractelement_vgpr_v4i16_sgpr_idx(ptr addrspace(1) %ptr, i32 inreg %idx) {74; GFX9-LABEL: extractelement_vgpr_v4i16_sgpr_idx:75; GFX9: ; %bb.0:76; GFX9-NEXT: s_and_b32 s0, s2, 377; GFX9-NEXT: s_mov_b32 s1, 078; GFX9-NEXT: s_lshl_b32 s0, s0, 179; GFX9-NEXT: v_mov_b32_e32 v3, s180; GFX9-NEXT: v_mov_b32_e32 v2, s081; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v282; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc83; GFX9-NEXT: global_load_ushort v0, v[0:1], off84; GFX9-NEXT: s_waitcnt vmcnt(0)85; GFX9-NEXT: v_readfirstlane_b32 s0, v086; GFX9-NEXT: ; return to shader part epilog87;88; GFX8-LABEL: extractelement_vgpr_v4i16_sgpr_idx:89; GFX8: ; %bb.0:90; GFX8-NEXT: s_and_b32 s0, s2, 391; GFX8-NEXT: s_mov_b32 s1, 092; GFX8-NEXT: s_lshl_b32 s0, s0, 193; GFX8-NEXT: v_mov_b32_e32 v3, s194; GFX8-NEXT: v_mov_b32_e32 v2, s095; GFX8-NEXT: v_add_u32_e32 v0, vcc, v0, v296; GFX8-NEXT: v_addc_u32_e32 v1, vcc, v1, v3, vcc97; GFX8-NEXT: flat_load_ushort v0, v[0:1]98; GFX8-NEXT: s_waitcnt vmcnt(0)99; GFX8-NEXT: v_readfirstlane_b32 s0, v0100; GFX8-NEXT: ; return to shader part epilog101;102; GFX7-LABEL: extractelement_vgpr_v4i16_sgpr_idx:103; GFX7: ; %bb.0:104; GFX7-NEXT: s_and_b32 s0, s2, 3105; GFX7-NEXT: s_mov_b32 s1, 0106; GFX7-NEXT: s_lshl_b32 s0, s0, 1107; GFX7-NEXT: s_mov_b32 s3, 0xf000108; GFX7-NEXT: s_mov_b32 s2, s1109; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr64110; GFX7-NEXT: s_waitcnt vmcnt(0)111; GFX7-NEXT: v_readfirstlane_b32 s0, v0112; GFX7-NEXT: ; return to shader part epilog113;114; GFX10-LABEL: extractelement_vgpr_v4i16_sgpr_idx:115; GFX10: ; %bb.0:116; GFX10-NEXT: s_and_b32 s0, s2, 3117; GFX10-NEXT: s_mov_b32 s1, 0118; GFX10-NEXT: s_lshl_b32 s0, s0, 1119; GFX10-NEXT: v_mov_b32_e32 v3, s1120; GFX10-NEXT: v_mov_b32_e32 v2, s0121; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2122; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo123; GFX10-NEXT: global_load_ushort v0, v[0:1], off124; GFX10-NEXT: s_waitcnt vmcnt(0)125; GFX10-NEXT: v_readfirstlane_b32 s0, v0126; GFX10-NEXT: ; return to shader part epilog127;128; GFX11-LABEL: extractelement_vgpr_v4i16_sgpr_idx:129; GFX11: ; %bb.0:130; GFX11-NEXT: s_and_b32 s0, s2, 3131; GFX11-NEXT: s_mov_b32 s1, 0132; GFX11-NEXT: s_lshl_b32 s0, s0, 1133; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)134; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0135; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2136; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)137; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo138; GFX11-NEXT: global_load_u16 v0, v[0:1], off139; GFX11-NEXT: s_waitcnt vmcnt(0)140; GFX11-NEXT: v_readfirstlane_b32 s0, v0141; GFX11-NEXT: ; return to shader part epilog142 %vector = load <4 x i16>, ptr addrspace(1) %ptr143 %element = extractelement <4 x i16> %vector, i32 %idx144 ret i16 %element145}146 147define i16 @extractelement_vgpr_v4i16_vgpr_idx(ptr addrspace(1) %ptr, i32 %idx) {148; GFX9-LABEL: extractelement_vgpr_v4i16_vgpr_idx:149; GFX9: ; %bb.0:150; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)151; GFX9-NEXT: v_and_b32_e32 v2, 3, v2152; GFX9-NEXT: v_lshlrev_b32_e32 v2, 1, v2153; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2154; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc155; GFX9-NEXT: global_load_ushort v0, v[0:1], off156; GFX9-NEXT: s_waitcnt vmcnt(0)157; GFX9-NEXT: s_setpc_b64 s[30:31]158;159; GFX8-LABEL: extractelement_vgpr_v4i16_vgpr_idx:160; GFX8: ; %bb.0:161; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)162; GFX8-NEXT: v_and_b32_e32 v2, 3, v2163; GFX8-NEXT: v_lshlrev_b32_e32 v2, 1, v2164; GFX8-NEXT: v_add_u32_e32 v0, vcc, v0, v2165; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc166; GFX8-NEXT: flat_load_ushort v0, v[0:1]167; GFX8-NEXT: s_waitcnt vmcnt(0)168; GFX8-NEXT: s_setpc_b64 s[30:31]169;170; GFX7-LABEL: extractelement_vgpr_v4i16_vgpr_idx:171; GFX7: ; %bb.0:172; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GFX7-NEXT: v_and_b32_e32 v2, 3, v2174; GFX7-NEXT: v_lshlrev_b32_e32 v2, 1, v2175; GFX7-NEXT: v_add_i32_e32 v0, vcc, v0, v2176; GFX7-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc177; GFX7-NEXT: s_mov_b32 s6, 0178; GFX7-NEXT: s_mov_b32 s7, 0xf000179; GFX7-NEXT: s_mov_b64 s[4:5], 0180; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64181; GFX7-NEXT: s_waitcnt vmcnt(0)182; GFX7-NEXT: s_setpc_b64 s[30:31]183;184; GFX10-LABEL: extractelement_vgpr_v4i16_vgpr_idx:185; GFX10: ; %bb.0:186; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX10-NEXT: v_and_b32_e32 v2, 3, v2188; GFX10-NEXT: v_lshlrev_b32_e32 v2, 1, v2189; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2190; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo191; GFX10-NEXT: global_load_ushort v0, v[0:1], off192; GFX10-NEXT: s_waitcnt vmcnt(0)193; GFX10-NEXT: s_setpc_b64 s[30:31]194;195; GFX11-LABEL: extractelement_vgpr_v4i16_vgpr_idx:196; GFX11: ; %bb.0:197; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)198; GFX11-NEXT: v_and_b32_e32 v2, 3, v2199; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)200; GFX11-NEXT: v_lshlrev_b32_e32 v2, 1, v2201; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2202; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)203; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo204; GFX11-NEXT: global_load_u16 v0, v[0:1], off205; GFX11-NEXT: s_waitcnt vmcnt(0)206; GFX11-NEXT: s_setpc_b64 s[30:31]207 %vector = load <4 x i16>, ptr addrspace(1) %ptr208 %element = extractelement <4 x i16> %vector, i32 %idx209 ret i16 %element210}211 212define amdgpu_ps i16 @extractelement_sgpr_v4i16_vgpr_idx(ptr addrspace(4) inreg %ptr, i32 %idx) {213; GFX9-LABEL: extractelement_sgpr_v4i16_vgpr_idx:214; GFX9: ; %bb.0:215; GFX9-NEXT: v_and_b32_e32 v0, 3, v0216; GFX9-NEXT: v_lshlrev_b32_e32 v0, 1, v0217; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]218; GFX9-NEXT: s_waitcnt vmcnt(0)219; GFX9-NEXT: v_readfirstlane_b32 s0, v0220; GFX9-NEXT: ; return to shader part epilog221;222; GFX8-LABEL: extractelement_sgpr_v4i16_vgpr_idx:223; GFX8: ; %bb.0:224; GFX8-NEXT: v_and_b32_e32 v0, 3, v0225; GFX8-NEXT: v_lshlrev_b32_e32 v2, 1, v0226; GFX8-NEXT: v_mov_b32_e32 v0, s2227; GFX8-NEXT: v_mov_b32_e32 v1, s3228; GFX8-NEXT: v_add_u32_e32 v0, vcc, v0, v2229; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc230; GFX8-NEXT: flat_load_ushort v0, v[0:1]231; GFX8-NEXT: s_waitcnt vmcnt(0)232; GFX8-NEXT: v_readfirstlane_b32 s0, v0233; GFX8-NEXT: ; return to shader part epilog234;235; GFX7-LABEL: extractelement_sgpr_v4i16_vgpr_idx:236; GFX7: ; %bb.0:237; GFX7-NEXT: v_and_b32_e32 v0, 3, v0238; GFX7-NEXT: s_mov_b32 s0, s2239; GFX7-NEXT: s_mov_b32 s1, s3240; GFX7-NEXT: v_lshlrev_b32_e32 v0, 1, v0241; GFX7-NEXT: v_mov_b32_e32 v1, 0242; GFX7-NEXT: s_mov_b32 s2, 0243; GFX7-NEXT: s_mov_b32 s3, 0xf000244; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr64245; GFX7-NEXT: s_waitcnt vmcnt(0)246; GFX7-NEXT: v_readfirstlane_b32 s0, v0247; GFX7-NEXT: ; return to shader part epilog248;249; GFX10-LABEL: extractelement_sgpr_v4i16_vgpr_idx:250; GFX10: ; %bb.0:251; GFX10-NEXT: v_and_b32_e32 v0, 3, v0252; GFX10-NEXT: v_lshlrev_b32_e32 v0, 1, v0253; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]254; GFX10-NEXT: s_waitcnt vmcnt(0)255; GFX10-NEXT: v_readfirstlane_b32 s0, v0256; GFX10-NEXT: ; return to shader part epilog257;258; GFX11-LABEL: extractelement_sgpr_v4i16_vgpr_idx:259; GFX11: ; %bb.0:260; GFX11-NEXT: v_and_b32_e32 v0, 3, v0261; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)262; GFX11-NEXT: v_lshlrev_b32_e32 v0, 1, v0263; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]264; GFX11-NEXT: s_waitcnt vmcnt(0)265; GFX11-NEXT: v_readfirstlane_b32 s0, v0266; GFX11-NEXT: ; return to shader part epilog267 %vector = load <4 x i16>, ptr addrspace(4) %ptr268 %element = extractelement <4 x i16> %vector, i32 %idx269 ret i16 %element270}271 272define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx0(ptr addrspace(4) inreg %ptr) {273; GFX9-LABEL: extractelement_sgpr_v4i16_idx0:274; GFX9: ; %bb.0:275; GFX9-NEXT: v_mov_b32_e32 v0, 0276; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]277; GFX9-NEXT: s_waitcnt vmcnt(0)278; GFX9-NEXT: v_readfirstlane_b32 s0, v0279; GFX9-NEXT: ; return to shader part epilog280;281; GFX8-LABEL: extractelement_sgpr_v4i16_idx0:282; GFX8: ; %bb.0:283; GFX8-NEXT: v_mov_b32_e32 v0, s2284; GFX8-NEXT: v_mov_b32_e32 v1, s3285; GFX8-NEXT: flat_load_ushort v0, v[0:1]286; GFX8-NEXT: s_waitcnt vmcnt(0)287; GFX8-NEXT: v_readfirstlane_b32 s0, v0288; GFX8-NEXT: ; return to shader part epilog289;290; GFX7-LABEL: extractelement_sgpr_v4i16_idx0:291; GFX7: ; %bb.0:292; GFX7-NEXT: s_mov_b32 s0, s2293; GFX7-NEXT: s_mov_b32 s1, s3294; GFX7-NEXT: s_mov_b32 s2, -1295; GFX7-NEXT: s_mov_b32 s3, 0xf000296; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0297; GFX7-NEXT: s_waitcnt vmcnt(0)298; GFX7-NEXT: v_readfirstlane_b32 s0, v0299; GFX7-NEXT: ; return to shader part epilog300;301; GFX10-LABEL: extractelement_sgpr_v4i16_idx0:302; GFX10: ; %bb.0:303; GFX10-NEXT: v_mov_b32_e32 v0, 0304; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]305; GFX10-NEXT: s_waitcnt vmcnt(0)306; GFX10-NEXT: v_readfirstlane_b32 s0, v0307; GFX10-NEXT: ; return to shader part epilog308;309; GFX11-LABEL: extractelement_sgpr_v4i16_idx0:310; GFX11: ; %bb.0:311; GFX11-NEXT: v_mov_b32_e32 v0, 0312; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]313; GFX11-NEXT: s_waitcnt vmcnt(0)314; GFX11-NEXT: v_readfirstlane_b32 s0, v0315; GFX11-NEXT: ; return to shader part epilog316 %vector = load <4 x i16>, ptr addrspace(4) %ptr317 %element = extractelement <4 x i16> %vector, i32 0318 ret i16 %element319}320 321define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx1(ptr addrspace(4) inreg %ptr) {322; GFX9-LABEL: extractelement_sgpr_v4i16_idx1:323; GFX9: ; %bb.0:324; GFX9-NEXT: v_mov_b32_e32 v0, 0325; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:2326; GFX9-NEXT: s_waitcnt vmcnt(0)327; GFX9-NEXT: v_readfirstlane_b32 s0, v0328; GFX9-NEXT: ; return to shader part epilog329;330; GFX8-LABEL: extractelement_sgpr_v4i16_idx1:331; GFX8: ; %bb.0:332; GFX8-NEXT: s_add_u32 s0, s2, 2333; GFX8-NEXT: s_addc_u32 s1, s3, 0334; GFX8-NEXT: v_mov_b32_e32 v0, s0335; GFX8-NEXT: v_mov_b32_e32 v1, s1336; GFX8-NEXT: flat_load_ushort v0, v[0:1]337; GFX8-NEXT: s_waitcnt vmcnt(0)338; GFX8-NEXT: v_readfirstlane_b32 s0, v0339; GFX8-NEXT: ; return to shader part epilog340;341; GFX7-LABEL: extractelement_sgpr_v4i16_idx1:342; GFX7: ; %bb.0:343; GFX7-NEXT: s_mov_b32 s0, s2344; GFX7-NEXT: s_mov_b32 s1, s3345; GFX7-NEXT: s_mov_b32 s2, -1346; GFX7-NEXT: s_mov_b32 s3, 0xf000347; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:2348; GFX7-NEXT: s_waitcnt vmcnt(0)349; GFX7-NEXT: v_readfirstlane_b32 s0, v0350; GFX7-NEXT: ; return to shader part epilog351;352; GFX10-LABEL: extractelement_sgpr_v4i16_idx1:353; GFX10: ; %bb.0:354; GFX10-NEXT: v_mov_b32_e32 v0, 0355; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:2356; GFX10-NEXT: s_waitcnt vmcnt(0)357; GFX10-NEXT: v_readfirstlane_b32 s0, v0358; GFX10-NEXT: ; return to shader part epilog359;360; GFX11-LABEL: extractelement_sgpr_v4i16_idx1:361; GFX11: ; %bb.0:362; GFX11-NEXT: v_mov_b32_e32 v0, 0363; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:2364; GFX11-NEXT: s_waitcnt vmcnt(0)365; GFX11-NEXT: v_readfirstlane_b32 s0, v0366; GFX11-NEXT: ; return to shader part epilog367 %vector = load <4 x i16>, ptr addrspace(4) %ptr368 %element = extractelement <4 x i16> %vector, i32 1369 ret i16 %element370}371 372define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx2(ptr addrspace(4) inreg %ptr) {373; GFX9-LABEL: extractelement_sgpr_v4i16_idx2:374; GFX9: ; %bb.0:375; GFX9-NEXT: v_mov_b32_e32 v0, 0376; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:4377; GFX9-NEXT: s_waitcnt vmcnt(0)378; GFX9-NEXT: v_readfirstlane_b32 s0, v0379; GFX9-NEXT: ; return to shader part epilog380;381; GFX8-LABEL: extractelement_sgpr_v4i16_idx2:382; GFX8: ; %bb.0:383; GFX8-NEXT: s_add_u32 s0, s2, 4384; GFX8-NEXT: s_addc_u32 s1, s3, 0385; GFX8-NEXT: v_mov_b32_e32 v0, s0386; GFX8-NEXT: v_mov_b32_e32 v1, s1387; GFX8-NEXT: flat_load_ushort v0, v[0:1]388; GFX8-NEXT: s_waitcnt vmcnt(0)389; GFX8-NEXT: v_readfirstlane_b32 s0, v0390; GFX8-NEXT: ; return to shader part epilog391;392; GFX7-LABEL: extractelement_sgpr_v4i16_idx2:393; GFX7: ; %bb.0:394; GFX7-NEXT: s_mov_b32 s0, s2395; GFX7-NEXT: s_mov_b32 s1, s3396; GFX7-NEXT: s_mov_b32 s2, -1397; GFX7-NEXT: s_mov_b32 s3, 0xf000398; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:4399; GFX7-NEXT: s_waitcnt vmcnt(0)400; GFX7-NEXT: v_readfirstlane_b32 s0, v0401; GFX7-NEXT: ; return to shader part epilog402;403; GFX10-LABEL: extractelement_sgpr_v4i16_idx2:404; GFX10: ; %bb.0:405; GFX10-NEXT: v_mov_b32_e32 v0, 0406; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:4407; GFX10-NEXT: s_waitcnt vmcnt(0)408; GFX10-NEXT: v_readfirstlane_b32 s0, v0409; GFX10-NEXT: ; return to shader part epilog410;411; GFX11-LABEL: extractelement_sgpr_v4i16_idx2:412; GFX11: ; %bb.0:413; GFX11-NEXT: v_mov_b32_e32 v0, 0414; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:4415; GFX11-NEXT: s_waitcnt vmcnt(0)416; GFX11-NEXT: v_readfirstlane_b32 s0, v0417; GFX11-NEXT: ; return to shader part epilog418 %vector = load <4 x i16>, ptr addrspace(4) %ptr419 %element = extractelement <4 x i16> %vector, i32 2420 ret i16 %element421}422 423define amdgpu_ps i16 @extractelement_sgpr_v4i16_idx3(ptr addrspace(4) inreg %ptr) {424; GFX9-LABEL: extractelement_sgpr_v4i16_idx3:425; GFX9: ; %bb.0:426; GFX9-NEXT: v_mov_b32_e32 v0, 0427; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:6428; GFX9-NEXT: s_waitcnt vmcnt(0)429; GFX9-NEXT: v_readfirstlane_b32 s0, v0430; GFX9-NEXT: ; return to shader part epilog431;432; GFX8-LABEL: extractelement_sgpr_v4i16_idx3:433; GFX8: ; %bb.0:434; GFX8-NEXT: s_add_u32 s0, s2, 6435; GFX8-NEXT: s_addc_u32 s1, s3, 0436; GFX8-NEXT: v_mov_b32_e32 v0, s0437; GFX8-NEXT: v_mov_b32_e32 v1, s1438; GFX8-NEXT: flat_load_ushort v0, v[0:1]439; GFX8-NEXT: s_waitcnt vmcnt(0)440; GFX8-NEXT: v_readfirstlane_b32 s0, v0441; GFX8-NEXT: ; return to shader part epilog442;443; GFX7-LABEL: extractelement_sgpr_v4i16_idx3:444; GFX7: ; %bb.0:445; GFX7-NEXT: s_mov_b32 s0, s2446; GFX7-NEXT: s_mov_b32 s1, s3447; GFX7-NEXT: s_mov_b32 s2, -1448; GFX7-NEXT: s_mov_b32 s3, 0xf000449; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:6450; GFX7-NEXT: s_waitcnt vmcnt(0)451; GFX7-NEXT: v_readfirstlane_b32 s0, v0452; GFX7-NEXT: ; return to shader part epilog453;454; GFX10-LABEL: extractelement_sgpr_v4i16_idx3:455; GFX10: ; %bb.0:456; GFX10-NEXT: v_mov_b32_e32 v0, 0457; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:6458; GFX10-NEXT: s_waitcnt vmcnt(0)459; GFX10-NEXT: v_readfirstlane_b32 s0, v0460; GFX10-NEXT: ; return to shader part epilog461;462; GFX11-LABEL: extractelement_sgpr_v4i16_idx3:463; GFX11: ; %bb.0:464; GFX11-NEXT: v_mov_b32_e32 v0, 0465; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:6466; GFX11-NEXT: s_waitcnt vmcnt(0)467; GFX11-NEXT: v_readfirstlane_b32 s0, v0468; GFX11-NEXT: ; return to shader part epilog469 %vector = load <4 x i16>, ptr addrspace(4) %ptr470 %element = extractelement <4 x i16> %vector, i32 3471 ret i16 %element472}473 474define i16 @extractelement_vgpr_v4i16_idx0(ptr addrspace(1) %ptr) {475; GFX9-LABEL: extractelement_vgpr_v4i16_idx0:476; GFX9: ; %bb.0:477; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)478; GFX9-NEXT: global_load_ushort v0, v[0:1], off479; GFX9-NEXT: s_waitcnt vmcnt(0)480; GFX9-NEXT: s_setpc_b64 s[30:31]481;482; GFX8-LABEL: extractelement_vgpr_v4i16_idx0:483; GFX8: ; %bb.0:484; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)485; GFX8-NEXT: flat_load_ushort v0, v[0:1]486; GFX8-NEXT: s_waitcnt vmcnt(0)487; GFX8-NEXT: s_setpc_b64 s[30:31]488;489; GFX7-LABEL: extractelement_vgpr_v4i16_idx0:490; GFX7: ; %bb.0:491; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)492; GFX7-NEXT: s_mov_b32 s6, 0493; GFX7-NEXT: s_mov_b32 s7, 0xf000494; GFX7-NEXT: s_mov_b64 s[4:5], 0495; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64496; GFX7-NEXT: s_waitcnt vmcnt(0)497; GFX7-NEXT: s_setpc_b64 s[30:31]498;499; GFX10-LABEL: extractelement_vgpr_v4i16_idx0:500; GFX10: ; %bb.0:501; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)502; GFX10-NEXT: global_load_ushort v0, v[0:1], off503; GFX10-NEXT: s_waitcnt vmcnt(0)504; GFX10-NEXT: s_setpc_b64 s[30:31]505;506; GFX11-LABEL: extractelement_vgpr_v4i16_idx0:507; GFX11: ; %bb.0:508; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)509; GFX11-NEXT: global_load_u16 v0, v[0:1], off510; GFX11-NEXT: s_waitcnt vmcnt(0)511; GFX11-NEXT: s_setpc_b64 s[30:31]512 %vector = load <4 x i16>, ptr addrspace(1) %ptr513 %element = extractelement <4 x i16> %vector, i32 0514 ret i16 %element515}516 517define i16 @extractelement_vgpr_v4i16_idx1(ptr addrspace(1) %ptr) {518; GFX9-LABEL: extractelement_vgpr_v4i16_idx1:519; GFX9: ; %bb.0:520; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)521; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:2522; GFX9-NEXT: s_waitcnt vmcnt(0)523; GFX9-NEXT: s_setpc_b64 s[30:31]524;525; GFX8-LABEL: extractelement_vgpr_v4i16_idx1:526; GFX8: ; %bb.0:527; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)528; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v0529; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc530; GFX8-NEXT: flat_load_ushort v0, v[0:1]531; GFX8-NEXT: s_waitcnt vmcnt(0)532; GFX8-NEXT: s_setpc_b64 s[30:31]533;534; GFX7-LABEL: extractelement_vgpr_v4i16_idx1:535; GFX7: ; %bb.0:536; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX7-NEXT: s_mov_b32 s6, 0538; GFX7-NEXT: s_mov_b32 s7, 0xf000539; GFX7-NEXT: s_mov_b64 s[4:5], 0540; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:2541; GFX7-NEXT: s_waitcnt vmcnt(0)542; GFX7-NEXT: s_setpc_b64 s[30:31]543;544; GFX10-LABEL: extractelement_vgpr_v4i16_idx1:545; GFX10: ; %bb.0:546; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)547; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:2548; GFX10-NEXT: s_waitcnt vmcnt(0)549; GFX10-NEXT: s_setpc_b64 s[30:31]550;551; GFX11-LABEL: extractelement_vgpr_v4i16_idx1:552; GFX11: ; %bb.0:553; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)554; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:2555; GFX11-NEXT: s_waitcnt vmcnt(0)556; GFX11-NEXT: s_setpc_b64 s[30:31]557 %vector = load <4 x i16>, ptr addrspace(1) %ptr558 %element = extractelement <4 x i16> %vector, i32 1559 ret i16 %element560}561 562define i16 @extractelement_vgpr_v4i16_idx2(ptr addrspace(1) %ptr) {563; GFX9-LABEL: extractelement_vgpr_v4i16_idx2:564; GFX9: ; %bb.0:565; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)566; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:4567; GFX9-NEXT: s_waitcnt vmcnt(0)568; GFX9-NEXT: s_setpc_b64 s[30:31]569;570; GFX8-LABEL: extractelement_vgpr_v4i16_idx2:571; GFX8: ; %bb.0:572; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)573; GFX8-NEXT: v_add_u32_e32 v0, vcc, 4, v0574; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc575; GFX8-NEXT: flat_load_ushort v0, v[0:1]576; GFX8-NEXT: s_waitcnt vmcnt(0)577; GFX8-NEXT: s_setpc_b64 s[30:31]578;579; GFX7-LABEL: extractelement_vgpr_v4i16_idx2:580; GFX7: ; %bb.0:581; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)582; GFX7-NEXT: s_mov_b32 s6, 0583; GFX7-NEXT: s_mov_b32 s7, 0xf000584; GFX7-NEXT: s_mov_b64 s[4:5], 0585; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:4586; GFX7-NEXT: s_waitcnt vmcnt(0)587; GFX7-NEXT: s_setpc_b64 s[30:31]588;589; GFX10-LABEL: extractelement_vgpr_v4i16_idx2:590; GFX10: ; %bb.0:591; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)592; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:4593; GFX10-NEXT: s_waitcnt vmcnt(0)594; GFX10-NEXT: s_setpc_b64 s[30:31]595;596; GFX11-LABEL: extractelement_vgpr_v4i16_idx2:597; GFX11: ; %bb.0:598; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)599; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:4600; GFX11-NEXT: s_waitcnt vmcnt(0)601; GFX11-NEXT: s_setpc_b64 s[30:31]602 %vector = load <4 x i16>, ptr addrspace(1) %ptr603 %element = extractelement <4 x i16> %vector, i32 2604 ret i16 %element605}606 607define i16 @extractelement_vgpr_v4i16_idx3(ptr addrspace(1) %ptr) {608; GFX9-LABEL: extractelement_vgpr_v4i16_idx3:609; GFX9: ; %bb.0:610; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)611; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:6612; GFX9-NEXT: s_waitcnt vmcnt(0)613; GFX9-NEXT: s_setpc_b64 s[30:31]614;615; GFX8-LABEL: extractelement_vgpr_v4i16_idx3:616; GFX8: ; %bb.0:617; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)618; GFX8-NEXT: v_add_u32_e32 v0, vcc, 6, v0619; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc620; GFX8-NEXT: flat_load_ushort v0, v[0:1]621; GFX8-NEXT: s_waitcnt vmcnt(0)622; GFX8-NEXT: s_setpc_b64 s[30:31]623;624; GFX7-LABEL: extractelement_vgpr_v4i16_idx3:625; GFX7: ; %bb.0:626; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)627; GFX7-NEXT: s_mov_b32 s6, 0628; GFX7-NEXT: s_mov_b32 s7, 0xf000629; GFX7-NEXT: s_mov_b64 s[4:5], 0630; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:6631; GFX7-NEXT: s_waitcnt vmcnt(0)632; GFX7-NEXT: s_setpc_b64 s[30:31]633;634; GFX10-LABEL: extractelement_vgpr_v4i16_idx3:635; GFX10: ; %bb.0:636; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)637; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:6638; GFX10-NEXT: s_waitcnt vmcnt(0)639; GFX10-NEXT: s_setpc_b64 s[30:31]640;641; GFX11-LABEL: extractelement_vgpr_v4i16_idx3:642; GFX11: ; %bb.0:643; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)644; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:6645; GFX11-NEXT: s_waitcnt vmcnt(0)646; GFX11-NEXT: s_setpc_b64 s[30:31]647 %vector = load <4 x i16>, ptr addrspace(1) %ptr648 %element = extractelement <4 x i16> %vector, i32 3649 ret i16 %element650}651 652define amdgpu_ps i16 @extractelement_sgpr_v8i16_sgpr_idx(ptr addrspace(4) inreg %ptr, i32 inreg %idx) {653; GFX9-LABEL: extractelement_sgpr_v8i16_sgpr_idx:654; GFX9: ; %bb.0:655; GFX9-NEXT: s_and_b32 s0, s4, 7656; GFX9-NEXT: s_lshl_b32 s0, s0, 1657; GFX9-NEXT: v_mov_b32_e32 v0, s0658; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]659; GFX9-NEXT: s_waitcnt vmcnt(0)660; GFX9-NEXT: v_readfirstlane_b32 s0, v0661; GFX9-NEXT: ; return to shader part epilog662;663; GFX8-LABEL: extractelement_sgpr_v8i16_sgpr_idx:664; GFX8: ; %bb.0:665; GFX8-NEXT: s_and_b32 s0, s4, 7666; GFX8-NEXT: s_lshl_b32 s0, s0, 1667; GFX8-NEXT: s_add_u32 s0, s2, s0668; GFX8-NEXT: s_addc_u32 s1, s3, 0669; GFX8-NEXT: v_mov_b32_e32 v0, s0670; GFX8-NEXT: v_mov_b32_e32 v1, s1671; GFX8-NEXT: flat_load_ushort v0, v[0:1]672; GFX8-NEXT: s_waitcnt vmcnt(0)673; GFX8-NEXT: v_readfirstlane_b32 s0, v0674; GFX8-NEXT: ; return to shader part epilog675;676; GFX7-LABEL: extractelement_sgpr_v8i16_sgpr_idx:677; GFX7: ; %bb.0:678; GFX7-NEXT: s_mov_b32 s0, s2679; GFX7-NEXT: s_and_b32 s2, s4, 7680; GFX7-NEXT: s_lshl_b32 s4, s2, 1681; GFX7-NEXT: s_mov_b32 s5, 0682; GFX7-NEXT: v_mov_b32_e32 v0, s4683; GFX7-NEXT: s_mov_b32 s1, s3684; GFX7-NEXT: s_mov_b32 s3, 0xf000685; GFX7-NEXT: s_mov_b32 s2, s5686; GFX7-NEXT: v_mov_b32_e32 v1, s5687; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr64688; GFX7-NEXT: s_waitcnt vmcnt(0)689; GFX7-NEXT: v_readfirstlane_b32 s0, v0690; GFX7-NEXT: ; return to shader part epilog691;692; GFX10-LABEL: extractelement_sgpr_v8i16_sgpr_idx:693; GFX10: ; %bb.0:694; GFX10-NEXT: s_and_b32 s0, s4, 7695; GFX10-NEXT: s_lshl_b32 s0, s0, 1696; GFX10-NEXT: v_mov_b32_e32 v0, s0697; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]698; GFX10-NEXT: s_waitcnt vmcnt(0)699; GFX10-NEXT: v_readfirstlane_b32 s0, v0700; GFX10-NEXT: ; return to shader part epilog701;702; GFX11-LABEL: extractelement_sgpr_v8i16_sgpr_idx:703; GFX11: ; %bb.0:704; GFX11-NEXT: s_and_b32 s0, s4, 7705; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)706; GFX11-NEXT: s_lshl_b32 s0, s0, 1707; GFX11-NEXT: v_mov_b32_e32 v0, s0708; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]709; GFX11-NEXT: s_waitcnt vmcnt(0)710; GFX11-NEXT: v_readfirstlane_b32 s0, v0711; GFX11-NEXT: ; return to shader part epilog712 %vector = load <8 x i16>, ptr addrspace(4) %ptr713 %element = extractelement <8 x i16> %vector, i32 %idx714 ret i16 %element715}716 717define amdgpu_ps i16 @extractelement_vgpr_v8i16_sgpr_idx(ptr addrspace(1) %ptr, i32 inreg %idx) {718; GFX9-LABEL: extractelement_vgpr_v8i16_sgpr_idx:719; GFX9: ; %bb.0:720; GFX9-NEXT: s_and_b32 s0, s2, 7721; GFX9-NEXT: s_mov_b32 s1, 0722; GFX9-NEXT: s_lshl_b32 s0, s0, 1723; GFX9-NEXT: v_mov_b32_e32 v3, s1724; GFX9-NEXT: v_mov_b32_e32 v2, s0725; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2726; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, v1, v3, vcc727; GFX9-NEXT: global_load_ushort v0, v[0:1], off728; GFX9-NEXT: s_waitcnt vmcnt(0)729; GFX9-NEXT: v_readfirstlane_b32 s0, v0730; GFX9-NEXT: ; return to shader part epilog731;732; GFX8-LABEL: extractelement_vgpr_v8i16_sgpr_idx:733; GFX8: ; %bb.0:734; GFX8-NEXT: s_and_b32 s0, s2, 7735; GFX8-NEXT: s_mov_b32 s1, 0736; GFX8-NEXT: s_lshl_b32 s0, s0, 1737; GFX8-NEXT: v_mov_b32_e32 v3, s1738; GFX8-NEXT: v_mov_b32_e32 v2, s0739; GFX8-NEXT: v_add_u32_e32 v0, vcc, v0, v2740; GFX8-NEXT: v_addc_u32_e32 v1, vcc, v1, v3, vcc741; GFX8-NEXT: flat_load_ushort v0, v[0:1]742; GFX8-NEXT: s_waitcnt vmcnt(0)743; GFX8-NEXT: v_readfirstlane_b32 s0, v0744; GFX8-NEXT: ; return to shader part epilog745;746; GFX7-LABEL: extractelement_vgpr_v8i16_sgpr_idx:747; GFX7: ; %bb.0:748; GFX7-NEXT: s_and_b32 s0, s2, 7749; GFX7-NEXT: s_mov_b32 s1, 0750; GFX7-NEXT: s_lshl_b32 s0, s0, 1751; GFX7-NEXT: s_mov_b32 s3, 0xf000752; GFX7-NEXT: s_mov_b32 s2, s1753; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr64754; GFX7-NEXT: s_waitcnt vmcnt(0)755; GFX7-NEXT: v_readfirstlane_b32 s0, v0756; GFX7-NEXT: ; return to shader part epilog757;758; GFX10-LABEL: extractelement_vgpr_v8i16_sgpr_idx:759; GFX10: ; %bb.0:760; GFX10-NEXT: s_and_b32 s0, s2, 7761; GFX10-NEXT: s_mov_b32 s1, 0762; GFX10-NEXT: s_lshl_b32 s0, s0, 1763; GFX10-NEXT: v_mov_b32_e32 v3, s1764; GFX10-NEXT: v_mov_b32_e32 v2, s0765; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2766; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, v1, v3, vcc_lo767; GFX10-NEXT: global_load_ushort v0, v[0:1], off768; GFX10-NEXT: s_waitcnt vmcnt(0)769; GFX10-NEXT: v_readfirstlane_b32 s0, v0770; GFX10-NEXT: ; return to shader part epilog771;772; GFX11-LABEL: extractelement_vgpr_v8i16_sgpr_idx:773; GFX11: ; %bb.0:774; GFX11-NEXT: s_and_b32 s0, s2, 7775; GFX11-NEXT: s_mov_b32 s1, 0776; GFX11-NEXT: s_lshl_b32 s0, s0, 1777; GFX11-NEXT: s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)778; GFX11-NEXT: v_dual_mov_b32 v3, s1 :: v_dual_mov_b32 v2, s0779; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2780; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)781; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, v1, v3, vcc_lo782; GFX11-NEXT: global_load_u16 v0, v[0:1], off783; GFX11-NEXT: s_waitcnt vmcnt(0)784; GFX11-NEXT: v_readfirstlane_b32 s0, v0785; GFX11-NEXT: ; return to shader part epilog786 %vector = load <8 x i16>, ptr addrspace(1) %ptr787 %element = extractelement <8 x i16> %vector, i32 %idx788 ret i16 %element789}790 791define i16 @extractelement_vgpr_v8i16_vgpr_idx(ptr addrspace(1) %ptr, i32 %idx) {792; GFX9-LABEL: extractelement_vgpr_v8i16_vgpr_idx:793; GFX9: ; %bb.0:794; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)795; GFX9-NEXT: v_and_b32_e32 v2, 7, v2796; GFX9-NEXT: v_lshlrev_b32_e32 v2, 1, v2797; GFX9-NEXT: v_add_co_u32_e32 v0, vcc, v0, v2798; GFX9-NEXT: v_addc_co_u32_e32 v1, vcc, 0, v1, vcc799; GFX9-NEXT: global_load_ushort v0, v[0:1], off800; GFX9-NEXT: s_waitcnt vmcnt(0)801; GFX9-NEXT: s_setpc_b64 s[30:31]802;803; GFX8-LABEL: extractelement_vgpr_v8i16_vgpr_idx:804; GFX8: ; %bb.0:805; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)806; GFX8-NEXT: v_and_b32_e32 v2, 7, v2807; GFX8-NEXT: v_lshlrev_b32_e32 v2, 1, v2808; GFX8-NEXT: v_add_u32_e32 v0, vcc, v0, v2809; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc810; GFX8-NEXT: flat_load_ushort v0, v[0:1]811; GFX8-NEXT: s_waitcnt vmcnt(0)812; GFX8-NEXT: s_setpc_b64 s[30:31]813;814; GFX7-LABEL: extractelement_vgpr_v8i16_vgpr_idx:815; GFX7: ; %bb.0:816; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)817; GFX7-NEXT: v_and_b32_e32 v2, 7, v2818; GFX7-NEXT: v_lshlrev_b32_e32 v2, 1, v2819; GFX7-NEXT: v_add_i32_e32 v0, vcc, v0, v2820; GFX7-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc821; GFX7-NEXT: s_mov_b32 s6, 0822; GFX7-NEXT: s_mov_b32 s7, 0xf000823; GFX7-NEXT: s_mov_b64 s[4:5], 0824; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64825; GFX7-NEXT: s_waitcnt vmcnt(0)826; GFX7-NEXT: s_setpc_b64 s[30:31]827;828; GFX10-LABEL: extractelement_vgpr_v8i16_vgpr_idx:829; GFX10: ; %bb.0:830; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)831; GFX10-NEXT: v_and_b32_e32 v2, 7, v2832; GFX10-NEXT: v_lshlrev_b32_e32 v2, 1, v2833; GFX10-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2834; GFX10-NEXT: v_add_co_ci_u32_e32 v1, vcc_lo, 0, v1, vcc_lo835; GFX10-NEXT: global_load_ushort v0, v[0:1], off836; GFX10-NEXT: s_waitcnt vmcnt(0)837; GFX10-NEXT: s_setpc_b64 s[30:31]838;839; GFX11-LABEL: extractelement_vgpr_v8i16_vgpr_idx:840; GFX11: ; %bb.0:841; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)842; GFX11-NEXT: v_and_b32_e32 v2, 7, v2843; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)844; GFX11-NEXT: v_lshlrev_b32_e32 v2, 1, v2845; GFX11-NEXT: v_add_co_u32 v0, vcc_lo, v0, v2846; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)847; GFX11-NEXT: v_add_co_ci_u32_e64 v1, null, 0, v1, vcc_lo848; GFX11-NEXT: global_load_u16 v0, v[0:1], off849; GFX11-NEXT: s_waitcnt vmcnt(0)850; GFX11-NEXT: s_setpc_b64 s[30:31]851 %vector = load <8 x i16>, ptr addrspace(1) %ptr852 %element = extractelement <8 x i16> %vector, i32 %idx853 ret i16 %element854}855 856define amdgpu_ps i16 @extractelement_sgpr_v8i16_vgpr_idx(ptr addrspace(4) inreg %ptr, i32 %idx) {857; GFX9-LABEL: extractelement_sgpr_v8i16_vgpr_idx:858; GFX9: ; %bb.0:859; GFX9-NEXT: v_and_b32_e32 v0, 7, v0860; GFX9-NEXT: v_lshlrev_b32_e32 v0, 1, v0861; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]862; GFX9-NEXT: s_waitcnt vmcnt(0)863; GFX9-NEXT: v_readfirstlane_b32 s0, v0864; GFX9-NEXT: ; return to shader part epilog865;866; GFX8-LABEL: extractelement_sgpr_v8i16_vgpr_idx:867; GFX8: ; %bb.0:868; GFX8-NEXT: v_and_b32_e32 v0, 7, v0869; GFX8-NEXT: v_lshlrev_b32_e32 v2, 1, v0870; GFX8-NEXT: v_mov_b32_e32 v0, s2871; GFX8-NEXT: v_mov_b32_e32 v1, s3872; GFX8-NEXT: v_add_u32_e32 v0, vcc, v0, v2873; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc874; GFX8-NEXT: flat_load_ushort v0, v[0:1]875; GFX8-NEXT: s_waitcnt vmcnt(0)876; GFX8-NEXT: v_readfirstlane_b32 s0, v0877; GFX8-NEXT: ; return to shader part epilog878;879; GFX7-LABEL: extractelement_sgpr_v8i16_vgpr_idx:880; GFX7: ; %bb.0:881; GFX7-NEXT: v_and_b32_e32 v0, 7, v0882; GFX7-NEXT: s_mov_b32 s0, s2883; GFX7-NEXT: s_mov_b32 s1, s3884; GFX7-NEXT: v_lshlrev_b32_e32 v0, 1, v0885; GFX7-NEXT: v_mov_b32_e32 v1, 0886; GFX7-NEXT: s_mov_b32 s2, 0887; GFX7-NEXT: s_mov_b32 s3, 0xf000888; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[0:3], 0 addr64889; GFX7-NEXT: s_waitcnt vmcnt(0)890; GFX7-NEXT: v_readfirstlane_b32 s0, v0891; GFX7-NEXT: ; return to shader part epilog892;893; GFX10-LABEL: extractelement_sgpr_v8i16_vgpr_idx:894; GFX10: ; %bb.0:895; GFX10-NEXT: v_and_b32_e32 v0, 7, v0896; GFX10-NEXT: v_lshlrev_b32_e32 v0, 1, v0897; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]898; GFX10-NEXT: s_waitcnt vmcnt(0)899; GFX10-NEXT: v_readfirstlane_b32 s0, v0900; GFX10-NEXT: ; return to shader part epilog901;902; GFX11-LABEL: extractelement_sgpr_v8i16_vgpr_idx:903; GFX11: ; %bb.0:904; GFX11-NEXT: v_and_b32_e32 v0, 7, v0905; GFX11-NEXT: s_delay_alu instid0(VALU_DEP_1)906; GFX11-NEXT: v_lshlrev_b32_e32 v0, 1, v0907; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]908; GFX11-NEXT: s_waitcnt vmcnt(0)909; GFX11-NEXT: v_readfirstlane_b32 s0, v0910; GFX11-NEXT: ; return to shader part epilog911 %vector = load <8 x i16>, ptr addrspace(4) %ptr912 %element = extractelement <8 x i16> %vector, i32 %idx913 ret i16 %element914}915 916define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx0(ptr addrspace(4) inreg %ptr) {917; GFX9-LABEL: extractelement_sgpr_v8i16_idx0:918; GFX9: ; %bb.0:919; GFX9-NEXT: v_mov_b32_e32 v0, 0920; GFX9-NEXT: global_load_ushort v0, v0, s[2:3]921; GFX9-NEXT: s_waitcnt vmcnt(0)922; GFX9-NEXT: v_readfirstlane_b32 s0, v0923; GFX9-NEXT: ; return to shader part epilog924;925; GFX8-LABEL: extractelement_sgpr_v8i16_idx0:926; GFX8: ; %bb.0:927; GFX8-NEXT: v_mov_b32_e32 v0, s2928; GFX8-NEXT: v_mov_b32_e32 v1, s3929; GFX8-NEXT: flat_load_ushort v0, v[0:1]930; GFX8-NEXT: s_waitcnt vmcnt(0)931; GFX8-NEXT: v_readfirstlane_b32 s0, v0932; GFX8-NEXT: ; return to shader part epilog933;934; GFX7-LABEL: extractelement_sgpr_v8i16_idx0:935; GFX7: ; %bb.0:936; GFX7-NEXT: s_mov_b32 s0, s2937; GFX7-NEXT: s_mov_b32 s1, s3938; GFX7-NEXT: s_mov_b32 s2, -1939; GFX7-NEXT: s_mov_b32 s3, 0xf000940; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0941; GFX7-NEXT: s_waitcnt vmcnt(0)942; GFX7-NEXT: v_readfirstlane_b32 s0, v0943; GFX7-NEXT: ; return to shader part epilog944;945; GFX10-LABEL: extractelement_sgpr_v8i16_idx0:946; GFX10: ; %bb.0:947; GFX10-NEXT: v_mov_b32_e32 v0, 0948; GFX10-NEXT: global_load_ushort v0, v0, s[2:3]949; GFX10-NEXT: s_waitcnt vmcnt(0)950; GFX10-NEXT: v_readfirstlane_b32 s0, v0951; GFX10-NEXT: ; return to shader part epilog952;953; GFX11-LABEL: extractelement_sgpr_v8i16_idx0:954; GFX11: ; %bb.0:955; GFX11-NEXT: v_mov_b32_e32 v0, 0956; GFX11-NEXT: global_load_u16 v0, v0, s[2:3]957; GFX11-NEXT: s_waitcnt vmcnt(0)958; GFX11-NEXT: v_readfirstlane_b32 s0, v0959; GFX11-NEXT: ; return to shader part epilog960 %vector = load <8 x i16>, ptr addrspace(4) %ptr961 %element = extractelement <8 x i16> %vector, i32 0962 ret i16 %element963}964 965define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx1(ptr addrspace(4) inreg %ptr) {966; GFX9-LABEL: extractelement_sgpr_v8i16_idx1:967; GFX9: ; %bb.0:968; GFX9-NEXT: v_mov_b32_e32 v0, 0969; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:2970; GFX9-NEXT: s_waitcnt vmcnt(0)971; GFX9-NEXT: v_readfirstlane_b32 s0, v0972; GFX9-NEXT: ; return to shader part epilog973;974; GFX8-LABEL: extractelement_sgpr_v8i16_idx1:975; GFX8: ; %bb.0:976; GFX8-NEXT: s_add_u32 s0, s2, 2977; GFX8-NEXT: s_addc_u32 s1, s3, 0978; GFX8-NEXT: v_mov_b32_e32 v0, s0979; GFX8-NEXT: v_mov_b32_e32 v1, s1980; GFX8-NEXT: flat_load_ushort v0, v[0:1]981; GFX8-NEXT: s_waitcnt vmcnt(0)982; GFX8-NEXT: v_readfirstlane_b32 s0, v0983; GFX8-NEXT: ; return to shader part epilog984;985; GFX7-LABEL: extractelement_sgpr_v8i16_idx1:986; GFX7: ; %bb.0:987; GFX7-NEXT: s_mov_b32 s0, s2988; GFX7-NEXT: s_mov_b32 s1, s3989; GFX7-NEXT: s_mov_b32 s2, -1990; GFX7-NEXT: s_mov_b32 s3, 0xf000991; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:2992; GFX7-NEXT: s_waitcnt vmcnt(0)993; GFX7-NEXT: v_readfirstlane_b32 s0, v0994; GFX7-NEXT: ; return to shader part epilog995;996; GFX10-LABEL: extractelement_sgpr_v8i16_idx1:997; GFX10: ; %bb.0:998; GFX10-NEXT: v_mov_b32_e32 v0, 0999; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:21000; GFX10-NEXT: s_waitcnt vmcnt(0)1001; GFX10-NEXT: v_readfirstlane_b32 s0, v01002; GFX10-NEXT: ; return to shader part epilog1003;1004; GFX11-LABEL: extractelement_sgpr_v8i16_idx1:1005; GFX11: ; %bb.0:1006; GFX11-NEXT: v_mov_b32_e32 v0, 01007; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:21008; GFX11-NEXT: s_waitcnt vmcnt(0)1009; GFX11-NEXT: v_readfirstlane_b32 s0, v01010; GFX11-NEXT: ; return to shader part epilog1011 %vector = load <8 x i16>, ptr addrspace(4) %ptr1012 %element = extractelement <8 x i16> %vector, i32 11013 ret i16 %element1014}1015 1016define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx2(ptr addrspace(4) inreg %ptr) {1017; GFX9-LABEL: extractelement_sgpr_v8i16_idx2:1018; GFX9: ; %bb.0:1019; GFX9-NEXT: v_mov_b32_e32 v0, 01020; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:41021; GFX9-NEXT: s_waitcnt vmcnt(0)1022; GFX9-NEXT: v_readfirstlane_b32 s0, v01023; GFX9-NEXT: ; return to shader part epilog1024;1025; GFX8-LABEL: extractelement_sgpr_v8i16_idx2:1026; GFX8: ; %bb.0:1027; GFX8-NEXT: s_add_u32 s0, s2, 41028; GFX8-NEXT: s_addc_u32 s1, s3, 01029; GFX8-NEXT: v_mov_b32_e32 v0, s01030; GFX8-NEXT: v_mov_b32_e32 v1, s11031; GFX8-NEXT: flat_load_ushort v0, v[0:1]1032; GFX8-NEXT: s_waitcnt vmcnt(0)1033; GFX8-NEXT: v_readfirstlane_b32 s0, v01034; GFX8-NEXT: ; return to shader part epilog1035;1036; GFX7-LABEL: extractelement_sgpr_v8i16_idx2:1037; GFX7: ; %bb.0:1038; GFX7-NEXT: s_mov_b32 s0, s21039; GFX7-NEXT: s_mov_b32 s1, s31040; GFX7-NEXT: s_mov_b32 s2, -11041; GFX7-NEXT: s_mov_b32 s3, 0xf0001042; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:41043; GFX7-NEXT: s_waitcnt vmcnt(0)1044; GFX7-NEXT: v_readfirstlane_b32 s0, v01045; GFX7-NEXT: ; return to shader part epilog1046;1047; GFX10-LABEL: extractelement_sgpr_v8i16_idx2:1048; GFX10: ; %bb.0:1049; GFX10-NEXT: v_mov_b32_e32 v0, 01050; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:41051; GFX10-NEXT: s_waitcnt vmcnt(0)1052; GFX10-NEXT: v_readfirstlane_b32 s0, v01053; GFX10-NEXT: ; return to shader part epilog1054;1055; GFX11-LABEL: extractelement_sgpr_v8i16_idx2:1056; GFX11: ; %bb.0:1057; GFX11-NEXT: v_mov_b32_e32 v0, 01058; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:41059; GFX11-NEXT: s_waitcnt vmcnt(0)1060; GFX11-NEXT: v_readfirstlane_b32 s0, v01061; GFX11-NEXT: ; return to shader part epilog1062 %vector = load <8 x i16>, ptr addrspace(4) %ptr1063 %element = extractelement <8 x i16> %vector, i32 21064 ret i16 %element1065}1066 1067define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx3(ptr addrspace(4) inreg %ptr) {1068; GFX9-LABEL: extractelement_sgpr_v8i16_idx3:1069; GFX9: ; %bb.0:1070; GFX9-NEXT: v_mov_b32_e32 v0, 01071; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:61072; GFX9-NEXT: s_waitcnt vmcnt(0)1073; GFX9-NEXT: v_readfirstlane_b32 s0, v01074; GFX9-NEXT: ; return to shader part epilog1075;1076; GFX8-LABEL: extractelement_sgpr_v8i16_idx3:1077; GFX8: ; %bb.0:1078; GFX8-NEXT: s_add_u32 s0, s2, 61079; GFX8-NEXT: s_addc_u32 s1, s3, 01080; GFX8-NEXT: v_mov_b32_e32 v0, s01081; GFX8-NEXT: v_mov_b32_e32 v1, s11082; GFX8-NEXT: flat_load_ushort v0, v[0:1]1083; GFX8-NEXT: s_waitcnt vmcnt(0)1084; GFX8-NEXT: v_readfirstlane_b32 s0, v01085; GFX8-NEXT: ; return to shader part epilog1086;1087; GFX7-LABEL: extractelement_sgpr_v8i16_idx3:1088; GFX7: ; %bb.0:1089; GFX7-NEXT: s_mov_b32 s0, s21090; GFX7-NEXT: s_mov_b32 s1, s31091; GFX7-NEXT: s_mov_b32 s2, -11092; GFX7-NEXT: s_mov_b32 s3, 0xf0001093; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:61094; GFX7-NEXT: s_waitcnt vmcnt(0)1095; GFX7-NEXT: v_readfirstlane_b32 s0, v01096; GFX7-NEXT: ; return to shader part epilog1097;1098; GFX10-LABEL: extractelement_sgpr_v8i16_idx3:1099; GFX10: ; %bb.0:1100; GFX10-NEXT: v_mov_b32_e32 v0, 01101; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:61102; GFX10-NEXT: s_waitcnt vmcnt(0)1103; GFX10-NEXT: v_readfirstlane_b32 s0, v01104; GFX10-NEXT: ; return to shader part epilog1105;1106; GFX11-LABEL: extractelement_sgpr_v8i16_idx3:1107; GFX11: ; %bb.0:1108; GFX11-NEXT: v_mov_b32_e32 v0, 01109; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:61110; GFX11-NEXT: s_waitcnt vmcnt(0)1111; GFX11-NEXT: v_readfirstlane_b32 s0, v01112; GFX11-NEXT: ; return to shader part epilog1113 %vector = load <8 x i16>, ptr addrspace(4) %ptr1114 %element = extractelement <8 x i16> %vector, i32 31115 ret i16 %element1116}1117 1118define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx4(ptr addrspace(4) inreg %ptr) {1119; GFX9-LABEL: extractelement_sgpr_v8i16_idx4:1120; GFX9: ; %bb.0:1121; GFX9-NEXT: v_mov_b32_e32 v0, 01122; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:81123; GFX9-NEXT: s_waitcnt vmcnt(0)1124; GFX9-NEXT: v_readfirstlane_b32 s0, v01125; GFX9-NEXT: ; return to shader part epilog1126;1127; GFX8-LABEL: extractelement_sgpr_v8i16_idx4:1128; GFX8: ; %bb.0:1129; GFX8-NEXT: s_add_u32 s0, s2, 81130; GFX8-NEXT: s_addc_u32 s1, s3, 01131; GFX8-NEXT: v_mov_b32_e32 v0, s01132; GFX8-NEXT: v_mov_b32_e32 v1, s11133; GFX8-NEXT: flat_load_ushort v0, v[0:1]1134; GFX8-NEXT: s_waitcnt vmcnt(0)1135; GFX8-NEXT: v_readfirstlane_b32 s0, v01136; GFX8-NEXT: ; return to shader part epilog1137;1138; GFX7-LABEL: extractelement_sgpr_v8i16_idx4:1139; GFX7: ; %bb.0:1140; GFX7-NEXT: s_mov_b32 s0, s21141; GFX7-NEXT: s_mov_b32 s1, s31142; GFX7-NEXT: s_mov_b32 s2, -11143; GFX7-NEXT: s_mov_b32 s3, 0xf0001144; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:81145; GFX7-NEXT: s_waitcnt vmcnt(0)1146; GFX7-NEXT: v_readfirstlane_b32 s0, v01147; GFX7-NEXT: ; return to shader part epilog1148;1149; GFX10-LABEL: extractelement_sgpr_v8i16_idx4:1150; GFX10: ; %bb.0:1151; GFX10-NEXT: v_mov_b32_e32 v0, 01152; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:81153; GFX10-NEXT: s_waitcnt vmcnt(0)1154; GFX10-NEXT: v_readfirstlane_b32 s0, v01155; GFX10-NEXT: ; return to shader part epilog1156;1157; GFX11-LABEL: extractelement_sgpr_v8i16_idx4:1158; GFX11: ; %bb.0:1159; GFX11-NEXT: v_mov_b32_e32 v0, 01160; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:81161; GFX11-NEXT: s_waitcnt vmcnt(0)1162; GFX11-NEXT: v_readfirstlane_b32 s0, v01163; GFX11-NEXT: ; return to shader part epilog1164 %vector = load <8 x i16>, ptr addrspace(4) %ptr1165 %element = extractelement <8 x i16> %vector, i32 41166 ret i16 %element1167}1168 1169define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx5(ptr addrspace(4) inreg %ptr) {1170; GFX9-LABEL: extractelement_sgpr_v8i16_idx5:1171; GFX9: ; %bb.0:1172; GFX9-NEXT: v_mov_b32_e32 v0, 01173; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:101174; GFX9-NEXT: s_waitcnt vmcnt(0)1175; GFX9-NEXT: v_readfirstlane_b32 s0, v01176; GFX9-NEXT: ; return to shader part epilog1177;1178; GFX8-LABEL: extractelement_sgpr_v8i16_idx5:1179; GFX8: ; %bb.0:1180; GFX8-NEXT: s_add_u32 s0, s2, 101181; GFX8-NEXT: s_addc_u32 s1, s3, 01182; GFX8-NEXT: v_mov_b32_e32 v0, s01183; GFX8-NEXT: v_mov_b32_e32 v1, s11184; GFX8-NEXT: flat_load_ushort v0, v[0:1]1185; GFX8-NEXT: s_waitcnt vmcnt(0)1186; GFX8-NEXT: v_readfirstlane_b32 s0, v01187; GFX8-NEXT: ; return to shader part epilog1188;1189; GFX7-LABEL: extractelement_sgpr_v8i16_idx5:1190; GFX7: ; %bb.0:1191; GFX7-NEXT: s_mov_b32 s0, s21192; GFX7-NEXT: s_mov_b32 s1, s31193; GFX7-NEXT: s_mov_b32 s2, -11194; GFX7-NEXT: s_mov_b32 s3, 0xf0001195; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:101196; GFX7-NEXT: s_waitcnt vmcnt(0)1197; GFX7-NEXT: v_readfirstlane_b32 s0, v01198; GFX7-NEXT: ; return to shader part epilog1199;1200; GFX10-LABEL: extractelement_sgpr_v8i16_idx5:1201; GFX10: ; %bb.0:1202; GFX10-NEXT: v_mov_b32_e32 v0, 01203; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:101204; GFX10-NEXT: s_waitcnt vmcnt(0)1205; GFX10-NEXT: v_readfirstlane_b32 s0, v01206; GFX10-NEXT: ; return to shader part epilog1207;1208; GFX11-LABEL: extractelement_sgpr_v8i16_idx5:1209; GFX11: ; %bb.0:1210; GFX11-NEXT: v_mov_b32_e32 v0, 01211; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:101212; GFX11-NEXT: s_waitcnt vmcnt(0)1213; GFX11-NEXT: v_readfirstlane_b32 s0, v01214; GFX11-NEXT: ; return to shader part epilog1215 %vector = load <8 x i16>, ptr addrspace(4) %ptr1216 %element = extractelement <8 x i16> %vector, i32 51217 ret i16 %element1218}1219 1220define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx6(ptr addrspace(4) inreg %ptr) {1221; GFX9-LABEL: extractelement_sgpr_v8i16_idx6:1222; GFX9: ; %bb.0:1223; GFX9-NEXT: v_mov_b32_e32 v0, 01224; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:121225; GFX9-NEXT: s_waitcnt vmcnt(0)1226; GFX9-NEXT: v_readfirstlane_b32 s0, v01227; GFX9-NEXT: ; return to shader part epilog1228;1229; GFX8-LABEL: extractelement_sgpr_v8i16_idx6:1230; GFX8: ; %bb.0:1231; GFX8-NEXT: s_add_u32 s0, s2, 121232; GFX8-NEXT: s_addc_u32 s1, s3, 01233; GFX8-NEXT: v_mov_b32_e32 v0, s01234; GFX8-NEXT: v_mov_b32_e32 v1, s11235; GFX8-NEXT: flat_load_ushort v0, v[0:1]1236; GFX8-NEXT: s_waitcnt vmcnt(0)1237; GFX8-NEXT: v_readfirstlane_b32 s0, v01238; GFX8-NEXT: ; return to shader part epilog1239;1240; GFX7-LABEL: extractelement_sgpr_v8i16_idx6:1241; GFX7: ; %bb.0:1242; GFX7-NEXT: s_mov_b32 s0, s21243; GFX7-NEXT: s_mov_b32 s1, s31244; GFX7-NEXT: s_mov_b32 s2, -11245; GFX7-NEXT: s_mov_b32 s3, 0xf0001246; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:121247; GFX7-NEXT: s_waitcnt vmcnt(0)1248; GFX7-NEXT: v_readfirstlane_b32 s0, v01249; GFX7-NEXT: ; return to shader part epilog1250;1251; GFX10-LABEL: extractelement_sgpr_v8i16_idx6:1252; GFX10: ; %bb.0:1253; GFX10-NEXT: v_mov_b32_e32 v0, 01254; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:121255; GFX10-NEXT: s_waitcnt vmcnt(0)1256; GFX10-NEXT: v_readfirstlane_b32 s0, v01257; GFX10-NEXT: ; return to shader part epilog1258;1259; GFX11-LABEL: extractelement_sgpr_v8i16_idx6:1260; GFX11: ; %bb.0:1261; GFX11-NEXT: v_mov_b32_e32 v0, 01262; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:121263; GFX11-NEXT: s_waitcnt vmcnt(0)1264; GFX11-NEXT: v_readfirstlane_b32 s0, v01265; GFX11-NEXT: ; return to shader part epilog1266 %vector = load <8 x i16>, ptr addrspace(4) %ptr1267 %element = extractelement <8 x i16> %vector, i32 61268 ret i16 %element1269}1270 1271define amdgpu_ps i16 @extractelement_sgpr_v8i16_idx7(ptr addrspace(4) inreg %ptr) {1272; GFX9-LABEL: extractelement_sgpr_v8i16_idx7:1273; GFX9: ; %bb.0:1274; GFX9-NEXT: v_mov_b32_e32 v0, 01275; GFX9-NEXT: global_load_ushort v0, v0, s[2:3] offset:141276; GFX9-NEXT: s_waitcnt vmcnt(0)1277; GFX9-NEXT: v_readfirstlane_b32 s0, v01278; GFX9-NEXT: ; return to shader part epilog1279;1280; GFX8-LABEL: extractelement_sgpr_v8i16_idx7:1281; GFX8: ; %bb.0:1282; GFX8-NEXT: s_add_u32 s0, s2, 141283; GFX8-NEXT: s_addc_u32 s1, s3, 01284; GFX8-NEXT: v_mov_b32_e32 v0, s01285; GFX8-NEXT: v_mov_b32_e32 v1, s11286; GFX8-NEXT: flat_load_ushort v0, v[0:1]1287; GFX8-NEXT: s_waitcnt vmcnt(0)1288; GFX8-NEXT: v_readfirstlane_b32 s0, v01289; GFX8-NEXT: ; return to shader part epilog1290;1291; GFX7-LABEL: extractelement_sgpr_v8i16_idx7:1292; GFX7: ; %bb.0:1293; GFX7-NEXT: s_mov_b32 s0, s21294; GFX7-NEXT: s_mov_b32 s1, s31295; GFX7-NEXT: s_mov_b32 s2, -11296; GFX7-NEXT: s_mov_b32 s3, 0xf0001297; GFX7-NEXT: buffer_load_ushort v0, off, s[0:3], 0 offset:141298; GFX7-NEXT: s_waitcnt vmcnt(0)1299; GFX7-NEXT: v_readfirstlane_b32 s0, v01300; GFX7-NEXT: ; return to shader part epilog1301;1302; GFX10-LABEL: extractelement_sgpr_v8i16_idx7:1303; GFX10: ; %bb.0:1304; GFX10-NEXT: v_mov_b32_e32 v0, 01305; GFX10-NEXT: global_load_ushort v0, v0, s[2:3] offset:141306; GFX10-NEXT: s_waitcnt vmcnt(0)1307; GFX10-NEXT: v_readfirstlane_b32 s0, v01308; GFX10-NEXT: ; return to shader part epilog1309;1310; GFX11-LABEL: extractelement_sgpr_v8i16_idx7:1311; GFX11: ; %bb.0:1312; GFX11-NEXT: v_mov_b32_e32 v0, 01313; GFX11-NEXT: global_load_u16 v0, v0, s[2:3] offset:141314; GFX11-NEXT: s_waitcnt vmcnt(0)1315; GFX11-NEXT: v_readfirstlane_b32 s0, v01316; GFX11-NEXT: ; return to shader part epilog1317 %vector = load <8 x i16>, ptr addrspace(4) %ptr1318 %element = extractelement <8 x i16> %vector, i32 71319 ret i16 %element1320}1321 1322define i16 @extractelement_vgpr_v8i16_idx0(ptr addrspace(1) %ptr) {1323; GFX9-LABEL: extractelement_vgpr_v8i16_idx0:1324; GFX9: ; %bb.0:1325; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1326; GFX9-NEXT: global_load_ushort v0, v[0:1], off1327; GFX9-NEXT: s_waitcnt vmcnt(0)1328; GFX9-NEXT: s_setpc_b64 s[30:31]1329;1330; GFX8-LABEL: extractelement_vgpr_v8i16_idx0:1331; GFX8: ; %bb.0:1332; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1333; GFX8-NEXT: flat_load_ushort v0, v[0:1]1334; GFX8-NEXT: s_waitcnt vmcnt(0)1335; GFX8-NEXT: s_setpc_b64 s[30:31]1336;1337; GFX7-LABEL: extractelement_vgpr_v8i16_idx0:1338; GFX7: ; %bb.0:1339; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1340; GFX7-NEXT: s_mov_b32 s6, 01341; GFX7-NEXT: s_mov_b32 s7, 0xf0001342; GFX7-NEXT: s_mov_b64 s[4:5], 01343; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr641344; GFX7-NEXT: s_waitcnt vmcnt(0)1345; GFX7-NEXT: s_setpc_b64 s[30:31]1346;1347; GFX10-LABEL: extractelement_vgpr_v8i16_idx0:1348; GFX10: ; %bb.0:1349; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1350; GFX10-NEXT: global_load_ushort v0, v[0:1], off1351; GFX10-NEXT: s_waitcnt vmcnt(0)1352; GFX10-NEXT: s_setpc_b64 s[30:31]1353;1354; GFX11-LABEL: extractelement_vgpr_v8i16_idx0:1355; GFX11: ; %bb.0:1356; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1357; GFX11-NEXT: global_load_u16 v0, v[0:1], off1358; GFX11-NEXT: s_waitcnt vmcnt(0)1359; GFX11-NEXT: s_setpc_b64 s[30:31]1360 %vector = load <8 x i16>, ptr addrspace(1) %ptr1361 %element = extractelement <8 x i16> %vector, i32 01362 ret i16 %element1363}1364 1365define i16 @extractelement_vgpr_v8i16_idx1(ptr addrspace(1) %ptr) {1366; GFX9-LABEL: extractelement_vgpr_v8i16_idx1:1367; GFX9: ; %bb.0:1368; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1369; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:21370; GFX9-NEXT: s_waitcnt vmcnt(0)1371; GFX9-NEXT: s_setpc_b64 s[30:31]1372;1373; GFX8-LABEL: extractelement_vgpr_v8i16_idx1:1374; GFX8: ; %bb.0:1375; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1376; GFX8-NEXT: v_add_u32_e32 v0, vcc, 2, v01377; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1378; GFX8-NEXT: flat_load_ushort v0, v[0:1]1379; GFX8-NEXT: s_waitcnt vmcnt(0)1380; GFX8-NEXT: s_setpc_b64 s[30:31]1381;1382; GFX7-LABEL: extractelement_vgpr_v8i16_idx1:1383; GFX7: ; %bb.0:1384; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX7-NEXT: s_mov_b32 s6, 01386; GFX7-NEXT: s_mov_b32 s7, 0xf0001387; GFX7-NEXT: s_mov_b64 s[4:5], 01388; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:21389; GFX7-NEXT: s_waitcnt vmcnt(0)1390; GFX7-NEXT: s_setpc_b64 s[30:31]1391;1392; GFX10-LABEL: extractelement_vgpr_v8i16_idx1:1393; GFX10: ; %bb.0:1394; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1395; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:21396; GFX10-NEXT: s_waitcnt vmcnt(0)1397; GFX10-NEXT: s_setpc_b64 s[30:31]1398;1399; GFX11-LABEL: extractelement_vgpr_v8i16_idx1:1400; GFX11: ; %bb.0:1401; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1402; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:21403; GFX11-NEXT: s_waitcnt vmcnt(0)1404; GFX11-NEXT: s_setpc_b64 s[30:31]1405 %vector = load <8 x i16>, ptr addrspace(1) %ptr1406 %element = extractelement <8 x i16> %vector, i32 11407 ret i16 %element1408}1409 1410define i16 @extractelement_vgpr_v8i16_idx2(ptr addrspace(1) %ptr) {1411; GFX9-LABEL: extractelement_vgpr_v8i16_idx2:1412; GFX9: ; %bb.0:1413; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1414; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:41415; GFX9-NEXT: s_waitcnt vmcnt(0)1416; GFX9-NEXT: s_setpc_b64 s[30:31]1417;1418; GFX8-LABEL: extractelement_vgpr_v8i16_idx2:1419; GFX8: ; %bb.0:1420; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1421; GFX8-NEXT: v_add_u32_e32 v0, vcc, 4, v01422; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1423; GFX8-NEXT: flat_load_ushort v0, v[0:1]1424; GFX8-NEXT: s_waitcnt vmcnt(0)1425; GFX8-NEXT: s_setpc_b64 s[30:31]1426;1427; GFX7-LABEL: extractelement_vgpr_v8i16_idx2:1428; GFX7: ; %bb.0:1429; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1430; GFX7-NEXT: s_mov_b32 s6, 01431; GFX7-NEXT: s_mov_b32 s7, 0xf0001432; GFX7-NEXT: s_mov_b64 s[4:5], 01433; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:41434; GFX7-NEXT: s_waitcnt vmcnt(0)1435; GFX7-NEXT: s_setpc_b64 s[30:31]1436;1437; GFX10-LABEL: extractelement_vgpr_v8i16_idx2:1438; GFX10: ; %bb.0:1439; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1440; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:41441; GFX10-NEXT: s_waitcnt vmcnt(0)1442; GFX10-NEXT: s_setpc_b64 s[30:31]1443;1444; GFX11-LABEL: extractelement_vgpr_v8i16_idx2:1445; GFX11: ; %bb.0:1446; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1447; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:41448; GFX11-NEXT: s_waitcnt vmcnt(0)1449; GFX11-NEXT: s_setpc_b64 s[30:31]1450 %vector = load <8 x i16>, ptr addrspace(1) %ptr1451 %element = extractelement <8 x i16> %vector, i32 21452 ret i16 %element1453}1454 1455define i16 @extractelement_vgpr_v8i16_idx3(ptr addrspace(1) %ptr) {1456; GFX9-LABEL: extractelement_vgpr_v8i16_idx3:1457; GFX9: ; %bb.0:1458; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1459; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:61460; GFX9-NEXT: s_waitcnt vmcnt(0)1461; GFX9-NEXT: s_setpc_b64 s[30:31]1462;1463; GFX8-LABEL: extractelement_vgpr_v8i16_idx3:1464; GFX8: ; %bb.0:1465; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1466; GFX8-NEXT: v_add_u32_e32 v0, vcc, 6, v01467; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1468; GFX8-NEXT: flat_load_ushort v0, v[0:1]1469; GFX8-NEXT: s_waitcnt vmcnt(0)1470; GFX8-NEXT: s_setpc_b64 s[30:31]1471;1472; GFX7-LABEL: extractelement_vgpr_v8i16_idx3:1473; GFX7: ; %bb.0:1474; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1475; GFX7-NEXT: s_mov_b32 s6, 01476; GFX7-NEXT: s_mov_b32 s7, 0xf0001477; GFX7-NEXT: s_mov_b64 s[4:5], 01478; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:61479; GFX7-NEXT: s_waitcnt vmcnt(0)1480; GFX7-NEXT: s_setpc_b64 s[30:31]1481;1482; GFX10-LABEL: extractelement_vgpr_v8i16_idx3:1483; GFX10: ; %bb.0:1484; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1485; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:61486; GFX10-NEXT: s_waitcnt vmcnt(0)1487; GFX10-NEXT: s_setpc_b64 s[30:31]1488;1489; GFX11-LABEL: extractelement_vgpr_v8i16_idx3:1490; GFX11: ; %bb.0:1491; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1492; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:61493; GFX11-NEXT: s_waitcnt vmcnt(0)1494; GFX11-NEXT: s_setpc_b64 s[30:31]1495 %vector = load <8 x i16>, ptr addrspace(1) %ptr1496 %element = extractelement <8 x i16> %vector, i32 31497 ret i16 %element1498}1499 1500define i16 @extractelement_vgpr_v8i16_idx4(ptr addrspace(1) %ptr) {1501; GFX9-LABEL: extractelement_vgpr_v8i16_idx4:1502; GFX9: ; %bb.0:1503; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1504; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:81505; GFX9-NEXT: s_waitcnt vmcnt(0)1506; GFX9-NEXT: s_setpc_b64 s[30:31]1507;1508; GFX8-LABEL: extractelement_vgpr_v8i16_idx4:1509; GFX8: ; %bb.0:1510; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1511; GFX8-NEXT: v_add_u32_e32 v0, vcc, 8, v01512; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1513; GFX8-NEXT: flat_load_ushort v0, v[0:1]1514; GFX8-NEXT: s_waitcnt vmcnt(0)1515; GFX8-NEXT: s_setpc_b64 s[30:31]1516;1517; GFX7-LABEL: extractelement_vgpr_v8i16_idx4:1518; GFX7: ; %bb.0:1519; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1520; GFX7-NEXT: s_mov_b32 s6, 01521; GFX7-NEXT: s_mov_b32 s7, 0xf0001522; GFX7-NEXT: s_mov_b64 s[4:5], 01523; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:81524; GFX7-NEXT: s_waitcnt vmcnt(0)1525; GFX7-NEXT: s_setpc_b64 s[30:31]1526;1527; GFX10-LABEL: extractelement_vgpr_v8i16_idx4:1528; GFX10: ; %bb.0:1529; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1530; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:81531; GFX10-NEXT: s_waitcnt vmcnt(0)1532; GFX10-NEXT: s_setpc_b64 s[30:31]1533;1534; GFX11-LABEL: extractelement_vgpr_v8i16_idx4:1535; GFX11: ; %bb.0:1536; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1537; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:81538; GFX11-NEXT: s_waitcnt vmcnt(0)1539; GFX11-NEXT: s_setpc_b64 s[30:31]1540 %vector = load <8 x i16>, ptr addrspace(1) %ptr1541 %element = extractelement <8 x i16> %vector, i32 41542 ret i16 %element1543}1544 1545define i16 @extractelement_vgpr_v8i16_idx5(ptr addrspace(1) %ptr) {1546; GFX9-LABEL: extractelement_vgpr_v8i16_idx5:1547; GFX9: ; %bb.0:1548; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1549; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:101550; GFX9-NEXT: s_waitcnt vmcnt(0)1551; GFX9-NEXT: s_setpc_b64 s[30:31]1552;1553; GFX8-LABEL: extractelement_vgpr_v8i16_idx5:1554; GFX8: ; %bb.0:1555; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1556; GFX8-NEXT: v_add_u32_e32 v0, vcc, 10, v01557; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1558; GFX8-NEXT: flat_load_ushort v0, v[0:1]1559; GFX8-NEXT: s_waitcnt vmcnt(0)1560; GFX8-NEXT: s_setpc_b64 s[30:31]1561;1562; GFX7-LABEL: extractelement_vgpr_v8i16_idx5:1563; GFX7: ; %bb.0:1564; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1565; GFX7-NEXT: s_mov_b32 s6, 01566; GFX7-NEXT: s_mov_b32 s7, 0xf0001567; GFX7-NEXT: s_mov_b64 s[4:5], 01568; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:101569; GFX7-NEXT: s_waitcnt vmcnt(0)1570; GFX7-NEXT: s_setpc_b64 s[30:31]1571;1572; GFX10-LABEL: extractelement_vgpr_v8i16_idx5:1573; GFX10: ; %bb.0:1574; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1575; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:101576; GFX10-NEXT: s_waitcnt vmcnt(0)1577; GFX10-NEXT: s_setpc_b64 s[30:31]1578;1579; GFX11-LABEL: extractelement_vgpr_v8i16_idx5:1580; GFX11: ; %bb.0:1581; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1582; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:101583; GFX11-NEXT: s_waitcnt vmcnt(0)1584; GFX11-NEXT: s_setpc_b64 s[30:31]1585 %vector = load <8 x i16>, ptr addrspace(1) %ptr1586 %element = extractelement <8 x i16> %vector, i32 51587 ret i16 %element1588}1589 1590define i16 @extractelement_vgpr_v8i16_idx6(ptr addrspace(1) %ptr) {1591; GFX9-LABEL: extractelement_vgpr_v8i16_idx6:1592; GFX9: ; %bb.0:1593; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1594; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:121595; GFX9-NEXT: s_waitcnt vmcnt(0)1596; GFX9-NEXT: s_setpc_b64 s[30:31]1597;1598; GFX8-LABEL: extractelement_vgpr_v8i16_idx6:1599; GFX8: ; %bb.0:1600; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1601; GFX8-NEXT: v_add_u32_e32 v0, vcc, 12, v01602; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1603; GFX8-NEXT: flat_load_ushort v0, v[0:1]1604; GFX8-NEXT: s_waitcnt vmcnt(0)1605; GFX8-NEXT: s_setpc_b64 s[30:31]1606;1607; GFX7-LABEL: extractelement_vgpr_v8i16_idx6:1608; GFX7: ; %bb.0:1609; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1610; GFX7-NEXT: s_mov_b32 s6, 01611; GFX7-NEXT: s_mov_b32 s7, 0xf0001612; GFX7-NEXT: s_mov_b64 s[4:5], 01613; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:121614; GFX7-NEXT: s_waitcnt vmcnt(0)1615; GFX7-NEXT: s_setpc_b64 s[30:31]1616;1617; GFX10-LABEL: extractelement_vgpr_v8i16_idx6:1618; GFX10: ; %bb.0:1619; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1620; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:121621; GFX10-NEXT: s_waitcnt vmcnt(0)1622; GFX10-NEXT: s_setpc_b64 s[30:31]1623;1624; GFX11-LABEL: extractelement_vgpr_v8i16_idx6:1625; GFX11: ; %bb.0:1626; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1627; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:121628; GFX11-NEXT: s_waitcnt vmcnt(0)1629; GFX11-NEXT: s_setpc_b64 s[30:31]1630 %vector = load <8 x i16>, ptr addrspace(1) %ptr1631 %element = extractelement <8 x i16> %vector, i32 61632 ret i16 %element1633}1634 1635define i16 @extractelement_vgpr_v8i16_idx7(ptr addrspace(1) %ptr) {1636; GFX9-LABEL: extractelement_vgpr_v8i16_idx7:1637; GFX9: ; %bb.0:1638; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1639; GFX9-NEXT: global_load_ushort v0, v[0:1], off offset:141640; GFX9-NEXT: s_waitcnt vmcnt(0)1641; GFX9-NEXT: s_setpc_b64 s[30:31]1642;1643; GFX8-LABEL: extractelement_vgpr_v8i16_idx7:1644; GFX8: ; %bb.0:1645; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1646; GFX8-NEXT: v_add_u32_e32 v0, vcc, 14, v01647; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc1648; GFX8-NEXT: flat_load_ushort v0, v[0:1]1649; GFX8-NEXT: s_waitcnt vmcnt(0)1650; GFX8-NEXT: s_setpc_b64 s[30:31]1651;1652; GFX7-LABEL: extractelement_vgpr_v8i16_idx7:1653; GFX7: ; %bb.0:1654; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1655; GFX7-NEXT: s_mov_b32 s6, 01656; GFX7-NEXT: s_mov_b32 s7, 0xf0001657; GFX7-NEXT: s_mov_b64 s[4:5], 01658; GFX7-NEXT: buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:141659; GFX7-NEXT: s_waitcnt vmcnt(0)1660; GFX7-NEXT: s_setpc_b64 s[30:31]1661;1662; GFX10-LABEL: extractelement_vgpr_v8i16_idx7:1663; GFX10: ; %bb.0:1664; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1665; GFX10-NEXT: global_load_ushort v0, v[0:1], off offset:141666; GFX10-NEXT: s_waitcnt vmcnt(0)1667; GFX10-NEXT: s_setpc_b64 s[30:31]1668;1669; GFX11-LABEL: extractelement_vgpr_v8i16_idx7:1670; GFX11: ; %bb.0:1671; GFX11-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1672; GFX11-NEXT: global_load_u16 v0, v[0:1], off offset:141673; GFX11-NEXT: s_waitcnt vmcnt(0)1674; GFX11-NEXT: s_setpc_b64 s[30:31]1675 %vector = load <8 x i16>, ptr addrspace(1) %ptr1676 %element = extractelement <8 x i16> %vector, i32 71677 ret i16 %element1678}1679;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1680; GCN: {{.*}}1681