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 6define amdgpu_ps i128 @extractelement_sgpr_v4i128_sgpr_idx(<4 x i128> addrspace(4)* inreg %ptr, i32 inreg %idx) { 7; GCN-LABEL: extractelement_sgpr_v4i128_sgpr_idx: 8; GCN: ; %bb.0: 9; GCN-NEXT: s_load_dwordx16 s[8:23], s[2:3], 0x0 10; GCN-NEXT: s_lshl_b32 m0, s4, 1 11; GCN-NEXT: s_waitcnt lgkmcnt(0) 12; GCN-NEXT: s_movrels_b64 s[0:1], s[8:9] 13; GCN-NEXT: s_movrels_b64 s[2:3], s[10:11] 14; GCN-NEXT: ; return to shader part epilog 15 %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr 16 %element = extractelement <4 x i128> %vector, i32 %idx 17 ret i128 %element 18} 19 20define amdgpu_ps i128 @extractelement_vgpr_v4i128_sgpr_idx(<4 x i128> addrspace(1)* %ptr, i32 inreg %idx) { 21; GFX9-LABEL: extractelement_vgpr_v4i128_sgpr_idx: 22; GFX9: ; %bb.0: 23; GFX9-NEXT: global_load_dwordx4 v[2:5], v[0:1], off 24; GFX9-NEXT: global_load_dwordx4 v[6:9], v[0:1], off offset:16 25; GFX9-NEXT: global_load_dwordx4 v[10:13], v[0:1], off offset:32 26; GFX9-NEXT: global_load_dwordx4 v[14:17], v[0:1], off offset:48 27; GFX9-NEXT: s_lshl_b32 s0, s2, 1 28; GFX9-NEXT: s_lshl_b32 s2, s0, 1 29; GFX9-NEXT: s_waitcnt vmcnt(0) 30; GFX9-NEXT: s_set_gpr_idx_on s2, gpr_idx(SRC0) 31; GFX9-NEXT: v_mov_b32_e32 v0, v2 32; GFX9-NEXT: v_mov_b32_e32 v1, v3 33; GFX9-NEXT: v_mov_b32_e32 v18, v2 34; GFX9-NEXT: v_mov_b32_e32 v3, v3 35; GFX9-NEXT: s_set_gpr_idx_off 36; GFX9-NEXT: v_readfirstlane_b32 s0, v0 37; GFX9-NEXT: v_readfirstlane_b32 s1, v1 38; GFX9-NEXT: v_readfirstlane_b32 s2, v18 39; GFX9-NEXT: v_readfirstlane_b32 s3, v3 40; GFX9-NEXT: ; return to shader part epilog 41; 42; GFX8-LABEL: extractelement_vgpr_v4i128_sgpr_idx: 43; GFX8: ; %bb.0: 44; GFX8-NEXT: v_add_u32_e32 v6, vcc, 16, v0 45; GFX8-NEXT: v_addc_u32_e32 v7, vcc, 0, v1, vcc 46; GFX8-NEXT: v_add_u32_e32 v10, vcc, 32, v0 47; GFX8-NEXT: v_addc_u32_e32 v11, vcc, 0, v1, vcc 48; GFX8-NEXT: flat_load_dwordx4 v[2:5], v[0:1] 49; GFX8-NEXT: flat_load_dwordx4 v[6:9], v[6:7] 50; GFX8-NEXT: v_add_u32_e32 v0, vcc, 48, v0 51; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc 52; GFX8-NEXT: flat_load_dwordx4 v[10:13], v[10:11] 53; GFX8-NEXT: flat_load_dwordx4 v[14:17], v[0:1] 54; GFX8-NEXT: s_lshl_b32 s0, s2, 1 55; GFX8-NEXT: s_lshl_b32 m0, s0, 1 56; GFX8-NEXT: s_waitcnt vmcnt(0) 57; GFX8-NEXT: v_movrels_b32_e32 v1, v3 58; GFX8-NEXT: v_movrels_b32_e32 v0, v2 59; GFX8-NEXT: v_mov_b32_e32 v3, v1 60; GFX8-NEXT: v_mov_b32_e32 v2, v0 61; GFX8-NEXT: v_readfirstlane_b32 s0, v0 62; GFX8-NEXT: v_readfirstlane_b32 s1, v1 63; GFX8-NEXT: v_readfirstlane_b32 s2, v2 64; GFX8-NEXT: v_readfirstlane_b32 s3, v3 65; GFX8-NEXT: ; return to shader part epilog 66; 67; GFX7-LABEL: extractelement_vgpr_v4i128_sgpr_idx: 68; GFX7: ; %bb.0: 69; GFX7-NEXT: s_mov_b32 s6, 0 70; GFX7-NEXT: s_mov_b32 s7, 0xf000 71; GFX7-NEXT: s_mov_b64 s[4:5], 0 72; GFX7-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64 73; GFX7-NEXT: buffer_load_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:16 74; GFX7-NEXT: buffer_load_dwordx4 v[10:13], v[0:1], s[4:7], 0 addr64 offset:32 75; GFX7-NEXT: buffer_load_dwordx4 v[14:17], v[0:1], s[4:7], 0 addr64 offset:48 76; GFX7-NEXT: s_lshl_b32 s0, s2, 1 77; GFX7-NEXT: s_lshl_b32 m0, s0, 1 78; GFX7-NEXT: s_waitcnt vmcnt(0) 79; GFX7-NEXT: v_movrels_b32_e32 v1, v3 80; GFX7-NEXT: v_movrels_b32_e32 v0, v2 81; GFX7-NEXT: v_mov_b32_e32 v3, v1 82; GFX7-NEXT: v_mov_b32_e32 v2, v0 83; GFX7-NEXT: v_readfirstlane_b32 s0, v0 84; GFX7-NEXT: v_readfirstlane_b32 s1, v1 85; GFX7-NEXT: v_readfirstlane_b32 s2, v2 86; GFX7-NEXT: v_readfirstlane_b32 s3, v3 87; GFX7-NEXT: ; return to shader part epilog 88 %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr 89 %element = extractelement <4 x i128> %vector, i32 %idx 90 ret i128 %element 91} 92 93define i128 @extractelement_vgpr_v4i128_vgpr_idx(<4 x i128> addrspace(1)* %ptr, i32 %idx) { 94; GFX9-LABEL: extractelement_vgpr_v4i128_vgpr_idx: 95; GFX9: ; %bb.0: 96; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 97; GFX9-NEXT: v_lshlrev_b32_e32 v16, 1, v2 98; GFX9-NEXT: global_load_dwordx4 v[2:5], v[0:1], off 99; GFX9-NEXT: global_load_dwordx4 v[6:9], v[0:1], off offset:16 100; GFX9-NEXT: v_add_u32_e32 v17, 1, v16 101; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], 1, v16 102; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v17 103; GFX9-NEXT: v_cmp_eq_u32_e64 s[6:7], 6, v16 104; GFX9-NEXT: v_cmp_eq_u32_e64 s[8:9], 7, v16 105; GFX9-NEXT: s_waitcnt vmcnt(1) 106; GFX9-NEXT: v_cndmask_b32_e64 v10, v2, v4, s[4:5] 107; GFX9-NEXT: v_cndmask_b32_e64 v11, v3, v5, s[4:5] 108; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 109; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v5, vcc 110; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 2, v16 111; GFX9-NEXT: s_waitcnt vmcnt(0) 112; GFX9-NEXT: v_cndmask_b32_e32 v4, v10, v6, vcc 113; GFX9-NEXT: v_cndmask_b32_e32 v5, v11, v7, vcc 114; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 2, v17 115; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc 116; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v7, vcc 117; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 3, v16 118; GFX9-NEXT: v_cndmask_b32_e32 v4, v4, v8, vcc 119; GFX9-NEXT: v_cndmask_b32_e32 v5, v5, v9, vcc 120; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 3, v17 121; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v8, vcc 122; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 123; GFX9-NEXT: global_load_dwordx4 v[8:11], v[0:1], off offset:32 124; GFX9-NEXT: global_load_dwordx4 v[12:15], v[0:1], off offset:48 125; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 4, v16 126; GFX9-NEXT: v_cmp_eq_u32_e64 s[4:5], 7, v17 127; GFX9-NEXT: s_waitcnt vmcnt(1) 128; GFX9-NEXT: v_cndmask_b32_e32 v0, v4, v8, vcc 129; GFX9-NEXT: v_cndmask_b32_e32 v1, v5, v9, vcc 130; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 4, v17 131; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v8, vcc 132; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 133; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 5, v16 134; GFX9-NEXT: v_cndmask_b32_e32 v0, v0, v10, vcc 135; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v11, vcc 136; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 5, v17 137; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v10, vcc 138; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v11, vcc 139; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 6, v17 140; GFX9-NEXT: s_waitcnt vmcnt(0) 141; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v12, vcc 142; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v12, s[6:7] 143; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v13, s[6:7] 144; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v13, vcc 145; GFX9-NEXT: v_cndmask_b32_e64 v0, v0, v14, s[8:9] 146; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v15, s[8:9] 147; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v14, s[4:5] 148; GFX9-NEXT: v_cndmask_b32_e64 v3, v3, v15, s[4:5] 149; GFX9-NEXT: s_setpc_b64 s[30:31] 150; 151; GFX8-LABEL: extractelement_vgpr_v4i128_vgpr_idx: 152; GFX8: ; %bb.0: 153; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 154; GFX8-NEXT: v_add_u32_e32 v3, vcc, 16, v0 155; GFX8-NEXT: v_addc_u32_e32 v4, vcc, 0, v1, vcc 156; GFX8-NEXT: flat_load_dwordx4 v[8:11], v[0:1] 157; GFX8-NEXT: flat_load_dwordx4 v[4:7], v[3:4] 158; GFX8-NEXT: v_lshlrev_b32_e32 v16, 1, v2 159; GFX8-NEXT: v_add_u32_e32 v17, vcc, 1, v16 160; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], 1, v16 161; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v17 162; GFX8-NEXT: v_cmp_eq_u32_e64 s[6:7], 6, v16 163; GFX8-NEXT: v_cmp_eq_u32_e64 s[8:9], 7, v16 164; GFX8-NEXT: s_waitcnt vmcnt(1) 165; GFX8-NEXT: v_cndmask_b32_e64 v2, v8, v10, s[4:5] 166; GFX8-NEXT: v_cndmask_b32_e64 v3, v9, v11, s[4:5] 167; GFX8-NEXT: v_cndmask_b32_e32 v8, v8, v10, vcc 168; GFX8-NEXT: v_cndmask_b32_e32 v9, v9, v11, vcc 169; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 2, v16 170; GFX8-NEXT: s_waitcnt vmcnt(0) 171; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 172; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v5, vcc 173; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 2, v17 174; GFX8-NEXT: v_cndmask_b32_e32 v4, v8, v4, vcc 175; GFX8-NEXT: v_cndmask_b32_e32 v5, v9, v5, vcc 176; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 3, v16 177; GFX8-NEXT: v_cndmask_b32_e32 v18, v2, v6, vcc 178; GFX8-NEXT: v_cndmask_b32_e32 v19, v3, v7, vcc 179; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 3, v17 180; GFX8-NEXT: v_cndmask_b32_e32 v4, v4, v6, vcc 181; GFX8-NEXT: v_cndmask_b32_e32 v5, v5, v7, vcc 182; GFX8-NEXT: v_add_u32_e32 v2, vcc, 32, v0 183; GFX8-NEXT: v_addc_u32_e32 v3, vcc, 0, v1, vcc 184; GFX8-NEXT: v_add_u32_e32 v0, vcc, 48, v0 185; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc 186; GFX8-NEXT: flat_load_dwordx4 v[8:11], v[2:3] 187; GFX8-NEXT: flat_load_dwordx4 v[12:15], v[0:1] 188; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 4, v16 189; GFX8-NEXT: v_cmp_eq_u32_e64 s[4:5], 7, v17 190; GFX8-NEXT: s_waitcnt vmcnt(1) 191; GFX8-NEXT: v_cndmask_b32_e32 v0, v18, v8, vcc 192; GFX8-NEXT: v_cndmask_b32_e32 v1, v19, v9, vcc 193; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 4, v17 194; GFX8-NEXT: v_cndmask_b32_e32 v2, v4, v8, vcc 195; GFX8-NEXT: v_cndmask_b32_e32 v3, v5, v9, vcc 196; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 5, v16 197; GFX8-NEXT: v_cndmask_b32_e32 v0, v0, v10, vcc 198; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v11, vcc 199; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 5, v17 200; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v10, vcc 201; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v11, vcc 202; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 6, v17 203; GFX8-NEXT: s_waitcnt vmcnt(0) 204; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v12, vcc 205; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v12, s[6:7] 206; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v13, s[6:7] 207; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v13, vcc 208; GFX8-NEXT: v_cndmask_b32_e64 v0, v0, v14, s[8:9] 209; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v15, s[8:9] 210; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v14, s[4:5] 211; GFX8-NEXT: v_cndmask_b32_e64 v3, v3, v15, s[4:5] 212; GFX8-NEXT: s_setpc_b64 s[30:31] 213; 214; GFX7-LABEL: extractelement_vgpr_v4i128_vgpr_idx: 215; GFX7: ; %bb.0: 216; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 217; GFX7-NEXT: s_mov_b32 s10, 0 218; GFX7-NEXT: s_mov_b32 s11, 0xf000 219; GFX7-NEXT: s_mov_b64 s[8:9], 0 220; GFX7-NEXT: v_lshlrev_b32_e32 v16, 1, v2 221; GFX7-NEXT: buffer_load_dwordx4 v[2:5], v[0:1], s[8:11], 0 addr64 222; GFX7-NEXT: buffer_load_dwordx4 v[6:9], v[0:1], s[8:11], 0 addr64 offset:16 223; GFX7-NEXT: v_add_i32_e32 v17, vcc, 1, v16 224; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], 1, v16 225; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v17 226; GFX7-NEXT: v_cmp_eq_u32_e64 s[6:7], 6, v16 227; GFX7-NEXT: s_waitcnt vmcnt(1) 228; GFX7-NEXT: v_cndmask_b32_e64 v10, v2, v4, s[4:5] 229; GFX7-NEXT: v_cndmask_b32_e64 v11, v3, v5, s[4:5] 230; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 231; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v5, vcc 232; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 2, v16 233; GFX7-NEXT: s_waitcnt vmcnt(0) 234; GFX7-NEXT: v_cndmask_b32_e32 v4, v10, v6, vcc 235; GFX7-NEXT: v_cndmask_b32_e32 v5, v11, v7, vcc 236; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 2, v17 237; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v6, vcc 238; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v7, vcc 239; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 3, v16 240; GFX7-NEXT: v_cndmask_b32_e32 v4, v4, v8, vcc 241; GFX7-NEXT: v_cndmask_b32_e32 v5, v5, v9, vcc 242; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 3, v17 243; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v8, vcc 244; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 245; GFX7-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[8:11], 0 addr64 offset:32 246; GFX7-NEXT: buffer_load_dwordx4 v[12:15], v[0:1], s[8:11], 0 addr64 offset:48 247; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 4, v16 248; GFX7-NEXT: v_cmp_eq_u32_e64 s[4:5], 7, v17 249; GFX7-NEXT: v_cmp_eq_u32_e64 s[8:9], 7, v16 250; GFX7-NEXT: s_waitcnt vmcnt(1) 251; GFX7-NEXT: v_cndmask_b32_e32 v0, v4, v8, vcc 252; GFX7-NEXT: v_cndmask_b32_e32 v1, v5, v9, vcc 253; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 4, v17 254; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v8, vcc 255; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 256; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 5, v16 257; GFX7-NEXT: v_cndmask_b32_e32 v0, v0, v10, vcc 258; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v11, vcc 259; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 5, v17 260; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v10, vcc 261; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v11, vcc 262; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 6, v17 263; GFX7-NEXT: s_waitcnt vmcnt(0) 264; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v12, vcc 265; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v12, s[6:7] 266; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v13, s[6:7] 267; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v13, vcc 268; GFX7-NEXT: v_cndmask_b32_e64 v0, v0, v14, s[8:9] 269; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v15, s[8:9] 270; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v14, s[4:5] 271; GFX7-NEXT: v_cndmask_b32_e64 v3, v3, v15, s[4:5] 272; GFX7-NEXT: s_setpc_b64 s[30:31] 273 %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr 274 %element = extractelement <4 x i128> %vector, i32 %idx 275 ret i128 %element 276} 277 278define amdgpu_ps i128 @extractelement_sgpr_v4i128_vgpr_idx(<4 x i128> addrspace(4)* inreg %ptr, i32 %idx) { 279; GFX9-LABEL: extractelement_sgpr_v4i128_vgpr_idx: 280; GFX9: ; %bb.0: 281; GFX9-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 282; GFX9-NEXT: v_lshlrev_b32_e32 v0, 1, v0 283; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 284; GFX9-NEXT: v_add_u32_e32 v19, 1, v0 285; GFX9-NEXT: s_waitcnt lgkmcnt(0) 286; GFX9-NEXT: v_mov_b32_e32 v1, s0 287; GFX9-NEXT: v_mov_b32_e32 v2, s1 288; GFX9-NEXT: v_mov_b32_e32 v3, s2 289; GFX9-NEXT: v_mov_b32_e32 v4, s3 290; GFX9-NEXT: v_mov_b32_e32 v5, s4 291; GFX9-NEXT: v_mov_b32_e32 v6, s5 292; GFX9-NEXT: v_cndmask_b32_e32 v17, v1, v3, vcc 293; GFX9-NEXT: v_cndmask_b32_e32 v18, v2, v4, vcc 294; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 295; GFX9-NEXT: v_mov_b32_e32 v7, s6 296; GFX9-NEXT: v_mov_b32_e32 v8, s7 297; GFX9-NEXT: v_cndmask_b32_e32 v17, v17, v5, vcc 298; GFX9-NEXT: v_cndmask_b32_e32 v18, v18, v6, vcc 299; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 300; GFX9-NEXT: v_mov_b32_e32 v9, s8 301; GFX9-NEXT: v_mov_b32_e32 v10, s9 302; GFX9-NEXT: v_cndmask_b32_e32 v17, v17, v7, vcc 303; GFX9-NEXT: v_cndmask_b32_e32 v18, v18, v8, vcc 304; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 4, v0 305; GFX9-NEXT: v_mov_b32_e32 v11, s10 306; GFX9-NEXT: v_mov_b32_e32 v12, s11 307; GFX9-NEXT: v_cndmask_b32_e32 v17, v17, v9, vcc 308; GFX9-NEXT: v_cndmask_b32_e32 v18, v18, v10, vcc 309; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 5, v0 310; GFX9-NEXT: v_mov_b32_e32 v13, s12 311; GFX9-NEXT: v_mov_b32_e32 v14, s13 312; GFX9-NEXT: v_cndmask_b32_e32 v17, v17, v11, vcc 313; GFX9-NEXT: v_cndmask_b32_e32 v18, v18, v12, vcc 314; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 6, v0 315; GFX9-NEXT: v_cndmask_b32_e32 v17, v17, v13, vcc 316; GFX9-NEXT: v_cndmask_b32_e32 v18, v18, v14, vcc 317; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 1, v19 318; GFX9-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc 319; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 320; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v19 321; GFX9-NEXT: v_mov_b32_e32 v15, s14 322; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 7, v0 323; GFX9-NEXT: v_mov_b32_e32 v16, s15 324; GFX9-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1] 325; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1] 326; GFX9-NEXT: v_cmp_eq_u32_e64 s[0:1], 3, v19 327; GFX9-NEXT: v_cndmask_b32_e64 v3, v1, v7, s[0:1] 328; GFX9-NEXT: v_cndmask_b32_e32 v0, v17, v15, vcc 329; GFX9-NEXT: v_cndmask_b32_e32 v1, v18, v16, vcc 330; GFX9-NEXT: v_cndmask_b32_e64 v2, v2, v8, s[0:1] 331; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 4, v19 332; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 333; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v10, vcc 334; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 5, v19 335; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v11, vcc 336; GFX9-NEXT: v_cndmask_b32_e32 v2, v2, v12, vcc 337; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 6, v19 338; GFX9-NEXT: v_cndmask_b32_e32 v3, v3, v13, vcc 339; GFX9-NEXT: v_cndmask_b32_e32 v4, v2, v14, vcc 340; GFX9-NEXT: v_cmp_eq_u32_e32 vcc, 7, v19 341; GFX9-NEXT: v_cndmask_b32_e32 v2, v3, v15, vcc 342; GFX9-NEXT: v_cndmask_b32_e32 v3, v4, v16, vcc 343; GFX9-NEXT: v_readfirstlane_b32 s0, v0 344; GFX9-NEXT: v_readfirstlane_b32 s1, v1 345; GFX9-NEXT: v_readfirstlane_b32 s2, v2 346; GFX9-NEXT: v_readfirstlane_b32 s3, v3 347; GFX9-NEXT: ; return to shader part epilog 348; 349; GFX8-LABEL: extractelement_sgpr_v4i128_vgpr_idx: 350; GFX8: ; %bb.0: 351; GFX8-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 352; GFX8-NEXT: v_lshlrev_b32_e32 v0, 1, v0 353; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 354; GFX8-NEXT: s_waitcnt lgkmcnt(0) 355; GFX8-NEXT: v_mov_b32_e32 v1, s0 356; GFX8-NEXT: v_mov_b32_e32 v3, s2 357; GFX8-NEXT: v_mov_b32_e32 v2, s1 358; GFX8-NEXT: v_mov_b32_e32 v4, s3 359; GFX8-NEXT: v_mov_b32_e32 v5, s4 360; GFX8-NEXT: v_mov_b32_e32 v6, s5 361; GFX8-NEXT: v_cndmask_b32_e32 v17, v1, v3, vcc 362; GFX8-NEXT: v_cndmask_b32_e32 v18, v2, v4, vcc 363; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 364; GFX8-NEXT: v_mov_b32_e32 v7, s6 365; GFX8-NEXT: v_mov_b32_e32 v8, s7 366; GFX8-NEXT: v_cndmask_b32_e32 v17, v17, v5, vcc 367; GFX8-NEXT: v_cndmask_b32_e32 v18, v18, v6, vcc 368; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 369; GFX8-NEXT: v_mov_b32_e32 v9, s8 370; GFX8-NEXT: v_mov_b32_e32 v10, s9 371; GFX8-NEXT: v_cndmask_b32_e32 v17, v17, v7, vcc 372; GFX8-NEXT: v_cndmask_b32_e32 v18, v18, v8, vcc 373; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 4, v0 374; GFX8-NEXT: v_mov_b32_e32 v11, s10 375; GFX8-NEXT: v_mov_b32_e32 v12, s11 376; GFX8-NEXT: v_cndmask_b32_e32 v17, v17, v9, vcc 377; GFX8-NEXT: v_cndmask_b32_e32 v18, v18, v10, vcc 378; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 5, v0 379; GFX8-NEXT: v_mov_b32_e32 v13, s12 380; GFX8-NEXT: v_mov_b32_e32 v14, s13 381; GFX8-NEXT: v_cndmask_b32_e32 v17, v17, v11, vcc 382; GFX8-NEXT: v_cndmask_b32_e32 v18, v18, v12, vcc 383; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 6, v0 384; GFX8-NEXT: v_cndmask_b32_e32 v17, v17, v13, vcc 385; GFX8-NEXT: v_cndmask_b32_e32 v18, v18, v14, vcc 386; GFX8-NEXT: v_add_u32_e32 v19, vcc, 1, v0 387; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 1, v19 388; GFX8-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc 389; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 390; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v19 391; GFX8-NEXT: v_mov_b32_e32 v15, s14 392; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 7, v0 393; GFX8-NEXT: v_mov_b32_e32 v16, s15 394; GFX8-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1] 395; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1] 396; GFX8-NEXT: v_cmp_eq_u32_e64 s[0:1], 3, v19 397; GFX8-NEXT: v_cndmask_b32_e64 v3, v1, v7, s[0:1] 398; GFX8-NEXT: v_cndmask_b32_e32 v0, v17, v15, vcc 399; GFX8-NEXT: v_cndmask_b32_e32 v1, v18, v16, vcc 400; GFX8-NEXT: v_cndmask_b32_e64 v2, v2, v8, s[0:1] 401; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 4, v19 402; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 403; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v10, vcc 404; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 5, v19 405; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v11, vcc 406; GFX8-NEXT: v_cndmask_b32_e32 v2, v2, v12, vcc 407; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 6, v19 408; GFX8-NEXT: v_cndmask_b32_e32 v3, v3, v13, vcc 409; GFX8-NEXT: v_cndmask_b32_e32 v4, v2, v14, vcc 410; GFX8-NEXT: v_cmp_eq_u32_e32 vcc, 7, v19 411; GFX8-NEXT: v_cndmask_b32_e32 v2, v3, v15, vcc 412; GFX8-NEXT: v_cndmask_b32_e32 v3, v4, v16, vcc 413; GFX8-NEXT: v_readfirstlane_b32 s0, v0 414; GFX8-NEXT: v_readfirstlane_b32 s1, v1 415; GFX8-NEXT: v_readfirstlane_b32 s2, v2 416; GFX8-NEXT: v_readfirstlane_b32 s3, v3 417; GFX8-NEXT: ; return to shader part epilog 418; 419; GFX7-LABEL: extractelement_sgpr_v4i128_vgpr_idx: 420; GFX7: ; %bb.0: 421; GFX7-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 422; GFX7-NEXT: v_lshlrev_b32_e32 v0, 1, v0 423; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v0 424; GFX7-NEXT: s_waitcnt lgkmcnt(0) 425; GFX7-NEXT: v_mov_b32_e32 v1, s0 426; GFX7-NEXT: v_mov_b32_e32 v3, s2 427; GFX7-NEXT: v_mov_b32_e32 v2, s1 428; GFX7-NEXT: v_mov_b32_e32 v4, s3 429; GFX7-NEXT: v_mov_b32_e32 v5, s4 430; GFX7-NEXT: v_mov_b32_e32 v6, s5 431; GFX7-NEXT: v_cndmask_b32_e32 v17, v1, v3, vcc 432; GFX7-NEXT: v_cndmask_b32_e32 v18, v2, v4, vcc 433; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 2, v0 434; GFX7-NEXT: v_mov_b32_e32 v7, s6 435; GFX7-NEXT: v_mov_b32_e32 v8, s7 436; GFX7-NEXT: v_cndmask_b32_e32 v17, v17, v5, vcc 437; GFX7-NEXT: v_cndmask_b32_e32 v18, v18, v6, vcc 438; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 3, v0 439; GFX7-NEXT: v_mov_b32_e32 v9, s8 440; GFX7-NEXT: v_mov_b32_e32 v10, s9 441; GFX7-NEXT: v_cndmask_b32_e32 v17, v17, v7, vcc 442; GFX7-NEXT: v_cndmask_b32_e32 v18, v18, v8, vcc 443; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 4, v0 444; GFX7-NEXT: v_mov_b32_e32 v11, s10 445; GFX7-NEXT: v_mov_b32_e32 v12, s11 446; GFX7-NEXT: v_cndmask_b32_e32 v17, v17, v9, vcc 447; GFX7-NEXT: v_cndmask_b32_e32 v18, v18, v10, vcc 448; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 5, v0 449; GFX7-NEXT: v_mov_b32_e32 v13, s12 450; GFX7-NEXT: v_mov_b32_e32 v14, s13 451; GFX7-NEXT: v_cndmask_b32_e32 v17, v17, v11, vcc 452; GFX7-NEXT: v_cndmask_b32_e32 v18, v18, v12, vcc 453; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 6, v0 454; GFX7-NEXT: v_cndmask_b32_e32 v17, v17, v13, vcc 455; GFX7-NEXT: v_cndmask_b32_e32 v18, v18, v14, vcc 456; GFX7-NEXT: v_add_i32_e32 v19, vcc, 1, v0 457; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 1, v19 458; GFX7-NEXT: v_cndmask_b32_e32 v1, v1, v3, vcc 459; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v4, vcc 460; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 2, v19 461; GFX7-NEXT: v_mov_b32_e32 v15, s14 462; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 7, v0 463; GFX7-NEXT: v_mov_b32_e32 v16, s15 464; GFX7-NEXT: v_cndmask_b32_e64 v1, v1, v5, s[0:1] 465; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v6, s[0:1] 466; GFX7-NEXT: v_cmp_eq_u32_e64 s[0:1], 3, v19 467; GFX7-NEXT: v_cndmask_b32_e64 v3, v1, v7, s[0:1] 468; GFX7-NEXT: v_cndmask_b32_e32 v0, v17, v15, vcc 469; GFX7-NEXT: v_cndmask_b32_e32 v1, v18, v16, vcc 470; GFX7-NEXT: v_cndmask_b32_e64 v2, v2, v8, s[0:1] 471; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 4, v19 472; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v9, vcc 473; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v10, vcc 474; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 5, v19 475; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v11, vcc 476; GFX7-NEXT: v_cndmask_b32_e32 v2, v2, v12, vcc 477; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 6, v19 478; GFX7-NEXT: v_cndmask_b32_e32 v3, v3, v13, vcc 479; GFX7-NEXT: v_cndmask_b32_e32 v4, v2, v14, vcc 480; GFX7-NEXT: v_cmp_eq_u32_e32 vcc, 7, v19 481; GFX7-NEXT: v_cndmask_b32_e32 v2, v3, v15, vcc 482; GFX7-NEXT: v_cndmask_b32_e32 v3, v4, v16, vcc 483; GFX7-NEXT: v_readfirstlane_b32 s0, v0 484; GFX7-NEXT: v_readfirstlane_b32 s1, v1 485; GFX7-NEXT: v_readfirstlane_b32 s2, v2 486; GFX7-NEXT: v_readfirstlane_b32 s3, v3 487; GFX7-NEXT: ; return to shader part epilog 488 %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr 489 %element = extractelement <4 x i128> %vector, i32 %idx 490 ret i128 %element 491} 492 493define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx0(<4 x i128> addrspace(4)* inreg %ptr) { 494; GCN-LABEL: extractelement_sgpr_v4i128_idx0: 495; GCN: ; %bb.0: 496; GCN-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 497; GCN-NEXT: s_waitcnt lgkmcnt(0) 498; GCN-NEXT: ; return to shader part epilog 499 %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr 500 %element = extractelement <4 x i128> %vector, i32 0 501 ret i128 %element 502} 503 504define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx1(<4 x i128> addrspace(4)* inreg %ptr) { 505; GCN-LABEL: extractelement_sgpr_v4i128_idx1: 506; GCN: ; %bb.0: 507; GCN-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 508; GCN-NEXT: s_waitcnt lgkmcnt(0) 509; GCN-NEXT: s_mov_b32 s0, s4 510; GCN-NEXT: s_mov_b32 s1, s5 511; GCN-NEXT: s_mov_b32 s2, s6 512; GCN-NEXT: s_mov_b32 s3, s7 513; GCN-NEXT: ; return to shader part epilog 514 %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr 515 %element = extractelement <4 x i128> %vector, i32 1 516 ret i128 %element 517} 518 519define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx2(<4 x i128> addrspace(4)* inreg %ptr) { 520; GCN-LABEL: extractelement_sgpr_v4i128_idx2: 521; GCN: ; %bb.0: 522; GCN-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 523; GCN-NEXT: s_waitcnt lgkmcnt(0) 524; GCN-NEXT: s_mov_b32 s0, s8 525; GCN-NEXT: s_mov_b32 s1, s9 526; GCN-NEXT: s_mov_b32 s2, s10 527; GCN-NEXT: s_mov_b32 s3, s11 528; GCN-NEXT: ; return to shader part epilog 529 %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr 530 %element = extractelement <4 x i128> %vector, i32 2 531 ret i128 %element 532} 533 534define amdgpu_ps i128 @extractelement_sgpr_v4i128_idx3(<4 x i128> addrspace(4)* inreg %ptr) { 535; GCN-LABEL: extractelement_sgpr_v4i128_idx3: 536; GCN: ; %bb.0: 537; GCN-NEXT: s_load_dwordx16 s[0:15], s[2:3], 0x0 538; GCN-NEXT: s_waitcnt lgkmcnt(0) 539; GCN-NEXT: s_mov_b32 s0, s12 540; GCN-NEXT: s_mov_b32 s1, s13 541; GCN-NEXT: s_mov_b32 s2, s14 542; GCN-NEXT: s_mov_b32 s3, s15 543; GCN-NEXT: ; return to shader part epilog 544 %vector = load <4 x i128>, <4 x i128> addrspace(4)* %ptr 545 %element = extractelement <4 x i128> %vector, i32 3 546 ret i128 %element 547} 548 549define i128 @extractelement_vgpr_v4i128_idx0(<4 x i128> addrspace(1)* %ptr) { 550; GFX9-LABEL: extractelement_vgpr_v4i128_idx0: 551; GFX9: ; %bb.0: 552; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 553; GFX9-NEXT: global_load_dwordx4 v[0:3], v[0:1], off 554; GFX9-NEXT: s_waitcnt vmcnt(0) 555; GFX9-NEXT: s_setpc_b64 s[30:31] 556; 557; GFX8-LABEL: extractelement_vgpr_v4i128_idx0: 558; GFX8: ; %bb.0: 559; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 560; GFX8-NEXT: flat_load_dwordx4 v[0:3], v[0:1] 561; GFX8-NEXT: s_waitcnt vmcnt(0) 562; GFX8-NEXT: s_setpc_b64 s[30:31] 563; 564; GFX7-LABEL: extractelement_vgpr_v4i128_idx0: 565; GFX7: ; %bb.0: 566; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 567; GFX7-NEXT: s_mov_b32 s6, 0 568; GFX7-NEXT: s_mov_b32 s7, 0xf000 569; GFX7-NEXT: s_mov_b64 s[4:5], 0 570; GFX7-NEXT: buffer_load_dwordx4 v[0:3], v[0:1], s[4:7], 0 addr64 571; GFX7-NEXT: s_waitcnt vmcnt(0) 572; GFX7-NEXT: s_setpc_b64 s[30:31] 573 %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr 574 %element = extractelement <4 x i128> %vector, i32 0 575 ret i128 %element 576} 577 578define i128 @extractelement_vgpr_v4i128_idx1(<4 x i128> addrspace(1)* %ptr) { 579; GFX9-LABEL: extractelement_vgpr_v4i128_idx1: 580; GFX9: ; %bb.0: 581; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 582; GFX9-NEXT: global_load_dwordx4 v[4:7], v[0:1], off offset:16 583; GFX9-NEXT: s_waitcnt vmcnt(0) 584; GFX9-NEXT: v_mov_b32_e32 v0, v4 585; GFX9-NEXT: v_mov_b32_e32 v1, v5 586; GFX9-NEXT: v_mov_b32_e32 v2, v6 587; GFX9-NEXT: v_mov_b32_e32 v3, v7 588; GFX9-NEXT: s_setpc_b64 s[30:31] 589; 590; GFX8-LABEL: extractelement_vgpr_v4i128_idx1: 591; GFX8: ; %bb.0: 592; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 593; GFX8-NEXT: v_add_u32_e32 v0, vcc, 16, v0 594; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc 595; GFX8-NEXT: flat_load_dwordx4 v[4:7], v[0:1] 596; GFX8-NEXT: s_waitcnt vmcnt(0) 597; GFX8-NEXT: v_mov_b32_e32 v0, v4 598; GFX8-NEXT: v_mov_b32_e32 v1, v5 599; GFX8-NEXT: v_mov_b32_e32 v2, v6 600; GFX8-NEXT: v_mov_b32_e32 v3, v7 601; GFX8-NEXT: s_setpc_b64 s[30:31] 602; 603; GFX7-LABEL: extractelement_vgpr_v4i128_idx1: 604; GFX7: ; %bb.0: 605; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 606; GFX7-NEXT: s_mov_b32 s6, 0 607; GFX7-NEXT: s_mov_b32 s7, 0xf000 608; GFX7-NEXT: s_mov_b64 s[4:5], 0 609; GFX7-NEXT: buffer_load_dwordx4 v[4:7], v[0:1], s[4:7], 0 addr64 offset:16 610; GFX7-NEXT: s_waitcnt vmcnt(0) 611; GFX7-NEXT: v_mov_b32_e32 v0, v4 612; GFX7-NEXT: v_mov_b32_e32 v1, v5 613; GFX7-NEXT: v_mov_b32_e32 v2, v6 614; GFX7-NEXT: v_mov_b32_e32 v3, v7 615; GFX7-NEXT: s_setpc_b64 s[30:31] 616 %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr 617 %element = extractelement <4 x i128> %vector, i32 1 618 ret i128 %element 619} 620 621define i128 @extractelement_vgpr_v4i128_idx2(<4 x i128> addrspace(1)* %ptr) { 622; GFX9-LABEL: extractelement_vgpr_v4i128_idx2: 623; GFX9: ; %bb.0: 624; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 625; GFX9-NEXT: global_load_dwordx4 v[8:11], v[0:1], off offset:32 626; GFX9-NEXT: s_waitcnt vmcnt(0) 627; GFX9-NEXT: v_mov_b32_e32 v0, v8 628; GFX9-NEXT: v_mov_b32_e32 v1, v9 629; GFX9-NEXT: v_mov_b32_e32 v2, v10 630; GFX9-NEXT: v_mov_b32_e32 v3, v11 631; GFX9-NEXT: s_setpc_b64 s[30:31] 632; 633; GFX8-LABEL: extractelement_vgpr_v4i128_idx2: 634; GFX8: ; %bb.0: 635; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 636; GFX8-NEXT: v_add_u32_e32 v0, vcc, 32, v0 637; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc 638; GFX8-NEXT: flat_load_dwordx4 v[8:11], v[0:1] 639; GFX8-NEXT: s_waitcnt vmcnt(0) 640; GFX8-NEXT: v_mov_b32_e32 v0, v8 641; GFX8-NEXT: v_mov_b32_e32 v1, v9 642; GFX8-NEXT: v_mov_b32_e32 v2, v10 643; GFX8-NEXT: v_mov_b32_e32 v3, v11 644; GFX8-NEXT: s_setpc_b64 s[30:31] 645; 646; GFX7-LABEL: extractelement_vgpr_v4i128_idx2: 647; GFX7: ; %bb.0: 648; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 649; GFX7-NEXT: s_mov_b32 s6, 0 650; GFX7-NEXT: s_mov_b32 s7, 0xf000 651; GFX7-NEXT: s_mov_b64 s[4:5], 0 652; GFX7-NEXT: buffer_load_dwordx4 v[8:11], v[0:1], s[4:7], 0 addr64 offset:32 653; GFX7-NEXT: s_waitcnt vmcnt(0) 654; GFX7-NEXT: v_mov_b32_e32 v0, v8 655; GFX7-NEXT: v_mov_b32_e32 v1, v9 656; GFX7-NEXT: v_mov_b32_e32 v2, v10 657; GFX7-NEXT: v_mov_b32_e32 v3, v11 658; GFX7-NEXT: s_setpc_b64 s[30:31] 659 %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr 660 %element = extractelement <4 x i128> %vector, i32 2 661 ret i128 %element 662} 663 664define i128 @extractelement_vgpr_v4i128_idx3(<4 x i128> addrspace(1)* %ptr) { 665; GFX9-LABEL: extractelement_vgpr_v4i128_idx3: 666; GFX9: ; %bb.0: 667; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 668; GFX9-NEXT: global_load_dwordx4 v[12:15], v[0:1], off offset:48 669; GFX9-NEXT: s_waitcnt vmcnt(0) 670; GFX9-NEXT: v_mov_b32_e32 v0, v12 671; GFX9-NEXT: v_mov_b32_e32 v1, v13 672; GFX9-NEXT: v_mov_b32_e32 v2, v14 673; GFX9-NEXT: v_mov_b32_e32 v3, v15 674; GFX9-NEXT: s_setpc_b64 s[30:31] 675; 676; GFX8-LABEL: extractelement_vgpr_v4i128_idx3: 677; GFX8: ; %bb.0: 678; GFX8-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 679; GFX8-NEXT: v_add_u32_e32 v0, vcc, 48, v0 680; GFX8-NEXT: v_addc_u32_e32 v1, vcc, 0, v1, vcc 681; GFX8-NEXT: flat_load_dwordx4 v[12:15], v[0:1] 682; GFX8-NEXT: s_waitcnt vmcnt(0) 683; GFX8-NEXT: v_mov_b32_e32 v0, v12 684; GFX8-NEXT: v_mov_b32_e32 v1, v13 685; GFX8-NEXT: v_mov_b32_e32 v2, v14 686; GFX8-NEXT: v_mov_b32_e32 v3, v15 687; GFX8-NEXT: s_setpc_b64 s[30:31] 688; 689; GFX7-LABEL: extractelement_vgpr_v4i128_idx3: 690; GFX7: ; %bb.0: 691; GFX7-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0) 692; GFX7-NEXT: s_mov_b32 s6, 0 693; GFX7-NEXT: s_mov_b32 s7, 0xf000 694; GFX7-NEXT: s_mov_b64 s[4:5], 0 695; GFX7-NEXT: buffer_load_dwordx4 v[12:15], v[0:1], s[4:7], 0 addr64 offset:48 696; GFX7-NEXT: s_waitcnt vmcnt(0) 697; GFX7-NEXT: v_mov_b32_e32 v0, v12 698; GFX7-NEXT: v_mov_b32_e32 v1, v13 699; GFX7-NEXT: v_mov_b32_e32 v2, v14 700; GFX7-NEXT: v_mov_b32_e32 v3, v15 701; GFX7-NEXT: s_setpc_b64 s[30:31] 702 %vector = load <4 x i128>, <4 x i128> addrspace(1)* %ptr 703 %element = extractelement <4 x i128> %vector, i32 3 704 ret i128 %element 705} 706