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