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