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 i8 @extractelement_sgpr_v4i8_sgpr_idx(<4 x i8> addrspace(4)* inreg %ptr, i32 inreg %idx) { 8; GCN-LABEL: extractelement_sgpr_v4i8_sgpr_idx: 9; GCN: ; %bb.0: 10; GCN-NEXT: s_load_dword s0, s[2:3], 0x0 11; GCN-NEXT: s_waitcnt lgkmcnt(0) 12; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 13; GCN-NEXT: s_lshr_b32 s1, s0, 24 14; GCN-NEXT: s_and_b32 s2, s0, 0xff 15; GCN-NEXT: s_lshl_b32 s3, s3, 8 16; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 17; GCN-NEXT: s_or_b32 s2, s2, s3 18; GCN-NEXT: s_lshl_b32 s0, s0, 16 19; GCN-NEXT: s_or_b32 s0, s2, s0 20; GCN-NEXT: s_lshl_b32 s1, s1, 24 21; GCN-NEXT: s_or_b32 s0, s0, s1 22; GCN-NEXT: s_and_b32 s1, s4, 3 23; GCN-NEXT: s_lshl_b32 s1, s1, 3 24; GCN-NEXT: s_lshr_b32 s0, s0, s1 25; GCN-NEXT: ; return to shader part epilog 26; 27; GFX10-LABEL: extractelement_sgpr_v4i8_sgpr_idx: 28; GFX10: ; %bb.0: 29; GFX10-NEXT: s_load_dword s0, s[2:3], 0x0 30; GFX10-NEXT: s_waitcnt lgkmcnt(0) 31; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80008 32; GFX10-NEXT: s_lshr_b32 s1, s0, 24 33; GFX10-NEXT: s_and_b32 s2, s0, 0xff 34; GFX10-NEXT: s_bfe_u32 s0, s0, 0x80010 35; GFX10-NEXT: s_lshl_b32 s3, s3, 8 36; GFX10-NEXT: s_lshl_b32 s0, s0, 16 37; GFX10-NEXT: s_or_b32 s2, s2, s3 38; GFX10-NEXT: s_lshl_b32 s1, s1, 24 39; GFX10-NEXT: s_or_b32 s0, s2, s0 40; GFX10-NEXT: s_and_b32 s2, s4, 3 41; GFX10-NEXT: s_or_b32 s0, s0, s1 42; GFX10-NEXT: s_lshl_b32 s1, s2, 3 43; GFX10-NEXT: s_lshr_b32 s0, s0, s1 44; GFX10-NEXT: ; return to shader part epilog 45 %vector = load <4 x i8>, <4 x i8> addrspace(4)* %ptr 46 %element = extractelement <4 x i8> %vector, i32 %idx 47 ret i8 %element 48} 49 50define amdgpu_ps i8 @extractelement_vgpr_v4i8_sgpr_idx(<4 x i8> addrspace(1)* %ptr, i32 inreg %idx) { 51; GFX9-LABEL: extractelement_vgpr_v4i8_sgpr_idx: 52; GFX9: ; %bb.0: 53; GFX9-NEXT: global_load_dword v0, v[0:1], off 54; GFX9-NEXT: v_mov_b32_e32 v2, 8 55; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 56; GFX9-NEXT: v_mov_b32_e32 v3, 16 57; GFX9-NEXT: s_and_b32 s0, s2, 3 58; GFX9-NEXT: s_lshl_b32 s0, s0, 3 59; GFX9-NEXT: s_waitcnt vmcnt(0) 60; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 61; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 62; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 63; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 64; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 65; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 66; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 67; GFX9-NEXT: v_readfirstlane_b32 s0, v0 68; GFX9-NEXT: ; return to shader part epilog 69; 70; GFX8-LABEL: extractelement_vgpr_v4i8_sgpr_idx: 71; GFX8: ; %bb.0: 72; GFX8-NEXT: flat_load_dword v0, v[0:1] 73; GFX8-NEXT: v_mov_b32_e32 v1, 8 74; GFX8-NEXT: v_mov_b32_e32 v2, 16 75; GFX8-NEXT: s_and_b32 s0, s2, 3 76; GFX8-NEXT: s_lshl_b32 s0, s0, 3 77; GFX8-NEXT: s_waitcnt vmcnt(0) 78; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 79; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 80; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 81; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 82; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 83; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 84; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 85; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 86; GFX8-NEXT: v_readfirstlane_b32 s0, v0 87; GFX8-NEXT: ; return to shader part epilog 88; 89; GFX7-LABEL: extractelement_vgpr_v4i8_sgpr_idx: 90; GFX7: ; %bb.0: 91; GFX7-NEXT: s_mov_b32 s6, 0 92; GFX7-NEXT: s_mov_b32 s7, 0xf000 93; GFX7-NEXT: s_mov_b64 s[4:5], 0 94; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 95; GFX7-NEXT: s_and_b32 s0, s2, 3 96; GFX7-NEXT: s_lshl_b32 s0, s0, 3 97; GFX7-NEXT: s_waitcnt vmcnt(0) 98; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 99; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 100; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 101; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 102; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 103; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 104; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 105; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 106; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 107; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 108; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 109; GFX7-NEXT: v_readfirstlane_b32 s0, v0 110; GFX7-NEXT: ; return to shader part epilog 111; 112; GFX10-LABEL: extractelement_vgpr_v4i8_sgpr_idx: 113; GFX10: ; %bb.0: 114; GFX10-NEXT: global_load_dword v0, v[0:1], off 115; GFX10-NEXT: v_mov_b32_e32 v1, 8 116; GFX10-NEXT: v_mov_b32_e32 v2, 16 117; GFX10-NEXT: s_and_b32 s0, s2, 3 118; GFX10-NEXT: s_lshl_b32 s0, s0, 3 119; GFX10-NEXT: s_waitcnt vmcnt(0) 120; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 121; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 122; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 123; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 124; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 125; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 126; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 127; GFX10-NEXT: v_readfirstlane_b32 s0, v0 128; GFX10-NEXT: ; return to shader part epilog 129 %vector = load <4 x i8>, <4 x i8> addrspace(1)* %ptr 130 %element = extractelement <4 x i8> %vector, i32 %idx 131 ret i8 %element 132} 133 134define i8 @extractelement_vgpr_v4i8_vgpr_idx(<4 x i8> addrspace(1)* %ptr, i32 %idx) { 135; GFX9-LABEL: extractelement_vgpr_v4i8_vgpr_idx: 136; GFX9: ; %bb.0: 137; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 138; GFX9-NEXT: global_load_dword v0, v[0:1], off 139; GFX9-NEXT: v_mov_b32_e32 v3, 8 140; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 141; GFX9-NEXT: v_mov_b32_e32 v4, 16 142; GFX9-NEXT: v_and_b32_e32 v2, 3, v2 143; GFX9-NEXT: s_waitcnt vmcnt(0) 144; GFX9-NEXT: v_lshrrev_b32_e32 v5, 24, v0 145; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 146; GFX9-NEXT: v_lshlrev_b32_sdwa v4, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 147; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v3 148; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v5 149; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 150; GFX9-NEXT: v_lshlrev_b32_e32 v1, 3, v2 151; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 152; GFX9-NEXT: s_setpc_b64 s[30:31] 153; 154; GFX8-LABEL: extractelement_vgpr_v4i8_vgpr_idx: 155; GFX8: ; %bb.0: 156; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 157; GFX8-NEXT: flat_load_dword v0, v[0:1] 158; GFX8-NEXT: v_mov_b32_e32 v1, 8 159; GFX8-NEXT: v_mov_b32_e32 v3, 16 160; GFX8-NEXT: v_and_b32_e32 v2, 3, v2 161; GFX8-NEXT: s_waitcnt vmcnt(0) 162; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 163; GFX8-NEXT: v_lshrrev_b32_e32 v4, 24, v0 164; GFX8-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 165; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 166; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v4 167; GFX8-NEXT: v_or_b32_e32 v0, v0, v3 168; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 169; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v2 170; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 171; GFX8-NEXT: s_setpc_b64 s[30:31] 172; 173; GFX7-LABEL: extractelement_vgpr_v4i8_vgpr_idx: 174; GFX7: ; %bb.0: 175; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 176; GFX7-NEXT: s_mov_b32 s6, 0 177; GFX7-NEXT: s_mov_b32 s7, 0xf000 178; GFX7-NEXT: s_mov_b64 s[4:5], 0 179; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 180; GFX7-NEXT: v_and_b32_e32 v1, 3, v2 181; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v1 182; GFX7-NEXT: s_waitcnt vmcnt(0) 183; GFX7-NEXT: v_bfe_u32 v4, v0, 8, 8 184; GFX7-NEXT: v_lshrrev_b32_e32 v2, 24, v0 185; GFX7-NEXT: v_and_b32_e32 v3, 0xff, v0 186; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 187; GFX7-NEXT: v_lshlrev_b32_e32 v4, 8, v4 188; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 189; GFX7-NEXT: v_or_b32_e32 v3, v3, v4 190; GFX7-NEXT: v_lshlrev_b32_e32 v2, 24, v2 191; GFX7-NEXT: v_or_b32_e32 v0, v3, v0 192; GFX7-NEXT: v_or_b32_e32 v0, v0, v2 193; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 194; GFX7-NEXT: s_setpc_b64 s[30:31] 195; 196; GFX10-LABEL: extractelement_vgpr_v4i8_vgpr_idx: 197; GFX10: ; %bb.0: 198; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 199; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 200; GFX10-NEXT: global_load_dword v0, v[0:1], off 201; GFX10-NEXT: v_mov_b32_e32 v1, 8 202; GFX10-NEXT: v_mov_b32_e32 v3, 16 203; GFX10-NEXT: v_and_b32_e32 v2, 3, v2 204; GFX10-NEXT: s_waitcnt vmcnt(0) 205; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 206; GFX10-NEXT: v_lshrrev_b32_e32 v4, 24, v0 207; GFX10-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 208; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 209; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v4 210; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 211; GFX10-NEXT: v_lshlrev_b32_e32 v1, 3, v2 212; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 213; GFX10-NEXT: s_setpc_b64 s[30:31] 214 %vector = load <4 x i8>, <4 x i8> addrspace(1)* %ptr 215 %element = extractelement <4 x i8> %vector, i32 %idx 216 ret i8 %element 217} 218 219define amdgpu_ps i8 @extractelement_sgpr_v4i8_vgpr_idx(<4 x i8> addrspace(4)* inreg %ptr, i32 %idx) { 220; GFX9-LABEL: extractelement_sgpr_v4i8_vgpr_idx: 221; GFX9: ; %bb.0: 222; GFX9-NEXT: s_load_dword s0, s[2:3], 0x0 223; GFX9-NEXT: v_and_b32_e32 v0, 3, v0 224; GFX9-NEXT: v_lshlrev_b32_e32 v0, 3, v0 225; GFX9-NEXT: s_waitcnt lgkmcnt(0) 226; GFX9-NEXT: s_bfe_u32 s3, s0, 0x80008 227; GFX9-NEXT: s_lshr_b32 s1, s0, 24 228; GFX9-NEXT: s_and_b32 s2, s0, 0xff 229; GFX9-NEXT: s_lshl_b32 s3, s3, 8 230; GFX9-NEXT: s_bfe_u32 s0, s0, 0x80010 231; GFX9-NEXT: s_or_b32 s2, s2, s3 232; GFX9-NEXT: s_lshl_b32 s0, s0, 16 233; GFX9-NEXT: s_or_b32 s0, s2, s0 234; GFX9-NEXT: s_lshl_b32 s1, s1, 24 235; GFX9-NEXT: s_or_b32 s0, s0, s1 236; GFX9-NEXT: v_lshrrev_b32_e64 v0, v0, s0 237; GFX9-NEXT: v_readfirstlane_b32 s0, v0 238; GFX9-NEXT: ; return to shader part epilog 239; 240; GFX8-LABEL: extractelement_sgpr_v4i8_vgpr_idx: 241; GFX8: ; %bb.0: 242; GFX8-NEXT: s_load_dword s0, s[2:3], 0x0 243; GFX8-NEXT: v_and_b32_e32 v0, 3, v0 244; GFX8-NEXT: v_lshlrev_b32_e32 v0, 3, v0 245; GFX8-NEXT: s_waitcnt lgkmcnt(0) 246; GFX8-NEXT: s_bfe_u32 s3, s0, 0x80008 247; GFX8-NEXT: s_lshr_b32 s1, s0, 24 248; GFX8-NEXT: s_and_b32 s2, s0, 0xff 249; GFX8-NEXT: s_lshl_b32 s3, s3, 8 250; GFX8-NEXT: s_bfe_u32 s0, s0, 0x80010 251; GFX8-NEXT: s_or_b32 s2, s2, s3 252; GFX8-NEXT: s_lshl_b32 s0, s0, 16 253; GFX8-NEXT: s_or_b32 s0, s2, s0 254; GFX8-NEXT: s_lshl_b32 s1, s1, 24 255; GFX8-NEXT: s_or_b32 s0, s0, s1 256; GFX8-NEXT: v_lshrrev_b32_e64 v0, v0, s0 257; GFX8-NEXT: v_readfirstlane_b32 s0, v0 258; GFX8-NEXT: ; return to shader part epilog 259; 260; GFX7-LABEL: extractelement_sgpr_v4i8_vgpr_idx: 261; GFX7: ; %bb.0: 262; GFX7-NEXT: s_load_dword s0, s[2:3], 0x0 263; GFX7-NEXT: v_and_b32_e32 v0, 3, v0 264; GFX7-NEXT: v_lshlrev_b32_e32 v0, 3, v0 265; GFX7-NEXT: s_waitcnt lgkmcnt(0) 266; GFX7-NEXT: s_bfe_u32 s3, s0, 0x80008 267; GFX7-NEXT: s_lshr_b32 s1, s0, 24 268; GFX7-NEXT: s_and_b32 s2, s0, 0xff 269; GFX7-NEXT: s_lshl_b32 s3, s3, 8 270; GFX7-NEXT: s_bfe_u32 s0, s0, 0x80010 271; GFX7-NEXT: s_or_b32 s2, s2, s3 272; GFX7-NEXT: s_lshl_b32 s0, s0, 16 273; GFX7-NEXT: s_or_b32 s0, s2, s0 274; GFX7-NEXT: s_lshl_b32 s1, s1, 24 275; GFX7-NEXT: s_or_b32 s0, s0, s1 276; GFX7-NEXT: v_lshr_b32_e32 v0, s0, v0 277; GFX7-NEXT: v_readfirstlane_b32 s0, v0 278; GFX7-NEXT: ; return to shader part epilog 279; 280; GFX10-LABEL: extractelement_sgpr_v4i8_vgpr_idx: 281; GFX10: ; %bb.0: 282; GFX10-NEXT: s_load_dword s0, s[2:3], 0x0 283; GFX10-NEXT: v_and_b32_e32 v0, 3, v0 284; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v0 285; GFX10-NEXT: s_waitcnt lgkmcnt(0) 286; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 287; GFX10-NEXT: s_and_b32 s1, s0, 0xff 288; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 289; GFX10-NEXT: s_lshl_b32 s2, s2, 8 290; GFX10-NEXT: s_lshl_b32 s3, s3, 16 291; GFX10-NEXT: s_or_b32 s1, s1, s2 292; GFX10-NEXT: s_lshr_b32 s0, s0, 24 293; GFX10-NEXT: s_or_b32 s1, s1, s3 294; GFX10-NEXT: s_lshl_b32 s0, s0, 24 295; GFX10-NEXT: s_or_b32 s0, s1, s0 296; GFX10-NEXT: v_lshrrev_b32_e64 v0, v0, s0 297; GFX10-NEXT: v_readfirstlane_b32 s0, v0 298; GFX10-NEXT: ; return to shader part epilog 299 %vector = load <4 x i8>, <4 x i8> addrspace(4)* %ptr 300 %element = extractelement <4 x i8> %vector, i32 %idx 301 ret i8 %element 302} 303 304define amdgpu_ps i8 @extractelement_sgpr_v4i8_idx0(<4 x i8> addrspace(4)* inreg %ptr) { 305; GCN-LABEL: extractelement_sgpr_v4i8_idx0: 306; GCN: ; %bb.0: 307; GCN-NEXT: s_load_dword s0, s[2:3], 0x0 308; GCN-NEXT: s_waitcnt lgkmcnt(0) 309; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 310; GCN-NEXT: s_lshr_b32 s1, s0, 24 311; GCN-NEXT: s_and_b32 s2, s0, 0xff 312; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 313; GCN-NEXT: s_lshl_b32 s3, s3, 8 314; GCN-NEXT: s_or_b32 s2, s2, s3 315; GCN-NEXT: s_lshl_b32 s0, s0, 16 316; GCN-NEXT: s_or_b32 s0, s2, s0 317; GCN-NEXT: s_lshl_b32 s1, s1, 24 318; GCN-NEXT: s_or_b32 s0, s0, s1 319; GCN-NEXT: ; return to shader part epilog 320; 321; GFX10-LABEL: extractelement_sgpr_v4i8_idx0: 322; GFX10: ; %bb.0: 323; GFX10-NEXT: s_load_dword s0, s[2:3], 0x0 324; GFX10-NEXT: s_waitcnt lgkmcnt(0) 325; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 326; GFX10-NEXT: s_and_b32 s1, s0, 0xff 327; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 328; GFX10-NEXT: s_lshl_b32 s2, s2, 8 329; GFX10-NEXT: s_lshl_b32 s3, s3, 16 330; GFX10-NEXT: s_or_b32 s1, s1, s2 331; GFX10-NEXT: s_lshr_b32 s0, s0, 24 332; GFX10-NEXT: s_or_b32 s1, s1, s3 333; GFX10-NEXT: s_lshl_b32 s0, s0, 24 334; GFX10-NEXT: s_or_b32 s0, s1, s0 335; GFX10-NEXT: ; return to shader part epilog 336 %vector = load <4 x i8>, <4 x i8> addrspace(4)* %ptr 337 %element = extractelement <4 x i8> %vector, i32 0 338 ret i8 %element 339} 340 341define amdgpu_ps i8 @extractelement_sgpr_v4i8_idx1(<4 x i8> addrspace(4)* inreg %ptr) { 342; GCN-LABEL: extractelement_sgpr_v4i8_idx1: 343; GCN: ; %bb.0: 344; GCN-NEXT: s_load_dword s0, s[2:3], 0x0 345; GCN-NEXT: s_waitcnt lgkmcnt(0) 346; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 347; GCN-NEXT: s_lshr_b32 s1, s0, 24 348; GCN-NEXT: s_and_b32 s2, s0, 0xff 349; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 350; GCN-NEXT: s_lshl_b32 s3, s3, 8 351; GCN-NEXT: s_or_b32 s2, s2, s3 352; GCN-NEXT: s_lshl_b32 s0, s0, 16 353; GCN-NEXT: s_or_b32 s0, s2, s0 354; GCN-NEXT: s_lshl_b32 s1, s1, 24 355; GCN-NEXT: s_or_b32 s0, s0, s1 356; GCN-NEXT: s_lshr_b32 s0, s0, 8 357; GCN-NEXT: ; return to shader part epilog 358; 359; GFX10-LABEL: extractelement_sgpr_v4i8_idx1: 360; GFX10: ; %bb.0: 361; GFX10-NEXT: s_load_dword s0, s[2:3], 0x0 362; GFX10-NEXT: s_waitcnt lgkmcnt(0) 363; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 364; GFX10-NEXT: s_and_b32 s1, s0, 0xff 365; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 366; GFX10-NEXT: s_lshl_b32 s2, s2, 8 367; GFX10-NEXT: s_lshl_b32 s3, s3, 16 368; GFX10-NEXT: s_or_b32 s1, s1, s2 369; GFX10-NEXT: s_lshr_b32 s0, s0, 24 370; GFX10-NEXT: s_or_b32 s1, s1, s3 371; GFX10-NEXT: s_lshl_b32 s0, s0, 24 372; GFX10-NEXT: s_or_b32 s0, s1, s0 373; GFX10-NEXT: s_lshr_b32 s0, s0, 8 374; GFX10-NEXT: ; return to shader part epilog 375 %vector = load <4 x i8>, <4 x i8> addrspace(4)* %ptr 376 %element = extractelement <4 x i8> %vector, i32 1 377 ret i8 %element 378} 379 380define amdgpu_ps i8 @extractelement_sgpr_v4i8_idx2(<4 x i8> addrspace(4)* inreg %ptr) { 381; GCN-LABEL: extractelement_sgpr_v4i8_idx2: 382; GCN: ; %bb.0: 383; GCN-NEXT: s_load_dword s0, s[2:3], 0x0 384; GCN-NEXT: s_waitcnt lgkmcnt(0) 385; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 386; GCN-NEXT: s_lshr_b32 s1, s0, 24 387; GCN-NEXT: s_and_b32 s2, s0, 0xff 388; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 389; GCN-NEXT: s_lshl_b32 s3, s3, 8 390; GCN-NEXT: s_or_b32 s2, s2, s3 391; GCN-NEXT: s_lshl_b32 s0, s0, 16 392; GCN-NEXT: s_or_b32 s0, s2, s0 393; GCN-NEXT: s_lshl_b32 s1, s1, 24 394; GCN-NEXT: s_or_b32 s0, s0, s1 395; GCN-NEXT: s_lshr_b32 s0, s0, 16 396; GCN-NEXT: ; return to shader part epilog 397; 398; GFX10-LABEL: extractelement_sgpr_v4i8_idx2: 399; GFX10: ; %bb.0: 400; GFX10-NEXT: s_load_dword s0, s[2:3], 0x0 401; GFX10-NEXT: s_waitcnt lgkmcnt(0) 402; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 403; GFX10-NEXT: s_and_b32 s1, s0, 0xff 404; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 405; GFX10-NEXT: s_lshl_b32 s2, s2, 8 406; GFX10-NEXT: s_lshl_b32 s3, s3, 16 407; GFX10-NEXT: s_or_b32 s1, s1, s2 408; GFX10-NEXT: s_lshr_b32 s0, s0, 24 409; GFX10-NEXT: s_or_b32 s1, s1, s3 410; GFX10-NEXT: s_lshl_b32 s0, s0, 24 411; GFX10-NEXT: s_or_b32 s0, s1, s0 412; GFX10-NEXT: s_lshr_b32 s0, s0, 16 413; GFX10-NEXT: ; return to shader part epilog 414 %vector = load <4 x i8>, <4 x i8> addrspace(4)* %ptr 415 %element = extractelement <4 x i8> %vector, i32 2 416 ret i8 %element 417} 418 419define amdgpu_ps i8 @extractelement_sgpr_v4i8_idx3(<4 x i8> addrspace(4)* inreg %ptr) { 420; GCN-LABEL: extractelement_sgpr_v4i8_idx3: 421; GCN: ; %bb.0: 422; GCN-NEXT: s_load_dword s0, s[2:3], 0x0 423; GCN-NEXT: s_waitcnt lgkmcnt(0) 424; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 425; GCN-NEXT: s_lshr_b32 s1, s0, 24 426; GCN-NEXT: s_and_b32 s2, s0, 0xff 427; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 428; GCN-NEXT: s_lshl_b32 s3, s3, 8 429; GCN-NEXT: s_or_b32 s2, s2, s3 430; GCN-NEXT: s_lshl_b32 s0, s0, 16 431; GCN-NEXT: s_or_b32 s0, s2, s0 432; GCN-NEXT: s_lshl_b32 s1, s1, 24 433; GCN-NEXT: s_or_b32 s0, s0, s1 434; GCN-NEXT: s_lshr_b32 s0, s0, 24 435; GCN-NEXT: ; return to shader part epilog 436; 437; GFX10-LABEL: extractelement_sgpr_v4i8_idx3: 438; GFX10: ; %bb.0: 439; GFX10-NEXT: s_load_dword s0, s[2:3], 0x0 440; GFX10-NEXT: s_waitcnt lgkmcnt(0) 441; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 442; GFX10-NEXT: s_and_b32 s1, s0, 0xff 443; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 444; GFX10-NEXT: s_lshl_b32 s2, s2, 8 445; GFX10-NEXT: s_lshl_b32 s3, s3, 16 446; GFX10-NEXT: s_or_b32 s1, s1, s2 447; GFX10-NEXT: s_lshr_b32 s0, s0, 24 448; GFX10-NEXT: s_or_b32 s1, s1, s3 449; GFX10-NEXT: s_lshl_b32 s0, s0, 24 450; GFX10-NEXT: s_or_b32 s0, s1, s0 451; GFX10-NEXT: s_lshr_b32 s0, s0, 24 452; GFX10-NEXT: ; return to shader part epilog 453 %vector = load <4 x i8>, <4 x i8> addrspace(4)* %ptr 454 %element = extractelement <4 x i8> %vector, i32 3 455 ret i8 %element 456} 457 458define i8 @extractelement_vgpr_v4i8_idx0(<4 x i8> addrspace(1)* %ptr) { 459; GFX9-LABEL: extractelement_vgpr_v4i8_idx0: 460; GFX9: ; %bb.0: 461; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 462; GFX9-NEXT: global_load_dword v0, v[0:1], off 463; GFX9-NEXT: v_mov_b32_e32 v2, 8 464; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 465; GFX9-NEXT: v_mov_b32_e32 v3, 16 466; GFX9-NEXT: s_waitcnt vmcnt(0) 467; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 468; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 469; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 470; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 471; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 472; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 473; GFX9-NEXT: s_setpc_b64 s[30:31] 474; 475; GFX8-LABEL: extractelement_vgpr_v4i8_idx0: 476; GFX8: ; %bb.0: 477; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 478; GFX8-NEXT: flat_load_dword v0, v[0:1] 479; GFX8-NEXT: v_mov_b32_e32 v1, 8 480; GFX8-NEXT: v_mov_b32_e32 v2, 16 481; GFX8-NEXT: s_waitcnt vmcnt(0) 482; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 483; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 484; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 485; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 486; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 487; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 488; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 489; GFX8-NEXT: s_setpc_b64 s[30:31] 490; 491; GFX7-LABEL: extractelement_vgpr_v4i8_idx0: 492; GFX7: ; %bb.0: 493; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 494; GFX7-NEXT: s_mov_b32 s6, 0 495; GFX7-NEXT: s_mov_b32 s7, 0xf000 496; GFX7-NEXT: s_mov_b64 s[4:5], 0 497; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 498; GFX7-NEXT: s_waitcnt vmcnt(0) 499; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 500; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 501; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 502; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 503; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 504; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 505; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 506; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 507; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 508; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 509; GFX7-NEXT: s_setpc_b64 s[30:31] 510; 511; GFX10-LABEL: extractelement_vgpr_v4i8_idx0: 512; GFX10: ; %bb.0: 513; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 514; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 515; GFX10-NEXT: global_load_dword v0, v[0:1], off 516; GFX10-NEXT: v_mov_b32_e32 v1, 8 517; GFX10-NEXT: v_mov_b32_e32 v2, 16 518; GFX10-NEXT: s_waitcnt vmcnt(0) 519; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 520; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 521; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 522; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 523; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 524; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 525; GFX10-NEXT: s_setpc_b64 s[30:31] 526 %vector = load <4 x i8>, <4 x i8> addrspace(1)* %ptr 527 %element = extractelement <4 x i8> %vector, i32 0 528 ret i8 %element 529} 530 531define i8 @extractelement_vgpr_v4i8_idx1(<4 x i8> addrspace(1)* %ptr) { 532; GFX9-LABEL: extractelement_vgpr_v4i8_idx1: 533; GFX9: ; %bb.0: 534; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 535; GFX9-NEXT: global_load_dword v0, v[0:1], off 536; GFX9-NEXT: s_mov_b32 s4, 8 537; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 538; GFX9-NEXT: v_mov_b32_e32 v2, 16 539; GFX9-NEXT: s_waitcnt vmcnt(0) 540; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v0 541; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 542; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 543; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v4 544; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 545; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 546; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 547; GFX9-NEXT: s_setpc_b64 s[30:31] 548; 549; GFX8-LABEL: extractelement_vgpr_v4i8_idx1: 550; GFX8: ; %bb.0: 551; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 552; GFX8-NEXT: flat_load_dword v0, v[0:1] 553; GFX8-NEXT: v_mov_b32_e32 v1, 8 554; GFX8-NEXT: v_mov_b32_e32 v2, 16 555; GFX8-NEXT: s_waitcnt vmcnt(0) 556; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 557; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 558; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 559; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 560; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 561; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 562; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 563; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 564; GFX8-NEXT: s_setpc_b64 s[30:31] 565; 566; GFX7-LABEL: extractelement_vgpr_v4i8_idx1: 567; GFX7: ; %bb.0: 568; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 569; GFX7-NEXT: s_mov_b32 s6, 0 570; GFX7-NEXT: s_mov_b32 s7, 0xf000 571; GFX7-NEXT: s_mov_b64 s[4:5], 0 572; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 573; GFX7-NEXT: s_waitcnt vmcnt(0) 574; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 575; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 576; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 577; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 578; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 579; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 580; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 581; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 582; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 583; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 584; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 585; GFX7-NEXT: s_setpc_b64 s[30:31] 586; 587; GFX10-LABEL: extractelement_vgpr_v4i8_idx1: 588; GFX10: ; %bb.0: 589; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 590; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 591; GFX10-NEXT: global_load_dword v0, v[0:1], off 592; GFX10-NEXT: s_mov_b32 s4, 8 593; GFX10-NEXT: v_mov_b32_e32 v1, 16 594; GFX10-NEXT: s_waitcnt vmcnt(0) 595; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 596; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 597; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 598; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v2 599; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 600; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 601; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 602; GFX10-NEXT: s_setpc_b64 s[30:31] 603 %vector = load <4 x i8>, <4 x i8> addrspace(1)* %ptr 604 %element = extractelement <4 x i8> %vector, i32 1 605 ret i8 %element 606} 607 608define i8 @extractelement_vgpr_v4i8_idx2(<4 x i8> addrspace(1)* %ptr) { 609; GFX9-LABEL: extractelement_vgpr_v4i8_idx2: 610; GFX9: ; %bb.0: 611; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 612; GFX9-NEXT: global_load_dword v0, v[0:1], off 613; GFX9-NEXT: v_mov_b32_e32 v2, 8 614; GFX9-NEXT: s_mov_b32 s4, 16 615; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 616; GFX9-NEXT: s_waitcnt vmcnt(0) 617; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v0 618; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 619; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 620; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 621; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 622; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 623; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 624; GFX9-NEXT: s_setpc_b64 s[30:31] 625; 626; GFX8-LABEL: extractelement_vgpr_v4i8_idx2: 627; GFX8: ; %bb.0: 628; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 629; GFX8-NEXT: flat_load_dword v0, v[0:1] 630; GFX8-NEXT: v_mov_b32_e32 v1, 8 631; GFX8-NEXT: v_mov_b32_e32 v2, 16 632; GFX8-NEXT: s_waitcnt vmcnt(0) 633; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 634; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 635; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 636; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 637; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 638; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 639; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 640; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 641; GFX8-NEXT: s_setpc_b64 s[30:31] 642; 643; GFX7-LABEL: extractelement_vgpr_v4i8_idx2: 644; GFX7: ; %bb.0: 645; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 646; GFX7-NEXT: s_mov_b32 s6, 0 647; GFX7-NEXT: s_mov_b32 s7, 0xf000 648; GFX7-NEXT: s_mov_b64 s[4:5], 0 649; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 650; GFX7-NEXT: s_waitcnt vmcnt(0) 651; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 652; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 653; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 654; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 655; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 656; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 657; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 658; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 659; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 660; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 661; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 662; GFX7-NEXT: s_setpc_b64 s[30:31] 663; 664; GFX10-LABEL: extractelement_vgpr_v4i8_idx2: 665; GFX10: ; %bb.0: 666; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 667; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 668; GFX10-NEXT: global_load_dword v0, v[0:1], off 669; GFX10-NEXT: v_mov_b32_e32 v1, 8 670; GFX10-NEXT: s_mov_b32 s4, 16 671; GFX10-NEXT: s_waitcnt vmcnt(0) 672; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 673; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v0 674; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 675; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 676; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v2 677; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 678; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 679; GFX10-NEXT: s_setpc_b64 s[30:31] 680 %vector = load <4 x i8>, <4 x i8> addrspace(1)* %ptr 681 %element = extractelement <4 x i8> %vector, i32 2 682 ret i8 %element 683} 684 685define i8 @extractelement_vgpr_v4i8_idx3(<4 x i8> addrspace(1)* %ptr) { 686; GFX9-LABEL: extractelement_vgpr_v4i8_idx3: 687; GFX9: ; %bb.0: 688; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 689; GFX9-NEXT: global_load_dword v0, v[0:1], off 690; GFX9-NEXT: v_mov_b32_e32 v2, 8 691; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 692; GFX9-NEXT: v_mov_b32_e32 v3, 16 693; GFX9-NEXT: s_waitcnt vmcnt(0) 694; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 695; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 696; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 697; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 698; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 699; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 700; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 701; GFX9-NEXT: s_setpc_b64 s[30:31] 702; 703; GFX8-LABEL: extractelement_vgpr_v4i8_idx3: 704; GFX8: ; %bb.0: 705; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 706; GFX8-NEXT: flat_load_dword v0, v[0:1] 707; GFX8-NEXT: v_mov_b32_e32 v1, 8 708; GFX8-NEXT: v_mov_b32_e32 v2, 16 709; GFX8-NEXT: s_waitcnt vmcnt(0) 710; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 711; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 712; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 713; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 714; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 715; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 716; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 717; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 718; GFX8-NEXT: s_setpc_b64 s[30:31] 719; 720; GFX7-LABEL: extractelement_vgpr_v4i8_idx3: 721; GFX7: ; %bb.0: 722; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 723; GFX7-NEXT: s_mov_b32 s6, 0 724; GFX7-NEXT: s_mov_b32 s7, 0xf000 725; GFX7-NEXT: s_mov_b64 s[4:5], 0 726; GFX7-NEXT: buffer_load_dword v0, v[0:1], s[4:7], 0 addr64 727; GFX7-NEXT: s_waitcnt vmcnt(0) 728; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 729; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 730; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 731; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 732; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 733; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 734; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 735; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 736; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 737; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 738; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 739; GFX7-NEXT: s_setpc_b64 s[30:31] 740; 741; GFX10-LABEL: extractelement_vgpr_v4i8_idx3: 742; GFX10: ; %bb.0: 743; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 744; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 745; GFX10-NEXT: global_load_dword v0, v[0:1], off 746; GFX10-NEXT: v_mov_b32_e32 v1, 8 747; GFX10-NEXT: v_mov_b32_e32 v2, 16 748; GFX10-NEXT: s_waitcnt vmcnt(0) 749; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 750; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 751; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 752; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 753; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 754; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 755; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 756; GFX10-NEXT: s_setpc_b64 s[30:31] 757 %vector = load <4 x i8>, <4 x i8> addrspace(1)* %ptr 758 %element = extractelement <4 x i8> %vector, i32 3 759 ret i8 %element 760} 761 762define amdgpu_ps i8 @extractelement_sgpr_v8i8_sgpr_idx(<8 x i8> addrspace(4)* inreg %ptr, i32 inreg %idx) { 763; GCN-LABEL: extractelement_sgpr_v8i8_sgpr_idx: 764; GCN: ; %bb.0: 765; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 766; GCN-NEXT: s_waitcnt lgkmcnt(0) 767; GCN-NEXT: s_bfe_u32 s6, s0, 0x80008 768; GCN-NEXT: s_lshr_b32 s2, s0, 24 769; GCN-NEXT: s_and_b32 s5, s0, 0xff 770; GCN-NEXT: s_lshl_b32 s6, s6, 8 771; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 772; GCN-NEXT: s_or_b32 s5, s5, s6 773; GCN-NEXT: s_lshl_b32 s0, s0, 16 774; GCN-NEXT: s_or_b32 s0, s5, s0 775; GCN-NEXT: s_lshl_b32 s2, s2, 24 776; GCN-NEXT: s_bfe_u32 s5, s1, 0x80008 777; GCN-NEXT: s_lshr_b32 s3, s1, 24 778; GCN-NEXT: s_or_b32 s0, s0, s2 779; GCN-NEXT: s_and_b32 s2, s1, 0xff 780; GCN-NEXT: s_lshl_b32 s5, s5, 8 781; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 782; GCN-NEXT: s_or_b32 s2, s2, s5 783; GCN-NEXT: s_lshl_b32 s1, s1, 16 784; GCN-NEXT: s_or_b32 s1, s2, s1 785; GCN-NEXT: s_lshl_b32 s2, s3, 24 786; GCN-NEXT: s_or_b32 s1, s1, s2 787; GCN-NEXT: s_lshr_b32 s2, s4, 2 788; GCN-NEXT: s_cmp_eq_u32 s2, 1 789; GCN-NEXT: s_cselect_b32 s0, s1, s0 790; GCN-NEXT: s_and_b32 s1, s4, 3 791; GCN-NEXT: s_lshl_b32 s1, s1, 3 792; GCN-NEXT: s_lshr_b32 s0, s0, s1 793; GCN-NEXT: ; return to shader part epilog 794; 795; GFX10-LABEL: extractelement_sgpr_v8i8_sgpr_idx: 796; GFX10: ; %bb.0: 797; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 798; GFX10-NEXT: s_lshr_b32 s2, s4, 2 799; GFX10-NEXT: s_waitcnt lgkmcnt(0) 800; GFX10-NEXT: s_bfe_u32 s7, s0, 0x80008 801; GFX10-NEXT: s_bfe_u32 s9, s1, 0x80008 802; GFX10-NEXT: s_lshr_b32 s3, s0, 24 803; GFX10-NEXT: s_lshr_b32 s5, s1, 24 804; GFX10-NEXT: s_and_b32 s6, s0, 0xff 805; GFX10-NEXT: s_bfe_u32 s0, s0, 0x80010 806; GFX10-NEXT: s_and_b32 s8, s1, 0xff 807; GFX10-NEXT: s_bfe_u32 s1, s1, 0x80010 808; GFX10-NEXT: s_lshl_b32 s7, s7, 8 809; GFX10-NEXT: s_lshl_b32 s9, s9, 8 810; GFX10-NEXT: s_lshl_b32 s0, s0, 16 811; GFX10-NEXT: s_lshl_b32 s1, s1, 16 812; GFX10-NEXT: s_or_b32 s6, s6, s7 813; GFX10-NEXT: s_or_b32 s7, s8, s9 814; GFX10-NEXT: s_lshl_b32 s3, s3, 24 815; GFX10-NEXT: s_lshl_b32 s5, s5, 24 816; GFX10-NEXT: s_or_b32 s0, s6, s0 817; GFX10-NEXT: s_or_b32 s1, s7, s1 818; GFX10-NEXT: s_or_b32 s0, s0, s3 819; GFX10-NEXT: s_or_b32 s1, s1, s5 820; GFX10-NEXT: s_cmp_eq_u32 s2, 1 821; GFX10-NEXT: s_cselect_b32 s0, s1, s0 822; GFX10-NEXT: s_and_b32 s1, s4, 3 823; GFX10-NEXT: s_lshl_b32 s1, s1, 3 824; GFX10-NEXT: s_lshr_b32 s0, s0, s1 825; GFX10-NEXT: ; return to shader part epilog 826 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 827 %element = extractelement <8 x i8> %vector, i32 %idx 828 ret i8 %element 829} 830 831define amdgpu_ps i8 @extractelement_vgpr_v8i8_sgpr_idx(<8 x i8> addrspace(1)* %ptr, i32 inreg %idx) { 832; GFX9-LABEL: extractelement_vgpr_v8i8_sgpr_idx: 833; GFX9: ; %bb.0: 834; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 835; GFX9-NEXT: s_mov_b32 s0, 8 836; GFX9-NEXT: s_mov_b32 s1, 16 837; GFX9-NEXT: s_movk_i32 s3, 0xff 838; GFX9-NEXT: s_lshr_b32 s4, s2, 2 839; GFX9-NEXT: s_and_b32 s2, s2, 3 840; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 1 841; GFX9-NEXT: s_waitcnt vmcnt(0) 842; GFX9-NEXT: v_lshrrev_b32_e32 v2, 24, v0 843; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v1 844; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 845; GFX9-NEXT: v_lshlrev_b32_sdwa v6, s0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 846; GFX9-NEXT: v_lshlrev_b32_sdwa v5, s1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 847; GFX9-NEXT: v_lshlrev_b32_sdwa v7, s1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 848; GFX9-NEXT: v_and_or_b32 v0, v0, s3, v4 849; GFX9-NEXT: v_lshlrev_b32_e32 v2, 24, v2 850; GFX9-NEXT: v_and_or_b32 v1, v1, s3, v6 851; GFX9-NEXT: v_lshlrev_b32_e32 v3, 24, v3 852; GFX9-NEXT: v_or3_b32 v0, v0, v5, v2 853; GFX9-NEXT: v_or3_b32 v1, v1, v7, v3 854; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 855; GFX9-NEXT: s_lshl_b32 s0, s2, 3 856; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 857; GFX9-NEXT: v_readfirstlane_b32 s0, v0 858; GFX9-NEXT: ; return to shader part epilog 859; 860; GFX8-LABEL: extractelement_vgpr_v8i8_sgpr_idx: 861; GFX8: ; %bb.0: 862; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 863; GFX8-NEXT: v_mov_b32_e32 v2, 8 864; GFX8-NEXT: v_mov_b32_e32 v3, 16 865; GFX8-NEXT: s_lshr_b32 s0, s2, 2 866; GFX8-NEXT: s_and_b32 s1, s2, 3 867; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 868; GFX8-NEXT: s_lshl_b32 s0, s1, 3 869; GFX8-NEXT: s_waitcnt vmcnt(0) 870; GFX8-NEXT: v_lshlrev_b32_sdwa v6, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 871; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 872; GFX8-NEXT: v_lshrrev_b32_e32 v4, 24, v0 873; GFX8-NEXT: v_lshrrev_b32_e32 v5, 24, v1 874; GFX8-NEXT: v_lshlrev_b32_sdwa v7, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 875; GFX8-NEXT: v_lshlrev_b32_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 876; GFX8-NEXT: v_or_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 877; GFX8-NEXT: v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 878; GFX8-NEXT: v_lshlrev_b32_e32 v4, 24, v4 879; GFX8-NEXT: v_lshlrev_b32_e32 v2, 24, v5 880; GFX8-NEXT: v_or_b32_e32 v0, v0, v7 881; GFX8-NEXT: v_or_b32_e32 v1, v1, v3 882; GFX8-NEXT: v_or_b32_e32 v0, v0, v4 883; GFX8-NEXT: v_or_b32_e32 v1, v1, v2 884; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 885; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 886; GFX8-NEXT: v_readfirstlane_b32 s0, v0 887; GFX8-NEXT: ; return to shader part epilog 888; 889; GFX7-LABEL: extractelement_vgpr_v8i8_sgpr_idx: 890; GFX7: ; %bb.0: 891; GFX7-NEXT: s_mov_b32 s6, 0 892; GFX7-NEXT: s_mov_b32 s7, 0xf000 893; GFX7-NEXT: s_mov_b64 s[4:5], 0 894; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 895; GFX7-NEXT: s_lshr_b32 s0, s2, 2 896; GFX7-NEXT: s_and_b32 s1, s2, 3 897; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 898; GFX7-NEXT: s_lshl_b32 s0, s1, 3 899; GFX7-NEXT: s_waitcnt vmcnt(0) 900; GFX7-NEXT: v_bfe_u32 v5, v0, 8, 8 901; GFX7-NEXT: v_bfe_u32 v7, v1, 8, 8 902; GFX7-NEXT: v_lshrrev_b32_e32 v2, 24, v0 903; GFX7-NEXT: v_lshrrev_b32_e32 v3, 24, v1 904; GFX7-NEXT: v_and_b32_e32 v4, 0xff, v0 905; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 906; GFX7-NEXT: v_and_b32_e32 v6, 0xff, v1 907; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 908; GFX7-NEXT: v_lshlrev_b32_e32 v5, 8, v5 909; GFX7-NEXT: v_lshlrev_b32_e32 v7, 8, v7 910; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 911; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 912; GFX7-NEXT: v_or_b32_e32 v4, v4, v5 913; GFX7-NEXT: v_or_b32_e32 v5, v6, v7 914; GFX7-NEXT: v_lshlrev_b32_e32 v2, 24, v2 915; GFX7-NEXT: v_lshlrev_b32_e32 v3, 24, v3 916; GFX7-NEXT: v_or_b32_e32 v0, v4, v0 917; GFX7-NEXT: v_or_b32_e32 v1, v5, v1 918; GFX7-NEXT: v_or_b32_e32 v0, v0, v2 919; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 920; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 921; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 922; GFX7-NEXT: v_readfirstlane_b32 s0, v0 923; GFX7-NEXT: ; return to shader part epilog 924; 925; GFX10-LABEL: extractelement_vgpr_v8i8_sgpr_idx: 926; GFX10: ; %bb.0: 927; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 928; GFX10-NEXT: s_mov_b32 s0, 8 929; GFX10-NEXT: s_mov_b32 s1, 16 930; GFX10-NEXT: s_waitcnt vmcnt(0) 931; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v0 932; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 933; GFX10-NEXT: v_lshrrev_b32_e32 v4, 24, v1 934; GFX10-NEXT: v_lshlrev_b32_sdwa v5, s0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 935; GFX10-NEXT: v_lshlrev_b32_sdwa v6, s1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 936; GFX10-NEXT: v_lshlrev_b32_sdwa v7, s1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 937; GFX10-NEXT: v_and_or_b32 v0, v0, 0xff, v3 938; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v2 939; GFX10-NEXT: v_and_or_b32 v1, v1, 0xff, v5 940; GFX10-NEXT: v_lshlrev_b32_e32 v3, 24, v4 941; GFX10-NEXT: s_lshr_b32 s0, s2, 2 942; GFX10-NEXT: v_or3_b32 v0, v0, v6, v2 943; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 944; GFX10-NEXT: v_or3_b32 v1, v1, v7, v3 945; GFX10-NEXT: s_and_b32 s0, s2, 3 946; GFX10-NEXT: s_lshl_b32 s0, s0, 3 947; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 948; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 949; GFX10-NEXT: v_readfirstlane_b32 s0, v0 950; GFX10-NEXT: ; return to shader part epilog 951 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 952 %element = extractelement <8 x i8> %vector, i32 %idx 953 ret i8 %element 954} 955 956define i8 @extractelement_vgpr_v8i8_vgpr_idx(<8 x i8> addrspace(1)* %ptr, i32 %idx) { 957; GFX9-LABEL: extractelement_vgpr_v8i8_vgpr_idx: 958; GFX9: ; %bb.0: 959; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 960; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 961; GFX9-NEXT: s_mov_b32 s4, 8 962; GFX9-NEXT: s_mov_b32 s5, 16 963; GFX9-NEXT: s_movk_i32 s6, 0xff 964; GFX9-NEXT: v_lshrrev_b32_e32 v3, 2, v2 965; GFX9-NEXT: v_and_b32_e32 v2, 3, v2 966; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 967; GFX9-NEXT: s_waitcnt vmcnt(0) 968; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 969; GFX9-NEXT: v_lshrrev_b32_e32 v5, 24, v1 970; GFX9-NEXT: v_lshlrev_b32_sdwa v6, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 971; GFX9-NEXT: v_lshlrev_b32_sdwa v8, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 972; GFX9-NEXT: v_lshlrev_b32_sdwa v7, s5, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 973; GFX9-NEXT: v_lshlrev_b32_sdwa v9, s5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 974; GFX9-NEXT: v_and_or_b32 v0, v0, s6, v6 975; GFX9-NEXT: v_lshlrev_b32_e32 v4, 24, v4 976; GFX9-NEXT: v_and_or_b32 v1, v1, s6, v8 977; GFX9-NEXT: v_lshlrev_b32_e32 v5, 24, v5 978; GFX9-NEXT: v_or3_b32 v0, v0, v7, v4 979; GFX9-NEXT: v_or3_b32 v1, v1, v9, v5 980; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 981; GFX9-NEXT: v_lshlrev_b32_e32 v1, 3, v2 982; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 983; GFX9-NEXT: s_setpc_b64 s[30:31] 984; 985; GFX8-LABEL: extractelement_vgpr_v8i8_vgpr_idx: 986; GFX8: ; %bb.0: 987; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 988; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 989; GFX8-NEXT: v_mov_b32_e32 v3, 8 990; GFX8-NEXT: v_mov_b32_e32 v4, 16 991; GFX8-NEXT: v_lshrrev_b32_e32 v5, 2, v2 992; GFX8-NEXT: v_and_b32_e32 v2, 3, v2 993; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v5 994; GFX8-NEXT: s_waitcnt vmcnt(0) 995; GFX8-NEXT: v_lshlrev_b32_sdwa v8, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 996; GFX8-NEXT: v_lshlrev_b32_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 997; GFX8-NEXT: v_lshrrev_b32_e32 v6, 24, v0 998; GFX8-NEXT: v_lshrrev_b32_e32 v7, 24, v1 999; GFX8-NEXT: v_lshlrev_b32_sdwa v9, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1000; GFX8-NEXT: v_lshlrev_b32_sdwa v4, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1001; GFX8-NEXT: v_or_b32_sdwa v0, v0, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1002; GFX8-NEXT: v_or_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1003; GFX8-NEXT: v_lshlrev_b32_e32 v6, 24, v6 1004; GFX8-NEXT: v_lshlrev_b32_e32 v3, 24, v7 1005; GFX8-NEXT: v_or_b32_e32 v0, v0, v9 1006; GFX8-NEXT: v_or_b32_e32 v1, v1, v4 1007; GFX8-NEXT: v_or_b32_e32 v0, v0, v6 1008; GFX8-NEXT: v_or_b32_e32 v1, v1, v3 1009; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 1010; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v2 1011; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 1012; GFX8-NEXT: s_setpc_b64 s[30:31] 1013; 1014; GFX7-LABEL: extractelement_vgpr_v8i8_vgpr_idx: 1015; GFX7: ; %bb.0: 1016; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1017; GFX7-NEXT: s_mov_b32 s6, 0 1018; GFX7-NEXT: s_mov_b32 s7, 0xf000 1019; GFX7-NEXT: s_mov_b64 s[4:5], 0 1020; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1021; GFX7-NEXT: v_lshrrev_b32_e32 v3, 2, v2 1022; GFX7-NEXT: v_and_b32_e32 v2, 3, v2 1023; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v3 1024; GFX7-NEXT: s_waitcnt vmcnt(0) 1025; GFX7-NEXT: v_bfe_u32 v7, v0, 8, 8 1026; GFX7-NEXT: v_bfe_u32 v9, v1, 8, 8 1027; GFX7-NEXT: v_lshrrev_b32_e32 v4, 24, v0 1028; GFX7-NEXT: v_lshrrev_b32_e32 v5, 24, v1 1029; GFX7-NEXT: v_and_b32_e32 v6, 0xff, v0 1030; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 1031; GFX7-NEXT: v_and_b32_e32 v8, 0xff, v1 1032; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 1033; GFX7-NEXT: v_lshlrev_b32_e32 v7, 8, v7 1034; GFX7-NEXT: v_lshlrev_b32_e32 v9, 8, v9 1035; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 1036; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 1037; GFX7-NEXT: v_or_b32_e32 v6, v6, v7 1038; GFX7-NEXT: v_or_b32_e32 v7, v8, v9 1039; GFX7-NEXT: v_lshlrev_b32_e32 v4, 24, v4 1040; GFX7-NEXT: v_lshlrev_b32_e32 v5, 24, v5 1041; GFX7-NEXT: v_or_b32_e32 v0, v6, v0 1042; GFX7-NEXT: v_or_b32_e32 v1, v7, v1 1043; GFX7-NEXT: v_or_b32_e32 v0, v0, v4 1044; GFX7-NEXT: v_or_b32_e32 v1, v1, v5 1045; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 1046; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v2 1047; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 1048; GFX7-NEXT: s_setpc_b64 s[30:31] 1049; 1050; GFX10-LABEL: extractelement_vgpr_v8i8_vgpr_idx: 1051; GFX10: ; %bb.0: 1052; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1053; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1054; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1055; GFX10-NEXT: s_mov_b32 s4, 8 1056; GFX10-NEXT: s_mov_b32 s5, 16 1057; GFX10-NEXT: s_waitcnt vmcnt(0) 1058; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1059; GFX10-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1060; GFX10-NEXT: v_lshrrev_b32_e32 v5, 24, v1 1061; GFX10-NEXT: v_lshlrev_b32_sdwa v6, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1062; GFX10-NEXT: v_lshlrev_b32_sdwa v7, s5, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1063; GFX10-NEXT: v_lshlrev_b32_sdwa v8, s5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1064; GFX10-NEXT: v_and_or_b32 v0, v0, 0xff, v4 1065; GFX10-NEXT: v_lshlrev_b32_e32 v3, 24, v3 1066; GFX10-NEXT: v_and_or_b32 v1, v1, 0xff, v6 1067; GFX10-NEXT: v_lshlrev_b32_e32 v4, 24, v5 1068; GFX10-NEXT: v_lshrrev_b32_e32 v5, 2, v2 1069; GFX10-NEXT: v_and_b32_e32 v2, 3, v2 1070; GFX10-NEXT: v_or3_b32 v0, v0, v7, v3 1071; GFX10-NEXT: v_or3_b32 v1, v1, v8, v4 1072; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v5 1073; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 1074; GFX10-NEXT: v_lshlrev_b32_e32 v1, 3, v2 1075; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 1076; GFX10-NEXT: s_setpc_b64 s[30:31] 1077 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1078 %element = extractelement <8 x i8> %vector, i32 %idx 1079 ret i8 %element 1080} 1081 1082define amdgpu_ps i8 @extractelement_sgpr_v8i8_vgpr_idx(<8 x i8> addrspace(4)* inreg %ptr, i32 %idx) { 1083; GCN-LABEL: extractelement_sgpr_v8i8_vgpr_idx: 1084; GCN: ; %bb.0: 1085; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1086; GCN-NEXT: v_lshrrev_b32_e32 v1, 2, v0 1087; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1 1088; GCN-NEXT: v_and_b32_e32 v0, 3, v0 1089; GCN-NEXT: v_lshlrev_b32_e32 v0, 3, v0 1090; GCN-NEXT: s_waitcnt lgkmcnt(0) 1091; GCN-NEXT: s_bfe_u32 s5, s0, 0x80008 1092; GCN-NEXT: s_lshr_b32 s2, s0, 24 1093; GCN-NEXT: s_and_b32 s4, s0, 0xff 1094; GCN-NEXT: s_lshl_b32 s5, s5, 8 1095; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 1096; GCN-NEXT: s_or_b32 s4, s4, s5 1097; GCN-NEXT: s_lshl_b32 s0, s0, 16 1098; GCN-NEXT: s_or_b32 s0, s4, s0 1099; GCN-NEXT: s_lshl_b32 s2, s2, 24 1100; GCN-NEXT: s_bfe_u32 s4, s1, 0x80008 1101; GCN-NEXT: s_lshr_b32 s3, s1, 24 1102; GCN-NEXT: s_or_b32 s0, s0, s2 1103; GCN-NEXT: s_and_b32 s2, s1, 0xff 1104; GCN-NEXT: s_lshl_b32 s4, s4, 8 1105; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 1106; GCN-NEXT: s_or_b32 s2, s2, s4 1107; GCN-NEXT: s_lshl_b32 s1, s1, 16 1108; GCN-NEXT: s_or_b32 s1, s2, s1 1109; GCN-NEXT: s_lshl_b32 s2, s3, 24 1110; GCN-NEXT: s_or_b32 s1, s1, s2 1111; GCN-NEXT: v_mov_b32_e32 v2, s0 1112; GCN-NEXT: v_mov_b32_e32 v3, s1 1113; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v3, vcc 1114; GCN-NEXT: v_lshrrev_b32_e32 v0, v0, v1 1115; GCN-NEXT: v_readfirstlane_b32 s0, v0 1116; GCN-NEXT: ; return to shader part epilog 1117; 1118; GFX10-LABEL: extractelement_sgpr_v8i8_vgpr_idx: 1119; GFX10: ; %bb.0: 1120; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1121; GFX10-NEXT: v_lshrrev_b32_e32 v1, 2, v0 1122; GFX10-NEXT: v_and_b32_e32 v0, 3, v0 1123; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 1124; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v0 1125; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1126; GFX10-NEXT: s_bfe_u32 s7, s1, 0x80008 1127; GFX10-NEXT: s_lshr_b32 s3, s1, 24 1128; GFX10-NEXT: s_and_b32 s6, s1, 0xff 1129; GFX10-NEXT: s_bfe_u32 s1, s1, 0x80010 1130; GFX10-NEXT: s_lshl_b32 s7, s7, 8 1131; GFX10-NEXT: s_lshl_b32 s1, s1, 16 1132; GFX10-NEXT: s_or_b32 s6, s6, s7 1133; GFX10-NEXT: s_bfe_u32 s5, s0, 0x80008 1134; GFX10-NEXT: s_lshl_b32 s3, s3, 24 1135; GFX10-NEXT: s_or_b32 s1, s6, s1 1136; GFX10-NEXT: s_lshr_b32 s2, s0, 24 1137; GFX10-NEXT: s_and_b32 s4, s0, 0xff 1138; GFX10-NEXT: s_bfe_u32 s0, s0, 0x80010 1139; GFX10-NEXT: s_lshl_b32 s5, s5, 8 1140; GFX10-NEXT: s_or_b32 s1, s1, s3 1141; GFX10-NEXT: s_lshl_b32 s0, s0, 16 1142; GFX10-NEXT: s_or_b32 s3, s4, s5 1143; GFX10-NEXT: v_mov_b32_e32 v2, s1 1144; GFX10-NEXT: s_lshl_b32 s2, s2, 24 1145; GFX10-NEXT: s_or_b32 s0, s3, s0 1146; GFX10-NEXT: s_or_b32 s0, s0, s2 1147; GFX10-NEXT: v_cndmask_b32_e32 v1, s0, v2, vcc_lo 1148; GFX10-NEXT: v_lshrrev_b32_e32 v0, v0, v1 1149; GFX10-NEXT: v_readfirstlane_b32 s0, v0 1150; GFX10-NEXT: ; return to shader part epilog 1151 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1152 %element = extractelement <8 x i8> %vector, i32 %idx 1153 ret i8 %element 1154} 1155 1156define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx0(<8 x i8> addrspace(4)* inreg %ptr) { 1157; GCN-LABEL: extractelement_sgpr_v8i8_idx0: 1158; GCN: ; %bb.0: 1159; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1160; GCN-NEXT: s_waitcnt lgkmcnt(0) 1161; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 1162; GCN-NEXT: s_lshr_b32 s1, s0, 24 1163; GCN-NEXT: s_and_b32 s2, s0, 0xff 1164; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 1165; GCN-NEXT: s_lshl_b32 s3, s3, 8 1166; GCN-NEXT: s_or_b32 s2, s2, s3 1167; GCN-NEXT: s_lshl_b32 s0, s0, 16 1168; GCN-NEXT: s_or_b32 s0, s2, s0 1169; GCN-NEXT: s_lshl_b32 s1, s1, 24 1170; GCN-NEXT: s_or_b32 s0, s0, s1 1171; GCN-NEXT: ; return to shader part epilog 1172; 1173; GFX10-LABEL: extractelement_sgpr_v8i8_idx0: 1174; GFX10: ; %bb.0: 1175; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1176; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1177; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 1178; GFX10-NEXT: s_and_b32 s1, s0, 0xff 1179; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 1180; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1181; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1182; GFX10-NEXT: s_or_b32 s1, s1, s2 1183; GFX10-NEXT: s_lshr_b32 s0, s0, 24 1184; GFX10-NEXT: s_or_b32 s1, s1, s3 1185; GFX10-NEXT: s_lshl_b32 s0, s0, 24 1186; GFX10-NEXT: s_or_b32 s0, s1, s0 1187; GFX10-NEXT: ; return to shader part epilog 1188 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1189 %element = extractelement <8 x i8> %vector, i32 0 1190 ret i8 %element 1191} 1192 1193define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx1(<8 x i8> addrspace(4)* inreg %ptr) { 1194; GCN-LABEL: extractelement_sgpr_v8i8_idx1: 1195; GCN: ; %bb.0: 1196; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1197; GCN-NEXT: s_waitcnt lgkmcnt(0) 1198; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 1199; GCN-NEXT: s_lshr_b32 s1, s0, 24 1200; GCN-NEXT: s_and_b32 s2, s0, 0xff 1201; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 1202; GCN-NEXT: s_lshl_b32 s3, s3, 8 1203; GCN-NEXT: s_or_b32 s2, s2, s3 1204; GCN-NEXT: s_lshl_b32 s0, s0, 16 1205; GCN-NEXT: s_or_b32 s0, s2, s0 1206; GCN-NEXT: s_lshl_b32 s1, s1, 24 1207; GCN-NEXT: s_or_b32 s0, s0, s1 1208; GCN-NEXT: s_lshr_b32 s0, s0, 8 1209; GCN-NEXT: ; return to shader part epilog 1210; 1211; GFX10-LABEL: extractelement_sgpr_v8i8_idx1: 1212; GFX10: ; %bb.0: 1213; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1214; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1215; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 1216; GFX10-NEXT: s_and_b32 s1, s0, 0xff 1217; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 1218; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1219; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1220; GFX10-NEXT: s_or_b32 s1, s1, s2 1221; GFX10-NEXT: s_lshr_b32 s0, s0, 24 1222; GFX10-NEXT: s_or_b32 s1, s1, s3 1223; GFX10-NEXT: s_lshl_b32 s0, s0, 24 1224; GFX10-NEXT: s_or_b32 s0, s1, s0 1225; GFX10-NEXT: s_lshr_b32 s0, s0, 8 1226; GFX10-NEXT: ; return to shader part epilog 1227 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1228 %element = extractelement <8 x i8> %vector, i32 1 1229 ret i8 %element 1230} 1231 1232define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx2(<8 x i8> addrspace(4)* inreg %ptr) { 1233; GCN-LABEL: extractelement_sgpr_v8i8_idx2: 1234; GCN: ; %bb.0: 1235; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1236; GCN-NEXT: s_waitcnt lgkmcnt(0) 1237; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 1238; GCN-NEXT: s_lshr_b32 s1, s0, 24 1239; GCN-NEXT: s_and_b32 s2, s0, 0xff 1240; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 1241; GCN-NEXT: s_lshl_b32 s3, s3, 8 1242; GCN-NEXT: s_or_b32 s2, s2, s3 1243; GCN-NEXT: s_lshl_b32 s0, s0, 16 1244; GCN-NEXT: s_or_b32 s0, s2, s0 1245; GCN-NEXT: s_lshl_b32 s1, s1, 24 1246; GCN-NEXT: s_or_b32 s0, s0, s1 1247; GCN-NEXT: s_lshr_b32 s0, s0, 16 1248; GCN-NEXT: ; return to shader part epilog 1249; 1250; GFX10-LABEL: extractelement_sgpr_v8i8_idx2: 1251; GFX10: ; %bb.0: 1252; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1253; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1254; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 1255; GFX10-NEXT: s_and_b32 s1, s0, 0xff 1256; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 1257; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1258; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1259; GFX10-NEXT: s_or_b32 s1, s1, s2 1260; GFX10-NEXT: s_lshr_b32 s0, s0, 24 1261; GFX10-NEXT: s_or_b32 s1, s1, s3 1262; GFX10-NEXT: s_lshl_b32 s0, s0, 24 1263; GFX10-NEXT: s_or_b32 s0, s1, s0 1264; GFX10-NEXT: s_lshr_b32 s0, s0, 16 1265; GFX10-NEXT: ; return to shader part epilog 1266 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1267 %element = extractelement <8 x i8> %vector, i32 2 1268 ret i8 %element 1269} 1270 1271define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx3(<8 x i8> addrspace(4)* inreg %ptr) { 1272; GCN-LABEL: extractelement_sgpr_v8i8_idx3: 1273; GCN: ; %bb.0: 1274; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1275; GCN-NEXT: s_waitcnt lgkmcnt(0) 1276; GCN-NEXT: s_bfe_u32 s3, s0, 0x80008 1277; GCN-NEXT: s_lshr_b32 s1, s0, 24 1278; GCN-NEXT: s_and_b32 s2, s0, 0xff 1279; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 1280; GCN-NEXT: s_lshl_b32 s3, s3, 8 1281; GCN-NEXT: s_or_b32 s2, s2, s3 1282; GCN-NEXT: s_lshl_b32 s0, s0, 16 1283; GCN-NEXT: s_or_b32 s0, s2, s0 1284; GCN-NEXT: s_lshl_b32 s1, s1, 24 1285; GCN-NEXT: s_or_b32 s0, s0, s1 1286; GCN-NEXT: s_lshr_b32 s0, s0, 24 1287; GCN-NEXT: ; return to shader part epilog 1288; 1289; GFX10-LABEL: extractelement_sgpr_v8i8_idx3: 1290; GFX10: ; %bb.0: 1291; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1292; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1293; GFX10-NEXT: s_bfe_u32 s2, s0, 0x80008 1294; GFX10-NEXT: s_and_b32 s1, s0, 0xff 1295; GFX10-NEXT: s_bfe_u32 s3, s0, 0x80010 1296; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1297; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1298; GFX10-NEXT: s_or_b32 s1, s1, s2 1299; GFX10-NEXT: s_lshr_b32 s0, s0, 24 1300; GFX10-NEXT: s_or_b32 s1, s1, s3 1301; GFX10-NEXT: s_lshl_b32 s0, s0, 24 1302; GFX10-NEXT: s_or_b32 s0, s1, s0 1303; GFX10-NEXT: s_lshr_b32 s0, s0, 24 1304; GFX10-NEXT: ; return to shader part epilog 1305 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1306 %element = extractelement <8 x i8> %vector, i32 3 1307 ret i8 %element 1308} 1309 1310define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx4(<8 x i8> addrspace(4)* inreg %ptr) { 1311; GCN-LABEL: extractelement_sgpr_v8i8_idx4: 1312; GCN: ; %bb.0: 1313; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1314; GCN-NEXT: s_waitcnt lgkmcnt(0) 1315; GCN-NEXT: s_bfe_u32 s3, s1, 0x80008 1316; GCN-NEXT: s_lshr_b32 s0, s1, 24 1317; GCN-NEXT: s_and_b32 s2, s1, 0xff 1318; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 1319; GCN-NEXT: s_lshl_b32 s3, s3, 8 1320; GCN-NEXT: s_or_b32 s2, s2, s3 1321; GCN-NEXT: s_lshl_b32 s1, s1, 16 1322; GCN-NEXT: s_or_b32 s1, s2, s1 1323; GCN-NEXT: s_lshl_b32 s0, s0, 24 1324; GCN-NEXT: s_or_b32 s0, s1, s0 1325; GCN-NEXT: ; return to shader part epilog 1326; 1327; GFX10-LABEL: extractelement_sgpr_v8i8_idx4: 1328; GFX10: ; %bb.0: 1329; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1330; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1331; GFX10-NEXT: s_bfe_u32 s2, s1, 0x80008 1332; GFX10-NEXT: s_and_b32 s0, s1, 0xff 1333; GFX10-NEXT: s_bfe_u32 s3, s1, 0x80010 1334; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1335; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1336; GFX10-NEXT: s_or_b32 s0, s0, s2 1337; GFX10-NEXT: s_lshr_b32 s1, s1, 24 1338; GFX10-NEXT: s_or_b32 s0, s0, s3 1339; GFX10-NEXT: s_lshl_b32 s1, s1, 24 1340; GFX10-NEXT: s_or_b32 s0, s0, s1 1341; GFX10-NEXT: ; return to shader part epilog 1342 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1343 %element = extractelement <8 x i8> %vector, i32 4 1344 ret i8 %element 1345} 1346 1347define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx5(<8 x i8> addrspace(4)* inreg %ptr) { 1348; GCN-LABEL: extractelement_sgpr_v8i8_idx5: 1349; GCN: ; %bb.0: 1350; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1351; GCN-NEXT: s_waitcnt lgkmcnt(0) 1352; GCN-NEXT: s_bfe_u32 s3, s1, 0x80008 1353; GCN-NEXT: s_lshr_b32 s0, s1, 24 1354; GCN-NEXT: s_and_b32 s2, s1, 0xff 1355; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 1356; GCN-NEXT: s_lshl_b32 s3, s3, 8 1357; GCN-NEXT: s_or_b32 s2, s2, s3 1358; GCN-NEXT: s_lshl_b32 s1, s1, 16 1359; GCN-NEXT: s_or_b32 s1, s2, s1 1360; GCN-NEXT: s_lshl_b32 s0, s0, 24 1361; GCN-NEXT: s_or_b32 s0, s1, s0 1362; GCN-NEXT: s_lshr_b32 s0, s0, 8 1363; GCN-NEXT: ; return to shader part epilog 1364; 1365; GFX10-LABEL: extractelement_sgpr_v8i8_idx5: 1366; GFX10: ; %bb.0: 1367; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1368; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1369; GFX10-NEXT: s_bfe_u32 s2, s1, 0x80008 1370; GFX10-NEXT: s_and_b32 s0, s1, 0xff 1371; GFX10-NEXT: s_bfe_u32 s3, s1, 0x80010 1372; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1373; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1374; GFX10-NEXT: s_or_b32 s0, s0, s2 1375; GFX10-NEXT: s_lshr_b32 s1, s1, 24 1376; GFX10-NEXT: s_or_b32 s0, s0, s3 1377; GFX10-NEXT: s_lshl_b32 s1, s1, 24 1378; GFX10-NEXT: s_or_b32 s0, s0, s1 1379; GFX10-NEXT: s_lshr_b32 s0, s0, 8 1380; GFX10-NEXT: ; return to shader part epilog 1381 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1382 %element = extractelement <8 x i8> %vector, i32 5 1383 ret i8 %element 1384} 1385 1386define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx6(<8 x i8> addrspace(4)* inreg %ptr) { 1387; GCN-LABEL: extractelement_sgpr_v8i8_idx6: 1388; GCN: ; %bb.0: 1389; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1390; GCN-NEXT: s_waitcnt lgkmcnt(0) 1391; GCN-NEXT: s_bfe_u32 s3, s1, 0x80008 1392; GCN-NEXT: s_lshr_b32 s0, s1, 24 1393; GCN-NEXT: s_and_b32 s2, s1, 0xff 1394; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 1395; GCN-NEXT: s_lshl_b32 s3, s3, 8 1396; GCN-NEXT: s_or_b32 s2, s2, s3 1397; GCN-NEXT: s_lshl_b32 s1, s1, 16 1398; GCN-NEXT: s_or_b32 s1, s2, s1 1399; GCN-NEXT: s_lshl_b32 s0, s0, 24 1400; GCN-NEXT: s_or_b32 s0, s1, s0 1401; GCN-NEXT: s_lshr_b32 s0, s0, 16 1402; GCN-NEXT: ; return to shader part epilog 1403; 1404; GFX10-LABEL: extractelement_sgpr_v8i8_idx6: 1405; GFX10: ; %bb.0: 1406; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1407; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1408; GFX10-NEXT: s_bfe_u32 s2, s1, 0x80008 1409; GFX10-NEXT: s_and_b32 s0, s1, 0xff 1410; GFX10-NEXT: s_bfe_u32 s3, s1, 0x80010 1411; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1412; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1413; GFX10-NEXT: s_or_b32 s0, s0, s2 1414; GFX10-NEXT: s_lshr_b32 s1, s1, 24 1415; GFX10-NEXT: s_or_b32 s0, s0, s3 1416; GFX10-NEXT: s_lshl_b32 s1, s1, 24 1417; GFX10-NEXT: s_or_b32 s0, s0, s1 1418; GFX10-NEXT: s_lshr_b32 s0, s0, 16 1419; GFX10-NEXT: ; return to shader part epilog 1420 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1421 %element = extractelement <8 x i8> %vector, i32 6 1422 ret i8 %element 1423} 1424 1425define amdgpu_ps i8 @extractelement_sgpr_v8i8_idx7(<8 x i8> addrspace(4)* inreg %ptr) { 1426; GCN-LABEL: extractelement_sgpr_v8i8_idx7: 1427; GCN: ; %bb.0: 1428; GCN-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1429; GCN-NEXT: s_waitcnt lgkmcnt(0) 1430; GCN-NEXT: s_bfe_u32 s3, s1, 0x80008 1431; GCN-NEXT: s_lshr_b32 s0, s1, 24 1432; GCN-NEXT: s_and_b32 s2, s1, 0xff 1433; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 1434; GCN-NEXT: s_lshl_b32 s3, s3, 8 1435; GCN-NEXT: s_or_b32 s2, s2, s3 1436; GCN-NEXT: s_lshl_b32 s1, s1, 16 1437; GCN-NEXT: s_or_b32 s1, s2, s1 1438; GCN-NEXT: s_lshl_b32 s0, s0, 24 1439; GCN-NEXT: s_or_b32 s0, s1, s0 1440; GCN-NEXT: s_lshr_b32 s0, s0, 24 1441; GCN-NEXT: ; return to shader part epilog 1442; 1443; GFX10-LABEL: extractelement_sgpr_v8i8_idx7: 1444; GFX10: ; %bb.0: 1445; GFX10-NEXT: s_load_dwordx2 s[0:1], s[2:3], 0x0 1446; GFX10-NEXT: s_waitcnt lgkmcnt(0) 1447; GFX10-NEXT: s_bfe_u32 s2, s1, 0x80008 1448; GFX10-NEXT: s_and_b32 s0, s1, 0xff 1449; GFX10-NEXT: s_bfe_u32 s3, s1, 0x80010 1450; GFX10-NEXT: s_lshl_b32 s2, s2, 8 1451; GFX10-NEXT: s_lshl_b32 s3, s3, 16 1452; GFX10-NEXT: s_or_b32 s0, s0, s2 1453; GFX10-NEXT: s_lshr_b32 s1, s1, 24 1454; GFX10-NEXT: s_or_b32 s0, s0, s3 1455; GFX10-NEXT: s_lshl_b32 s1, s1, 24 1456; GFX10-NEXT: s_or_b32 s0, s0, s1 1457; GFX10-NEXT: s_lshr_b32 s0, s0, 24 1458; GFX10-NEXT: ; return to shader part epilog 1459 %vector = load <8 x i8>, <8 x i8> addrspace(4)* %ptr 1460 %element = extractelement <8 x i8> %vector, i32 7 1461 ret i8 %element 1462} 1463 1464define i8 @extractelement_vgpr_v8i8_idx0(<8 x i8> addrspace(1)* %ptr) { 1465; GFX9-LABEL: extractelement_vgpr_v8i8_idx0: 1466; GFX9: ; %bb.0: 1467; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1468; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1469; GFX9-NEXT: v_mov_b32_e32 v2, 8 1470; GFX9-NEXT: s_waitcnt vmcnt(0) 1471; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 1472; GFX9-NEXT: v_mov_b32_e32 v3, 16 1473; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 1474; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1475; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1476; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 1477; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 1478; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 1479; GFX9-NEXT: s_setpc_b64 s[30:31] 1480; 1481; GFX8-LABEL: extractelement_vgpr_v8i8_idx0: 1482; GFX8: ; %bb.0: 1483; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1484; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1485; GFX8-NEXT: s_waitcnt vmcnt(0) 1486; GFX8-NEXT: v_mov_b32_e32 v1, 8 1487; GFX8-NEXT: v_mov_b32_e32 v2, 16 1488; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1489; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1490; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1491; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1492; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1493; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1494; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1495; GFX8-NEXT: s_setpc_b64 s[30:31] 1496; 1497; GFX7-LABEL: extractelement_vgpr_v8i8_idx0: 1498; GFX7: ; %bb.0: 1499; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1500; GFX7-NEXT: s_mov_b32 s6, 0 1501; GFX7-NEXT: s_mov_b32 s7, 0xf000 1502; GFX7-NEXT: s_mov_b64 s[4:5], 0 1503; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1504; GFX7-NEXT: s_waitcnt vmcnt(0) 1505; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 1506; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 1507; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 1508; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 1509; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1510; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 1511; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1512; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 1513; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 1514; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 1515; GFX7-NEXT: s_setpc_b64 s[30:31] 1516; 1517; GFX10-LABEL: extractelement_vgpr_v8i8_idx0: 1518; GFX10: ; %bb.0: 1519; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1520; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1521; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1522; GFX10-NEXT: s_waitcnt vmcnt(0) 1523; GFX10-NEXT: v_mov_b32_e32 v1, 8 1524; GFX10-NEXT: v_mov_b32_e32 v2, 16 1525; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1526; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1527; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1528; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 1529; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1530; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 1531; GFX10-NEXT: s_setpc_b64 s[30:31] 1532 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1533 %element = extractelement <8 x i8> %vector, i32 0 1534 ret i8 %element 1535} 1536 1537define i8 @extractelement_vgpr_v8i8_idx1(<8 x i8> addrspace(1)* %ptr) { 1538; GFX9-LABEL: extractelement_vgpr_v8i8_idx1: 1539; GFX9: ; %bb.0: 1540; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1541; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1542; GFX9-NEXT: s_mov_b32 s4, 8 1543; GFX9-NEXT: s_waitcnt vmcnt(0) 1544; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 1545; GFX9-NEXT: v_mov_b32_e32 v2, 16 1546; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1547; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1548; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1549; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v4 1550; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1551; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 1552; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1553; GFX9-NEXT: s_setpc_b64 s[30:31] 1554; 1555; GFX8-LABEL: extractelement_vgpr_v8i8_idx1: 1556; GFX8: ; %bb.0: 1557; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1558; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1559; GFX8-NEXT: s_waitcnt vmcnt(0) 1560; GFX8-NEXT: v_mov_b32_e32 v1, 8 1561; GFX8-NEXT: v_mov_b32_e32 v2, 16 1562; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1563; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1564; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1565; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1566; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1567; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1568; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1569; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1570; GFX8-NEXT: s_setpc_b64 s[30:31] 1571; 1572; GFX7-LABEL: extractelement_vgpr_v8i8_idx1: 1573; GFX7: ; %bb.0: 1574; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1575; GFX7-NEXT: s_mov_b32 s6, 0 1576; GFX7-NEXT: s_mov_b32 s7, 0xf000 1577; GFX7-NEXT: s_mov_b64 s[4:5], 0 1578; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1579; GFX7-NEXT: s_waitcnt vmcnt(0) 1580; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 1581; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 1582; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 1583; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 1584; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1585; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 1586; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1587; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 1588; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 1589; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 1590; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1591; GFX7-NEXT: s_setpc_b64 s[30:31] 1592; 1593; GFX10-LABEL: extractelement_vgpr_v8i8_idx1: 1594; GFX10: ; %bb.0: 1595; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1596; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1597; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1598; GFX10-NEXT: s_mov_b32 s4, 8 1599; GFX10-NEXT: s_waitcnt vmcnt(0) 1600; GFX10-NEXT: v_mov_b32_e32 v1, 16 1601; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1602; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1603; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1604; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v2 1605; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 1606; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 1607; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1608; GFX10-NEXT: s_setpc_b64 s[30:31] 1609 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1610 %element = extractelement <8 x i8> %vector, i32 1 1611 ret i8 %element 1612} 1613 1614define i8 @extractelement_vgpr_v8i8_idx2(<8 x i8> addrspace(1)* %ptr) { 1615; GFX9-LABEL: extractelement_vgpr_v8i8_idx2: 1616; GFX9: ; %bb.0: 1617; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1618; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1619; GFX9-NEXT: v_mov_b32_e32 v2, 8 1620; GFX9-NEXT: s_mov_b32 s4, 16 1621; GFX9-NEXT: s_waitcnt vmcnt(0) 1622; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 1623; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1624; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1625; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1626; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 1627; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1628; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 1629; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1630; GFX9-NEXT: s_setpc_b64 s[30:31] 1631; 1632; GFX8-LABEL: extractelement_vgpr_v8i8_idx2: 1633; GFX8: ; %bb.0: 1634; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1635; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1636; GFX8-NEXT: s_waitcnt vmcnt(0) 1637; GFX8-NEXT: v_mov_b32_e32 v1, 8 1638; GFX8-NEXT: v_mov_b32_e32 v2, 16 1639; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1640; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1641; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1642; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1643; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1644; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1645; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1646; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1647; GFX8-NEXT: s_setpc_b64 s[30:31] 1648; 1649; GFX7-LABEL: extractelement_vgpr_v8i8_idx2: 1650; GFX7: ; %bb.0: 1651; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1652; GFX7-NEXT: s_mov_b32 s6, 0 1653; GFX7-NEXT: s_mov_b32 s7, 0xf000 1654; GFX7-NEXT: s_mov_b64 s[4:5], 0 1655; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1656; GFX7-NEXT: s_waitcnt vmcnt(0) 1657; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 1658; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 1659; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 1660; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 1661; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1662; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 1663; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1664; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 1665; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 1666; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 1667; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1668; GFX7-NEXT: s_setpc_b64 s[30:31] 1669; 1670; GFX10-LABEL: extractelement_vgpr_v8i8_idx2: 1671; GFX10: ; %bb.0: 1672; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1673; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1674; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1675; GFX10-NEXT: s_waitcnt vmcnt(0) 1676; GFX10-NEXT: v_mov_b32_e32 v1, 8 1677; GFX10-NEXT: s_mov_b32 s4, 16 1678; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1679; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v0 1680; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1681; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 1682; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v2 1683; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 1684; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1685; GFX10-NEXT: s_setpc_b64 s[30:31] 1686 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1687 %element = extractelement <8 x i8> %vector, i32 2 1688 ret i8 %element 1689} 1690 1691define i8 @extractelement_vgpr_v8i8_idx3(<8 x i8> addrspace(1)* %ptr) { 1692; GFX9-LABEL: extractelement_vgpr_v8i8_idx3: 1693; GFX9: ; %bb.0: 1694; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1695; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1696; GFX9-NEXT: v_mov_b32_e32 v2, 8 1697; GFX9-NEXT: s_waitcnt vmcnt(0) 1698; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 1699; GFX9-NEXT: v_mov_b32_e32 v3, 16 1700; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 1701; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1702; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1703; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 1704; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 1705; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 1706; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 1707; GFX9-NEXT: s_setpc_b64 s[30:31] 1708; 1709; GFX8-LABEL: extractelement_vgpr_v8i8_idx3: 1710; GFX8: ; %bb.0: 1711; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1712; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1713; GFX8-NEXT: s_waitcnt vmcnt(0) 1714; GFX8-NEXT: v_mov_b32_e32 v1, 8 1715; GFX8-NEXT: v_mov_b32_e32 v2, 16 1716; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1717; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1718; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1719; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1720; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1721; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1722; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1723; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 1724; GFX8-NEXT: s_setpc_b64 s[30:31] 1725; 1726; GFX7-LABEL: extractelement_vgpr_v8i8_idx3: 1727; GFX7: ; %bb.0: 1728; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1729; GFX7-NEXT: s_mov_b32 s6, 0 1730; GFX7-NEXT: s_mov_b32 s7, 0xf000 1731; GFX7-NEXT: s_mov_b64 s[4:5], 0 1732; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1733; GFX7-NEXT: s_waitcnt vmcnt(0) 1734; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 1735; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 1736; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 1737; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 1738; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1739; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 1740; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1741; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 1742; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 1743; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 1744; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 1745; GFX7-NEXT: s_setpc_b64 s[30:31] 1746; 1747; GFX10-LABEL: extractelement_vgpr_v8i8_idx3: 1748; GFX10: ; %bb.0: 1749; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1750; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1751; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1752; GFX10-NEXT: s_waitcnt vmcnt(0) 1753; GFX10-NEXT: v_mov_b32_e32 v1, 8 1754; GFX10-NEXT: v_mov_b32_e32 v2, 16 1755; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1756; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 1757; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1758; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 1759; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1760; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 1761; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 1762; GFX10-NEXT: s_setpc_b64 s[30:31] 1763 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1764 %element = extractelement <8 x i8> %vector, i32 3 1765 ret i8 %element 1766} 1767 1768define i8 @extractelement_vgpr_v8i8_idx4(<8 x i8> addrspace(1)* %ptr) { 1769; GFX9-LABEL: extractelement_vgpr_v8i8_idx4: 1770; GFX9: ; %bb.0: 1771; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1772; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1773; GFX9-NEXT: v_mov_b32_e32 v2, 8 1774; GFX9-NEXT: s_waitcnt vmcnt(0) 1775; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 1776; GFX9-NEXT: v_mov_b32_e32 v3, 16 1777; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v1 1778; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1779; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1780; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v2 1781; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 1782; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 1783; GFX9-NEXT: s_setpc_b64 s[30:31] 1784; 1785; GFX8-LABEL: extractelement_vgpr_v8i8_idx4: 1786; GFX8: ; %bb.0: 1787; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1788; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1789; GFX8-NEXT: s_waitcnt vmcnt(0) 1790; GFX8-NEXT: v_mov_b32_e32 v0, 8 1791; GFX8-NEXT: v_mov_b32_e32 v2, 16 1792; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1793; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1794; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1795; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1796; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1797; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1798; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1799; GFX8-NEXT: s_setpc_b64 s[30:31] 1800; 1801; GFX7-LABEL: extractelement_vgpr_v8i8_idx4: 1802; GFX7: ; %bb.0: 1803; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1804; GFX7-NEXT: s_mov_b32 s6, 0 1805; GFX7-NEXT: s_mov_b32 s7, 0xf000 1806; GFX7-NEXT: s_mov_b64 s[4:5], 0 1807; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1808; GFX7-NEXT: s_waitcnt vmcnt(0) 1809; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 1810; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 1811; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 1812; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 1813; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1814; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 1815; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1816; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 1817; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 1818; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 1819; GFX7-NEXT: s_setpc_b64 s[30:31] 1820; 1821; GFX10-LABEL: extractelement_vgpr_v8i8_idx4: 1822; GFX10: ; %bb.0: 1823; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1824; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1825; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1826; GFX10-NEXT: s_waitcnt vmcnt(0) 1827; GFX10-NEXT: v_mov_b32_e32 v0, 8 1828; GFX10-NEXT: v_mov_b32_e32 v2, 16 1829; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1830; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1831; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1832; GFX10-NEXT: v_and_or_b32 v0, 0xff, v1, v0 1833; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1834; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 1835; GFX10-NEXT: s_setpc_b64 s[30:31] 1836 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1837 %element = extractelement <8 x i8> %vector, i32 4 1838 ret i8 %element 1839} 1840 1841define i8 @extractelement_vgpr_v8i8_idx5(<8 x i8> addrspace(1)* %ptr) { 1842; GFX9-LABEL: extractelement_vgpr_v8i8_idx5: 1843; GFX9: ; %bb.0: 1844; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1845; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1846; GFX9-NEXT: s_mov_b32 s4, 8 1847; GFX9-NEXT: s_waitcnt vmcnt(0) 1848; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 1849; GFX9-NEXT: v_mov_b32_e32 v2, 16 1850; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1851; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1852; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1853; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v4 1854; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1855; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 1856; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1857; GFX9-NEXT: s_setpc_b64 s[30:31] 1858; 1859; GFX8-LABEL: extractelement_vgpr_v8i8_idx5: 1860; GFX8: ; %bb.0: 1861; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1862; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1863; GFX8-NEXT: s_waitcnt vmcnt(0) 1864; GFX8-NEXT: v_mov_b32_e32 v0, 8 1865; GFX8-NEXT: v_mov_b32_e32 v2, 16 1866; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1867; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1868; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1869; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1870; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1871; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1872; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1873; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1874; GFX8-NEXT: s_setpc_b64 s[30:31] 1875; 1876; GFX7-LABEL: extractelement_vgpr_v8i8_idx5: 1877; GFX7: ; %bb.0: 1878; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1879; GFX7-NEXT: s_mov_b32 s6, 0 1880; GFX7-NEXT: s_mov_b32 s7, 0xf000 1881; GFX7-NEXT: s_mov_b64 s[4:5], 0 1882; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1883; GFX7-NEXT: s_waitcnt vmcnt(0) 1884; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 1885; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 1886; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 1887; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 1888; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1889; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 1890; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1891; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 1892; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 1893; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 1894; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1895; GFX7-NEXT: s_setpc_b64 s[30:31] 1896; 1897; GFX10-LABEL: extractelement_vgpr_v8i8_idx5: 1898; GFX10: ; %bb.0: 1899; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1900; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1901; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1902; GFX10-NEXT: s_mov_b32 s4, 8 1903; GFX10-NEXT: s_waitcnt vmcnt(0) 1904; GFX10-NEXT: v_mov_b32_e32 v0, 16 1905; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1906; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1907; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1908; GFX10-NEXT: v_and_or_b32 v1, 0xff, v1, v2 1909; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 1910; GFX10-NEXT: v_or3_b32 v0, v1, v0, v2 1911; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 1912; GFX10-NEXT: s_setpc_b64 s[30:31] 1913 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1914 %element = extractelement <8 x i8> %vector, i32 5 1915 ret i8 %element 1916} 1917 1918define i8 @extractelement_vgpr_v8i8_idx6(<8 x i8> addrspace(1)* %ptr) { 1919; GFX9-LABEL: extractelement_vgpr_v8i8_idx6: 1920; GFX9: ; %bb.0: 1921; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1922; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1923; GFX9-NEXT: v_mov_b32_e32 v2, 8 1924; GFX9-NEXT: s_mov_b32 s4, 16 1925; GFX9-NEXT: s_waitcnt vmcnt(0) 1926; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 1927; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1928; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1929; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1930; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v2 1931; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1932; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 1933; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1934; GFX9-NEXT: s_setpc_b64 s[30:31] 1935; 1936; GFX8-LABEL: extractelement_vgpr_v8i8_idx6: 1937; GFX8: ; %bb.0: 1938; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1939; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 1940; GFX8-NEXT: s_waitcnt vmcnt(0) 1941; GFX8-NEXT: v_mov_b32_e32 v0, 8 1942; GFX8-NEXT: v_mov_b32_e32 v2, 16 1943; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1944; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 1945; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1946; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 1947; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 1948; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 1949; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 1950; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1951; GFX8-NEXT: s_setpc_b64 s[30:31] 1952; 1953; GFX7-LABEL: extractelement_vgpr_v8i8_idx6: 1954; GFX7: ; %bb.0: 1955; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1956; GFX7-NEXT: s_mov_b32 s6, 0 1957; GFX7-NEXT: s_mov_b32 s7, 0xf000 1958; GFX7-NEXT: s_mov_b64 s[4:5], 0 1959; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 1960; GFX7-NEXT: s_waitcnt vmcnt(0) 1961; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 1962; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 1963; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 1964; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 1965; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 1966; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 1967; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 1968; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 1969; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 1970; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 1971; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1972; GFX7-NEXT: s_setpc_b64 s[30:31] 1973; 1974; GFX10-LABEL: extractelement_vgpr_v8i8_idx6: 1975; GFX10: ; %bb.0: 1976; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1977; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 1978; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 1979; GFX10-NEXT: s_waitcnt vmcnt(0) 1980; GFX10-NEXT: v_mov_b32_e32 v0, 8 1981; GFX10-NEXT: s_mov_b32 s4, 16 1982; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 1983; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v1 1984; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 1985; GFX10-NEXT: v_and_or_b32 v0, 0xff, v1, v0 1986; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v2 1987; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 1988; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 1989; GFX10-NEXT: s_setpc_b64 s[30:31] 1990 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 1991 %element = extractelement <8 x i8> %vector, i32 6 1992 ret i8 %element 1993} 1994 1995define i8 @extractelement_vgpr_v8i8_idx7(<8 x i8> addrspace(1)* %ptr) { 1996; GFX9-LABEL: extractelement_vgpr_v8i8_idx7: 1997; GFX9: ; %bb.0: 1998; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 1999; GFX9-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 2000; GFX9-NEXT: v_mov_b32_e32 v2, 8 2001; GFX9-NEXT: s_waitcnt vmcnt(0) 2002; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 2003; GFX9-NEXT: v_mov_b32_e32 v3, 16 2004; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v1 2005; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2006; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2007; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v2 2008; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 2009; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 2010; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 2011; GFX9-NEXT: s_setpc_b64 s[30:31] 2012; 2013; GFX8-LABEL: extractelement_vgpr_v8i8_idx7: 2014; GFX8: ; %bb.0: 2015; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2016; GFX8-NEXT: flat_load_dwordx2 v[0:1], v[0:1] 2017; GFX8-NEXT: s_waitcnt vmcnt(0) 2018; GFX8-NEXT: v_mov_b32_e32 v0, 8 2019; GFX8-NEXT: v_mov_b32_e32 v2, 16 2020; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2021; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 2022; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2023; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2024; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 2025; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2026; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 2027; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 2028; GFX8-NEXT: s_setpc_b64 s[30:31] 2029; 2030; GFX7-LABEL: extractelement_vgpr_v8i8_idx7: 2031; GFX7: ; %bb.0: 2032; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2033; GFX7-NEXT: s_mov_b32 s6, 0 2034; GFX7-NEXT: s_mov_b32 s7, 0xf000 2035; GFX7-NEXT: s_mov_b64 s[4:5], 0 2036; GFX7-NEXT: buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64 2037; GFX7-NEXT: s_waitcnt vmcnt(0) 2038; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 2039; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 2040; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 2041; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 2042; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 2043; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2044; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 2045; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 2046; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 2047; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 2048; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 2049; GFX7-NEXT: s_setpc_b64 s[30:31] 2050; 2051; GFX10-LABEL: extractelement_vgpr_v8i8_idx7: 2052; GFX10: ; %bb.0: 2053; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2054; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 2055; GFX10-NEXT: global_load_dwordx2 v[0:1], v[0:1], off 2056; GFX10-NEXT: s_waitcnt vmcnt(0) 2057; GFX10-NEXT: v_mov_b32_e32 v0, 8 2058; GFX10-NEXT: v_mov_b32_e32 v2, 16 2059; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2060; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v1 2061; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2062; GFX10-NEXT: v_and_or_b32 v0, 0xff, v1, v0 2063; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2064; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 2065; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 2066; GFX10-NEXT: s_setpc_b64 s[30:31] 2067 %vector = load <8 x i8>, <8 x i8> addrspace(1)* %ptr 2068 %element = extractelement <8 x i8> %vector, i32 7 2069 ret i8 %element 2070} 2071 2072define amdgpu_ps i8 @extractelement_sgpr_v16i8_sgpr_idx(<16 x i8> addrspace(4)* inreg %ptr, i32 inreg %idx) { 2073; GCN-LABEL: extractelement_sgpr_v16i8_sgpr_idx: 2074; GCN: ; %bb.0: 2075; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 2076; GCN-NEXT: s_waitcnt lgkmcnt(0) 2077; GCN-NEXT: s_bfe_u32 s10, s0, 0x80008 2078; GCN-NEXT: s_lshr_b32 s5, s0, 24 2079; GCN-NEXT: s_and_b32 s9, s0, 0xff 2080; GCN-NEXT: s_lshl_b32 s10, s10, 8 2081; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 2082; GCN-NEXT: s_or_b32 s9, s9, s10 2083; GCN-NEXT: s_lshl_b32 s0, s0, 16 2084; GCN-NEXT: s_or_b32 s0, s9, s0 2085; GCN-NEXT: s_lshl_b32 s5, s5, 24 2086; GCN-NEXT: s_bfe_u32 s9, s1, 0x80008 2087; GCN-NEXT: s_lshr_b32 s6, s1, 24 2088; GCN-NEXT: s_or_b32 s0, s0, s5 2089; GCN-NEXT: s_and_b32 s5, s1, 0xff 2090; GCN-NEXT: s_lshl_b32 s9, s9, 8 2091; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 2092; GCN-NEXT: s_or_b32 s5, s5, s9 2093; GCN-NEXT: s_lshl_b32 s1, s1, 16 2094; GCN-NEXT: s_or_b32 s1, s5, s1 2095; GCN-NEXT: s_lshl_b32 s5, s6, 24 2096; GCN-NEXT: s_bfe_u32 s6, s2, 0x80008 2097; GCN-NEXT: s_lshr_b32 s7, s2, 24 2098; GCN-NEXT: s_or_b32 s1, s1, s5 2099; GCN-NEXT: s_and_b32 s5, s2, 0xff 2100; GCN-NEXT: s_lshl_b32 s6, s6, 8 2101; GCN-NEXT: s_bfe_u32 s2, s2, 0x80010 2102; GCN-NEXT: s_or_b32 s5, s5, s6 2103; GCN-NEXT: s_lshl_b32 s2, s2, 16 2104; GCN-NEXT: s_or_b32 s2, s5, s2 2105; GCN-NEXT: s_lshl_b32 s5, s7, 24 2106; GCN-NEXT: s_bfe_u32 s6, s3, 0x80008 2107; GCN-NEXT: s_lshr_b32 s8, s3, 24 2108; GCN-NEXT: s_or_b32 s2, s2, s5 2109; GCN-NEXT: s_and_b32 s5, s3, 0xff 2110; GCN-NEXT: s_lshl_b32 s6, s6, 8 2111; GCN-NEXT: s_bfe_u32 s3, s3, 0x80010 2112; GCN-NEXT: s_or_b32 s5, s5, s6 2113; GCN-NEXT: s_lshl_b32 s3, s3, 16 2114; GCN-NEXT: s_or_b32 s3, s5, s3 2115; GCN-NEXT: s_lshl_b32 s5, s8, 24 2116; GCN-NEXT: s_or_b32 s3, s3, s5 2117; GCN-NEXT: s_lshr_b32 s5, s4, 2 2118; GCN-NEXT: s_cmp_eq_u32 s5, 1 2119; GCN-NEXT: s_cselect_b32 s0, s1, s0 2120; GCN-NEXT: s_cmp_eq_u32 s5, 2 2121; GCN-NEXT: s_cselect_b32 s0, s2, s0 2122; GCN-NEXT: s_cmp_eq_u32 s5, 3 2123; GCN-NEXT: s_cselect_b32 s0, s3, s0 2124; GCN-NEXT: s_and_b32 s1, s4, 3 2125; GCN-NEXT: s_lshl_b32 s1, s1, 3 2126; GCN-NEXT: s_lshr_b32 s0, s0, s1 2127; GCN-NEXT: ; return to shader part epilog 2128; 2129; GFX10-LABEL: extractelement_sgpr_v16i8_sgpr_idx: 2130; GFX10: ; %bb.0: 2131; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 2132; GFX10-NEXT: s_waitcnt lgkmcnt(0) 2133; GFX10-NEXT: s_bfe_u32 s10, s0, 0x80008 2134; GFX10-NEXT: s_bfe_u32 s12, s1, 0x80008 2135; GFX10-NEXT: s_lshr_b32 s6, s1, 24 2136; GFX10-NEXT: s_and_b32 s9, s0, 0xff 2137; GFX10-NEXT: s_and_b32 s11, s1, 0xff 2138; GFX10-NEXT: s_bfe_u32 s1, s1, 0x80010 2139; GFX10-NEXT: s_lshl_b32 s10, s10, 8 2140; GFX10-NEXT: s_lshl_b32 s12, s12, 8 2141; GFX10-NEXT: s_lshr_b32 s5, s0, 24 2142; GFX10-NEXT: s_bfe_u32 s0, s0, 0x80010 2143; GFX10-NEXT: s_lshl_b32 s1, s1, 16 2144; GFX10-NEXT: s_or_b32 s9, s9, s10 2145; GFX10-NEXT: s_or_b32 s10, s11, s12 2146; GFX10-NEXT: s_bfe_u32 s14, s2, 0x80008 2147; GFX10-NEXT: s_lshl_b32 s0, s0, 16 2148; GFX10-NEXT: s_lshl_b32 s6, s6, 24 2149; GFX10-NEXT: s_or_b32 s1, s10, s1 2150; GFX10-NEXT: s_lshr_b32 s7, s2, 24 2151; GFX10-NEXT: s_and_b32 s13, s2, 0xff 2152; GFX10-NEXT: s_bfe_u32 s2, s2, 0x80010 2153; GFX10-NEXT: s_lshl_b32 s5, s5, 24 2154; GFX10-NEXT: s_lshl_b32 s14, s14, 8 2155; GFX10-NEXT: s_or_b32 s0, s9, s0 2156; GFX10-NEXT: s_or_b32 s1, s1, s6 2157; GFX10-NEXT: s_bfe_u32 s6, s3, 0x80008 2158; GFX10-NEXT: s_lshr_b32 s8, s3, 24 2159; GFX10-NEXT: s_lshl_b32 s2, s2, 16 2160; GFX10-NEXT: s_or_b32 s11, s13, s14 2161; GFX10-NEXT: s_or_b32 s0, s0, s5 2162; GFX10-NEXT: s_lshl_b32 s5, s7, 24 2163; GFX10-NEXT: s_and_b32 s7, s3, 0xff 2164; GFX10-NEXT: s_lshl_b32 s6, s6, 8 2165; GFX10-NEXT: s_bfe_u32 s3, s3, 0x80010 2166; GFX10-NEXT: s_or_b32 s2, s11, s2 2167; GFX10-NEXT: s_or_b32 s6, s7, s6 2168; GFX10-NEXT: s_lshl_b32 s3, s3, 16 2169; GFX10-NEXT: s_or_b32 s2, s2, s5 2170; GFX10-NEXT: s_or_b32 s3, s6, s3 2171; GFX10-NEXT: s_lshl_b32 s5, s8, 24 2172; GFX10-NEXT: s_lshr_b32 s6, s4, 2 2173; GFX10-NEXT: s_or_b32 s3, s3, s5 2174; GFX10-NEXT: s_cmp_eq_u32 s6, 1 2175; GFX10-NEXT: s_cselect_b32 s0, s1, s0 2176; GFX10-NEXT: s_cmp_eq_u32 s6, 2 2177; GFX10-NEXT: s_cselect_b32 s0, s2, s0 2178; GFX10-NEXT: s_cmp_eq_u32 s6, 3 2179; GFX10-NEXT: s_cselect_b32 s0, s3, s0 2180; GFX10-NEXT: s_and_b32 s1, s4, 3 2181; GFX10-NEXT: s_lshl_b32 s1, s1, 3 2182; GFX10-NEXT: s_lshr_b32 s0, s0, s1 2183; GFX10-NEXT: ; return to shader part epilog 2184 %vector = load <16 x i8>, <16 x i8> addrspace(4)* %ptr 2185 %element = extractelement <16 x i8> %vector, i32 %idx 2186 ret i8 %element 2187} 2188 2189define amdgpu_ps i8 @extractelement_vgpr_v16i8_sgpr_idx(<16 x i8> addrspace(1)* %ptr, i32 inreg %idx) { 2190; GFX9-LABEL: extractelement_vgpr_v16i8_sgpr_idx: 2191; GFX9: ; %bb.0: 2192; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2193; GFX9-NEXT: s_mov_b32 s0, 8 2194; GFX9-NEXT: s_mov_b32 s1, 16 2195; GFX9-NEXT: s_movk_i32 s3, 0xff 2196; GFX9-NEXT: v_mov_b32_e32 v5, 8 2197; GFX9-NEXT: v_mov_b32_e32 v4, 0xff 2198; GFX9-NEXT: v_mov_b32_e32 v6, 16 2199; GFX9-NEXT: s_lshr_b32 s4, s2, 2 2200; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 1 2201; GFX9-NEXT: s_and_b32 s2, s2, 3 2202; GFX9-NEXT: s_waitcnt vmcnt(0) 2203; GFX9-NEXT: v_lshrrev_b32_e32 v7, 24, v0 2204; GFX9-NEXT: v_lshrrev_b32_e32 v8, 24, v1 2205; GFX9-NEXT: v_lshlrev_b32_sdwa v11, s0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2206; GFX9-NEXT: v_lshlrev_b32_sdwa v13, s0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2207; GFX9-NEXT: v_lshrrev_b32_e32 v9, 24, v2 2208; GFX9-NEXT: v_lshlrev_b32_sdwa v12, s1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2209; GFX9-NEXT: v_lshlrev_b32_sdwa v14, s1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2210; GFX9-NEXT: v_lshlrev_b32_sdwa v15, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2211; GFX9-NEXT: v_and_or_b32 v0, v0, s3, v11 2212; GFX9-NEXT: v_lshlrev_b32_e32 v7, 24, v7 2213; GFX9-NEXT: v_and_or_b32 v1, v1, s3, v13 2214; GFX9-NEXT: v_lshlrev_b32_e32 v8, 24, v8 2215; GFX9-NEXT: v_lshrrev_b32_e32 v10, 24, v3 2216; GFX9-NEXT: v_lshlrev_b32_sdwa v16, v6, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2217; GFX9-NEXT: v_lshlrev_b32_sdwa v5, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2218; GFX9-NEXT: v_and_or_b32 v2, v2, v4, v15 2219; GFX9-NEXT: v_lshlrev_b32_e32 v9, 24, v9 2220; GFX9-NEXT: v_or3_b32 v0, v0, v12, v7 2221; GFX9-NEXT: v_or3_b32 v1, v1, v14, v8 2222; GFX9-NEXT: v_lshlrev_b32_sdwa v6, v6, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2223; GFX9-NEXT: v_and_or_b32 v3, v3, v4, v5 2224; GFX9-NEXT: v_lshlrev_b32_e32 v4, 24, v10 2225; GFX9-NEXT: v_or3_b32 v2, v2, v16, v9 2226; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 2227; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 2 2228; GFX9-NEXT: v_or3_b32 v3, v3, v6, v4 2229; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 2230; GFX9-NEXT: v_cmp_eq_u32_e64 vcc, s4, 3 2231; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 2232; GFX9-NEXT: s_lshl_b32 s0, s2, 3 2233; GFX9-NEXT: v_lshrrev_b32_e32 v0, s0, v0 2234; GFX9-NEXT: v_readfirstlane_b32 s0, v0 2235; GFX9-NEXT: ; return to shader part epilog 2236; 2237; GFX8-LABEL: extractelement_vgpr_v16i8_sgpr_idx: 2238; GFX8: ; %bb.0: 2239; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 2240; GFX8-NEXT: v_mov_b32_e32 v4, 8 2241; GFX8-NEXT: v_mov_b32_e32 v5, 16 2242; GFX8-NEXT: v_mov_b32_e32 v6, 8 2243; GFX8-NEXT: v_mov_b32_e32 v7, 16 2244; GFX8-NEXT: s_lshr_b32 s0, s2, 2 2245; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 2246; GFX8-NEXT: s_and_b32 s1, s2, 3 2247; GFX8-NEXT: s_waitcnt vmcnt(0) 2248; GFX8-NEXT: v_lshlrev_b32_sdwa v12, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2249; GFX8-NEXT: v_lshlrev_b32_sdwa v4, v4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2250; GFX8-NEXT: v_lshrrev_b32_e32 v8, 24, v0 2251; GFX8-NEXT: v_lshrrev_b32_e32 v9, 24, v1 2252; GFX8-NEXT: v_lshlrev_b32_sdwa v13, v5, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2253; GFX8-NEXT: v_lshlrev_b32_sdwa v5, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2254; GFX8-NEXT: v_lshlrev_b32_sdwa v14, v6, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2255; GFX8-NEXT: v_or_b32_sdwa v0, v0, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2256; GFX8-NEXT: v_or_b32_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2257; GFX8-NEXT: v_lshrrev_b32_e32 v10, 24, v2 2258; GFX8-NEXT: v_lshlrev_b32_sdwa v15, v7, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2259; GFX8-NEXT: v_lshlrev_b32_sdwa v6, v6, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2260; GFX8-NEXT: v_lshlrev_b32_e32 v8, 24, v8 2261; GFX8-NEXT: v_lshlrev_b32_e32 v4, 24, v9 2262; GFX8-NEXT: v_or_b32_sdwa v2, v2, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2263; GFX8-NEXT: v_or_b32_e32 v0, v0, v13 2264; GFX8-NEXT: v_or_b32_e32 v1, v1, v5 2265; GFX8-NEXT: v_lshrrev_b32_e32 v11, 24, v3 2266; GFX8-NEXT: v_lshlrev_b32_sdwa v7, v7, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2267; GFX8-NEXT: v_lshlrev_b32_e32 v9, 24, v10 2268; GFX8-NEXT: v_or_b32_sdwa v3, v3, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2269; GFX8-NEXT: v_or_b32_e32 v2, v2, v15 2270; GFX8-NEXT: v_or_b32_e32 v0, v0, v8 2271; GFX8-NEXT: v_or_b32_e32 v1, v1, v4 2272; GFX8-NEXT: v_lshlrev_b32_e32 v6, 24, v11 2273; GFX8-NEXT: v_or_b32_e32 v3, v3, v7 2274; GFX8-NEXT: v_or_b32_e32 v2, v2, v9 2275; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 2276; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 2277; GFX8-NEXT: v_or_b32_e32 v3, v3, v6 2278; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 2279; GFX8-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 2280; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 2281; GFX8-NEXT: s_lshl_b32 s0, s1, 3 2282; GFX8-NEXT: v_lshrrev_b32_e32 v0, s0, v0 2283; GFX8-NEXT: v_readfirstlane_b32 s0, v0 2284; GFX8-NEXT: ; return to shader part epilog 2285; 2286; GFX7-LABEL: extractelement_vgpr_v16i8_sgpr_idx: 2287; GFX7: ; %bb.0: 2288; GFX7-NEXT: s_mov_b32 s6, 0 2289; GFX7-NEXT: s_mov_b32 s7, 0xf000 2290; GFX7-NEXT: s_mov_b64 s[4:5], 0 2291; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 2292; GFX7-NEXT: s_lshr_b32 s0, s2, 2 2293; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 1 2294; GFX7-NEXT: s_and_b32 s1, s2, 3 2295; GFX7-NEXT: s_waitcnt vmcnt(0) 2296; GFX7-NEXT: v_bfe_u32 v9, v0, 8, 8 2297; GFX7-NEXT: v_bfe_u32 v11, v1, 8, 8 2298; GFX7-NEXT: v_lshrrev_b32_e32 v4, 24, v0 2299; GFX7-NEXT: v_lshrrev_b32_e32 v5, 24, v1 2300; GFX7-NEXT: v_and_b32_e32 v8, 0xff, v0 2301; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 2302; GFX7-NEXT: v_and_b32_e32 v10, 0xff, v1 2303; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 2304; GFX7-NEXT: v_bfe_u32 v13, v2, 8, 8 2305; GFX7-NEXT: v_lshlrev_b32_e32 v9, 8, v9 2306; GFX7-NEXT: v_lshlrev_b32_e32 v11, 8, v11 2307; GFX7-NEXT: v_lshrrev_b32_e32 v6, 24, v2 2308; GFX7-NEXT: v_and_b32_e32 v12, 0xff, v2 2309; GFX7-NEXT: v_bfe_u32 v2, v2, 16, 8 2310; GFX7-NEXT: v_bfe_u32 v15, v3, 8, 8 2311; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 2312; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 2313; GFX7-NEXT: v_lshlrev_b32_e32 v13, 8, v13 2314; GFX7-NEXT: v_or_b32_e32 v8, v8, v9 2315; GFX7-NEXT: v_or_b32_e32 v9, v10, v11 2316; GFX7-NEXT: v_lshrrev_b32_e32 v7, 24, v3 2317; GFX7-NEXT: v_and_b32_e32 v14, 0xff, v3 2318; GFX7-NEXT: v_bfe_u32 v3, v3, 16, 8 2319; GFX7-NEXT: v_lshlrev_b32_e32 v4, 24, v4 2320; GFX7-NEXT: v_lshlrev_b32_e32 v5, 24, v5 2321; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 2322; GFX7-NEXT: v_lshlrev_b32_e32 v15, 8, v15 2323; GFX7-NEXT: v_or_b32_e32 v10, v12, v13 2324; GFX7-NEXT: v_or_b32_e32 v0, v8, v0 2325; GFX7-NEXT: v_or_b32_e32 v1, v9, v1 2326; GFX7-NEXT: v_lshlrev_b32_e32 v6, 24, v6 2327; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 2328; GFX7-NEXT: v_or_b32_e32 v11, v14, v15 2329; GFX7-NEXT: v_or_b32_e32 v2, v10, v2 2330; GFX7-NEXT: v_or_b32_e32 v0, v0, v4 2331; GFX7-NEXT: v_or_b32_e32 v1, v1, v5 2332; GFX7-NEXT: v_lshlrev_b32_e32 v7, 24, v7 2333; GFX7-NEXT: v_or_b32_e32 v3, v11, v3 2334; GFX7-NEXT: v_or_b32_e32 v2, v2, v6 2335; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 2336; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 2 2337; GFX7-NEXT: v_or_b32_e32 v3, v3, v7 2338; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc 2339; GFX7-NEXT: v_cmp_eq_u32_e64 vcc, s0, 3 2340; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 2341; GFX7-NEXT: s_lshl_b32 s0, s1, 3 2342; GFX7-NEXT: v_lshrrev_b32_e32 v0, s0, v0 2343; GFX7-NEXT: v_readfirstlane_b32 s0, v0 2344; GFX7-NEXT: ; return to shader part epilog 2345; 2346; GFX10-LABEL: extractelement_vgpr_v16i8_sgpr_idx: 2347; GFX10: ; %bb.0: 2348; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2349; GFX10-NEXT: s_mov_b32 s0, 8 2350; GFX10-NEXT: v_mov_b32_e32 v4, 8 2351; GFX10-NEXT: s_mov_b32 s1, 16 2352; GFX10-NEXT: v_mov_b32_e32 v5, 16 2353; GFX10-NEXT: s_waitcnt vmcnt(0) 2354; GFX10-NEXT: v_lshrrev_b32_e32 v6, 24, v0 2355; GFX10-NEXT: v_lshrrev_b32_e32 v7, 24, v1 2356; GFX10-NEXT: v_lshlrev_b32_sdwa v9, s0, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2357; GFX10-NEXT: v_lshlrev_b32_sdwa v11, s0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2358; GFX10-NEXT: v_lshrrev_b32_e32 v8, 24, v2 2359; GFX10-NEXT: v_lshlrev_b32_sdwa v10, s1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2360; GFX10-NEXT: v_lshlrev_b32_sdwa v12, s1, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2361; GFX10-NEXT: v_lshlrev_b32_sdwa v13, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2362; GFX10-NEXT: v_and_or_b32 v0, v0, 0xff, v9 2363; GFX10-NEXT: v_lshlrev_b32_e32 v6, 24, v6 2364; GFX10-NEXT: v_and_or_b32 v1, v1, 0xff, v11 2365; GFX10-NEXT: v_lshlrev_b32_e32 v7, 24, v7 2366; GFX10-NEXT: s_lshr_b32 s0, s2, 2 2367; GFX10-NEXT: v_lshlrev_b32_sdwa v14, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2368; GFX10-NEXT: v_and_or_b32 v2, 0xff, v2, v13 2369; GFX10-NEXT: v_lshlrev_b32_e32 v8, 24, v8 2370; GFX10-NEXT: v_lshlrev_b32_sdwa v4, v4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2371; GFX10-NEXT: v_lshrrev_b32_e32 v9, 24, v3 2372; GFX10-NEXT: v_or3_b32 v0, v0, v10, v6 2373; GFX10-NEXT: v_or3_b32 v1, v1, v12, v7 2374; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 1 2375; GFX10-NEXT: v_or3_b32 v2, v2, v14, v8 2376; GFX10-NEXT: v_and_or_b32 v4, 0xff, v3, v4 2377; GFX10-NEXT: v_lshlrev_b32_sdwa v3, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2378; GFX10-NEXT: v_lshlrev_b32_e32 v5, 24, v9 2379; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2380; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 2 2381; GFX10-NEXT: v_or3_b32 v1, v4, v3, v5 2382; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v2, vcc_lo 2383; GFX10-NEXT: v_cmp_eq_u32_e64 vcc_lo, s0, 3 2384; GFX10-NEXT: s_and_b32 s0, s2, 3 2385; GFX10-NEXT: s_lshl_b32 s0, s0, 3 2386; GFX10-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc_lo 2387; GFX10-NEXT: v_lshrrev_b32_e32 v0, s0, v0 2388; GFX10-NEXT: v_readfirstlane_b32 s0, v0 2389; GFX10-NEXT: ; return to shader part epilog 2390 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 2391 %element = extractelement <16 x i8> %vector, i32 %idx 2392 ret i8 %element 2393} 2394 2395define i8 @extractelement_vgpr_v16i8_vgpr_idx(<16 x i8> addrspace(1)* %ptr, i32 %idx) { 2396; GFX9-LABEL: extractelement_vgpr_v16i8_vgpr_idx: 2397; GFX9: ; %bb.0: 2398; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2399; GFX9-NEXT: global_load_dwordx4 v[3:6], v[0:1], off 2400; GFX9-NEXT: s_mov_b32 s4, 8 2401; GFX9-NEXT: s_mov_b32 s5, 16 2402; GFX9-NEXT: s_movk_i32 s6, 0xff 2403; GFX9-NEXT: v_mov_b32_e32 v1, 8 2404; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 2405; GFX9-NEXT: v_mov_b32_e32 v7, 16 2406; GFX9-NEXT: v_lshrrev_b32_e32 v8, 2, v2 2407; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v8 2408; GFX9-NEXT: v_and_b32_e32 v2, 3, v2 2409; GFX9-NEXT: s_waitcnt vmcnt(0) 2410; GFX9-NEXT: v_lshrrev_b32_e32 v9, 24, v3 2411; GFX9-NEXT: v_lshrrev_b32_e32 v10, 24, v4 2412; GFX9-NEXT: v_lshlrev_b32_sdwa v13, s4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2413; GFX9-NEXT: v_lshlrev_b32_sdwa v15, s4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2414; GFX9-NEXT: v_lshrrev_b32_e32 v11, 24, v5 2415; GFX9-NEXT: v_lshrrev_b32_e32 v12, 24, v6 2416; GFX9-NEXT: v_lshlrev_b32_sdwa v14, s5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2417; GFX9-NEXT: v_lshlrev_b32_sdwa v16, s5, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2418; GFX9-NEXT: v_lshlrev_b32_sdwa v17, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2419; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2420; GFX9-NEXT: v_and_or_b32 v3, v3, s6, v13 2421; GFX9-NEXT: v_lshlrev_b32_e32 v9, 24, v9 2422; GFX9-NEXT: v_and_or_b32 v4, v4, s6, v15 2423; GFX9-NEXT: v_lshlrev_b32_e32 v10, 24, v10 2424; GFX9-NEXT: v_lshlrev_b32_sdwa v18, v7, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2425; GFX9-NEXT: v_lshlrev_b32_sdwa v7, v7, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2426; GFX9-NEXT: v_and_or_b32 v5, v5, v0, v17 2427; GFX9-NEXT: v_lshlrev_b32_e32 v11, 24, v11 2428; GFX9-NEXT: v_and_or_b32 v0, v6, v0, v1 2429; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v12 2430; GFX9-NEXT: v_or3_b32 v3, v3, v14, v9 2431; GFX9-NEXT: v_or3_b32 v4, v4, v16, v10 2432; GFX9-NEXT: v_or3_b32 v5, v5, v18, v11 2433; GFX9-NEXT: v_or3_b32 v0, v0, v7, v1 2434; GFX9-NEXT: v_cndmask_b32_e32 v1, v3, v4, vcc 2435; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 2, v8 2436; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v5, vcc 2437; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 3, v8 2438; GFX9-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc 2439; GFX9-NEXT: v_lshlrev_b32_e32 v1, 3, v2 2440; GFX9-NEXT: v_lshrrev_b32_e32 v0, v1, v0 2441; GFX9-NEXT: s_setpc_b64 s[30:31] 2442; 2443; GFX8-LABEL: extractelement_vgpr_v16i8_vgpr_idx: 2444; GFX8: ; %bb.0: 2445; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2446; GFX8-NEXT: flat_load_dwordx4 v[3:6], v[0:1] 2447; GFX8-NEXT: v_mov_b32_e32 v0, 8 2448; GFX8-NEXT: v_mov_b32_e32 v1, 16 2449; GFX8-NEXT: v_mov_b32_e32 v7, 8 2450; GFX8-NEXT: v_mov_b32_e32 v8, 16 2451; GFX8-NEXT: v_lshrrev_b32_e32 v9, 2, v2 2452; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v9 2453; GFX8-NEXT: v_and_b32_e32 v2, 3, v2 2454; GFX8-NEXT: s_waitcnt vmcnt(0) 2455; GFX8-NEXT: v_lshlrev_b32_sdwa v14, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2456; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2457; GFX8-NEXT: v_lshrrev_b32_e32 v10, 24, v3 2458; GFX8-NEXT: v_lshrrev_b32_e32 v11, 24, v4 2459; GFX8-NEXT: v_lshlrev_b32_sdwa v15, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2460; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2461; GFX8-NEXT: v_lshlrev_b32_sdwa v16, v7, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2462; GFX8-NEXT: v_or_b32_sdwa v3, v3, v14 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2463; GFX8-NEXT: v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2464; GFX8-NEXT: v_lshrrev_b32_e32 v12, 24, v5 2465; GFX8-NEXT: v_lshlrev_b32_sdwa v17, v8, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2466; GFX8-NEXT: v_lshlrev_b32_sdwa v7, v7, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2467; GFX8-NEXT: v_lshlrev_b32_e32 v10, 24, v10 2468; GFX8-NEXT: v_lshlrev_b32_e32 v4, 24, v11 2469; GFX8-NEXT: v_or_b32_sdwa v5, v5, v16 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2470; GFX8-NEXT: v_or_b32_e32 v3, v3, v15 2471; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 2472; GFX8-NEXT: v_lshrrev_b32_e32 v13, 24, v6 2473; GFX8-NEXT: v_lshlrev_b32_sdwa v8, v8, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2474; GFX8-NEXT: v_lshlrev_b32_e32 v11, 24, v12 2475; GFX8-NEXT: v_or_b32_sdwa v6, v6, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2476; GFX8-NEXT: v_or_b32_e32 v1, v5, v17 2477; GFX8-NEXT: v_or_b32_e32 v3, v3, v10 2478; GFX8-NEXT: v_or_b32_e32 v0, v0, v4 2479; GFX8-NEXT: v_lshlrev_b32_e32 v7, 24, v13 2480; GFX8-NEXT: v_or_b32_e32 v5, v6, v8 2481; GFX8-NEXT: v_or_b32_e32 v1, v1, v11 2482; GFX8-NEXT: v_cndmask_b32_e32 v0, v3, v0, vcc 2483; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 2, v9 2484; GFX8-NEXT: v_or_b32_e32 v4, v5, v7 2485; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 2486; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 3, v9 2487; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc 2488; GFX8-NEXT: v_lshlrev_b32_e32 v1, 3, v2 2489; GFX8-NEXT: v_lshrrev_b32_e32 v0, v1, v0 2490; GFX8-NEXT: s_setpc_b64 s[30:31] 2491; 2492; GFX7-LABEL: extractelement_vgpr_v16i8_vgpr_idx: 2493; GFX7: ; %bb.0: 2494; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2495; GFX7-NEXT: s_mov_b32 s6, 0 2496; GFX7-NEXT: s_mov_b32 s7, 0xf000 2497; GFX7-NEXT: s_mov_b64 s[4:5], 0 2498; GFX7-NEXT: buffer_load_dwordx4 v[3:6], v[0:1], s[4:7], 0 addr64 2499; GFX7-NEXT: v_lshrrev_b32_e32 v17, 2, v2 2500; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v17 2501; GFX7-NEXT: v_and_b32_e32 v2, 3, v2 2502; GFX7-NEXT: s_waitcnt vmcnt(0) 2503; GFX7-NEXT: v_bfe_u32 v10, v3, 8, 8 2504; GFX7-NEXT: v_bfe_u32 v12, v4, 8, 8 2505; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v3 2506; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v4 2507; GFX7-NEXT: v_and_b32_e32 v9, 0xff, v3 2508; GFX7-NEXT: v_bfe_u32 v3, v3, 16, 8 2509; GFX7-NEXT: v_and_b32_e32 v11, 0xff, v4 2510; GFX7-NEXT: v_bfe_u32 v4, v4, 16, 8 2511; GFX7-NEXT: v_bfe_u32 v14, v5, 8, 8 2512; GFX7-NEXT: v_lshlrev_b32_e32 v10, 8, v10 2513; GFX7-NEXT: v_lshlrev_b32_e32 v12, 8, v12 2514; GFX7-NEXT: v_lshrrev_b32_e32 v7, 24, v5 2515; GFX7-NEXT: v_and_b32_e32 v13, 0xff, v5 2516; GFX7-NEXT: v_bfe_u32 v5, v5, 16, 8 2517; GFX7-NEXT: v_bfe_u32 v16, v6, 8, 8 2518; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 2519; GFX7-NEXT: v_lshlrev_b32_e32 v4, 16, v4 2520; GFX7-NEXT: v_lshlrev_b32_e32 v14, 8, v14 2521; GFX7-NEXT: v_or_b32_e32 v9, v9, v10 2522; GFX7-NEXT: v_or_b32_e32 v10, v11, v12 2523; GFX7-NEXT: v_lshrrev_b32_e32 v8, 24, v6 2524; GFX7-NEXT: v_and_b32_e32 v15, 0xff, v6 2525; GFX7-NEXT: v_bfe_u32 v6, v6, 16, 8 2526; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 2527; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 2528; GFX7-NEXT: v_lshlrev_b32_e32 v5, 16, v5 2529; GFX7-NEXT: v_lshlrev_b32_e32 v16, 8, v16 2530; GFX7-NEXT: v_or_b32_e32 v11, v13, v14 2531; GFX7-NEXT: v_or_b32_e32 v3, v9, v3 2532; GFX7-NEXT: v_or_b32_e32 v4, v10, v4 2533; GFX7-NEXT: v_lshlrev_b32_e32 v7, 24, v7 2534; GFX7-NEXT: v_lshlrev_b32_e32 v6, 16, v6 2535; GFX7-NEXT: v_or_b32_e32 v12, v15, v16 2536; GFX7-NEXT: v_or_b32_e32 v5, v11, v5 2537; GFX7-NEXT: v_or_b32_e32 v0, v3, v0 2538; GFX7-NEXT: v_or_b32_e32 v1, v4, v1 2539; GFX7-NEXT: v_lshlrev_b32_e32 v8, 24, v8 2540; GFX7-NEXT: v_or_b32_e32 v6, v12, v6 2541; GFX7-NEXT: v_or_b32_e32 v3, v5, v7 2542; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v1, vcc 2543; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 2, v17 2544; GFX7-NEXT: v_or_b32_e32 v4, v6, v8 2545; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v3, vcc 2546; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 3, v17 2547; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v4, vcc 2548; GFX7-NEXT: v_lshlrev_b32_e32 v1, 3, v2 2549; GFX7-NEXT: v_lshrrev_b32_e32 v0, v1, v0 2550; GFX7-NEXT: s_setpc_b64 s[30:31] 2551; 2552; GFX10-LABEL: extractelement_vgpr_v16i8_vgpr_idx: 2553; GFX10: ; %bb.0: 2554; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2555; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 2556; GFX10-NEXT: global_load_dwordx4 v[3:6], v[0:1], off 2557; GFX10-NEXT: s_mov_b32 s4, 8 2558; GFX10-NEXT: v_mov_b32_e32 v0, 8 2559; GFX10-NEXT: s_mov_b32 s5, 16 2560; GFX10-NEXT: v_mov_b32_e32 v1, 16 2561; GFX10-NEXT: v_lshrrev_b32_e32 v7, 2, v2 2562; GFX10-NEXT: v_and_b32_e32 v2, 3, v2 2563; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v7 2564; GFX10-NEXT: s_waitcnt vmcnt(0) 2565; GFX10-NEXT: v_lshrrev_b32_e32 v8, 24, v3 2566; GFX10-NEXT: v_lshrrev_b32_e32 v9, 24, v4 2567; GFX10-NEXT: v_lshlrev_b32_sdwa v12, s4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2568; GFX10-NEXT: v_lshlrev_b32_sdwa v14, s4, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2569; GFX10-NEXT: v_lshrrev_b32_e32 v10, 24, v5 2570; GFX10-NEXT: v_lshlrev_b32_sdwa v13, s5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2571; GFX10-NEXT: v_lshlrev_b32_sdwa v15, s5, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2572; GFX10-NEXT: v_lshlrev_b32_sdwa v16, v0, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2573; GFX10-NEXT: v_and_or_b32 v3, v3, 0xff, v12 2574; GFX10-NEXT: v_lshlrev_b32_e32 v8, 24, v8 2575; GFX10-NEXT: v_and_or_b32 v4, v4, 0xff, v14 2576; GFX10-NEXT: v_lshlrev_b32_e32 v9, 24, v9 2577; GFX10-NEXT: v_lshrrev_b32_e32 v11, 24, v6 2578; GFX10-NEXT: v_lshlrev_b32_sdwa v17, v1, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2579; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2580; GFX10-NEXT: v_and_or_b32 v5, 0xff, v5, v16 2581; GFX10-NEXT: v_lshlrev_b32_e32 v10, 24, v10 2582; GFX10-NEXT: v_or3_b32 v3, v3, v13, v8 2583; GFX10-NEXT: v_or3_b32 v4, v4, v15, v9 2584; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2585; GFX10-NEXT: v_and_or_b32 v0, 0xff, v6, v0 2586; GFX10-NEXT: v_lshlrev_b32_e32 v6, 24, v11 2587; GFX10-NEXT: v_or3_b32 v5, v5, v17, v10 2588; GFX10-NEXT: v_cndmask_b32_e32 v3, v3, v4, vcc_lo 2589; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v7 2590; GFX10-NEXT: v_or3_b32 v0, v0, v1, v6 2591; GFX10-NEXT: v_cndmask_b32_e32 v1, v3, v5, vcc_lo 2592; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v7 2593; GFX10-NEXT: v_cndmask_b32_e32 v0, v1, v0, vcc_lo 2594; GFX10-NEXT: v_lshlrev_b32_e32 v1, 3, v2 2595; GFX10-NEXT: v_lshrrev_b32_e32 v0, v1, v0 2596; GFX10-NEXT: s_setpc_b64 s[30:31] 2597 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 2598 %element = extractelement <16 x i8> %vector, i32 %idx 2599 ret i8 %element 2600} 2601 2602define amdgpu_ps i8 @extractelement_sgpr_v16i8_vgpr_idx(<16 x i8> addrspace(4)* inreg %ptr, i32 %idx) { 2603; GCN-LABEL: extractelement_sgpr_v16i8_vgpr_idx: 2604; GCN: ; %bb.0: 2605; GCN-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 2606; GCN-NEXT: v_lshrrev_b32_e32 v1, 2, v0 2607; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 1, v1 2608; GCN-NEXT: v_and_b32_e32 v0, 3, v0 2609; GCN-NEXT: v_lshlrev_b32_e32 v0, 3, v0 2610; GCN-NEXT: s_waitcnt lgkmcnt(0) 2611; GCN-NEXT: s_bfe_u32 s9, s0, 0x80008 2612; GCN-NEXT: s_lshr_b32 s4, s0, 24 2613; GCN-NEXT: s_and_b32 s8, s0, 0xff 2614; GCN-NEXT: s_lshl_b32 s9, s9, 8 2615; GCN-NEXT: s_bfe_u32 s0, s0, 0x80010 2616; GCN-NEXT: s_or_b32 s8, s8, s9 2617; GCN-NEXT: s_lshl_b32 s0, s0, 16 2618; GCN-NEXT: s_or_b32 s0, s8, s0 2619; GCN-NEXT: s_lshl_b32 s4, s4, 24 2620; GCN-NEXT: s_bfe_u32 s8, s1, 0x80008 2621; GCN-NEXT: s_lshr_b32 s5, s1, 24 2622; GCN-NEXT: s_or_b32 s0, s0, s4 2623; GCN-NEXT: s_and_b32 s4, s1, 0xff 2624; GCN-NEXT: s_lshl_b32 s8, s8, 8 2625; GCN-NEXT: s_bfe_u32 s1, s1, 0x80010 2626; GCN-NEXT: s_or_b32 s4, s4, s8 2627; GCN-NEXT: s_lshl_b32 s1, s1, 16 2628; GCN-NEXT: s_or_b32 s1, s4, s1 2629; GCN-NEXT: s_lshl_b32 s4, s5, 24 2630; GCN-NEXT: s_bfe_u32 s5, s2, 0x80008 2631; GCN-NEXT: s_lshr_b32 s6, s2, 24 2632; GCN-NEXT: s_or_b32 s1, s1, s4 2633; GCN-NEXT: s_and_b32 s4, s2, 0xff 2634; GCN-NEXT: s_lshl_b32 s5, s5, 8 2635; GCN-NEXT: s_bfe_u32 s2, s2, 0x80010 2636; GCN-NEXT: s_or_b32 s4, s4, s5 2637; GCN-NEXT: s_lshl_b32 s2, s2, 16 2638; GCN-NEXT: s_or_b32 s2, s4, s2 2639; GCN-NEXT: s_lshl_b32 s4, s6, 24 2640; GCN-NEXT: s_bfe_u32 s5, s3, 0x80008 2641; GCN-NEXT: s_lshr_b32 s7, s3, 24 2642; GCN-NEXT: s_or_b32 s2, s2, s4 2643; GCN-NEXT: s_and_b32 s4, s3, 0xff 2644; GCN-NEXT: s_lshl_b32 s5, s5, 8 2645; GCN-NEXT: s_bfe_u32 s3, s3, 0x80010 2646; GCN-NEXT: s_or_b32 s4, s4, s5 2647; GCN-NEXT: s_lshl_b32 s3, s3, 16 2648; GCN-NEXT: s_or_b32 s3, s4, s3 2649; GCN-NEXT: s_lshl_b32 s4, s7, 24 2650; GCN-NEXT: v_mov_b32_e32 v2, s0 2651; GCN-NEXT: v_mov_b32_e32 v3, s1 2652; GCN-NEXT: s_or_b32 s3, s3, s4 2653; GCN-NEXT: v_mov_b32_e32 v4, s2 2654; GCN-NEXT: v_cndmask_b32_e32 v2, v2, v3, vcc 2655; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 2, v1 2656; GCN-NEXT: v_mov_b32_e32 v5, s3 2657; GCN-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 2658; GCN-NEXT: v_cmp_eq_u32_e32 vcc, 3, v1 2659; GCN-NEXT: v_cndmask_b32_e32 v1, v2, v5, vcc 2660; GCN-NEXT: v_lshrrev_b32_e32 v0, v0, v1 2661; GCN-NEXT: v_readfirstlane_b32 s0, v0 2662; GCN-NEXT: ; return to shader part epilog 2663; 2664; GFX10-LABEL: extractelement_sgpr_v16i8_vgpr_idx: 2665; GFX10: ; %bb.0: 2666; GFX10-NEXT: s_load_dwordx4 s[0:3], s[2:3], 0x0 2667; GFX10-NEXT: v_lshrrev_b32_e32 v1, 2, v0 2668; GFX10-NEXT: v_and_b32_e32 v0, 3, v0 2669; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 1, v1 2670; GFX10-NEXT: v_lshlrev_b32_e32 v0, 3, v0 2671; GFX10-NEXT: s_waitcnt lgkmcnt(0) 2672; GFX10-NEXT: s_bfe_u32 s9, s0, 0x80008 2673; GFX10-NEXT: s_bfe_u32 s11, s1, 0x80008 2674; GFX10-NEXT: s_lshr_b32 s5, s1, 24 2675; GFX10-NEXT: s_and_b32 s8, s0, 0xff 2676; GFX10-NEXT: s_and_b32 s10, s1, 0xff 2677; GFX10-NEXT: s_bfe_u32 s1, s1, 0x80010 2678; GFX10-NEXT: s_lshl_b32 s9, s9, 8 2679; GFX10-NEXT: s_lshl_b32 s11, s11, 8 2680; GFX10-NEXT: s_lshl_b32 s1, s1, 16 2681; GFX10-NEXT: s_or_b32 s8, s8, s9 2682; GFX10-NEXT: s_or_b32 s9, s10, s11 2683; GFX10-NEXT: s_lshl_b32 s5, s5, 24 2684; GFX10-NEXT: s_or_b32 s1, s9, s1 2685; GFX10-NEXT: s_lshr_b32 s4, s0, 24 2686; GFX10-NEXT: s_bfe_u32 s0, s0, 0x80010 2687; GFX10-NEXT: s_or_b32 s1, s1, s5 2688; GFX10-NEXT: s_lshl_b32 s0, s0, 16 2689; GFX10-NEXT: s_bfe_u32 s13, s2, 0x80008 2690; GFX10-NEXT: v_mov_b32_e32 v2, s1 2691; GFX10-NEXT: s_lshl_b32 s4, s4, 24 2692; GFX10-NEXT: s_or_b32 s0, s8, s0 2693; GFX10-NEXT: s_lshr_b32 s6, s2, 24 2694; GFX10-NEXT: s_and_b32 s12, s2, 0xff 2695; GFX10-NEXT: s_bfe_u32 s2, s2, 0x80010 2696; GFX10-NEXT: s_lshl_b32 s13, s13, 8 2697; GFX10-NEXT: s_or_b32 s0, s0, s4 2698; GFX10-NEXT: s_lshl_b32 s2, s2, 16 2699; GFX10-NEXT: s_or_b32 s10, s12, s13 2700; GFX10-NEXT: s_bfe_u32 s5, s3, 0x80008 2701; GFX10-NEXT: v_cndmask_b32_e32 v2, s0, v2, vcc_lo 2702; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 2, v1 2703; GFX10-NEXT: s_or_b32 s2, s10, s2 2704; GFX10-NEXT: s_lshl_b32 s4, s6, 24 2705; GFX10-NEXT: s_and_b32 s6, s3, 0xff 2706; GFX10-NEXT: s_lshl_b32 s5, s5, 8 2707; GFX10-NEXT: s_bfe_u32 s1, s3, 0x80010 2708; GFX10-NEXT: s_or_b32 s2, s2, s4 2709; GFX10-NEXT: s_lshr_b32 s7, s3, 24 2710; GFX10-NEXT: s_or_b32 s3, s6, s5 2711; GFX10-NEXT: s_lshl_b32 s1, s1, 16 2712; GFX10-NEXT: v_cndmask_b32_e64 v2, v2, s2, vcc_lo 2713; GFX10-NEXT: v_cmp_eq_u32_e32 vcc_lo, 3, v1 2714; GFX10-NEXT: s_or_b32 s0, s3, s1 2715; GFX10-NEXT: s_lshl_b32 s1, s7, 24 2716; GFX10-NEXT: s_or_b32 s3, s0, s1 2717; GFX10-NEXT: v_cndmask_b32_e64 v1, v2, s3, vcc_lo 2718; GFX10-NEXT: v_lshrrev_b32_e32 v0, v0, v1 2719; GFX10-NEXT: v_readfirstlane_b32 s0, v0 2720; GFX10-NEXT: ; return to shader part epilog 2721 %vector = load <16 x i8>, <16 x i8> addrspace(4)* %ptr 2722 %element = extractelement <16 x i8> %vector, i32 %idx 2723 ret i8 %element 2724} 2725 2726define i8 @extractelement_vgpr_v16i8_idx0(<16 x i8> addrspace(1)* %ptr) { 2727; GFX9-LABEL: extractelement_vgpr_v16i8_idx0: 2728; GFX9: ; %bb.0: 2729; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2730; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2731; GFX9-NEXT: s_waitcnt vmcnt(0) 2732; GFX9-NEXT: v_mov_b32_e32 v2, 8 2733; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 2734; GFX9-NEXT: v_mov_b32_e32 v3, 16 2735; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 2736; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2737; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2738; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 2739; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 2740; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 2741; GFX9-NEXT: s_setpc_b64 s[30:31] 2742; 2743; GFX8-LABEL: extractelement_vgpr_v16i8_idx0: 2744; GFX8: ; %bb.0: 2745; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2746; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 2747; GFX8-NEXT: s_waitcnt vmcnt(0) 2748; GFX8-NEXT: v_mov_b32_e32 v1, 8 2749; GFX8-NEXT: v_mov_b32_e32 v2, 16 2750; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2751; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2752; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2753; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2754; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 2755; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2756; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 2757; GFX8-NEXT: s_setpc_b64 s[30:31] 2758; 2759; GFX7-LABEL: extractelement_vgpr_v16i8_idx0: 2760; GFX7: ; %bb.0: 2761; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2762; GFX7-NEXT: s_mov_b32 s6, 0 2763; GFX7-NEXT: s_mov_b32 s7, 0xf000 2764; GFX7-NEXT: s_mov_b64 s[4:5], 0 2765; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 2766; GFX7-NEXT: s_waitcnt vmcnt(0) 2767; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 2768; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 2769; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 2770; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 2771; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 2772; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 2773; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 2774; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 2775; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 2776; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 2777; GFX7-NEXT: s_setpc_b64 s[30:31] 2778; 2779; GFX10-LABEL: extractelement_vgpr_v16i8_idx0: 2780; GFX10: ; %bb.0: 2781; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2782; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 2783; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2784; GFX10-NEXT: s_waitcnt vmcnt(0) 2785; GFX10-NEXT: v_mov_b32_e32 v1, 8 2786; GFX10-NEXT: v_mov_b32_e32 v2, 16 2787; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2788; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2789; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2790; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 2791; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2792; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 2793; GFX10-NEXT: s_setpc_b64 s[30:31] 2794 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 2795 %element = extractelement <16 x i8> %vector, i32 0 2796 ret i8 %element 2797} 2798 2799define i8 @extractelement_vgpr_v16i8_idx1(<16 x i8> addrspace(1)* %ptr) { 2800; GFX9-LABEL: extractelement_vgpr_v16i8_idx1: 2801; GFX9: ; %bb.0: 2802; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2803; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2804; GFX9-NEXT: s_mov_b32 s4, 8 2805; GFX9-NEXT: s_waitcnt vmcnt(0) 2806; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 2807; GFX9-NEXT: v_mov_b32_e32 v2, 16 2808; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2809; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2810; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2811; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v4 2812; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2813; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 2814; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 2815; GFX9-NEXT: s_setpc_b64 s[30:31] 2816; 2817; GFX8-LABEL: extractelement_vgpr_v16i8_idx1: 2818; GFX8: ; %bb.0: 2819; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2820; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 2821; GFX8-NEXT: s_waitcnt vmcnt(0) 2822; GFX8-NEXT: v_mov_b32_e32 v1, 8 2823; GFX8-NEXT: v_mov_b32_e32 v2, 16 2824; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2825; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2826; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2827; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2828; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 2829; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2830; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 2831; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 2832; GFX8-NEXT: s_setpc_b64 s[30:31] 2833; 2834; GFX7-LABEL: extractelement_vgpr_v16i8_idx1: 2835; GFX7: ; %bb.0: 2836; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2837; GFX7-NEXT: s_mov_b32 s6, 0 2838; GFX7-NEXT: s_mov_b32 s7, 0xf000 2839; GFX7-NEXT: s_mov_b64 s[4:5], 0 2840; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 2841; GFX7-NEXT: s_waitcnt vmcnt(0) 2842; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 2843; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 2844; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 2845; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 2846; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 2847; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 2848; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 2849; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 2850; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 2851; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 2852; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 2853; GFX7-NEXT: s_setpc_b64 s[30:31] 2854; 2855; GFX10-LABEL: extractelement_vgpr_v16i8_idx1: 2856; GFX10: ; %bb.0: 2857; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2858; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 2859; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2860; GFX10-NEXT: s_mov_b32 s4, 8 2861; GFX10-NEXT: s_waitcnt vmcnt(0) 2862; GFX10-NEXT: v_mov_b32_e32 v1, 16 2863; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2864; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2865; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2866; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v2 2867; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 2868; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 2869; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 2870; GFX10-NEXT: s_setpc_b64 s[30:31] 2871 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 2872 %element = extractelement <16 x i8> %vector, i32 1 2873 ret i8 %element 2874} 2875 2876define i8 @extractelement_vgpr_v16i8_idx2(<16 x i8> addrspace(1)* %ptr) { 2877; GFX9-LABEL: extractelement_vgpr_v16i8_idx2: 2878; GFX9: ; %bb.0: 2879; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2880; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2881; GFX9-NEXT: s_waitcnt vmcnt(0) 2882; GFX9-NEXT: v_mov_b32_e32 v2, 8 2883; GFX9-NEXT: s_mov_b32 s4, 16 2884; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 2885; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2886; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2887; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2888; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 2889; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2890; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 2891; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 2892; GFX9-NEXT: s_setpc_b64 s[30:31] 2893; 2894; GFX8-LABEL: extractelement_vgpr_v16i8_idx2: 2895; GFX8: ; %bb.0: 2896; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2897; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 2898; GFX8-NEXT: s_waitcnt vmcnt(0) 2899; GFX8-NEXT: v_mov_b32_e32 v1, 8 2900; GFX8-NEXT: v_mov_b32_e32 v2, 16 2901; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2902; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2903; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2904; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2905; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 2906; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2907; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 2908; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 2909; GFX8-NEXT: s_setpc_b64 s[30:31] 2910; 2911; GFX7-LABEL: extractelement_vgpr_v16i8_idx2: 2912; GFX7: ; %bb.0: 2913; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2914; GFX7-NEXT: s_mov_b32 s6, 0 2915; GFX7-NEXT: s_mov_b32 s7, 0xf000 2916; GFX7-NEXT: s_mov_b64 s[4:5], 0 2917; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 2918; GFX7-NEXT: s_waitcnt vmcnt(0) 2919; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 2920; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 2921; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 2922; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 2923; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 2924; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 2925; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 2926; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 2927; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 2928; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 2929; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 2930; GFX7-NEXT: s_setpc_b64 s[30:31] 2931; 2932; GFX10-LABEL: extractelement_vgpr_v16i8_idx2: 2933; GFX10: ; %bb.0: 2934; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2935; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 2936; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2937; GFX10-NEXT: s_waitcnt vmcnt(0) 2938; GFX10-NEXT: v_mov_b32_e32 v1, 8 2939; GFX10-NEXT: s_mov_b32 s4, 16 2940; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2941; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v0 2942; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2943; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 2944; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v2 2945; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 2946; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 2947; GFX10-NEXT: s_setpc_b64 s[30:31] 2948 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 2949 %element = extractelement <16 x i8> %vector, i32 2 2950 ret i8 %element 2951} 2952 2953define i8 @extractelement_vgpr_v16i8_idx3(<16 x i8> addrspace(1)* %ptr) { 2954; GFX9-LABEL: extractelement_vgpr_v16i8_idx3: 2955; GFX9: ; %bb.0: 2956; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2957; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 2958; GFX9-NEXT: s_waitcnt vmcnt(0) 2959; GFX9-NEXT: v_mov_b32_e32 v2, 8 2960; GFX9-NEXT: v_mov_b32_e32 v1, 0xff 2961; GFX9-NEXT: v_mov_b32_e32 v3, 16 2962; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v0 2963; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2964; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2965; GFX9-NEXT: v_and_or_b32 v0, v0, v1, v2 2966; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 2967; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 2968; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 2969; GFX9-NEXT: s_setpc_b64 s[30:31] 2970; 2971; GFX8-LABEL: extractelement_vgpr_v16i8_idx3: 2972; GFX8: ; %bb.0: 2973; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2974; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 2975; GFX8-NEXT: s_waitcnt vmcnt(0) 2976; GFX8-NEXT: v_mov_b32_e32 v1, 8 2977; GFX8-NEXT: v_mov_b32_e32 v2, 16 2978; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 2979; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v0 2980; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 2981; GFX8-NEXT: v_or_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 2982; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 2983; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 2984; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 2985; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 2986; GFX8-NEXT: s_setpc_b64 s[30:31] 2987; 2988; GFX7-LABEL: extractelement_vgpr_v16i8_idx3: 2989; GFX7: ; %bb.0: 2990; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 2991; GFX7-NEXT: s_mov_b32 s6, 0 2992; GFX7-NEXT: s_mov_b32 s7, 0xf000 2993; GFX7-NEXT: s_mov_b64 s[4:5], 0 2994; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 2995; GFX7-NEXT: s_waitcnt vmcnt(0) 2996; GFX7-NEXT: v_bfe_u32 v3, v0, 8, 8 2997; GFX7-NEXT: v_lshrrev_b32_e32 v1, 24, v0 2998; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v0 2999; GFX7-NEXT: v_bfe_u32 v0, v0, 16, 8 3000; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3001; GFX7-NEXT: v_lshlrev_b32_e32 v0, 16, v0 3002; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 3003; GFX7-NEXT: v_or_b32_e32 v0, v2, v0 3004; GFX7-NEXT: v_lshlrev_b32_e32 v1, 24, v1 3005; GFX7-NEXT: v_or_b32_e32 v0, v0, v1 3006; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3007; GFX7-NEXT: s_setpc_b64 s[30:31] 3008; 3009; GFX10-LABEL: extractelement_vgpr_v16i8_idx3: 3010; GFX10: ; %bb.0: 3011; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3012; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3013; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3014; GFX10-NEXT: s_waitcnt vmcnt(0) 3015; GFX10-NEXT: v_mov_b32_e32 v1, 8 3016; GFX10-NEXT: v_mov_b32_e32 v2, 16 3017; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3018; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v0 3019; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3020; GFX10-NEXT: v_and_or_b32 v0, 0xff, v0, v1 3021; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3022; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 3023; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3024; GFX10-NEXT: s_setpc_b64 s[30:31] 3025 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3026 %element = extractelement <16 x i8> %vector, i32 3 3027 ret i8 %element 3028} 3029 3030define i8 @extractelement_vgpr_v16i8_idx4(<16 x i8> addrspace(1)* %ptr) { 3031; GFX9-LABEL: extractelement_vgpr_v16i8_idx4: 3032; GFX9: ; %bb.0: 3033; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3034; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3035; GFX9-NEXT: s_waitcnt vmcnt(0) 3036; GFX9-NEXT: v_mov_b32_e32 v2, 8 3037; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3038; GFX9-NEXT: v_mov_b32_e32 v3, 16 3039; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v1 3040; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3041; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3042; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v2 3043; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 3044; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 3045; GFX9-NEXT: s_setpc_b64 s[30:31] 3046; 3047; GFX8-LABEL: extractelement_vgpr_v16i8_idx4: 3048; GFX8: ; %bb.0: 3049; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3050; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3051; GFX8-NEXT: s_waitcnt vmcnt(0) 3052; GFX8-NEXT: v_mov_b32_e32 v0, 8 3053; GFX8-NEXT: v_mov_b32_e32 v2, 16 3054; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3055; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3056; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3057; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3058; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 3059; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3060; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3061; GFX8-NEXT: s_setpc_b64 s[30:31] 3062; 3063; GFX7-LABEL: extractelement_vgpr_v16i8_idx4: 3064; GFX7: ; %bb.0: 3065; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3066; GFX7-NEXT: s_mov_b32 s6, 0 3067; GFX7-NEXT: s_mov_b32 s7, 0xf000 3068; GFX7-NEXT: s_mov_b64 s[4:5], 0 3069; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3070; GFX7-NEXT: s_waitcnt vmcnt(0) 3071; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 3072; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 3073; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 3074; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 3075; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3076; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 3077; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 3078; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 3079; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3080; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3081; GFX7-NEXT: s_setpc_b64 s[30:31] 3082; 3083; GFX10-LABEL: extractelement_vgpr_v16i8_idx4: 3084; GFX10: ; %bb.0: 3085; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3086; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3087; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3088; GFX10-NEXT: s_waitcnt vmcnt(0) 3089; GFX10-NEXT: v_mov_b32_e32 v0, 8 3090; GFX10-NEXT: v_mov_b32_e32 v2, 16 3091; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3092; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3093; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3094; GFX10-NEXT: v_and_or_b32 v0, 0xff, v1, v0 3095; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3096; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 3097; GFX10-NEXT: s_setpc_b64 s[30:31] 3098 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3099 %element = extractelement <16 x i8> %vector, i32 4 3100 ret i8 %element 3101} 3102 3103define i8 @extractelement_vgpr_v16i8_idx5(<16 x i8> addrspace(1)* %ptr) { 3104; GFX9-LABEL: extractelement_vgpr_v16i8_idx5: 3105; GFX9: ; %bb.0: 3106; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3107; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3108; GFX9-NEXT: s_mov_b32 s4, 8 3109; GFX9-NEXT: s_waitcnt vmcnt(0) 3110; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3111; GFX9-NEXT: v_mov_b32_e32 v2, 16 3112; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3113; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3114; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3115; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v4 3116; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3117; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 3118; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3119; GFX9-NEXT: s_setpc_b64 s[30:31] 3120; 3121; GFX8-LABEL: extractelement_vgpr_v16i8_idx5: 3122; GFX8: ; %bb.0: 3123; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3124; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3125; GFX8-NEXT: s_waitcnt vmcnt(0) 3126; GFX8-NEXT: v_mov_b32_e32 v0, 8 3127; GFX8-NEXT: v_mov_b32_e32 v2, 16 3128; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3129; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3130; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3131; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3132; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 3133; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3134; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3135; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3136; GFX8-NEXT: s_setpc_b64 s[30:31] 3137; 3138; GFX7-LABEL: extractelement_vgpr_v16i8_idx5: 3139; GFX7: ; %bb.0: 3140; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3141; GFX7-NEXT: s_mov_b32 s6, 0 3142; GFX7-NEXT: s_mov_b32 s7, 0xf000 3143; GFX7-NEXT: s_mov_b64 s[4:5], 0 3144; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3145; GFX7-NEXT: s_waitcnt vmcnt(0) 3146; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 3147; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 3148; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 3149; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 3150; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3151; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 3152; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 3153; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 3154; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3155; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3156; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3157; GFX7-NEXT: s_setpc_b64 s[30:31] 3158; 3159; GFX10-LABEL: extractelement_vgpr_v16i8_idx5: 3160; GFX10: ; %bb.0: 3161; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3162; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3163; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3164; GFX10-NEXT: s_mov_b32 s4, 8 3165; GFX10-NEXT: s_waitcnt vmcnt(0) 3166; GFX10-NEXT: v_mov_b32_e32 v0, 16 3167; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3168; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3169; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3170; GFX10-NEXT: v_and_or_b32 v1, 0xff, v1, v2 3171; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 3172; GFX10-NEXT: v_or3_b32 v0, v1, v0, v2 3173; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3174; GFX10-NEXT: s_setpc_b64 s[30:31] 3175 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3176 %element = extractelement <16 x i8> %vector, i32 5 3177 ret i8 %element 3178} 3179 3180define i8 @extractelement_vgpr_v16i8_idx6(<16 x i8> addrspace(1)* %ptr) { 3181; GFX9-LABEL: extractelement_vgpr_v16i8_idx6: 3182; GFX9: ; %bb.0: 3183; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3184; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3185; GFX9-NEXT: s_waitcnt vmcnt(0) 3186; GFX9-NEXT: v_mov_b32_e32 v2, 8 3187; GFX9-NEXT: s_mov_b32 s4, 16 3188; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3189; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3190; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3191; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3192; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v2 3193; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3194; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 3195; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3196; GFX9-NEXT: s_setpc_b64 s[30:31] 3197; 3198; GFX8-LABEL: extractelement_vgpr_v16i8_idx6: 3199; GFX8: ; %bb.0: 3200; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3201; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3202; GFX8-NEXT: s_waitcnt vmcnt(0) 3203; GFX8-NEXT: v_mov_b32_e32 v0, 8 3204; GFX8-NEXT: v_mov_b32_e32 v2, 16 3205; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3206; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3207; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3208; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3209; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 3210; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3211; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3212; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3213; GFX8-NEXT: s_setpc_b64 s[30:31] 3214; 3215; GFX7-LABEL: extractelement_vgpr_v16i8_idx6: 3216; GFX7: ; %bb.0: 3217; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3218; GFX7-NEXT: s_mov_b32 s6, 0 3219; GFX7-NEXT: s_mov_b32 s7, 0xf000 3220; GFX7-NEXT: s_mov_b64 s[4:5], 0 3221; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3222; GFX7-NEXT: s_waitcnt vmcnt(0) 3223; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 3224; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 3225; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 3226; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 3227; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3228; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 3229; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 3230; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 3231; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3232; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3233; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3234; GFX7-NEXT: s_setpc_b64 s[30:31] 3235; 3236; GFX10-LABEL: extractelement_vgpr_v16i8_idx6: 3237; GFX10: ; %bb.0: 3238; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3239; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3240; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3241; GFX10-NEXT: s_waitcnt vmcnt(0) 3242; GFX10-NEXT: v_mov_b32_e32 v0, 8 3243; GFX10-NEXT: s_mov_b32 s4, 16 3244; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3245; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v1 3246; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3247; GFX10-NEXT: v_and_or_b32 v0, 0xff, v1, v0 3248; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v2 3249; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 3250; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3251; GFX10-NEXT: s_setpc_b64 s[30:31] 3252 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3253 %element = extractelement <16 x i8> %vector, i32 6 3254 ret i8 %element 3255} 3256 3257define i8 @extractelement_vgpr_v16i8_idx7(<16 x i8> addrspace(1)* %ptr) { 3258; GFX9-LABEL: extractelement_vgpr_v16i8_idx7: 3259; GFX9: ; %bb.0: 3260; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3261; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3262; GFX9-NEXT: s_waitcnt vmcnt(0) 3263; GFX9-NEXT: v_mov_b32_e32 v2, 8 3264; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3265; GFX9-NEXT: v_mov_b32_e32 v3, 16 3266; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v1 3267; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3268; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3269; GFX9-NEXT: v_and_or_b32 v0, v1, v0, v2 3270; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 3271; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 3272; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3273; GFX9-NEXT: s_setpc_b64 s[30:31] 3274; 3275; GFX8-LABEL: extractelement_vgpr_v16i8_idx7: 3276; GFX8: ; %bb.0: 3277; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3278; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3279; GFX8-NEXT: s_waitcnt vmcnt(0) 3280; GFX8-NEXT: v_mov_b32_e32 v0, 8 3281; GFX8-NEXT: v_mov_b32_e32 v2, 16 3282; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3283; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3284; GFX8-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3285; GFX8-NEXT: v_or_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3286; GFX8-NEXT: v_or_b32_e32 v0, v0, v2 3287; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3288; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3289; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3290; GFX8-NEXT: s_setpc_b64 s[30:31] 3291; 3292; GFX7-LABEL: extractelement_vgpr_v16i8_idx7: 3293; GFX7: ; %bb.0: 3294; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3295; GFX7-NEXT: s_mov_b32 s6, 0 3296; GFX7-NEXT: s_mov_b32 s7, 0xf000 3297; GFX7-NEXT: s_mov_b64 s[4:5], 0 3298; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3299; GFX7-NEXT: s_waitcnt vmcnt(0) 3300; GFX7-NEXT: v_bfe_u32 v3, v1, 8, 8 3301; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v1 3302; GFX7-NEXT: v_and_b32_e32 v2, 0xff, v1 3303; GFX7-NEXT: v_bfe_u32 v1, v1, 16, 8 3304; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3305; GFX7-NEXT: v_lshlrev_b32_e32 v1, 16, v1 3306; GFX7-NEXT: v_or_b32_e32 v2, v2, v3 3307; GFX7-NEXT: v_or_b32_e32 v1, v2, v1 3308; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3309; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3310; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3311; GFX7-NEXT: s_setpc_b64 s[30:31] 3312; 3313; GFX10-LABEL: extractelement_vgpr_v16i8_idx7: 3314; GFX10: ; %bb.0: 3315; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3316; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3317; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3318; GFX10-NEXT: s_waitcnt vmcnt(0) 3319; GFX10-NEXT: v_mov_b32_e32 v0, 8 3320; GFX10-NEXT: v_mov_b32_e32 v2, 16 3321; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3322; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v1 3323; GFX10-NEXT: v_lshlrev_b32_sdwa v2, v2, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3324; GFX10-NEXT: v_and_or_b32 v0, 0xff, v1, v0 3325; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3326; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 3327; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3328; GFX10-NEXT: s_setpc_b64 s[30:31] 3329 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3330 %element = extractelement <16 x i8> %vector, i32 7 3331 ret i8 %element 3332} 3333 3334define i8 @extractelement_vgpr_v16i8_idx8(<16 x i8> addrspace(1)* %ptr) { 3335; GFX9-LABEL: extractelement_vgpr_v16i8_idx8: 3336; GFX9: ; %bb.0: 3337; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3338; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3339; GFX9-NEXT: s_waitcnt vmcnt(0) 3340; GFX9-NEXT: v_mov_b32_e32 v1, 8 3341; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3342; GFX9-NEXT: v_mov_b32_e32 v3, 16 3343; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v2 3344; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3345; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3346; GFX9-NEXT: v_and_or_b32 v0, v2, v0, v1 3347; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 3348; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 3349; GFX9-NEXT: s_setpc_b64 s[30:31] 3350; 3351; GFX8-LABEL: extractelement_vgpr_v16i8_idx8: 3352; GFX8: ; %bb.0: 3353; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3354; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3355; GFX8-NEXT: s_waitcnt vmcnt(0) 3356; GFX8-NEXT: v_mov_b32_e32 v0, 8 3357; GFX8-NEXT: v_mov_b32_e32 v1, 16 3358; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3359; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3360; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3361; GFX8-NEXT: v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3362; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3363; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3364; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3365; GFX8-NEXT: s_setpc_b64 s[30:31] 3366; 3367; GFX7-LABEL: extractelement_vgpr_v16i8_idx8: 3368; GFX7: ; %bb.0: 3369; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3370; GFX7-NEXT: s_mov_b32 s6, 0 3371; GFX7-NEXT: s_mov_b32 s7, 0xf000 3372; GFX7-NEXT: s_mov_b64 s[4:5], 0 3373; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3374; GFX7-NEXT: s_waitcnt vmcnt(0) 3375; GFX7-NEXT: v_bfe_u32 v3, v2, 8, 8 3376; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v2 3377; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v2 3378; GFX7-NEXT: v_bfe_u32 v2, v2, 16, 8 3379; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3380; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 3381; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3382; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3383; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3384; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3385; GFX7-NEXT: s_setpc_b64 s[30:31] 3386; 3387; GFX10-LABEL: extractelement_vgpr_v16i8_idx8: 3388; GFX10: ; %bb.0: 3389; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3390; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3391; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3392; GFX10-NEXT: s_waitcnt vmcnt(0) 3393; GFX10-NEXT: v_mov_b32_e32 v0, 8 3394; GFX10-NEXT: v_mov_b32_e32 v1, 16 3395; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3396; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3397; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3398; GFX10-NEXT: v_and_or_b32 v0, 0xff, v2, v0 3399; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 3400; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 3401; GFX10-NEXT: s_setpc_b64 s[30:31] 3402 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3403 %element = extractelement <16 x i8> %vector, i32 8 3404 ret i8 %element 3405} 3406 3407define i8 @extractelement_vgpr_v16i8_idx9(<16 x i8> addrspace(1)* %ptr) { 3408; GFX9-LABEL: extractelement_vgpr_v16i8_idx9: 3409; GFX9: ; %bb.0: 3410; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3411; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3412; GFX9-NEXT: s_mov_b32 s4, 8 3413; GFX9-NEXT: s_waitcnt vmcnt(0) 3414; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3415; GFX9-NEXT: v_mov_b32_e32 v1, 16 3416; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3417; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3418; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3419; GFX9-NEXT: v_and_or_b32 v0, v2, v0, v4 3420; GFX9-NEXT: v_lshlrev_b32_e32 v2, 24, v3 3421; GFX9-NEXT: v_or3_b32 v0, v0, v1, v2 3422; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3423; GFX9-NEXT: s_setpc_b64 s[30:31] 3424; 3425; GFX8-LABEL: extractelement_vgpr_v16i8_idx9: 3426; GFX8: ; %bb.0: 3427; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3428; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3429; GFX8-NEXT: s_waitcnt vmcnt(0) 3430; GFX8-NEXT: v_mov_b32_e32 v0, 8 3431; GFX8-NEXT: v_mov_b32_e32 v1, 16 3432; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3433; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3434; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3435; GFX8-NEXT: v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3436; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3437; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3438; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3439; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3440; GFX8-NEXT: s_setpc_b64 s[30:31] 3441; 3442; GFX7-LABEL: extractelement_vgpr_v16i8_idx9: 3443; GFX7: ; %bb.0: 3444; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3445; GFX7-NEXT: s_mov_b32 s6, 0 3446; GFX7-NEXT: s_mov_b32 s7, 0xf000 3447; GFX7-NEXT: s_mov_b64 s[4:5], 0 3448; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3449; GFX7-NEXT: s_waitcnt vmcnt(0) 3450; GFX7-NEXT: v_bfe_u32 v3, v2, 8, 8 3451; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v2 3452; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v2 3453; GFX7-NEXT: v_bfe_u32 v2, v2, 16, 8 3454; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3455; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 3456; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3457; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3458; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3459; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3460; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3461; GFX7-NEXT: s_setpc_b64 s[30:31] 3462; 3463; GFX10-LABEL: extractelement_vgpr_v16i8_idx9: 3464; GFX10: ; %bb.0: 3465; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3466; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3467; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3468; GFX10-NEXT: s_mov_b32 s4, 8 3469; GFX10-NEXT: s_waitcnt vmcnt(0) 3470; GFX10-NEXT: v_mov_b32_e32 v0, 16 3471; GFX10-NEXT: v_lshlrev_b32_sdwa v1, s4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3472; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3473; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3474; GFX10-NEXT: v_and_or_b32 v1, 0xff, v2, v1 3475; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 3476; GFX10-NEXT: v_or3_b32 v0, v1, v0, v2 3477; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3478; GFX10-NEXT: s_setpc_b64 s[30:31] 3479 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3480 %element = extractelement <16 x i8> %vector, i32 9 3481 ret i8 %element 3482} 3483 3484define i8 @extractelement_vgpr_v16i8_idx10(<16 x i8> addrspace(1)* %ptr) { 3485; GFX9-LABEL: extractelement_vgpr_v16i8_idx10: 3486; GFX9: ; %bb.0: 3487; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3488; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3489; GFX9-NEXT: s_waitcnt vmcnt(0) 3490; GFX9-NEXT: v_mov_b32_e32 v1, 8 3491; GFX9-NEXT: s_mov_b32 s4, 16 3492; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3493; GFX9-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3494; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3495; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3496; GFX9-NEXT: v_and_or_b32 v0, v2, v0, v1 3497; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3498; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 3499; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3500; GFX9-NEXT: s_setpc_b64 s[30:31] 3501; 3502; GFX8-LABEL: extractelement_vgpr_v16i8_idx10: 3503; GFX8: ; %bb.0: 3504; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3505; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3506; GFX8-NEXT: s_waitcnt vmcnt(0) 3507; GFX8-NEXT: v_mov_b32_e32 v0, 8 3508; GFX8-NEXT: v_mov_b32_e32 v1, 16 3509; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3510; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3511; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3512; GFX8-NEXT: v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3513; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3514; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3515; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3516; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3517; GFX8-NEXT: s_setpc_b64 s[30:31] 3518; 3519; GFX7-LABEL: extractelement_vgpr_v16i8_idx10: 3520; GFX7: ; %bb.0: 3521; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3522; GFX7-NEXT: s_mov_b32 s6, 0 3523; GFX7-NEXT: s_mov_b32 s7, 0xf000 3524; GFX7-NEXT: s_mov_b64 s[4:5], 0 3525; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3526; GFX7-NEXT: s_waitcnt vmcnt(0) 3527; GFX7-NEXT: v_bfe_u32 v3, v2, 8, 8 3528; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v2 3529; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v2 3530; GFX7-NEXT: v_bfe_u32 v2, v2, 16, 8 3531; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3532; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 3533; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3534; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3535; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3536; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3537; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3538; GFX7-NEXT: s_setpc_b64 s[30:31] 3539; 3540; GFX10-LABEL: extractelement_vgpr_v16i8_idx10: 3541; GFX10: ; %bb.0: 3542; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3543; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3544; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3545; GFX10-NEXT: s_waitcnt vmcnt(0) 3546; GFX10-NEXT: v_mov_b32_e32 v0, 8 3547; GFX10-NEXT: s_mov_b32 s4, 16 3548; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3549; GFX10-NEXT: v_lshrrev_b32_e32 v1, 24, v2 3550; GFX10-NEXT: v_lshlrev_b32_sdwa v3, s4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3551; GFX10-NEXT: v_and_or_b32 v0, 0xff, v2, v0 3552; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v1 3553; GFX10-NEXT: v_or3_b32 v0, v0, v3, v1 3554; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3555; GFX10-NEXT: s_setpc_b64 s[30:31] 3556 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3557 %element = extractelement <16 x i8> %vector, i32 10 3558 ret i8 %element 3559} 3560 3561define i8 @extractelement_vgpr_v16i8_idx11(<16 x i8> addrspace(1)* %ptr) { 3562; GFX9-LABEL: extractelement_vgpr_v16i8_idx11: 3563; GFX9: ; %bb.0: 3564; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3565; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3566; GFX9-NEXT: s_waitcnt vmcnt(0) 3567; GFX9-NEXT: v_mov_b32_e32 v1, 8 3568; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3569; GFX9-NEXT: v_mov_b32_e32 v3, 16 3570; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v2 3571; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3572; GFX9-NEXT: v_lshlrev_b32_sdwa v3, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3573; GFX9-NEXT: v_and_or_b32 v0, v2, v0, v1 3574; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 3575; GFX9-NEXT: v_or3_b32 v0, v0, v3, v1 3576; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3577; GFX9-NEXT: s_setpc_b64 s[30:31] 3578; 3579; GFX8-LABEL: extractelement_vgpr_v16i8_idx11: 3580; GFX8: ; %bb.0: 3581; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3582; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3583; GFX8-NEXT: s_waitcnt vmcnt(0) 3584; GFX8-NEXT: v_mov_b32_e32 v0, 8 3585; GFX8-NEXT: v_mov_b32_e32 v1, 16 3586; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3587; GFX8-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3588; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3589; GFX8-NEXT: v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3590; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3591; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v3 3592; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3593; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3594; GFX8-NEXT: s_setpc_b64 s[30:31] 3595; 3596; GFX7-LABEL: extractelement_vgpr_v16i8_idx11: 3597; GFX7: ; %bb.0: 3598; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3599; GFX7-NEXT: s_mov_b32 s6, 0 3600; GFX7-NEXT: s_mov_b32 s7, 0xf000 3601; GFX7-NEXT: s_mov_b64 s[4:5], 0 3602; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3603; GFX7-NEXT: s_waitcnt vmcnt(0) 3604; GFX7-NEXT: v_bfe_u32 v3, v2, 8, 8 3605; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v2 3606; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v2 3607; GFX7-NEXT: v_bfe_u32 v2, v2, 16, 8 3608; GFX7-NEXT: v_lshlrev_b32_e32 v3, 8, v3 3609; GFX7-NEXT: v_lshlrev_b32_e32 v2, 16, v2 3610; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3611; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3612; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3613; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3614; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3615; GFX7-NEXT: s_setpc_b64 s[30:31] 3616; 3617; GFX10-LABEL: extractelement_vgpr_v16i8_idx11: 3618; GFX10: ; %bb.0: 3619; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3620; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3621; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3622; GFX10-NEXT: s_waitcnt vmcnt(0) 3623; GFX10-NEXT: v_mov_b32_e32 v0, 8 3624; GFX10-NEXT: v_mov_b32_e32 v1, 16 3625; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3626; GFX10-NEXT: v_lshrrev_b32_e32 v3, 24, v2 3627; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3628; GFX10-NEXT: v_and_or_b32 v0, 0xff, v2, v0 3629; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v3 3630; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 3631; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3632; GFX10-NEXT: s_setpc_b64 s[30:31] 3633 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3634 %element = extractelement <16 x i8> %vector, i32 11 3635 ret i8 %element 3636} 3637 3638define i8 @extractelement_vgpr_v16i8_idx12(<16 x i8> addrspace(1)* %ptr) { 3639; GFX9-LABEL: extractelement_vgpr_v16i8_idx12: 3640; GFX9: ; %bb.0: 3641; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3642; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3643; GFX9-NEXT: s_waitcnt vmcnt(0) 3644; GFX9-NEXT: v_mov_b32_e32 v1, 8 3645; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3646; GFX9-NEXT: v_mov_b32_e32 v2, 16 3647; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v3 3648; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3649; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3650; GFX9-NEXT: v_and_or_b32 v0, v3, v0, v1 3651; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 3652; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 3653; GFX9-NEXT: s_setpc_b64 s[30:31] 3654; 3655; GFX8-LABEL: extractelement_vgpr_v16i8_idx12: 3656; GFX8: ; %bb.0: 3657; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3658; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3659; GFX8-NEXT: s_waitcnt vmcnt(0) 3660; GFX8-NEXT: v_mov_b32_e32 v0, 8 3661; GFX8-NEXT: v_mov_b32_e32 v1, 16 3662; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3663; GFX8-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3664; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3665; GFX8-NEXT: v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3666; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3667; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v2 3668; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3669; GFX8-NEXT: s_setpc_b64 s[30:31] 3670; 3671; GFX7-LABEL: extractelement_vgpr_v16i8_idx12: 3672; GFX7: ; %bb.0: 3673; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3674; GFX7-NEXT: s_mov_b32 s6, 0 3675; GFX7-NEXT: s_mov_b32 s7, 0xf000 3676; GFX7-NEXT: s_mov_b64 s[4:5], 0 3677; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3678; GFX7-NEXT: s_waitcnt vmcnt(0) 3679; GFX7-NEXT: v_bfe_u32 v2, v3, 8, 8 3680; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v3 3681; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v3 3682; GFX7-NEXT: v_bfe_u32 v3, v3, 16, 8 3683; GFX7-NEXT: v_lshlrev_b32_e32 v2, 8, v2 3684; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 3685; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3686; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3687; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3688; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3689; GFX7-NEXT: s_setpc_b64 s[30:31] 3690; 3691; GFX10-LABEL: extractelement_vgpr_v16i8_idx12: 3692; GFX10: ; %bb.0: 3693; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3694; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3695; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3696; GFX10-NEXT: s_waitcnt vmcnt(0) 3697; GFX10-NEXT: v_mov_b32_e32 v0, 8 3698; GFX10-NEXT: v_mov_b32_e32 v1, 16 3699; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3700; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3701; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3702; GFX10-NEXT: v_and_or_b32 v0, 0xff, v3, v0 3703; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v2 3704; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 3705; GFX10-NEXT: s_setpc_b64 s[30:31] 3706 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3707 %element = extractelement <16 x i8> %vector, i32 12 3708 ret i8 %element 3709} 3710 3711define i8 @extractelement_vgpr_v16i8_idx13(<16 x i8> addrspace(1)* %ptr) { 3712; GFX9-LABEL: extractelement_vgpr_v16i8_idx13: 3713; GFX9: ; %bb.0: 3714; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3715; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3716; GFX9-NEXT: s_mov_b32 s4, 8 3717; GFX9-NEXT: s_waitcnt vmcnt(0) 3718; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3719; GFX9-NEXT: v_mov_b32_e32 v1, 16 3720; GFX9-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3721; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3722; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3723; GFX9-NEXT: v_and_or_b32 v0, v3, v0, v4 3724; GFX9-NEXT: v_lshlrev_b32_e32 v2, 24, v2 3725; GFX9-NEXT: v_or3_b32 v0, v0, v1, v2 3726; GFX9-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3727; GFX9-NEXT: s_setpc_b64 s[30:31] 3728; 3729; GFX8-LABEL: extractelement_vgpr_v16i8_idx13: 3730; GFX8: ; %bb.0: 3731; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3732; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3733; GFX8-NEXT: s_waitcnt vmcnt(0) 3734; GFX8-NEXT: v_mov_b32_e32 v0, 8 3735; GFX8-NEXT: v_mov_b32_e32 v1, 16 3736; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3737; GFX8-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3738; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3739; GFX8-NEXT: v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3740; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3741; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v2 3742; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3743; GFX8-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3744; GFX8-NEXT: s_setpc_b64 s[30:31] 3745; 3746; GFX7-LABEL: extractelement_vgpr_v16i8_idx13: 3747; GFX7: ; %bb.0: 3748; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3749; GFX7-NEXT: s_mov_b32 s6, 0 3750; GFX7-NEXT: s_mov_b32 s7, 0xf000 3751; GFX7-NEXT: s_mov_b64 s[4:5], 0 3752; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3753; GFX7-NEXT: s_waitcnt vmcnt(0) 3754; GFX7-NEXT: v_bfe_u32 v2, v3, 8, 8 3755; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v3 3756; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v3 3757; GFX7-NEXT: v_bfe_u32 v3, v3, 16, 8 3758; GFX7-NEXT: v_lshlrev_b32_e32 v2, 8, v2 3759; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 3760; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3761; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3762; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3763; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3764; GFX7-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3765; GFX7-NEXT: s_setpc_b64 s[30:31] 3766; 3767; GFX10-LABEL: extractelement_vgpr_v16i8_idx13: 3768; GFX10: ; %bb.0: 3769; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3770; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3771; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3772; GFX10-NEXT: s_mov_b32 s4, 8 3773; GFX10-NEXT: s_waitcnt vmcnt(0) 3774; GFX10-NEXT: v_mov_b32_e32 v0, 16 3775; GFX10-NEXT: v_lshlrev_b32_sdwa v1, s4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3776; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3777; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3778; GFX10-NEXT: v_and_or_b32 v1, 0xff, v3, v1 3779; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v2 3780; GFX10-NEXT: v_or3_b32 v0, v1, v0, v2 3781; GFX10-NEXT: v_lshrrev_b32_e32 v0, 8, v0 3782; GFX10-NEXT: s_setpc_b64 s[30:31] 3783 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3784 %element = extractelement <16 x i8> %vector, i32 13 3785 ret i8 %element 3786} 3787 3788define i8 @extractelement_vgpr_v16i8_idx14(<16 x i8> addrspace(1)* %ptr) { 3789; GFX9-LABEL: extractelement_vgpr_v16i8_idx14: 3790; GFX9: ; %bb.0: 3791; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3792; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3793; GFX9-NEXT: s_waitcnt vmcnt(0) 3794; GFX9-NEXT: v_mov_b32_e32 v1, 8 3795; GFX9-NEXT: s_mov_b32 s4, 16 3796; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3797; GFX9-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3798; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3799; GFX9-NEXT: v_lshlrev_b32_sdwa v4, s4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3800; GFX9-NEXT: v_and_or_b32 v0, v3, v0, v1 3801; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v2 3802; GFX9-NEXT: v_or3_b32 v0, v0, v4, v1 3803; GFX9-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3804; GFX9-NEXT: s_setpc_b64 s[30:31] 3805; 3806; GFX8-LABEL: extractelement_vgpr_v16i8_idx14: 3807; GFX8: ; %bb.0: 3808; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3809; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3810; GFX8-NEXT: s_waitcnt vmcnt(0) 3811; GFX8-NEXT: v_mov_b32_e32 v0, 8 3812; GFX8-NEXT: v_mov_b32_e32 v1, 16 3813; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3814; GFX8-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3815; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3816; GFX8-NEXT: v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3817; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3818; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v2 3819; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3820; GFX8-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3821; GFX8-NEXT: s_setpc_b64 s[30:31] 3822; 3823; GFX7-LABEL: extractelement_vgpr_v16i8_idx14: 3824; GFX7: ; %bb.0: 3825; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3826; GFX7-NEXT: s_mov_b32 s6, 0 3827; GFX7-NEXT: s_mov_b32 s7, 0xf000 3828; GFX7-NEXT: s_mov_b64 s[4:5], 0 3829; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3830; GFX7-NEXT: s_waitcnt vmcnt(0) 3831; GFX7-NEXT: v_bfe_u32 v2, v3, 8, 8 3832; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v3 3833; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v3 3834; GFX7-NEXT: v_bfe_u32 v3, v3, 16, 8 3835; GFX7-NEXT: v_lshlrev_b32_e32 v2, 8, v2 3836; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 3837; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3838; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3839; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3840; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3841; GFX7-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3842; GFX7-NEXT: s_setpc_b64 s[30:31] 3843; 3844; GFX10-LABEL: extractelement_vgpr_v16i8_idx14: 3845; GFX10: ; %bb.0: 3846; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3847; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3848; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3849; GFX10-NEXT: s_waitcnt vmcnt(0) 3850; GFX10-NEXT: v_mov_b32_e32 v0, 8 3851; GFX10-NEXT: s_mov_b32 s4, 16 3852; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3853; GFX10-NEXT: v_lshrrev_b32_e32 v1, 24, v3 3854; GFX10-NEXT: v_lshlrev_b32_sdwa v2, s4, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3855; GFX10-NEXT: v_and_or_b32 v0, 0xff, v3, v0 3856; GFX10-NEXT: v_lshlrev_b32_e32 v1, 24, v1 3857; GFX10-NEXT: v_or3_b32 v0, v0, v2, v1 3858; GFX10-NEXT: v_lshrrev_b32_e32 v0, 16, v0 3859; GFX10-NEXT: s_setpc_b64 s[30:31] 3860 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3861 %element = extractelement <16 x i8> %vector, i32 14 3862 ret i8 %element 3863} 3864 3865define i8 @extractelement_vgpr_v16i8_idx15(<16 x i8> addrspace(1)* %ptr) { 3866; GFX9-LABEL: extractelement_vgpr_v16i8_idx15: 3867; GFX9: ; %bb.0: 3868; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3869; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3870; GFX9-NEXT: s_waitcnt vmcnt(0) 3871; GFX9-NEXT: v_mov_b32_e32 v1, 8 3872; GFX9-NEXT: v_mov_b32_e32 v0, 0xff 3873; GFX9-NEXT: v_mov_b32_e32 v2, 16 3874; GFX9-NEXT: v_lshrrev_b32_e32 v4, 24, v3 3875; GFX9-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3876; GFX9-NEXT: v_lshlrev_b32_sdwa v2, v2, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3877; GFX9-NEXT: v_and_or_b32 v0, v3, v0, v1 3878; GFX9-NEXT: v_lshlrev_b32_e32 v1, 24, v4 3879; GFX9-NEXT: v_or3_b32 v0, v0, v2, v1 3880; GFX9-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3881; GFX9-NEXT: s_setpc_b64 s[30:31] 3882; 3883; GFX8-LABEL: extractelement_vgpr_v16i8_idx15: 3884; GFX8: ; %bb.0: 3885; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3886; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 3887; GFX8-NEXT: s_waitcnt vmcnt(0) 3888; GFX8-NEXT: v_mov_b32_e32 v0, 8 3889; GFX8-NEXT: v_mov_b32_e32 v1, 16 3890; GFX8-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3891; GFX8-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3892; GFX8-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3893; GFX8-NEXT: v_or_b32_sdwa v0, v3, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD 3894; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3895; GFX8-NEXT: v_lshlrev_b32_e32 v1, 24, v2 3896; GFX8-NEXT: v_or_b32_e32 v0, v0, v1 3897; GFX8-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3898; GFX8-NEXT: s_setpc_b64 s[30:31] 3899; 3900; GFX7-LABEL: extractelement_vgpr_v16i8_idx15: 3901; GFX7: ; %bb.0: 3902; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3903; GFX7-NEXT: s_mov_b32 s6, 0 3904; GFX7-NEXT: s_mov_b32 s7, 0xf000 3905; GFX7-NEXT: s_mov_b64 s[4:5], 0 3906; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 3907; GFX7-NEXT: s_waitcnt vmcnt(0) 3908; GFX7-NEXT: v_bfe_u32 v2, v3, 8, 8 3909; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v3 3910; GFX7-NEXT: v_and_b32_e32 v1, 0xff, v3 3911; GFX7-NEXT: v_bfe_u32 v3, v3, 16, 8 3912; GFX7-NEXT: v_lshlrev_b32_e32 v2, 8, v2 3913; GFX7-NEXT: v_lshlrev_b32_e32 v3, 16, v3 3914; GFX7-NEXT: v_or_b32_e32 v1, v1, v2 3915; GFX7-NEXT: v_or_b32_e32 v1, v1, v3 3916; GFX7-NEXT: v_lshlrev_b32_e32 v0, 24, v0 3917; GFX7-NEXT: v_or_b32_e32 v0, v1, v0 3918; GFX7-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3919; GFX7-NEXT: s_setpc_b64 s[30:31] 3920; 3921; GFX10-LABEL: extractelement_vgpr_v16i8_idx15: 3922; GFX10: ; %bb.0: 3923; GFX10-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 3924; GFX10-NEXT: s_waitcnt_vscnt null, 0x0 3925; GFX10-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 3926; GFX10-NEXT: s_waitcnt vmcnt(0) 3927; GFX10-NEXT: v_mov_b32_e32 v0, 8 3928; GFX10-NEXT: v_mov_b32_e32 v1, 16 3929; GFX10-NEXT: v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_1 3930; GFX10-NEXT: v_lshrrev_b32_e32 v2, 24, v3 3931; GFX10-NEXT: v_lshlrev_b32_sdwa v1, v1, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:BYTE_2 3932; GFX10-NEXT: v_and_or_b32 v0, 0xff, v3, v0 3933; GFX10-NEXT: v_lshlrev_b32_e32 v2, 24, v2 3934; GFX10-NEXT: v_or3_b32 v0, v0, v1, v2 3935; GFX10-NEXT: v_lshrrev_b32_e32 v0, 24, v0 3936; GFX10-NEXT: s_setpc_b64 s[30:31] 3937 %vector = load <16 x i8>, <16 x i8> addrspace(1)* %ptr 3938 %element = extractelement <16 x i8> %vector, i32 15 3939 ret i8 %element 3940} 3941