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