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