4347 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s5 6 7define void @v_shuffle_v2i16_v3i16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2i16_v3i16__u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <4 x i16> asm "; def $0", "=v"()13 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>14 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> poison15 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 416 ret void17}18 19define void @v_shuffle_v2i16_v3i16__0_u(ptr addrspace(1) inreg %ptr) {20; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_u:21; GFX900: ; %bb.0:22; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; GFX900-NEXT: v_mov_b32_e32 v2, 024; GFX900-NEXT: ;;#ASMSTART25; GFX900-NEXT: ; def v[0:1]26; GFX900-NEXT: ;;#ASMEND27; GFX900-NEXT: global_store_dword v2, v0, s[16:17]28; GFX900-NEXT: s_waitcnt vmcnt(0)29; GFX900-NEXT: s_setpc_b64 s[30:31]30;31; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_u:32; GFX90A: ; %bb.0:33; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)34; GFX90A-NEXT: v_mov_b32_e32 v2, 035; GFX90A-NEXT: ;;#ASMSTART36; GFX90A-NEXT: ; def v[0:1]37; GFX90A-NEXT: ;;#ASMEND38; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]39; GFX90A-NEXT: s_waitcnt vmcnt(0)40; GFX90A-NEXT: s_setpc_b64 s[30:31]41;42; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_u:43; GFX942: ; %bb.0:44; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)45; GFX942-NEXT: v_mov_b32_e32 v2, 046; GFX942-NEXT: ;;#ASMSTART47; GFX942-NEXT: ; def v[0:1]48; GFX942-NEXT: ;;#ASMEND49; GFX942-NEXT: global_store_dword v2, v0, s[0:1]50; GFX942-NEXT: s_waitcnt vmcnt(0)51; GFX942-NEXT: s_setpc_b64 s[30:31]52 %vec0 = call <4 x i16> asm "; def $0", "=v"()53 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>54 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 poison>55 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 456 ret void57}58 59define void @v_shuffle_v2i16_v3i16__1_u(ptr addrspace(1) inreg %ptr) {60; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_u:61; GFX900: ; %bb.0:62; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)63; GFX900-NEXT: ;;#ASMSTART64; GFX900-NEXT: ; def v[0:1]65; GFX900-NEXT: ;;#ASMEND66; GFX900-NEXT: v_mov_b32_e32 v2, 067; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 1668; GFX900-NEXT: global_store_dword v2, v0, s[16:17]69; GFX900-NEXT: s_waitcnt vmcnt(0)70; GFX900-NEXT: s_setpc_b64 s[30:31]71;72; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_u:73; GFX90A: ; %bb.0:74; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)75; GFX90A-NEXT: ;;#ASMSTART76; GFX90A-NEXT: ; def v[0:1]77; GFX90A-NEXT: ;;#ASMEND78; GFX90A-NEXT: v_mov_b32_e32 v2, 079; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 1680; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]81; GFX90A-NEXT: s_waitcnt vmcnt(0)82; GFX90A-NEXT: s_setpc_b64 s[30:31]83;84; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_u:85; GFX942: ; %bb.0:86; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)87; GFX942-NEXT: ;;#ASMSTART88; GFX942-NEXT: ; def v[0:1]89; GFX942-NEXT: ;;#ASMEND90; GFX942-NEXT: v_mov_b32_e32 v2, 091; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 1692; GFX942-NEXT: global_store_dword v2, v0, s[0:1]93; GFX942-NEXT: s_waitcnt vmcnt(0)94; GFX942-NEXT: s_setpc_b64 s[30:31]95 %vec0 = call <4 x i16> asm "; def $0", "=v"()96 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>97 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 poison>98 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 499 ret void100}101 102define void @v_shuffle_v2i16_v3i16__2_u(ptr addrspace(1) inreg %ptr) {103; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_u:104; GFX900: ; %bb.0:105; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)106; GFX900-NEXT: v_mov_b32_e32 v2, 0107; GFX900-NEXT: ;;#ASMSTART108; GFX900-NEXT: ; def v[0:1]109; GFX900-NEXT: ;;#ASMEND110; GFX900-NEXT: global_store_dword v2, v1, s[16:17]111; GFX900-NEXT: s_waitcnt vmcnt(0)112; GFX900-NEXT: s_setpc_b64 s[30:31]113;114; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_u:115; GFX90A: ; %bb.0:116; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)117; GFX90A-NEXT: v_mov_b32_e32 v2, 0118; GFX90A-NEXT: ;;#ASMSTART119; GFX90A-NEXT: ; def v[0:1]120; GFX90A-NEXT: ;;#ASMEND121; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]122; GFX90A-NEXT: s_waitcnt vmcnt(0)123; GFX90A-NEXT: s_setpc_b64 s[30:31]124;125; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_u:126; GFX942: ; %bb.0:127; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)128; GFX942-NEXT: v_mov_b32_e32 v2, 0129; GFX942-NEXT: ;;#ASMSTART130; GFX942-NEXT: ; def v[0:1]131; GFX942-NEXT: ;;#ASMEND132; GFX942-NEXT: global_store_dword v2, v1, s[0:1]133; GFX942-NEXT: s_waitcnt vmcnt(0)134; GFX942-NEXT: s_setpc_b64 s[30:31]135 %vec0 = call <4 x i16> asm "; def $0", "=v"()136 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>137 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 poison>138 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4139 ret void140}141 142define void @v_shuffle_v2i16_v3i16__3_u(ptr addrspace(1) inreg %ptr) {143; GFX9-LABEL: v_shuffle_v2i16_v3i16__3_u:144; GFX9: ; %bb.0:145; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)146; GFX9-NEXT: s_setpc_b64 s[30:31]147 %vec0 = call <4 x i16> asm "; def $0", "=v"()148 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>149 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 poison>150 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4151 ret void152}153 154define void @v_shuffle_v2i16_v3i16__4_u(ptr addrspace(1) inreg %ptr) {155; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_u:156; GFX900: ; %bb.0:157; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)158; GFX900-NEXT: ;;#ASMSTART159; GFX900-NEXT: ; def v[0:1]160; GFX900-NEXT: ;;#ASMEND161; GFX900-NEXT: v_mov_b32_e32 v2, 0162; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 16163; GFX900-NEXT: global_store_dword v2, v0, s[16:17]164; GFX900-NEXT: s_waitcnt vmcnt(0)165; GFX900-NEXT: s_setpc_b64 s[30:31]166;167; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_u:168; GFX90A: ; %bb.0:169; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)170; GFX90A-NEXT: ;;#ASMSTART171; GFX90A-NEXT: ; def v[0:1]172; GFX90A-NEXT: ;;#ASMEND173; GFX90A-NEXT: v_mov_b32_e32 v2, 0174; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 16175; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]176; GFX90A-NEXT: s_waitcnt vmcnt(0)177; GFX90A-NEXT: s_setpc_b64 s[30:31]178;179; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_u:180; GFX942: ; %bb.0:181; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)182; GFX942-NEXT: ;;#ASMSTART183; GFX942-NEXT: ; def v[0:1]184; GFX942-NEXT: ;;#ASMEND185; GFX942-NEXT: v_mov_b32_e32 v2, 0186; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 16187; GFX942-NEXT: global_store_dword v2, v0, s[0:1]188; GFX942-NEXT: s_waitcnt vmcnt(0)189; GFX942-NEXT: s_setpc_b64 s[30:31]190 %vec0 = call <4 x i16> asm "; def $0", "=v"()191 %vec1 = call <4 x i16> asm "; def $0", "=v"()192 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>193 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>194 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 poison>195 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4196 ret void197}198 199define void @v_shuffle_v2i16_v3i16__5_u(ptr addrspace(1) inreg %ptr) {200; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_u:201; GFX900: ; %bb.0:202; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)203; GFX900-NEXT: v_mov_b32_e32 v2, 0204; GFX900-NEXT: ;;#ASMSTART205; GFX900-NEXT: ; def v[0:1]206; GFX900-NEXT: ;;#ASMEND207; GFX900-NEXT: global_store_dword v2, v1, s[16:17]208; GFX900-NEXT: s_waitcnt vmcnt(0)209; GFX900-NEXT: s_setpc_b64 s[30:31]210;211; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_u:212; GFX90A: ; %bb.0:213; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)214; GFX90A-NEXT: v_mov_b32_e32 v2, 0215; GFX90A-NEXT: ;;#ASMSTART216; GFX90A-NEXT: ; def v[0:1]217; GFX90A-NEXT: ;;#ASMEND218; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]219; GFX90A-NEXT: s_waitcnt vmcnt(0)220; GFX90A-NEXT: s_setpc_b64 s[30:31]221;222; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_u:223; GFX942: ; %bb.0:224; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)225; GFX942-NEXT: v_mov_b32_e32 v2, 0226; GFX942-NEXT: ;;#ASMSTART227; GFX942-NEXT: ; def v[0:1]228; GFX942-NEXT: ;;#ASMEND229; GFX942-NEXT: global_store_dword v2, v1, s[0:1]230; GFX942-NEXT: s_waitcnt vmcnt(0)231; GFX942-NEXT: s_setpc_b64 s[30:31]232 %vec0 = call <4 x i16> asm "; def $0", "=v"()233 %vec1 = call <4 x i16> asm "; def $0", "=v"()234 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>235 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>236 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 poison>237 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4238 ret void239}240 241define void @v_shuffle_v2i16_v3i16__5_0(ptr addrspace(1) inreg %ptr) {242; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_0:243; GFX900: ; %bb.0:244; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)245; GFX900-NEXT: ;;#ASMSTART246; GFX900-NEXT: ; def v[0:1]247; GFX900-NEXT: ;;#ASMEND248; GFX900-NEXT: s_mov_b32 s4, 0x5040100249; GFX900-NEXT: v_mov_b32_e32 v3, 0250; GFX900-NEXT: ;;#ASMSTART251; GFX900-NEXT: ; def v[1:2]252; GFX900-NEXT: ;;#ASMEND253; GFX900-NEXT: v_perm_b32 v0, v0, v2, s4254; GFX900-NEXT: global_store_dword v3, v0, s[16:17]255; GFX900-NEXT: s_waitcnt vmcnt(0)256; GFX900-NEXT: s_setpc_b64 s[30:31]257;258; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_0:259; GFX90A: ; %bb.0:260; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)261; GFX90A-NEXT: ;;#ASMSTART262; GFX90A-NEXT: ; def v[0:1]263; GFX90A-NEXT: ;;#ASMEND264; GFX90A-NEXT: s_mov_b32 s4, 0x5040100265; GFX90A-NEXT: v_mov_b32_e32 v4, 0266; GFX90A-NEXT: ;;#ASMSTART267; GFX90A-NEXT: ; def v[2:3]268; GFX90A-NEXT: ;;#ASMEND269; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s4270; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]271; GFX90A-NEXT: s_waitcnt vmcnt(0)272; GFX90A-NEXT: s_setpc_b64 s[30:31]273;274; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_0:275; GFX942: ; %bb.0:276; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)277; GFX942-NEXT: ;;#ASMSTART278; GFX942-NEXT: ; def v[0:1]279; GFX942-NEXT: ;;#ASMEND280; GFX942-NEXT: s_mov_b32 s2, 0x5040100281; GFX942-NEXT: v_mov_b32_e32 v4, 0282; GFX942-NEXT: ;;#ASMSTART283; GFX942-NEXT: ; def v[2:3]284; GFX942-NEXT: ;;#ASMEND285; GFX942-NEXT: s_nop 0286; GFX942-NEXT: v_perm_b32 v0, v0, v3, s2287; GFX942-NEXT: global_store_dword v4, v0, s[0:1]288; GFX942-NEXT: s_waitcnt vmcnt(0)289; GFX942-NEXT: s_setpc_b64 s[30:31]290 %vec0 = call <4 x i16> asm "; def $0", "=v"()291 %vec1 = call <4 x i16> asm "; def $0", "=v"()292 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>293 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>294 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 0>295 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4296 ret void297}298 299define void @v_shuffle_v2i16_v3i16__5_1(ptr addrspace(1) inreg %ptr) {300; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_1:301; GFX900: ; %bb.0:302; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)303; GFX900-NEXT: ;;#ASMSTART304; GFX900-NEXT: ; def v[0:1]305; GFX900-NEXT: ;;#ASMEND306; GFX900-NEXT: s_mov_b32 s4, 0xffff307; GFX900-NEXT: v_mov_b32_e32 v3, 0308; GFX900-NEXT: ;;#ASMSTART309; GFX900-NEXT: ; def v[1:2]310; GFX900-NEXT: ;;#ASMEND311; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v0312; GFX900-NEXT: global_store_dword v3, v0, s[16:17]313; GFX900-NEXT: s_waitcnt vmcnt(0)314; GFX900-NEXT: s_setpc_b64 s[30:31]315;316; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_1:317; GFX90A: ; %bb.0:318; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)319; GFX90A-NEXT: ;;#ASMSTART320; GFX90A-NEXT: ; def v[0:1]321; GFX90A-NEXT: ;;#ASMEND322; GFX90A-NEXT: s_mov_b32 s4, 0xffff323; GFX90A-NEXT: v_mov_b32_e32 v4, 0324; GFX90A-NEXT: ;;#ASMSTART325; GFX90A-NEXT: ; def v[2:3]326; GFX90A-NEXT: ;;#ASMEND327; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v0328; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]329; GFX90A-NEXT: s_waitcnt vmcnt(0)330; GFX90A-NEXT: s_setpc_b64 s[30:31]331;332; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_1:333; GFX942: ; %bb.0:334; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)335; GFX942-NEXT: ;;#ASMSTART336; GFX942-NEXT: ; def v[0:1]337; GFX942-NEXT: ;;#ASMEND338; GFX942-NEXT: s_mov_b32 s2, 0xffff339; GFX942-NEXT: v_mov_b32_e32 v4, 0340; GFX942-NEXT: ;;#ASMSTART341; GFX942-NEXT: ; def v[2:3]342; GFX942-NEXT: ;;#ASMEND343; GFX942-NEXT: s_nop 0344; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v0345; GFX942-NEXT: global_store_dword v4, v0, s[0:1]346; GFX942-NEXT: s_waitcnt vmcnt(0)347; GFX942-NEXT: s_setpc_b64 s[30:31]348 %vec0 = call <4 x i16> asm "; def $0", "=v"()349 %vec1 = call <4 x i16> asm "; def $0", "=v"()350 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>351 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>352 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 1>353 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4354 ret void355}356 357define void @v_shuffle_v2i16_v3i16__5_2(ptr addrspace(1) inreg %ptr) {358; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_2:359; GFX900: ; %bb.0:360; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)361; GFX900-NEXT: ;;#ASMSTART362; GFX900-NEXT: ; def v[0:1]363; GFX900-NEXT: ;;#ASMEND364; GFX900-NEXT: s_mov_b32 s4, 0x5040100365; GFX900-NEXT: v_mov_b32_e32 v4, 0366; GFX900-NEXT: ;;#ASMSTART367; GFX900-NEXT: ; def v[2:3]368; GFX900-NEXT: ;;#ASMEND369; GFX900-NEXT: v_perm_b32 v0, v1, v3, s4370; GFX900-NEXT: global_store_dword v4, v0, s[16:17]371; GFX900-NEXT: s_waitcnt vmcnt(0)372; GFX900-NEXT: s_setpc_b64 s[30:31]373;374; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_2:375; GFX90A: ; %bb.0:376; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)377; GFX90A-NEXT: ;;#ASMSTART378; GFX90A-NEXT: ; def v[0:1]379; GFX90A-NEXT: ;;#ASMEND380; GFX90A-NEXT: s_mov_b32 s4, 0x5040100381; GFX90A-NEXT: v_mov_b32_e32 v4, 0382; GFX90A-NEXT: ;;#ASMSTART383; GFX90A-NEXT: ; def v[2:3]384; GFX90A-NEXT: ;;#ASMEND385; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s4386; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]387; GFX90A-NEXT: s_waitcnt vmcnt(0)388; GFX90A-NEXT: s_setpc_b64 s[30:31]389;390; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_2:391; GFX942: ; %bb.0:392; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)393; GFX942-NEXT: ;;#ASMSTART394; GFX942-NEXT: ; def v[0:1]395; GFX942-NEXT: ;;#ASMEND396; GFX942-NEXT: s_mov_b32 s2, 0x5040100397; GFX942-NEXT: v_mov_b32_e32 v4, 0398; GFX942-NEXT: ;;#ASMSTART399; GFX942-NEXT: ; def v[2:3]400; GFX942-NEXT: ;;#ASMEND401; GFX942-NEXT: s_nop 0402; GFX942-NEXT: v_perm_b32 v0, v1, v3, s2403; GFX942-NEXT: global_store_dword v4, v0, s[0:1]404; GFX942-NEXT: s_waitcnt vmcnt(0)405; GFX942-NEXT: s_setpc_b64 s[30:31]406 %vec0 = call <4 x i16> asm "; def $0", "=v"()407 %vec1 = call <4 x i16> asm "; def $0", "=v"()408 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>409 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>410 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 2>411 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4412 ret void413}414 415define void @v_shuffle_v2i16_v3i16__5_3(ptr addrspace(1) inreg %ptr) {416; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_3:417; GFX900: ; %bb.0:418; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)419; GFX900-NEXT: ;;#ASMSTART420; GFX900-NEXT: ; def v[0:1]421; GFX900-NEXT: ;;#ASMEND422; GFX900-NEXT: s_mov_b32 s4, 0x5040100423; GFX900-NEXT: v_mov_b32_e32 v2, 0424; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4425; GFX900-NEXT: global_store_dword v2, v0, s[16:17]426; GFX900-NEXT: s_waitcnt vmcnt(0)427; GFX900-NEXT: s_setpc_b64 s[30:31]428;429; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_3:430; GFX90A: ; %bb.0:431; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)432; GFX90A-NEXT: ;;#ASMSTART433; GFX90A-NEXT: ; def v[0:1]434; GFX90A-NEXT: ;;#ASMEND435; GFX90A-NEXT: s_mov_b32 s4, 0x5040100436; GFX90A-NEXT: v_mov_b32_e32 v2, 0437; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4438; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]439; GFX90A-NEXT: s_waitcnt vmcnt(0)440; GFX90A-NEXT: s_setpc_b64 s[30:31]441;442; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_3:443; GFX942: ; %bb.0:444; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)445; GFX942-NEXT: ;;#ASMSTART446; GFX942-NEXT: ; def v[0:1]447; GFX942-NEXT: ;;#ASMEND448; GFX942-NEXT: s_mov_b32 s2, 0x5040100449; GFX942-NEXT: v_mov_b32_e32 v2, 0450; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2451; GFX942-NEXT: global_store_dword v2, v0, s[0:1]452; GFX942-NEXT: s_waitcnt vmcnt(0)453; GFX942-NEXT: s_setpc_b64 s[30:31]454 %vec0 = call <4 x i16> asm "; def $0", "=v"()455 %vec1 = call <4 x i16> asm "; def $0", "=v"()456 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>457 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>458 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 3>459 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4460 ret void461}462 463define void @v_shuffle_v2i16_v3i16__5_4(ptr addrspace(1) inreg %ptr) {464; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_4:465; GFX900: ; %bb.0:466; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)467; GFX900-NEXT: ;;#ASMSTART468; GFX900-NEXT: ; def v[0:1]469; GFX900-NEXT: ;;#ASMEND470; GFX900-NEXT: s_mov_b32 s4, 0xffff471; GFX900-NEXT: v_mov_b32_e32 v2, 0472; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v0473; GFX900-NEXT: global_store_dword v2, v0, s[16:17]474; GFX900-NEXT: s_waitcnt vmcnt(0)475; GFX900-NEXT: s_setpc_b64 s[30:31]476;477; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_4:478; GFX90A: ; %bb.0:479; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)480; GFX90A-NEXT: ;;#ASMSTART481; GFX90A-NEXT: ; def v[0:1]482; GFX90A-NEXT: ;;#ASMEND483; GFX90A-NEXT: s_mov_b32 s4, 0xffff484; GFX90A-NEXT: v_mov_b32_e32 v2, 0485; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v0486; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]487; GFX90A-NEXT: s_waitcnt vmcnt(0)488; GFX90A-NEXT: s_setpc_b64 s[30:31]489;490; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_4:491; GFX942: ; %bb.0:492; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)493; GFX942-NEXT: ;;#ASMSTART494; GFX942-NEXT: ; def v[0:1]495; GFX942-NEXT: ;;#ASMEND496; GFX942-NEXT: s_mov_b32 s2, 0xffff497; GFX942-NEXT: v_mov_b32_e32 v2, 0498; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v0499; GFX942-NEXT: global_store_dword v2, v0, s[0:1]500; GFX942-NEXT: s_waitcnt vmcnt(0)501; GFX942-NEXT: s_setpc_b64 s[30:31]502 %vec0 = call <4 x i16> asm "; def $0", "=v"()503 %vec1 = call <4 x i16> asm "; def $0", "=v"()504 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>505 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>506 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 4>507 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4508 ret void509}510 511define void @v_shuffle_v2i16_v3i16__5_5(ptr addrspace(1) inreg %ptr) {512; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_5:513; GFX900: ; %bb.0:514; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX900-NEXT: ;;#ASMSTART516; GFX900-NEXT: ; def v[0:1]517; GFX900-NEXT: ;;#ASMEND518; GFX900-NEXT: s_mov_b32 s4, 0x5040100519; GFX900-NEXT: v_mov_b32_e32 v2, 0520; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4521; GFX900-NEXT: global_store_dword v2, v0, s[16:17]522; GFX900-NEXT: s_waitcnt vmcnt(0)523; GFX900-NEXT: s_setpc_b64 s[30:31]524;525; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_5:526; GFX90A: ; %bb.0:527; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)528; GFX90A-NEXT: ;;#ASMSTART529; GFX90A-NEXT: ; def v[0:1]530; GFX90A-NEXT: ;;#ASMEND531; GFX90A-NEXT: s_mov_b32 s4, 0x5040100532; GFX90A-NEXT: v_mov_b32_e32 v2, 0533; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4534; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]535; GFX90A-NEXT: s_waitcnt vmcnt(0)536; GFX90A-NEXT: s_setpc_b64 s[30:31]537;538; GFX942-LABEL: v_shuffle_v2i16_v3i16__5_5:539; GFX942: ; %bb.0:540; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)541; GFX942-NEXT: ;;#ASMSTART542; GFX942-NEXT: ; def v[0:1]543; GFX942-NEXT: ;;#ASMEND544; GFX942-NEXT: s_mov_b32 s2, 0x5040100545; GFX942-NEXT: v_mov_b32_e32 v2, 0546; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2547; GFX942-NEXT: global_store_dword v2, v0, s[0:1]548; GFX942-NEXT: s_waitcnt vmcnt(0)549; GFX942-NEXT: s_setpc_b64 s[30:31]550 %vec0 = call <4 x i16> asm "; def $0", "=v"()551 %vec1 = call <4 x i16> asm "; def $0", "=v"()552 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>553 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>554 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 5>555 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4556 ret void557}558 559define void @v_shuffle_v2i16_v3i16__u_0(ptr addrspace(1) inreg %ptr) {560; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_0:561; GFX900: ; %bb.0:562; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX900-NEXT: ;;#ASMSTART564; GFX900-NEXT: ; def v[0:1]565; GFX900-NEXT: ;;#ASMEND566; GFX900-NEXT: v_mov_b32_e32 v2, 0567; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0568; GFX900-NEXT: global_store_dword v2, v0, s[16:17]569; GFX900-NEXT: s_waitcnt vmcnt(0)570; GFX900-NEXT: s_setpc_b64 s[30:31]571;572; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_0:573; GFX90A: ; %bb.0:574; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)575; GFX90A-NEXT: ;;#ASMSTART576; GFX90A-NEXT: ; def v[0:1]577; GFX90A-NEXT: ;;#ASMEND578; GFX90A-NEXT: v_mov_b32_e32 v2, 0579; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0580; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]581; GFX90A-NEXT: s_waitcnt vmcnt(0)582; GFX90A-NEXT: s_setpc_b64 s[30:31]583;584; GFX942-LABEL: v_shuffle_v2i16_v3i16__u_0:585; GFX942: ; %bb.0:586; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GFX942-NEXT: ;;#ASMSTART588; GFX942-NEXT: ; def v[0:1]589; GFX942-NEXT: ;;#ASMEND590; GFX942-NEXT: v_mov_b32_e32 v2, 0591; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0592; GFX942-NEXT: global_store_dword v2, v0, s[0:1]593; GFX942-NEXT: s_waitcnt vmcnt(0)594; GFX942-NEXT: s_setpc_b64 s[30:31]595 %vec0 = call <4 x i16> asm "; def $0", "=v"()596 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>597 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 0>598 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4599 ret void600}601 602define void @v_shuffle_v2i16_v3i16__0_0(ptr addrspace(1) inreg %ptr) {603; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_0:604; GFX900: ; %bb.0:605; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)606; GFX900-NEXT: ;;#ASMSTART607; GFX900-NEXT: ; def v[0:1]608; GFX900-NEXT: ;;#ASMEND609; GFX900-NEXT: s_mov_b32 s4, 0x5040100610; GFX900-NEXT: v_mov_b32_e32 v2, 0611; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4612; GFX900-NEXT: global_store_dword v2, v0, s[16:17]613; GFX900-NEXT: s_waitcnt vmcnt(0)614; GFX900-NEXT: s_setpc_b64 s[30:31]615;616; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_0:617; GFX90A: ; %bb.0:618; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)619; GFX90A-NEXT: ;;#ASMSTART620; GFX90A-NEXT: ; def v[0:1]621; GFX90A-NEXT: ;;#ASMEND622; GFX90A-NEXT: s_mov_b32 s4, 0x5040100623; GFX90A-NEXT: v_mov_b32_e32 v2, 0624; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4625; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]626; GFX90A-NEXT: s_waitcnt vmcnt(0)627; GFX90A-NEXT: s_setpc_b64 s[30:31]628;629; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_0:630; GFX942: ; %bb.0:631; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)632; GFX942-NEXT: ;;#ASMSTART633; GFX942-NEXT: ; def v[0:1]634; GFX942-NEXT: ;;#ASMEND635; GFX942-NEXT: s_mov_b32 s2, 0x5040100636; GFX942-NEXT: v_mov_b32_e32 v2, 0637; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2638; GFX942-NEXT: global_store_dword v2, v0, s[0:1]639; GFX942-NEXT: s_waitcnt vmcnt(0)640; GFX942-NEXT: s_setpc_b64 s[30:31]641 %vec0 = call <4 x i16> asm "; def $0", "=v"()642 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>643 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> zeroinitializer644 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4645 ret void646}647 648define void @v_shuffle_v2i16_v3i16__1_0(ptr addrspace(1) inreg %ptr) {649; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_0:650; GFX900: ; %bb.0:651; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX900-NEXT: ;;#ASMSTART653; GFX900-NEXT: ; def v[0:1]654; GFX900-NEXT: ;;#ASMEND655; GFX900-NEXT: v_mov_b32_e32 v2, 0656; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 16657; GFX900-NEXT: global_store_dword v2, v0, s[16:17]658; GFX900-NEXT: s_waitcnt vmcnt(0)659; GFX900-NEXT: s_setpc_b64 s[30:31]660;661; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_0:662; GFX90A: ; %bb.0:663; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)664; GFX90A-NEXT: ;;#ASMSTART665; GFX90A-NEXT: ; def v[0:1]666; GFX90A-NEXT: ;;#ASMEND667; GFX90A-NEXT: v_mov_b32_e32 v2, 0668; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 16669; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]670; GFX90A-NEXT: s_waitcnt vmcnt(0)671; GFX90A-NEXT: s_setpc_b64 s[30:31]672;673; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_0:674; GFX942: ; %bb.0:675; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)676; GFX942-NEXT: ;;#ASMSTART677; GFX942-NEXT: ; def v[0:1]678; GFX942-NEXT: ;;#ASMEND679; GFX942-NEXT: v_mov_b32_e32 v2, 0680; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 16681; GFX942-NEXT: global_store_dword v2, v0, s[0:1]682; GFX942-NEXT: s_waitcnt vmcnt(0)683; GFX942-NEXT: s_setpc_b64 s[30:31]684 %vec0 = call <4 x i16> asm "; def $0", "=v"()685 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>686 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 0>687 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4688 ret void689}690 691define void @v_shuffle_v2i16_v3i16__2_0(ptr addrspace(1) inreg %ptr) {692; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_0:693; GFX900: ; %bb.0:694; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)695; GFX900-NEXT: ;;#ASMSTART696; GFX900-NEXT: ; def v[0:1]697; GFX900-NEXT: ;;#ASMEND698; GFX900-NEXT: s_mov_b32 s4, 0x5040100699; GFX900-NEXT: v_mov_b32_e32 v2, 0700; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4701; GFX900-NEXT: global_store_dword v2, v0, s[16:17]702; GFX900-NEXT: s_waitcnt vmcnt(0)703; GFX900-NEXT: s_setpc_b64 s[30:31]704;705; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_0:706; GFX90A: ; %bb.0:707; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)708; GFX90A-NEXT: ;;#ASMSTART709; GFX90A-NEXT: ; def v[0:1]710; GFX90A-NEXT: ;;#ASMEND711; GFX90A-NEXT: s_mov_b32 s4, 0x5040100712; GFX90A-NEXT: v_mov_b32_e32 v2, 0713; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4714; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]715; GFX90A-NEXT: s_waitcnt vmcnt(0)716; GFX90A-NEXT: s_setpc_b64 s[30:31]717;718; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_0:719; GFX942: ; %bb.0:720; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)721; GFX942-NEXT: ;;#ASMSTART722; GFX942-NEXT: ; def v[0:1]723; GFX942-NEXT: ;;#ASMEND724; GFX942-NEXT: s_mov_b32 s2, 0x5040100725; GFX942-NEXT: v_mov_b32_e32 v2, 0726; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2727; GFX942-NEXT: global_store_dword v2, v0, s[0:1]728; GFX942-NEXT: s_waitcnt vmcnt(0)729; GFX942-NEXT: s_setpc_b64 s[30:31]730 %vec0 = call <4 x i16> asm "; def $0", "=v"()731 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>732 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 0>733 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4734 ret void735}736 737define void @v_shuffle_v2i16_v3i16__3_0(ptr addrspace(1) inreg %ptr) {738; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_0:739; GFX900: ; %bb.0:740; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)741; GFX900-NEXT: ;;#ASMSTART742; GFX900-NEXT: ; def v[0:1]743; GFX900-NEXT: ;;#ASMEND744; GFX900-NEXT: v_mov_b32_e32 v2, 0745; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0746; GFX900-NEXT: global_store_dword v2, v0, s[16:17]747; GFX900-NEXT: s_waitcnt vmcnt(0)748; GFX900-NEXT: s_setpc_b64 s[30:31]749;750; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_0:751; GFX90A: ; %bb.0:752; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)753; GFX90A-NEXT: ;;#ASMSTART754; GFX90A-NEXT: ; def v[0:1]755; GFX90A-NEXT: ;;#ASMEND756; GFX90A-NEXT: v_mov_b32_e32 v2, 0757; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0758; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]759; GFX90A-NEXT: s_waitcnt vmcnt(0)760; GFX90A-NEXT: s_setpc_b64 s[30:31]761;762; GFX942-LABEL: v_shuffle_v2i16_v3i16__3_0:763; GFX942: ; %bb.0:764; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)765; GFX942-NEXT: ;;#ASMSTART766; GFX942-NEXT: ; def v[0:1]767; GFX942-NEXT: ;;#ASMEND768; GFX942-NEXT: v_mov_b32_e32 v2, 0769; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0770; GFX942-NEXT: global_store_dword v2, v0, s[0:1]771; GFX942-NEXT: s_waitcnt vmcnt(0)772; GFX942-NEXT: s_setpc_b64 s[30:31]773 %vec0 = call <4 x i16> asm "; def $0", "=v"()774 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>775 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 0>776 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4777 ret void778}779 780define void @v_shuffle_v2i16_v3i16__4_0(ptr addrspace(1) inreg %ptr) {781; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_0:782; GFX900: ; %bb.0:783; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)784; GFX900-NEXT: ;;#ASMSTART785; GFX900-NEXT: ; def v[0:1]786; GFX900-NEXT: ;;#ASMEND787; GFX900-NEXT: v_mov_b32_e32 v3, 0788; GFX900-NEXT: ;;#ASMSTART789; GFX900-NEXT: ; def v[1:2]790; GFX900-NEXT: ;;#ASMEND791; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16792; GFX900-NEXT: global_store_dword v3, v0, s[16:17]793; GFX900-NEXT: s_waitcnt vmcnt(0)794; GFX900-NEXT: s_setpc_b64 s[30:31]795;796; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_0:797; GFX90A: ; %bb.0:798; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)799; GFX90A-NEXT: ;;#ASMSTART800; GFX90A-NEXT: ; def v[0:1]801; GFX90A-NEXT: ;;#ASMEND802; GFX90A-NEXT: v_mov_b32_e32 v4, 0803; GFX90A-NEXT: ;;#ASMSTART804; GFX90A-NEXT: ; def v[2:3]805; GFX90A-NEXT: ;;#ASMEND806; GFX90A-NEXT: v_alignbit_b32 v0, v0, v2, 16807; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]808; GFX90A-NEXT: s_waitcnt vmcnt(0)809; GFX90A-NEXT: s_setpc_b64 s[30:31]810;811; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_0:812; GFX942: ; %bb.0:813; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)814; GFX942-NEXT: ;;#ASMSTART815; GFX942-NEXT: ; def v[0:1]816; GFX942-NEXT: ;;#ASMEND817; GFX942-NEXT: v_mov_b32_e32 v4, 0818; GFX942-NEXT: ;;#ASMSTART819; GFX942-NEXT: ; def v[2:3]820; GFX942-NEXT: ;;#ASMEND821; GFX942-NEXT: s_nop 0822; GFX942-NEXT: v_alignbit_b32 v0, v0, v2, 16823; GFX942-NEXT: global_store_dword v4, v0, s[0:1]824; GFX942-NEXT: s_waitcnt vmcnt(0)825; GFX942-NEXT: s_setpc_b64 s[30:31]826 %vec0 = call <4 x i16> asm "; def $0", "=v"()827 %vec1 = call <4 x i16> asm "; def $0", "=v"()828 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>829 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>830 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 0>831 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4832 ret void833}834 835define void @v_shuffle_v2i16_v3i16__u_1(ptr addrspace(1) inreg %ptr) {836; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_1:837; GFX900: ; %bb.0:838; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)839; GFX900-NEXT: v_mov_b32_e32 v2, 0840; GFX900-NEXT: ;;#ASMSTART841; GFX900-NEXT: ; def v[0:1]842; GFX900-NEXT: ;;#ASMEND843; GFX900-NEXT: global_store_dword v2, v0, s[16:17]844; GFX900-NEXT: s_waitcnt vmcnt(0)845; GFX900-NEXT: s_setpc_b64 s[30:31]846;847; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_1:848; GFX90A: ; %bb.0:849; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)850; GFX90A-NEXT: v_mov_b32_e32 v2, 0851; GFX90A-NEXT: ;;#ASMSTART852; GFX90A-NEXT: ; def v[0:1]853; GFX90A-NEXT: ;;#ASMEND854; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]855; GFX90A-NEXT: s_waitcnt vmcnt(0)856; GFX90A-NEXT: s_setpc_b64 s[30:31]857;858; GFX942-LABEL: v_shuffle_v2i16_v3i16__u_1:859; GFX942: ; %bb.0:860; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)861; GFX942-NEXT: v_mov_b32_e32 v2, 0862; GFX942-NEXT: ;;#ASMSTART863; GFX942-NEXT: ; def v[0:1]864; GFX942-NEXT: ;;#ASMEND865; GFX942-NEXT: global_store_dword v2, v0, s[0:1]866; GFX942-NEXT: s_waitcnt vmcnt(0)867; GFX942-NEXT: s_setpc_b64 s[30:31]868 %vec0 = call <4 x i16> asm "; def $0", "=v"()869 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>870 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 1>871 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4872 ret void873}874 875define void @v_shuffle_v2i16_v3i16__0_1(ptr addrspace(1) inreg %ptr) {876; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_1:877; GFX900: ; %bb.0:878; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)879; GFX900-NEXT: v_mov_b32_e32 v2, 0880; GFX900-NEXT: ;;#ASMSTART881; GFX900-NEXT: ; def v[0:1]882; GFX900-NEXT: ;;#ASMEND883; GFX900-NEXT: global_store_dword v2, v0, s[16:17]884; GFX900-NEXT: s_waitcnt vmcnt(0)885; GFX900-NEXT: s_setpc_b64 s[30:31]886;887; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_1:888; GFX90A: ; %bb.0:889; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)890; GFX90A-NEXT: v_mov_b32_e32 v2, 0891; GFX90A-NEXT: ;;#ASMSTART892; GFX90A-NEXT: ; def v[0:1]893; GFX90A-NEXT: ;;#ASMEND894; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]895; GFX90A-NEXT: s_waitcnt vmcnt(0)896; GFX90A-NEXT: s_setpc_b64 s[30:31]897;898; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_1:899; GFX942: ; %bb.0:900; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)901; GFX942-NEXT: v_mov_b32_e32 v2, 0902; GFX942-NEXT: ;;#ASMSTART903; GFX942-NEXT: ; def v[0:1]904; GFX942-NEXT: ;;#ASMEND905; GFX942-NEXT: global_store_dword v2, v0, s[0:1]906; GFX942-NEXT: s_waitcnt vmcnt(0)907; GFX942-NEXT: s_setpc_b64 s[30:31]908 %vec0 = call <4 x i16> asm "; def $0", "=v"()909 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>910 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 1>911 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4912 ret void913}914 915define void @v_shuffle_v2i16_v3i16__1_1(ptr addrspace(1) inreg %ptr) {916; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_1:917; GFX900: ; %bb.0:918; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)919; GFX900-NEXT: ;;#ASMSTART920; GFX900-NEXT: ; def v[0:1]921; GFX900-NEXT: ;;#ASMEND922; GFX900-NEXT: s_mov_b32 s4, 0x7060302923; GFX900-NEXT: v_mov_b32_e32 v2, 0924; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4925; GFX900-NEXT: global_store_dword v2, v0, s[16:17]926; GFX900-NEXT: s_waitcnt vmcnt(0)927; GFX900-NEXT: s_setpc_b64 s[30:31]928;929; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_1:930; GFX90A: ; %bb.0:931; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)932; GFX90A-NEXT: ;;#ASMSTART933; GFX90A-NEXT: ; def v[0:1]934; GFX90A-NEXT: ;;#ASMEND935; GFX90A-NEXT: s_mov_b32 s4, 0x7060302936; GFX90A-NEXT: v_mov_b32_e32 v2, 0937; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4938; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]939; GFX90A-NEXT: s_waitcnt vmcnt(0)940; GFX90A-NEXT: s_setpc_b64 s[30:31]941;942; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_1:943; GFX942: ; %bb.0:944; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)945; GFX942-NEXT: ;;#ASMSTART946; GFX942-NEXT: ; def v[0:1]947; GFX942-NEXT: ;;#ASMEND948; GFX942-NEXT: s_mov_b32 s2, 0x7060302949; GFX942-NEXT: v_mov_b32_e32 v2, 0950; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2951; GFX942-NEXT: global_store_dword v2, v0, s[0:1]952; GFX942-NEXT: s_waitcnt vmcnt(0)953; GFX942-NEXT: s_setpc_b64 s[30:31]954 %vec0 = call <4 x i16> asm "; def $0", "=v"()955 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>956 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 1>957 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4958 ret void959}960 961define void @v_shuffle_v2i16_v3i16__2_1(ptr addrspace(1) inreg %ptr) {962; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_1:963; GFX900: ; %bb.0:964; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GFX900-NEXT: ;;#ASMSTART966; GFX900-NEXT: ; def v[0:1]967; GFX900-NEXT: ;;#ASMEND968; GFX900-NEXT: s_mov_b32 s4, 0xffff969; GFX900-NEXT: v_mov_b32_e32 v2, 0970; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v0971; GFX900-NEXT: global_store_dword v2, v0, s[16:17]972; GFX900-NEXT: s_waitcnt vmcnt(0)973; GFX900-NEXT: s_setpc_b64 s[30:31]974;975; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_1:976; GFX90A: ; %bb.0:977; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)978; GFX90A-NEXT: ;;#ASMSTART979; GFX90A-NEXT: ; def v[0:1]980; GFX90A-NEXT: ;;#ASMEND981; GFX90A-NEXT: s_mov_b32 s4, 0xffff982; GFX90A-NEXT: v_mov_b32_e32 v2, 0983; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v0984; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]985; GFX90A-NEXT: s_waitcnt vmcnt(0)986; GFX90A-NEXT: s_setpc_b64 s[30:31]987;988; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_1:989; GFX942: ; %bb.0:990; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)991; GFX942-NEXT: ;;#ASMSTART992; GFX942-NEXT: ; def v[0:1]993; GFX942-NEXT: ;;#ASMEND994; GFX942-NEXT: s_mov_b32 s2, 0xffff995; GFX942-NEXT: v_mov_b32_e32 v2, 0996; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v0997; GFX942-NEXT: global_store_dword v2, v0, s[0:1]998; GFX942-NEXT: s_waitcnt vmcnt(0)999; GFX942-NEXT: s_setpc_b64 s[30:31]1000 %vec0 = call <4 x i16> asm "; def $0", "=v"()1001 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1002 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 1>1003 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41004 ret void1005}1006 1007define void @v_shuffle_v2i16_v3i16__3_1(ptr addrspace(1) inreg %ptr) {1008; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_1:1009; GFX900: ; %bb.0:1010; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1011; GFX900-NEXT: v_mov_b32_e32 v2, 01012; GFX900-NEXT: ;;#ASMSTART1013; GFX900-NEXT: ; def v[0:1]1014; GFX900-NEXT: ;;#ASMEND1015; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1016; GFX900-NEXT: s_waitcnt vmcnt(0)1017; GFX900-NEXT: s_setpc_b64 s[30:31]1018;1019; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_1:1020; GFX90A: ; %bb.0:1021; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1022; GFX90A-NEXT: v_mov_b32_e32 v2, 01023; GFX90A-NEXT: ;;#ASMSTART1024; GFX90A-NEXT: ; def v[0:1]1025; GFX90A-NEXT: ;;#ASMEND1026; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1027; GFX90A-NEXT: s_waitcnt vmcnt(0)1028; GFX90A-NEXT: s_setpc_b64 s[30:31]1029;1030; GFX942-LABEL: v_shuffle_v2i16_v3i16__3_1:1031; GFX942: ; %bb.0:1032; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1033; GFX942-NEXT: v_mov_b32_e32 v2, 01034; GFX942-NEXT: ;;#ASMSTART1035; GFX942-NEXT: ; def v[0:1]1036; GFX942-NEXT: ;;#ASMEND1037; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1038; GFX942-NEXT: s_waitcnt vmcnt(0)1039; GFX942-NEXT: s_setpc_b64 s[30:31]1040 %vec0 = call <4 x i16> asm "; def $0", "=v"()1041 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1042 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 1>1043 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41044 ret void1045}1046 1047define void @v_shuffle_v2i16_v3i16__4_1(ptr addrspace(1) inreg %ptr) {1048; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_1:1049; GFX900: ; %bb.0:1050; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1051; GFX900-NEXT: ;;#ASMSTART1052; GFX900-NEXT: ; def v[0:1]1053; GFX900-NEXT: ;;#ASMEND1054; GFX900-NEXT: s_mov_b32 s4, 0x70603021055; GFX900-NEXT: v_mov_b32_e32 v3, 01056; GFX900-NEXT: ;;#ASMSTART1057; GFX900-NEXT: ; def v[1:2]1058; GFX900-NEXT: ;;#ASMEND1059; GFX900-NEXT: v_perm_b32 v0, v0, v1, s41060; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1061; GFX900-NEXT: s_waitcnt vmcnt(0)1062; GFX900-NEXT: s_setpc_b64 s[30:31]1063;1064; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_1:1065; GFX90A: ; %bb.0:1066; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1067; GFX90A-NEXT: ;;#ASMSTART1068; GFX90A-NEXT: ; def v[0:1]1069; GFX90A-NEXT: ;;#ASMEND1070; GFX90A-NEXT: s_mov_b32 s4, 0x70603021071; GFX90A-NEXT: v_mov_b32_e32 v4, 01072; GFX90A-NEXT: ;;#ASMSTART1073; GFX90A-NEXT: ; def v[2:3]1074; GFX90A-NEXT: ;;#ASMEND1075; GFX90A-NEXT: v_perm_b32 v0, v0, v2, s41076; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1077; GFX90A-NEXT: s_waitcnt vmcnt(0)1078; GFX90A-NEXT: s_setpc_b64 s[30:31]1079;1080; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_1:1081; GFX942: ; %bb.0:1082; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1083; GFX942-NEXT: ;;#ASMSTART1084; GFX942-NEXT: ; def v[0:1]1085; GFX942-NEXT: ;;#ASMEND1086; GFX942-NEXT: s_mov_b32 s2, 0x70603021087; GFX942-NEXT: v_mov_b32_e32 v4, 01088; GFX942-NEXT: ;;#ASMSTART1089; GFX942-NEXT: ; def v[2:3]1090; GFX942-NEXT: ;;#ASMEND1091; GFX942-NEXT: s_nop 01092; GFX942-NEXT: v_perm_b32 v0, v0, v2, s21093; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1094; GFX942-NEXT: s_waitcnt vmcnt(0)1095; GFX942-NEXT: s_setpc_b64 s[30:31]1096 %vec0 = call <4 x i16> asm "; def $0", "=v"()1097 %vec1 = call <4 x i16> asm "; def $0", "=v"()1098 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1099 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1100 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 1>1101 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41102 ret void1103}1104 1105define void @v_shuffle_v2i16_v3i16__u_2(ptr addrspace(1) inreg %ptr) {1106; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_2:1107; GFX900: ; %bb.0:1108; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1109; GFX900-NEXT: ;;#ASMSTART1110; GFX900-NEXT: ; def v[0:1]1111; GFX900-NEXT: ;;#ASMEND1112; GFX900-NEXT: v_mov_b32_e32 v2, 01113; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11114; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1115; GFX900-NEXT: s_waitcnt vmcnt(0)1116; GFX900-NEXT: s_setpc_b64 s[30:31]1117;1118; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_2:1119; GFX90A: ; %bb.0:1120; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1121; GFX90A-NEXT: ;;#ASMSTART1122; GFX90A-NEXT: ; def v[0:1]1123; GFX90A-NEXT: ;;#ASMEND1124; GFX90A-NEXT: v_mov_b32_e32 v2, 01125; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11126; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1127; GFX90A-NEXT: s_waitcnt vmcnt(0)1128; GFX90A-NEXT: s_setpc_b64 s[30:31]1129;1130; GFX942-LABEL: v_shuffle_v2i16_v3i16__u_2:1131; GFX942: ; %bb.0:1132; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1133; GFX942-NEXT: ;;#ASMSTART1134; GFX942-NEXT: ; def v[0:1]1135; GFX942-NEXT: ;;#ASMEND1136; GFX942-NEXT: v_mov_b32_e32 v2, 01137; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11138; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1139; GFX942-NEXT: s_waitcnt vmcnt(0)1140; GFX942-NEXT: s_setpc_b64 s[30:31]1141 %vec0 = call <4 x i16> asm "; def $0", "=v"()1142 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1143 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 2>1144 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41145 ret void1146}1147 1148define void @v_shuffle_v2i16_v3i16__0_2(ptr addrspace(1) inreg %ptr) {1149; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_2:1150; GFX900: ; %bb.0:1151; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1152; GFX900-NEXT: ;;#ASMSTART1153; GFX900-NEXT: ; def v[0:1]1154; GFX900-NEXT: ;;#ASMEND1155; GFX900-NEXT: s_mov_b32 s4, 0x50401001156; GFX900-NEXT: v_mov_b32_e32 v2, 01157; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41158; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1159; GFX900-NEXT: s_waitcnt vmcnt(0)1160; GFX900-NEXT: s_setpc_b64 s[30:31]1161;1162; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_2:1163; GFX90A: ; %bb.0:1164; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1165; GFX90A-NEXT: ;;#ASMSTART1166; GFX90A-NEXT: ; def v[0:1]1167; GFX90A-NEXT: ;;#ASMEND1168; GFX90A-NEXT: s_mov_b32 s4, 0x50401001169; GFX90A-NEXT: v_mov_b32_e32 v2, 01170; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41171; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1172; GFX90A-NEXT: s_waitcnt vmcnt(0)1173; GFX90A-NEXT: s_setpc_b64 s[30:31]1174;1175; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_2:1176; GFX942: ; %bb.0:1177; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1178; GFX942-NEXT: ;;#ASMSTART1179; GFX942-NEXT: ; def v[0:1]1180; GFX942-NEXT: ;;#ASMEND1181; GFX942-NEXT: s_mov_b32 s2, 0x50401001182; GFX942-NEXT: v_mov_b32_e32 v2, 01183; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21184; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1185; GFX942-NEXT: s_waitcnt vmcnt(0)1186; GFX942-NEXT: s_setpc_b64 s[30:31]1187 %vec0 = call <4 x i16> asm "; def $0", "=v"()1188 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1189 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 2>1190 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41191 ret void1192}1193 1194define void @v_shuffle_v2i16_v3i16__1_2(ptr addrspace(1) inreg %ptr) {1195; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_2:1196; GFX900: ; %bb.0:1197; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1198; GFX900-NEXT: ;;#ASMSTART1199; GFX900-NEXT: ; def v[0:1]1200; GFX900-NEXT: ;;#ASMEND1201; GFX900-NEXT: v_mov_b32_e32 v2, 01202; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 161203; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1204; GFX900-NEXT: s_waitcnt vmcnt(0)1205; GFX900-NEXT: s_setpc_b64 s[30:31]1206;1207; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_2:1208; GFX90A: ; %bb.0:1209; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1210; GFX90A-NEXT: ;;#ASMSTART1211; GFX90A-NEXT: ; def v[0:1]1212; GFX90A-NEXT: ;;#ASMEND1213; GFX90A-NEXT: v_mov_b32_e32 v2, 01214; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 161215; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1216; GFX90A-NEXT: s_waitcnt vmcnt(0)1217; GFX90A-NEXT: s_setpc_b64 s[30:31]1218;1219; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_2:1220; GFX942: ; %bb.0:1221; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1222; GFX942-NEXT: ;;#ASMSTART1223; GFX942-NEXT: ; def v[0:1]1224; GFX942-NEXT: ;;#ASMEND1225; GFX942-NEXT: v_mov_b32_e32 v2, 01226; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 161227; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1228; GFX942-NEXT: s_waitcnt vmcnt(0)1229; GFX942-NEXT: s_setpc_b64 s[30:31]1230 %vec0 = call <4 x i16> asm "; def $0", "=v"()1231 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1232 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 2>1233 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41234 ret void1235}1236 1237define void @v_shuffle_v2i16_v3i16__2_2(ptr addrspace(1) inreg %ptr) {1238; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_2:1239; GFX900: ; %bb.0:1240; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1241; GFX900-NEXT: ;;#ASMSTART1242; GFX900-NEXT: ; def v[0:1]1243; GFX900-NEXT: ;;#ASMEND1244; GFX900-NEXT: s_mov_b32 s4, 0x50401001245; GFX900-NEXT: v_mov_b32_e32 v2, 01246; GFX900-NEXT: v_perm_b32 v0, v1, v1, s41247; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1248; GFX900-NEXT: s_waitcnt vmcnt(0)1249; GFX900-NEXT: s_setpc_b64 s[30:31]1250;1251; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_2:1252; GFX90A: ; %bb.0:1253; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1254; GFX90A-NEXT: ;;#ASMSTART1255; GFX90A-NEXT: ; def v[0:1]1256; GFX90A-NEXT: ;;#ASMEND1257; GFX90A-NEXT: s_mov_b32 s4, 0x50401001258; GFX90A-NEXT: v_mov_b32_e32 v2, 01259; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s41260; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1261; GFX90A-NEXT: s_waitcnt vmcnt(0)1262; GFX90A-NEXT: s_setpc_b64 s[30:31]1263;1264; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_2:1265; GFX942: ; %bb.0:1266; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1267; GFX942-NEXT: ;;#ASMSTART1268; GFX942-NEXT: ; def v[0:1]1269; GFX942-NEXT: ;;#ASMEND1270; GFX942-NEXT: s_mov_b32 s2, 0x50401001271; GFX942-NEXT: v_mov_b32_e32 v2, 01272; GFX942-NEXT: v_perm_b32 v0, v1, v1, s21273; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1274; GFX942-NEXT: s_waitcnt vmcnt(0)1275; GFX942-NEXT: s_setpc_b64 s[30:31]1276 %vec0 = call <4 x i16> asm "; def $0", "=v"()1277 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1278 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 2>1279 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41280 ret void1281}1282 1283define void @v_shuffle_v2i16_v3i16__3_2(ptr addrspace(1) inreg %ptr) {1284; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_2:1285; GFX900: ; %bb.0:1286; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1287; GFX900-NEXT: ;;#ASMSTART1288; GFX900-NEXT: ; def v[0:1]1289; GFX900-NEXT: ;;#ASMEND1290; GFX900-NEXT: v_mov_b32_e32 v2, 01291; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11292; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1293; GFX900-NEXT: s_waitcnt vmcnt(0)1294; GFX900-NEXT: s_setpc_b64 s[30:31]1295;1296; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_2:1297; GFX90A: ; %bb.0:1298; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1299; GFX90A-NEXT: ;;#ASMSTART1300; GFX90A-NEXT: ; def v[0:1]1301; GFX90A-NEXT: ;;#ASMEND1302; GFX90A-NEXT: v_mov_b32_e32 v2, 01303; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11304; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1305; GFX90A-NEXT: s_waitcnt vmcnt(0)1306; GFX90A-NEXT: s_setpc_b64 s[30:31]1307;1308; GFX942-LABEL: v_shuffle_v2i16_v3i16__3_2:1309; GFX942: ; %bb.0:1310; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1311; GFX942-NEXT: ;;#ASMSTART1312; GFX942-NEXT: ; def v[0:1]1313; GFX942-NEXT: ;;#ASMEND1314; GFX942-NEXT: v_mov_b32_e32 v2, 01315; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11316; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1317; GFX942-NEXT: s_waitcnt vmcnt(0)1318; GFX942-NEXT: s_setpc_b64 s[30:31]1319 %vec0 = call <4 x i16> asm "; def $0", "=v"()1320 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1321 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 2>1322 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41323 ret void1324}1325 1326define void @v_shuffle_v2i16_v3i16__4_2(ptr addrspace(1) inreg %ptr) {1327; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_2:1328; GFX900: ; %bb.0:1329; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1330; GFX900-NEXT: ;;#ASMSTART1331; GFX900-NEXT: ; def v[0:1]1332; GFX900-NEXT: ;;#ASMEND1333; GFX900-NEXT: v_mov_b32_e32 v4, 01334; GFX900-NEXT: ;;#ASMSTART1335; GFX900-NEXT: ; def v[2:3]1336; GFX900-NEXT: ;;#ASMEND1337; GFX900-NEXT: v_alignbit_b32 v0, v1, v2, 161338; GFX900-NEXT: global_store_dword v4, v0, s[16:17]1339; GFX900-NEXT: s_waitcnt vmcnt(0)1340; GFX900-NEXT: s_setpc_b64 s[30:31]1341;1342; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_2:1343; GFX90A: ; %bb.0:1344; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GFX90A-NEXT: ;;#ASMSTART1346; GFX90A-NEXT: ; def v[0:1]1347; GFX90A-NEXT: ;;#ASMEND1348; GFX90A-NEXT: v_mov_b32_e32 v4, 01349; GFX90A-NEXT: ;;#ASMSTART1350; GFX90A-NEXT: ; def v[2:3]1351; GFX90A-NEXT: ;;#ASMEND1352; GFX90A-NEXT: v_alignbit_b32 v0, v1, v2, 161353; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1354; GFX90A-NEXT: s_waitcnt vmcnt(0)1355; GFX90A-NEXT: s_setpc_b64 s[30:31]1356;1357; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_2:1358; GFX942: ; %bb.0:1359; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1360; GFX942-NEXT: ;;#ASMSTART1361; GFX942-NEXT: ; def v[0:1]1362; GFX942-NEXT: ;;#ASMEND1363; GFX942-NEXT: v_mov_b32_e32 v4, 01364; GFX942-NEXT: ;;#ASMSTART1365; GFX942-NEXT: ; def v[2:3]1366; GFX942-NEXT: ;;#ASMEND1367; GFX942-NEXT: s_nop 01368; GFX942-NEXT: v_alignbit_b32 v0, v1, v2, 161369; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1370; GFX942-NEXT: s_waitcnt vmcnt(0)1371; GFX942-NEXT: s_setpc_b64 s[30:31]1372 %vec0 = call <4 x i16> asm "; def $0", "=v"()1373 %vec1 = call <4 x i16> asm "; def $0", "=v"()1374 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1375 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1376 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 2>1377 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41378 ret void1379}1380 1381define void @v_shuffle_v2i16_v3i16__u_3(ptr addrspace(1) inreg %ptr) {1382; GFX9-LABEL: v_shuffle_v2i16_v3i16__u_3:1383; GFX9: ; %bb.0:1384; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1385; GFX9-NEXT: s_setpc_b64 s[30:31]1386 %vec0 = call <4 x i16> asm "; def $0", "=v"()1387 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1388 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 3>1389 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41390 ret void1391}1392 1393define void @v_shuffle_v2i16_v3i16__0_3(ptr addrspace(1) inreg %ptr) {1394; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_3:1395; GFX900: ; %bb.0:1396; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1397; GFX900-NEXT: v_mov_b32_e32 v2, 01398; GFX900-NEXT: ;;#ASMSTART1399; GFX900-NEXT: ; def v[0:1]1400; GFX900-NEXT: ;;#ASMEND1401; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1402; GFX900-NEXT: s_waitcnt vmcnt(0)1403; GFX900-NEXT: s_setpc_b64 s[30:31]1404;1405; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_3:1406; GFX90A: ; %bb.0:1407; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1408; GFX90A-NEXT: v_mov_b32_e32 v2, 01409; GFX90A-NEXT: ;;#ASMSTART1410; GFX90A-NEXT: ; def v[0:1]1411; GFX90A-NEXT: ;;#ASMEND1412; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1413; GFX90A-NEXT: s_waitcnt vmcnt(0)1414; GFX90A-NEXT: s_setpc_b64 s[30:31]1415;1416; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_3:1417; GFX942: ; %bb.0:1418; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1419; GFX942-NEXT: v_mov_b32_e32 v2, 01420; GFX942-NEXT: ;;#ASMSTART1421; GFX942-NEXT: ; def v[0:1]1422; GFX942-NEXT: ;;#ASMEND1423; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1424; GFX942-NEXT: s_waitcnt vmcnt(0)1425; GFX942-NEXT: s_setpc_b64 s[30:31]1426 %vec0 = call <4 x i16> asm "; def $0", "=v"()1427 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1428 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 3>1429 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41430 ret void1431}1432 1433define void @v_shuffle_v2i16_v3i16__1_3(ptr addrspace(1) inreg %ptr) {1434; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_3:1435; GFX900: ; %bb.0:1436; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1437; GFX900-NEXT: ;;#ASMSTART1438; GFX900-NEXT: ; def v[0:1]1439; GFX900-NEXT: ;;#ASMEND1440; GFX900-NEXT: v_mov_b32_e32 v2, 01441; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 161442; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1443; GFX900-NEXT: s_waitcnt vmcnt(0)1444; GFX900-NEXT: s_setpc_b64 s[30:31]1445;1446; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_3:1447; GFX90A: ; %bb.0:1448; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1449; GFX90A-NEXT: ;;#ASMSTART1450; GFX90A-NEXT: ; def v[0:1]1451; GFX90A-NEXT: ;;#ASMEND1452; GFX90A-NEXT: v_mov_b32_e32 v2, 01453; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 161454; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1455; GFX90A-NEXT: s_waitcnt vmcnt(0)1456; GFX90A-NEXT: s_setpc_b64 s[30:31]1457;1458; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_3:1459; GFX942: ; %bb.0:1460; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1461; GFX942-NEXT: ;;#ASMSTART1462; GFX942-NEXT: ; def v[0:1]1463; GFX942-NEXT: ;;#ASMEND1464; GFX942-NEXT: v_mov_b32_e32 v2, 01465; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 161466; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1467; GFX942-NEXT: s_waitcnt vmcnt(0)1468; GFX942-NEXT: s_setpc_b64 s[30:31]1469 %vec0 = call <4 x i16> asm "; def $0", "=v"()1470 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1471 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 3>1472 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41473 ret void1474}1475 1476define void @v_shuffle_v2i16_v3i16__2_3(ptr addrspace(1) inreg %ptr) {1477; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_3:1478; GFX900: ; %bb.0:1479; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1480; GFX900-NEXT: v_mov_b32_e32 v2, 01481; GFX900-NEXT: ;;#ASMSTART1482; GFX900-NEXT: ; def v[0:1]1483; GFX900-NEXT: ;;#ASMEND1484; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1485; GFX900-NEXT: s_waitcnt vmcnt(0)1486; GFX900-NEXT: s_setpc_b64 s[30:31]1487;1488; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_3:1489; GFX90A: ; %bb.0:1490; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1491; GFX90A-NEXT: v_mov_b32_e32 v2, 01492; GFX90A-NEXT: ;;#ASMSTART1493; GFX90A-NEXT: ; def v[0:1]1494; GFX90A-NEXT: ;;#ASMEND1495; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1496; GFX90A-NEXT: s_waitcnt vmcnt(0)1497; GFX90A-NEXT: s_setpc_b64 s[30:31]1498;1499; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_3:1500; GFX942: ; %bb.0:1501; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1502; GFX942-NEXT: v_mov_b32_e32 v2, 01503; GFX942-NEXT: ;;#ASMSTART1504; GFX942-NEXT: ; def v[0:1]1505; GFX942-NEXT: ;;#ASMEND1506; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1507; GFX942-NEXT: s_waitcnt vmcnt(0)1508; GFX942-NEXT: s_setpc_b64 s[30:31]1509 %vec0 = call <4 x i16> asm "; def $0", "=v"()1510 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1511 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 3>1512 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41513 ret void1514}1515 1516define void @v_shuffle_v2i16_v3i16__3_3(ptr addrspace(1) inreg %ptr) {1517; GFX9-LABEL: v_shuffle_v2i16_v3i16__3_3:1518; GFX9: ; %bb.0:1519; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1520; GFX9-NEXT: s_setpc_b64 s[30:31]1521 %vec0 = call <4 x i16> asm "; def $0", "=v"()1522 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1523 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 3>1524 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41525 ret void1526}1527 1528define void @v_shuffle_v2i16_v3i16__4_3(ptr addrspace(1) inreg %ptr) {1529; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_3:1530; GFX900: ; %bb.0:1531; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1532; GFX900-NEXT: ;;#ASMSTART1533; GFX900-NEXT: ; def v[0:1]1534; GFX900-NEXT: ;;#ASMEND1535; GFX900-NEXT: v_mov_b32_e32 v2, 01536; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 161537; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1538; GFX900-NEXT: s_waitcnt vmcnt(0)1539; GFX900-NEXT: s_setpc_b64 s[30:31]1540;1541; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_3:1542; GFX90A: ; %bb.0:1543; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1544; GFX90A-NEXT: ;;#ASMSTART1545; GFX90A-NEXT: ; def v[0:1]1546; GFX90A-NEXT: ;;#ASMEND1547; GFX90A-NEXT: v_mov_b32_e32 v2, 01548; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 161549; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1550; GFX90A-NEXT: s_waitcnt vmcnt(0)1551; GFX90A-NEXT: s_setpc_b64 s[30:31]1552;1553; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_3:1554; GFX942: ; %bb.0:1555; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1556; GFX942-NEXT: ;;#ASMSTART1557; GFX942-NEXT: ; def v[0:1]1558; GFX942-NEXT: ;;#ASMEND1559; GFX942-NEXT: v_mov_b32_e32 v2, 01560; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 161561; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1562; GFX942-NEXT: s_waitcnt vmcnt(0)1563; GFX942-NEXT: s_setpc_b64 s[30:31]1564 %vec0 = call <4 x i16> asm "; def $0", "=v"()1565 %vec1 = call <4 x i16> asm "; def $0", "=v"()1566 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1567 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1568 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 3>1569 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41570 ret void1571}1572 1573define void @v_shuffle_v2i16_v3i16__u_4(ptr addrspace(1) inreg %ptr) {1574; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_4:1575; GFX900: ; %bb.0:1576; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX900-NEXT: v_mov_b32_e32 v2, 01578; GFX900-NEXT: ;;#ASMSTART1579; GFX900-NEXT: ; def v[0:1]1580; GFX900-NEXT: ;;#ASMEND1581; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1582; GFX900-NEXT: s_waitcnt vmcnt(0)1583; GFX900-NEXT: s_setpc_b64 s[30:31]1584;1585; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_4:1586; GFX90A: ; %bb.0:1587; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1588; GFX90A-NEXT: v_mov_b32_e32 v2, 01589; GFX90A-NEXT: ;;#ASMSTART1590; GFX90A-NEXT: ; def v[0:1]1591; GFX90A-NEXT: ;;#ASMEND1592; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1593; GFX90A-NEXT: s_waitcnt vmcnt(0)1594; GFX90A-NEXT: s_setpc_b64 s[30:31]1595;1596; GFX942-LABEL: v_shuffle_v2i16_v3i16__u_4:1597; GFX942: ; %bb.0:1598; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1599; GFX942-NEXT: v_mov_b32_e32 v2, 01600; GFX942-NEXT: ;;#ASMSTART1601; GFX942-NEXT: ; def v[0:1]1602; GFX942-NEXT: ;;#ASMEND1603; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1604; GFX942-NEXT: s_waitcnt vmcnt(0)1605; GFX942-NEXT: s_setpc_b64 s[30:31]1606 %vec0 = call <4 x i16> asm "; def $0", "=v"()1607 %vec1 = call <4 x i16> asm "; def $0", "=v"()1608 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1609 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1610 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 4>1611 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41612 ret void1613}1614 1615define void @v_shuffle_v2i16_v3i16__0_4(ptr addrspace(1) inreg %ptr) {1616; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_4:1617; GFX900: ; %bb.0:1618; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1619; GFX900-NEXT: ;;#ASMSTART1620; GFX900-NEXT: ; def v[0:1]1621; GFX900-NEXT: ;;#ASMEND1622; GFX900-NEXT: s_mov_b32 s4, 0xffff1623; GFX900-NEXT: v_mov_b32_e32 v3, 01624; GFX900-NEXT: ;;#ASMSTART1625; GFX900-NEXT: ; def v[1:2]1626; GFX900-NEXT: ;;#ASMEND1627; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v11628; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1629; GFX900-NEXT: s_waitcnt vmcnt(0)1630; GFX900-NEXT: s_setpc_b64 s[30:31]1631;1632; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_4:1633; GFX90A: ; %bb.0:1634; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1635; GFX90A-NEXT: ;;#ASMSTART1636; GFX90A-NEXT: ; def v[0:1]1637; GFX90A-NEXT: ;;#ASMEND1638; GFX90A-NEXT: s_mov_b32 s4, 0xffff1639; GFX90A-NEXT: v_mov_b32_e32 v4, 01640; GFX90A-NEXT: ;;#ASMSTART1641; GFX90A-NEXT: ; def v[2:3]1642; GFX90A-NEXT: ;;#ASMEND1643; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v21644; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1645; GFX90A-NEXT: s_waitcnt vmcnt(0)1646; GFX90A-NEXT: s_setpc_b64 s[30:31]1647;1648; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_4:1649; GFX942: ; %bb.0:1650; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1651; GFX942-NEXT: ;;#ASMSTART1652; GFX942-NEXT: ; def v[0:1]1653; GFX942-NEXT: ;;#ASMEND1654; GFX942-NEXT: s_mov_b32 s2, 0xffff1655; GFX942-NEXT: v_mov_b32_e32 v4, 01656; GFX942-NEXT: ;;#ASMSTART1657; GFX942-NEXT: ; def v[2:3]1658; GFX942-NEXT: ;;#ASMEND1659; GFX942-NEXT: s_nop 01660; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v21661; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1662; GFX942-NEXT: s_waitcnt vmcnt(0)1663; GFX942-NEXT: s_setpc_b64 s[30:31]1664 %vec0 = call <4 x i16> asm "; def $0", "=v"()1665 %vec1 = call <4 x i16> asm "; def $0", "=v"()1666 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1667 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1668 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 4>1669 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41670 ret void1671}1672 1673define void @v_shuffle_v2i16_v3i16__1_4(ptr addrspace(1) inreg %ptr) {1674; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_4:1675; GFX900: ; %bb.0:1676; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1677; GFX900-NEXT: ;;#ASMSTART1678; GFX900-NEXT: ; def v[0:1]1679; GFX900-NEXT: ;;#ASMEND1680; GFX900-NEXT: s_mov_b32 s4, 0x70603021681; GFX900-NEXT: v_mov_b32_e32 v3, 01682; GFX900-NEXT: ;;#ASMSTART1683; GFX900-NEXT: ; def v[1:2]1684; GFX900-NEXT: ;;#ASMEND1685; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41686; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1687; GFX900-NEXT: s_waitcnt vmcnt(0)1688; GFX900-NEXT: s_setpc_b64 s[30:31]1689;1690; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_4:1691; GFX90A: ; %bb.0:1692; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1693; GFX90A-NEXT: ;;#ASMSTART1694; GFX90A-NEXT: ; def v[0:1]1695; GFX90A-NEXT: ;;#ASMEND1696; GFX90A-NEXT: s_mov_b32 s4, 0x70603021697; GFX90A-NEXT: v_mov_b32_e32 v4, 01698; GFX90A-NEXT: ;;#ASMSTART1699; GFX90A-NEXT: ; def v[2:3]1700; GFX90A-NEXT: ;;#ASMEND1701; GFX90A-NEXT: v_perm_b32 v0, v2, v0, s41702; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1703; GFX90A-NEXT: s_waitcnt vmcnt(0)1704; GFX90A-NEXT: s_setpc_b64 s[30:31]1705;1706; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_4:1707; GFX942: ; %bb.0:1708; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1709; GFX942-NEXT: ;;#ASMSTART1710; GFX942-NEXT: ; def v[0:1]1711; GFX942-NEXT: ;;#ASMEND1712; GFX942-NEXT: s_mov_b32 s2, 0x70603021713; GFX942-NEXT: v_mov_b32_e32 v4, 01714; GFX942-NEXT: ;;#ASMSTART1715; GFX942-NEXT: ; def v[2:3]1716; GFX942-NEXT: ;;#ASMEND1717; GFX942-NEXT: s_nop 01718; GFX942-NEXT: v_perm_b32 v0, v2, v0, s21719; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1720; GFX942-NEXT: s_waitcnt vmcnt(0)1721; GFX942-NEXT: s_setpc_b64 s[30:31]1722 %vec0 = call <4 x i16> asm "; def $0", "=v"()1723 %vec1 = call <4 x i16> asm "; def $0", "=v"()1724 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1725 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1726 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 4>1727 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41728 ret void1729}1730 1731define void @v_shuffle_v2i16_v3i16__2_4(ptr addrspace(1) inreg %ptr) {1732; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_4:1733; GFX900: ; %bb.0:1734; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1735; GFX900-NEXT: ;;#ASMSTART1736; GFX900-NEXT: ; def v[0:1]1737; GFX900-NEXT: ;;#ASMEND1738; GFX900-NEXT: s_mov_b32 s4, 0xffff1739; GFX900-NEXT: v_mov_b32_e32 v4, 01740; GFX900-NEXT: ;;#ASMSTART1741; GFX900-NEXT: ; def v[2:3]1742; GFX900-NEXT: ;;#ASMEND1743; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v21744; GFX900-NEXT: global_store_dword v4, v0, s[16:17]1745; GFX900-NEXT: s_waitcnt vmcnt(0)1746; GFX900-NEXT: s_setpc_b64 s[30:31]1747;1748; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_4:1749; GFX90A: ; %bb.0:1750; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1751; GFX90A-NEXT: ;;#ASMSTART1752; GFX90A-NEXT: ; def v[0:1]1753; GFX90A-NEXT: ;;#ASMEND1754; GFX90A-NEXT: s_mov_b32 s4, 0xffff1755; GFX90A-NEXT: v_mov_b32_e32 v4, 01756; GFX90A-NEXT: ;;#ASMSTART1757; GFX90A-NEXT: ; def v[2:3]1758; GFX90A-NEXT: ;;#ASMEND1759; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v21760; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1761; GFX90A-NEXT: s_waitcnt vmcnt(0)1762; GFX90A-NEXT: s_setpc_b64 s[30:31]1763;1764; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_4:1765; GFX942: ; %bb.0:1766; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1767; GFX942-NEXT: ;;#ASMSTART1768; GFX942-NEXT: ; def v[0:1]1769; GFX942-NEXT: ;;#ASMEND1770; GFX942-NEXT: s_mov_b32 s2, 0xffff1771; GFX942-NEXT: v_mov_b32_e32 v4, 01772; GFX942-NEXT: ;;#ASMSTART1773; GFX942-NEXT: ; def v[2:3]1774; GFX942-NEXT: ;;#ASMEND1775; GFX942-NEXT: s_nop 01776; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v21777; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1778; GFX942-NEXT: s_waitcnt vmcnt(0)1779; GFX942-NEXT: s_setpc_b64 s[30:31]1780 %vec0 = call <4 x i16> asm "; def $0", "=v"()1781 %vec1 = call <4 x i16> asm "; def $0", "=v"()1782 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1783 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1784 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 4>1785 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41786 ret void1787}1788 1789define void @v_shuffle_v2i16_v3i16__3_4(ptr addrspace(1) inreg %ptr) {1790; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_4:1791; GFX900: ; %bb.0:1792; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1793; GFX900-NEXT: v_mov_b32_e32 v2, 01794; GFX900-NEXT: ;;#ASMSTART1795; GFX900-NEXT: ; def v[0:1]1796; GFX900-NEXT: ;;#ASMEND1797; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1798; GFX900-NEXT: s_waitcnt vmcnt(0)1799; GFX900-NEXT: s_setpc_b64 s[30:31]1800;1801; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_4:1802; GFX90A: ; %bb.0:1803; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1804; GFX90A-NEXT: v_mov_b32_e32 v2, 01805; GFX90A-NEXT: ;;#ASMSTART1806; GFX90A-NEXT: ; def v[0:1]1807; GFX90A-NEXT: ;;#ASMEND1808; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1809; GFX90A-NEXT: s_waitcnt vmcnt(0)1810; GFX90A-NEXT: s_setpc_b64 s[30:31]1811;1812; GFX942-LABEL: v_shuffle_v2i16_v3i16__3_4:1813; GFX942: ; %bb.0:1814; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1815; GFX942-NEXT: v_mov_b32_e32 v2, 01816; GFX942-NEXT: ;;#ASMSTART1817; GFX942-NEXT: ; def v[0:1]1818; GFX942-NEXT: ;;#ASMEND1819; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1820; GFX942-NEXT: s_waitcnt vmcnt(0)1821; GFX942-NEXT: s_setpc_b64 s[30:31]1822 %vec0 = call <4 x i16> asm "; def $0", "=v"()1823 %vec1 = call <4 x i16> asm "; def $0", "=v"()1824 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1825 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1826 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 4>1827 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41828 ret void1829}1830 1831define void @v_shuffle_v2i16_v3i16__4_4(ptr addrspace(1) inreg %ptr) {1832; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_4:1833; GFX900: ; %bb.0:1834; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1835; GFX900-NEXT: ;;#ASMSTART1836; GFX900-NEXT: ; def v[0:1]1837; GFX900-NEXT: ;;#ASMEND1838; GFX900-NEXT: s_mov_b32 s4, 0x70603021839; GFX900-NEXT: v_mov_b32_e32 v2, 01840; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41841; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1842; GFX900-NEXT: s_waitcnt vmcnt(0)1843; GFX900-NEXT: s_setpc_b64 s[30:31]1844;1845; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_4:1846; GFX90A: ; %bb.0:1847; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1848; GFX90A-NEXT: ;;#ASMSTART1849; GFX90A-NEXT: ; def v[0:1]1850; GFX90A-NEXT: ;;#ASMEND1851; GFX90A-NEXT: s_mov_b32 s4, 0x70603021852; GFX90A-NEXT: v_mov_b32_e32 v2, 01853; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41854; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1855; GFX90A-NEXT: s_waitcnt vmcnt(0)1856; GFX90A-NEXT: s_setpc_b64 s[30:31]1857;1858; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_4:1859; GFX942: ; %bb.0:1860; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1861; GFX942-NEXT: ;;#ASMSTART1862; GFX942-NEXT: ; def v[0:1]1863; GFX942-NEXT: ;;#ASMEND1864; GFX942-NEXT: s_mov_b32 s2, 0x70603021865; GFX942-NEXT: v_mov_b32_e32 v2, 01866; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21867; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1868; GFX942-NEXT: s_waitcnt vmcnt(0)1869; GFX942-NEXT: s_setpc_b64 s[30:31]1870 %vec0 = call <4 x i16> asm "; def $0", "=v"()1871 %vec1 = call <4 x i16> asm "; def $0", "=v"()1872 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1873 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1874 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 4>1875 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41876 ret void1877}1878 1879define void @v_shuffle_v2i16_v3i16__u_5(ptr addrspace(1) inreg %ptr) {1880; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_5:1881; GFX900: ; %bb.0:1882; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX900-NEXT: ;;#ASMSTART1884; GFX900-NEXT: ; def v[0:1]1885; GFX900-NEXT: ;;#ASMEND1886; GFX900-NEXT: v_mov_b32_e32 v2, 01887; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11888; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1889; GFX900-NEXT: s_waitcnt vmcnt(0)1890; GFX900-NEXT: s_setpc_b64 s[30:31]1891;1892; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_5:1893; GFX90A: ; %bb.0:1894; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1895; GFX90A-NEXT: ;;#ASMSTART1896; GFX90A-NEXT: ; def v[0:1]1897; GFX90A-NEXT: ;;#ASMEND1898; GFX90A-NEXT: v_mov_b32_e32 v2, 01899; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11900; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1901; GFX90A-NEXT: s_waitcnt vmcnt(0)1902; GFX90A-NEXT: s_setpc_b64 s[30:31]1903;1904; GFX942-LABEL: v_shuffle_v2i16_v3i16__u_5:1905; GFX942: ; %bb.0:1906; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1907; GFX942-NEXT: ;;#ASMSTART1908; GFX942-NEXT: ; def v[0:1]1909; GFX942-NEXT: ;;#ASMEND1910; GFX942-NEXT: v_mov_b32_e32 v2, 01911; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11912; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1913; GFX942-NEXT: s_waitcnt vmcnt(0)1914; GFX942-NEXT: s_setpc_b64 s[30:31]1915 %vec0 = call <4 x i16> asm "; def $0", "=v"()1916 %vec1 = call <4 x i16> asm "; def $0", "=v"()1917 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1918 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1919 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 5>1920 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41921 ret void1922}1923 1924define void @v_shuffle_v2i16_v3i16__0_5(ptr addrspace(1) inreg %ptr) {1925; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_5:1926; GFX900: ; %bb.0:1927; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1928; GFX900-NEXT: ;;#ASMSTART1929; GFX900-NEXT: ; def v[0:1]1930; GFX900-NEXT: ;;#ASMEND1931; GFX900-NEXT: s_mov_b32 s4, 0x50401001932; GFX900-NEXT: v_mov_b32_e32 v3, 01933; GFX900-NEXT: ;;#ASMSTART1934; GFX900-NEXT: ; def v[1:2]1935; GFX900-NEXT: ;;#ASMEND1936; GFX900-NEXT: v_perm_b32 v0, v2, v0, s41937; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1938; GFX900-NEXT: s_waitcnt vmcnt(0)1939; GFX900-NEXT: s_setpc_b64 s[30:31]1940;1941; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_5:1942; GFX90A: ; %bb.0:1943; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1944; GFX90A-NEXT: ;;#ASMSTART1945; GFX90A-NEXT: ; def v[0:1]1946; GFX90A-NEXT: ;;#ASMEND1947; GFX90A-NEXT: s_mov_b32 s4, 0x50401001948; GFX90A-NEXT: v_mov_b32_e32 v4, 01949; GFX90A-NEXT: ;;#ASMSTART1950; GFX90A-NEXT: ; def v[2:3]1951; GFX90A-NEXT: ;;#ASMEND1952; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s41953; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1954; GFX90A-NEXT: s_waitcnt vmcnt(0)1955; GFX90A-NEXT: s_setpc_b64 s[30:31]1956;1957; GFX942-LABEL: v_shuffle_v2i16_v3i16__0_5:1958; GFX942: ; %bb.0:1959; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1960; GFX942-NEXT: ;;#ASMSTART1961; GFX942-NEXT: ; def v[0:1]1962; GFX942-NEXT: ;;#ASMEND1963; GFX942-NEXT: s_mov_b32 s2, 0x50401001964; GFX942-NEXT: v_mov_b32_e32 v4, 01965; GFX942-NEXT: ;;#ASMSTART1966; GFX942-NEXT: ; def v[2:3]1967; GFX942-NEXT: ;;#ASMEND1968; GFX942-NEXT: s_nop 01969; GFX942-NEXT: v_perm_b32 v0, v3, v0, s21970; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1971; GFX942-NEXT: s_waitcnt vmcnt(0)1972; GFX942-NEXT: s_setpc_b64 s[30:31]1973 %vec0 = call <4 x i16> asm "; def $0", "=v"()1974 %vec1 = call <4 x i16> asm "; def $0", "=v"()1975 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1976 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1977 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 5>1978 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41979 ret void1980}1981 1982define void @v_shuffle_v2i16_v3i16__1_5(ptr addrspace(1) inreg %ptr) {1983; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_5:1984; GFX900: ; %bb.0:1985; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1986; GFX900-NEXT: ;;#ASMSTART1987; GFX900-NEXT: ; def v[0:1]1988; GFX900-NEXT: ;;#ASMEND1989; GFX900-NEXT: v_mov_b32_e32 v3, 01990; GFX900-NEXT: ;;#ASMSTART1991; GFX900-NEXT: ; def v[1:2]1992; GFX900-NEXT: ;;#ASMEND1993; GFX900-NEXT: v_alignbit_b32 v0, v2, v0, 161994; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1995; GFX900-NEXT: s_waitcnt vmcnt(0)1996; GFX900-NEXT: s_setpc_b64 s[30:31]1997;1998; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_5:1999; GFX90A: ; %bb.0:2000; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2001; GFX90A-NEXT: ;;#ASMSTART2002; GFX90A-NEXT: ; def v[0:1]2003; GFX90A-NEXT: ;;#ASMEND2004; GFX90A-NEXT: v_mov_b32_e32 v4, 02005; GFX90A-NEXT: ;;#ASMSTART2006; GFX90A-NEXT: ; def v[2:3]2007; GFX90A-NEXT: ;;#ASMEND2008; GFX90A-NEXT: v_alignbit_b32 v0, v3, v0, 162009; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2010; GFX90A-NEXT: s_waitcnt vmcnt(0)2011; GFX90A-NEXT: s_setpc_b64 s[30:31]2012;2013; GFX942-LABEL: v_shuffle_v2i16_v3i16__1_5:2014; GFX942: ; %bb.0:2015; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2016; GFX942-NEXT: ;;#ASMSTART2017; GFX942-NEXT: ; def v[0:1]2018; GFX942-NEXT: ;;#ASMEND2019; GFX942-NEXT: v_mov_b32_e32 v4, 02020; GFX942-NEXT: ;;#ASMSTART2021; GFX942-NEXT: ; def v[2:3]2022; GFX942-NEXT: ;;#ASMEND2023; GFX942-NEXT: s_nop 02024; GFX942-NEXT: v_alignbit_b32 v0, v3, v0, 162025; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2026; GFX942-NEXT: s_waitcnt vmcnt(0)2027; GFX942-NEXT: s_setpc_b64 s[30:31]2028 %vec0 = call <4 x i16> asm "; def $0", "=v"()2029 %vec1 = call <4 x i16> asm "; def $0", "=v"()2030 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2031 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2032 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 5>2033 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42034 ret void2035}2036 2037define void @v_shuffle_v2i16_v3i16__2_5(ptr addrspace(1) inreg %ptr) {2038; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_5:2039; GFX900: ; %bb.0:2040; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2041; GFX900-NEXT: ;;#ASMSTART2042; GFX900-NEXT: ; def v[0:1]2043; GFX900-NEXT: ;;#ASMEND2044; GFX900-NEXT: s_mov_b32 s4, 0x50401002045; GFX900-NEXT: v_mov_b32_e32 v4, 02046; GFX900-NEXT: ;;#ASMSTART2047; GFX900-NEXT: ; def v[2:3]2048; GFX900-NEXT: ;;#ASMEND2049; GFX900-NEXT: v_perm_b32 v0, v3, v1, s42050; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2051; GFX900-NEXT: s_waitcnt vmcnt(0)2052; GFX900-NEXT: s_setpc_b64 s[30:31]2053;2054; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_5:2055; GFX90A: ; %bb.0:2056; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2057; GFX90A-NEXT: ;;#ASMSTART2058; GFX90A-NEXT: ; def v[0:1]2059; GFX90A-NEXT: ;;#ASMEND2060; GFX90A-NEXT: s_mov_b32 s4, 0x50401002061; GFX90A-NEXT: v_mov_b32_e32 v4, 02062; GFX90A-NEXT: ;;#ASMSTART2063; GFX90A-NEXT: ; def v[2:3]2064; GFX90A-NEXT: ;;#ASMEND2065; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s42066; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2067; GFX90A-NEXT: s_waitcnt vmcnt(0)2068; GFX90A-NEXT: s_setpc_b64 s[30:31]2069;2070; GFX942-LABEL: v_shuffle_v2i16_v3i16__2_5:2071; GFX942: ; %bb.0:2072; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2073; GFX942-NEXT: ;;#ASMSTART2074; GFX942-NEXT: ; def v[0:1]2075; GFX942-NEXT: ;;#ASMEND2076; GFX942-NEXT: s_mov_b32 s2, 0x50401002077; GFX942-NEXT: v_mov_b32_e32 v4, 02078; GFX942-NEXT: ;;#ASMSTART2079; GFX942-NEXT: ; def v[2:3]2080; GFX942-NEXT: ;;#ASMEND2081; GFX942-NEXT: s_nop 02082; GFX942-NEXT: v_perm_b32 v0, v3, v1, s22083; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2084; GFX942-NEXT: s_waitcnt vmcnt(0)2085; GFX942-NEXT: s_setpc_b64 s[30:31]2086 %vec0 = call <4 x i16> asm "; def $0", "=v"()2087 %vec1 = call <4 x i16> asm "; def $0", "=v"()2088 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2089 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2090 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 5>2091 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42092 ret void2093}2094 2095define void @v_shuffle_v2i16_v3i16__3_5(ptr addrspace(1) inreg %ptr) {2096; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_5:2097; GFX900: ; %bb.0:2098; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2099; GFX900-NEXT: ;;#ASMSTART2100; GFX900-NEXT: ; def v[0:1]2101; GFX900-NEXT: ;;#ASMEND2102; GFX900-NEXT: s_mov_b32 s4, 0x50401002103; GFX900-NEXT: v_mov_b32_e32 v2, 02104; GFX900-NEXT: v_perm_b32 v0, v1, v0, s42105; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2106; GFX900-NEXT: s_waitcnt vmcnt(0)2107; GFX900-NEXT: s_setpc_b64 s[30:31]2108;2109; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_5:2110; GFX90A: ; %bb.0:2111; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2112; GFX90A-NEXT: ;;#ASMSTART2113; GFX90A-NEXT: ; def v[0:1]2114; GFX90A-NEXT: ;;#ASMEND2115; GFX90A-NEXT: s_mov_b32 s4, 0x50401002116; GFX90A-NEXT: v_mov_b32_e32 v2, 02117; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s42118; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2119; GFX90A-NEXT: s_waitcnt vmcnt(0)2120; GFX90A-NEXT: s_setpc_b64 s[30:31]2121;2122; GFX942-LABEL: v_shuffle_v2i16_v3i16__3_5:2123; GFX942: ; %bb.0:2124; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2125; GFX942-NEXT: ;;#ASMSTART2126; GFX942-NEXT: ; def v[0:1]2127; GFX942-NEXT: ;;#ASMEND2128; GFX942-NEXT: s_mov_b32 s2, 0x50401002129; GFX942-NEXT: v_mov_b32_e32 v2, 02130; GFX942-NEXT: v_perm_b32 v0, v1, v0, s22131; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2132; GFX942-NEXT: s_waitcnt vmcnt(0)2133; GFX942-NEXT: s_setpc_b64 s[30:31]2134 %vec0 = call <4 x i16> asm "; def $0", "=v"()2135 %vec1 = call <4 x i16> asm "; def $0", "=v"()2136 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2137 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2138 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 5>2139 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42140 ret void2141}2142 2143define void @v_shuffle_v2i16_v3i16__4_5(ptr addrspace(1) inreg %ptr) {2144; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_5:2145; GFX900: ; %bb.0:2146; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2147; GFX900-NEXT: ;;#ASMSTART2148; GFX900-NEXT: ; def v[0:1]2149; GFX900-NEXT: ;;#ASMEND2150; GFX900-NEXT: v_mov_b32_e32 v2, 02151; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 162152; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2153; GFX900-NEXT: s_waitcnt vmcnt(0)2154; GFX900-NEXT: s_setpc_b64 s[30:31]2155;2156; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_5:2157; GFX90A: ; %bb.0:2158; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2159; GFX90A-NEXT: ;;#ASMSTART2160; GFX90A-NEXT: ; def v[0:1]2161; GFX90A-NEXT: ;;#ASMEND2162; GFX90A-NEXT: v_mov_b32_e32 v2, 02163; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 162164; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2165; GFX90A-NEXT: s_waitcnt vmcnt(0)2166; GFX90A-NEXT: s_setpc_b64 s[30:31]2167;2168; GFX942-LABEL: v_shuffle_v2i16_v3i16__4_5:2169; GFX942: ; %bb.0:2170; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2171; GFX942-NEXT: ;;#ASMSTART2172; GFX942-NEXT: ; def v[0:1]2173; GFX942-NEXT: ;;#ASMEND2174; GFX942-NEXT: v_mov_b32_e32 v2, 02175; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 162176; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2177; GFX942-NEXT: s_waitcnt vmcnt(0)2178; GFX942-NEXT: s_setpc_b64 s[30:31]2179 %vec0 = call <4 x i16> asm "; def $0", "=v"()2180 %vec1 = call <4 x i16> asm "; def $0", "=v"()2181 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2182 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2183 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 5>2184 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42185 ret void2186}2187 2188define void @s_shuffle_v2i16_v3i16__u_u() {2189; GFX9-LABEL: s_shuffle_v2i16_v3i16__u_u:2190; GFX9: ; %bb.0:2191; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2192; GFX9-NEXT: ;;#ASMSTART2193; GFX9-NEXT: ; use s82194; GFX9-NEXT: ;;#ASMEND2195; GFX9-NEXT: s_setpc_b64 s[30:31]2196 %vec0 = call <4 x i16> asm "; def $0", "=s"()2197 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2198 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> poison2199 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2200 ret void2201}2202 2203define void @s_shuffle_v2i16_v3i16__0_u() {2204; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_u:2205; GFX900: ; %bb.0:2206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2207; GFX900-NEXT: ;;#ASMSTART2208; GFX900-NEXT: ; def s[8:9]2209; GFX900-NEXT: ;;#ASMEND2210; GFX900-NEXT: ;;#ASMSTART2211; GFX900-NEXT: ; use s82212; GFX900-NEXT: ;;#ASMEND2213; GFX900-NEXT: s_setpc_b64 s[30:31]2214;2215; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_u:2216; GFX90A: ; %bb.0:2217; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2218; GFX90A-NEXT: ;;#ASMSTART2219; GFX90A-NEXT: ; def s[8:9]2220; GFX90A-NEXT: ;;#ASMEND2221; GFX90A-NEXT: ;;#ASMSTART2222; GFX90A-NEXT: ; use s82223; GFX90A-NEXT: ;;#ASMEND2224; GFX90A-NEXT: s_setpc_b64 s[30:31]2225;2226; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_u:2227; GFX942: ; %bb.0:2228; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX942-NEXT: ;;#ASMSTART2230; GFX942-NEXT: ; def s[8:9]2231; GFX942-NEXT: ;;#ASMEND2232; GFX942-NEXT: s_nop 02233; GFX942-NEXT: ;;#ASMSTART2234; GFX942-NEXT: ; use s82235; GFX942-NEXT: ;;#ASMEND2236; GFX942-NEXT: s_setpc_b64 s[30:31]2237 %vec0 = call <4 x i16> asm "; def $0", "=s"()2238 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2239 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 poison>2240 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2241 ret void2242}2243 2244define void @s_shuffle_v2i16_v3i16__1_u() {2245; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_u:2246; GFX900: ; %bb.0:2247; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2248; GFX900-NEXT: ;;#ASMSTART2249; GFX900-NEXT: ; def s[4:5]2250; GFX900-NEXT: ;;#ASMEND2251; GFX900-NEXT: s_lshr_b32 s8, s4, 162252; GFX900-NEXT: ;;#ASMSTART2253; GFX900-NEXT: ; use s82254; GFX900-NEXT: ;;#ASMEND2255; GFX900-NEXT: s_setpc_b64 s[30:31]2256;2257; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_u:2258; GFX90A: ; %bb.0:2259; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2260; GFX90A-NEXT: ;;#ASMSTART2261; GFX90A-NEXT: ; def s[4:5]2262; GFX90A-NEXT: ;;#ASMEND2263; GFX90A-NEXT: s_lshr_b32 s8, s4, 162264; GFX90A-NEXT: ;;#ASMSTART2265; GFX90A-NEXT: ; use s82266; GFX90A-NEXT: ;;#ASMEND2267; GFX90A-NEXT: s_setpc_b64 s[30:31]2268;2269; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_u:2270; GFX942: ; %bb.0:2271; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2272; GFX942-NEXT: ;;#ASMSTART2273; GFX942-NEXT: ; def s[0:1]2274; GFX942-NEXT: ;;#ASMEND2275; GFX942-NEXT: s_lshr_b32 s8, s0, 162276; GFX942-NEXT: ;;#ASMSTART2277; GFX942-NEXT: ; use s82278; GFX942-NEXT: ;;#ASMEND2279; GFX942-NEXT: s_setpc_b64 s[30:31]2280 %vec0 = call <4 x i16> asm "; def $0", "=s"()2281 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2282 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 poison>2283 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2284 ret void2285}2286 2287define void @s_shuffle_v2i16_v3i16__2_u() {2288; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_u:2289; GFX900: ; %bb.0:2290; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2291; GFX900-NEXT: ;;#ASMSTART2292; GFX900-NEXT: ; def s[4:5]2293; GFX900-NEXT: ;;#ASMEND2294; GFX900-NEXT: s_mov_b32 s8, s52295; GFX900-NEXT: ;;#ASMSTART2296; GFX900-NEXT: ; use s82297; GFX900-NEXT: ;;#ASMEND2298; GFX900-NEXT: s_setpc_b64 s[30:31]2299;2300; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_u:2301; GFX90A: ; %bb.0:2302; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2303; GFX90A-NEXT: ;;#ASMSTART2304; GFX90A-NEXT: ; def s[4:5]2305; GFX90A-NEXT: ;;#ASMEND2306; GFX90A-NEXT: s_mov_b32 s8, s52307; GFX90A-NEXT: ;;#ASMSTART2308; GFX90A-NEXT: ; use s82309; GFX90A-NEXT: ;;#ASMEND2310; GFX90A-NEXT: s_setpc_b64 s[30:31]2311;2312; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_u:2313; GFX942: ; %bb.0:2314; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2315; GFX942-NEXT: ;;#ASMSTART2316; GFX942-NEXT: ; def s[0:1]2317; GFX942-NEXT: ;;#ASMEND2318; GFX942-NEXT: s_mov_b32 s8, s12319; GFX942-NEXT: ;;#ASMSTART2320; GFX942-NEXT: ; use s82321; GFX942-NEXT: ;;#ASMEND2322; GFX942-NEXT: s_setpc_b64 s[30:31]2323 %vec0 = call <4 x i16> asm "; def $0", "=s"()2324 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2325 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 poison>2326 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2327 ret void2328}2329 2330define void @s_shuffle_v2i16_v3i16__3_u() {2331; GFX9-LABEL: s_shuffle_v2i16_v3i16__3_u:2332; GFX9: ; %bb.0:2333; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; GFX9-NEXT: ;;#ASMSTART2335; GFX9-NEXT: ; use s82336; GFX9-NEXT: ;;#ASMEND2337; GFX9-NEXT: s_setpc_b64 s[30:31]2338 %vec0 = call <4 x i16> asm "; def $0", "=s"()2339 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2340 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 poison>2341 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2342 ret void2343}2344 2345define void @s_shuffle_v2i16_v3i16__4_u() {2346; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_u:2347; GFX900: ; %bb.0:2348; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2349; GFX900-NEXT: ;;#ASMSTART2350; GFX900-NEXT: ; def s[4:5]2351; GFX900-NEXT: ;;#ASMEND2352; GFX900-NEXT: s_lshr_b32 s8, s4, 162353; GFX900-NEXT: ;;#ASMSTART2354; GFX900-NEXT: ; use s82355; GFX900-NEXT: ;;#ASMEND2356; GFX900-NEXT: s_setpc_b64 s[30:31]2357;2358; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_u:2359; GFX90A: ; %bb.0:2360; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GFX90A-NEXT: ;;#ASMSTART2362; GFX90A-NEXT: ; def s[4:5]2363; GFX90A-NEXT: ;;#ASMEND2364; GFX90A-NEXT: s_lshr_b32 s8, s4, 162365; GFX90A-NEXT: ;;#ASMSTART2366; GFX90A-NEXT: ; use s82367; GFX90A-NEXT: ;;#ASMEND2368; GFX90A-NEXT: s_setpc_b64 s[30:31]2369;2370; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_u:2371; GFX942: ; %bb.0:2372; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2373; GFX942-NEXT: ;;#ASMSTART2374; GFX942-NEXT: ; def s[0:1]2375; GFX942-NEXT: ;;#ASMEND2376; GFX942-NEXT: s_lshr_b32 s8, s0, 162377; GFX942-NEXT: ;;#ASMSTART2378; GFX942-NEXT: ; use s82379; GFX942-NEXT: ;;#ASMEND2380; GFX942-NEXT: s_setpc_b64 s[30:31]2381 %vec0 = call <4 x i16> asm "; def $0", "=s"()2382 %vec1 = call <4 x i16> asm "; def $0", "=s"()2383 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2384 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2385 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 poison>2386 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2387 ret void2388}2389 2390define void @s_shuffle_v2i16_v3i16__5_u() {2391; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_u:2392; GFX900: ; %bb.0:2393; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2394; GFX900-NEXT: ;;#ASMSTART2395; GFX900-NEXT: ; def s[4:5]2396; GFX900-NEXT: ;;#ASMEND2397; GFX900-NEXT: s_mov_b32 s8, s52398; GFX900-NEXT: ;;#ASMSTART2399; GFX900-NEXT: ; use s82400; GFX900-NEXT: ;;#ASMEND2401; GFX900-NEXT: s_setpc_b64 s[30:31]2402;2403; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_u:2404; GFX90A: ; %bb.0:2405; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX90A-NEXT: ;;#ASMSTART2407; GFX90A-NEXT: ; def s[4:5]2408; GFX90A-NEXT: ;;#ASMEND2409; GFX90A-NEXT: s_mov_b32 s8, s52410; GFX90A-NEXT: ;;#ASMSTART2411; GFX90A-NEXT: ; use s82412; GFX90A-NEXT: ;;#ASMEND2413; GFX90A-NEXT: s_setpc_b64 s[30:31]2414;2415; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_u:2416; GFX942: ; %bb.0:2417; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2418; GFX942-NEXT: ;;#ASMSTART2419; GFX942-NEXT: ; def s[0:1]2420; GFX942-NEXT: ;;#ASMEND2421; GFX942-NEXT: s_mov_b32 s8, s12422; GFX942-NEXT: ;;#ASMSTART2423; GFX942-NEXT: ; use s82424; GFX942-NEXT: ;;#ASMEND2425; GFX942-NEXT: s_setpc_b64 s[30:31]2426 %vec0 = call <4 x i16> asm "; def $0", "=s"()2427 %vec1 = call <4 x i16> asm "; def $0", "=s"()2428 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2429 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2430 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 poison>2431 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2432 ret void2433}2434 2435define void @s_shuffle_v2i16_v3i16__5_0() {2436; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_0:2437; GFX900: ; %bb.0:2438; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2439; GFX900-NEXT: ;;#ASMSTART2440; GFX900-NEXT: ; def s[4:5]2441; GFX900-NEXT: ;;#ASMEND2442; GFX900-NEXT: ;;#ASMSTART2443; GFX900-NEXT: ; def s[6:7]2444; GFX900-NEXT: ;;#ASMEND2445; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s42446; GFX900-NEXT: ;;#ASMSTART2447; GFX900-NEXT: ; use s82448; GFX900-NEXT: ;;#ASMEND2449; GFX900-NEXT: s_setpc_b64 s[30:31]2450;2451; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_0:2452; GFX90A: ; %bb.0:2453; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2454; GFX90A-NEXT: ;;#ASMSTART2455; GFX90A-NEXT: ; def s[4:5]2456; GFX90A-NEXT: ;;#ASMEND2457; GFX90A-NEXT: ;;#ASMSTART2458; GFX90A-NEXT: ; def s[6:7]2459; GFX90A-NEXT: ;;#ASMEND2460; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s42461; GFX90A-NEXT: ;;#ASMSTART2462; GFX90A-NEXT: ; use s82463; GFX90A-NEXT: ;;#ASMEND2464; GFX90A-NEXT: s_setpc_b64 s[30:31]2465;2466; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_0:2467; GFX942: ; %bb.0:2468; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2469; GFX942-NEXT: ;;#ASMSTART2470; GFX942-NEXT: ; def s[0:1]2471; GFX942-NEXT: ;;#ASMEND2472; GFX942-NEXT: ;;#ASMSTART2473; GFX942-NEXT: ; def s[2:3]2474; GFX942-NEXT: ;;#ASMEND2475; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s02476; GFX942-NEXT: ;;#ASMSTART2477; GFX942-NEXT: ; use s82478; GFX942-NEXT: ;;#ASMEND2479; GFX942-NEXT: s_setpc_b64 s[30:31]2480 %vec0 = call <4 x i16> asm "; def $0", "=s"()2481 %vec1 = call <4 x i16> asm "; def $0", "=s"()2482 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2483 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2484 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 0>2485 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2486 ret void2487}2488 2489define void @s_shuffle_v2i16_v3i16__5_1() {2490; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_1:2491; GFX900: ; %bb.0:2492; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2493; GFX900-NEXT: ;;#ASMSTART2494; GFX900-NEXT: ; def s[4:5]2495; GFX900-NEXT: ;;#ASMEND2496; GFX900-NEXT: ;;#ASMSTART2497; GFX900-NEXT: ; def s[6:7]2498; GFX900-NEXT: ;;#ASMEND2499; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s42500; GFX900-NEXT: ;;#ASMSTART2501; GFX900-NEXT: ; use s82502; GFX900-NEXT: ;;#ASMEND2503; GFX900-NEXT: s_setpc_b64 s[30:31]2504;2505; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_1:2506; GFX90A: ; %bb.0:2507; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2508; GFX90A-NEXT: ;;#ASMSTART2509; GFX90A-NEXT: ; def s[4:5]2510; GFX90A-NEXT: ;;#ASMEND2511; GFX90A-NEXT: ;;#ASMSTART2512; GFX90A-NEXT: ; def s[6:7]2513; GFX90A-NEXT: ;;#ASMEND2514; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s42515; GFX90A-NEXT: ;;#ASMSTART2516; GFX90A-NEXT: ; use s82517; GFX90A-NEXT: ;;#ASMEND2518; GFX90A-NEXT: s_setpc_b64 s[30:31]2519;2520; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_1:2521; GFX942: ; %bb.0:2522; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2523; GFX942-NEXT: ;;#ASMSTART2524; GFX942-NEXT: ; def s[0:1]2525; GFX942-NEXT: ;;#ASMEND2526; GFX942-NEXT: ;;#ASMSTART2527; GFX942-NEXT: ; def s[2:3]2528; GFX942-NEXT: ;;#ASMEND2529; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s02530; GFX942-NEXT: ;;#ASMSTART2531; GFX942-NEXT: ; use s82532; GFX942-NEXT: ;;#ASMEND2533; GFX942-NEXT: s_setpc_b64 s[30:31]2534 %vec0 = call <4 x i16> asm "; def $0", "=s"()2535 %vec1 = call <4 x i16> asm "; def $0", "=s"()2536 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2537 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2538 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 1>2539 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2540 ret void2541}2542 2543define void @s_shuffle_v2i16_v3i16__5_2() {2544; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_2:2545; GFX900: ; %bb.0:2546; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2547; GFX900-NEXT: ;;#ASMSTART2548; GFX900-NEXT: ; def s[4:5]2549; GFX900-NEXT: ;;#ASMEND2550; GFX900-NEXT: ;;#ASMSTART2551; GFX900-NEXT: ; def s[6:7]2552; GFX900-NEXT: ;;#ASMEND2553; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s52554; GFX900-NEXT: ;;#ASMSTART2555; GFX900-NEXT: ; use s82556; GFX900-NEXT: ;;#ASMEND2557; GFX900-NEXT: s_setpc_b64 s[30:31]2558;2559; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_2:2560; GFX90A: ; %bb.0:2561; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2562; GFX90A-NEXT: ;;#ASMSTART2563; GFX90A-NEXT: ; def s[4:5]2564; GFX90A-NEXT: ;;#ASMEND2565; GFX90A-NEXT: ;;#ASMSTART2566; GFX90A-NEXT: ; def s[6:7]2567; GFX90A-NEXT: ;;#ASMEND2568; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s52569; GFX90A-NEXT: ;;#ASMSTART2570; GFX90A-NEXT: ; use s82571; GFX90A-NEXT: ;;#ASMEND2572; GFX90A-NEXT: s_setpc_b64 s[30:31]2573;2574; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_2:2575; GFX942: ; %bb.0:2576; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2577; GFX942-NEXT: ;;#ASMSTART2578; GFX942-NEXT: ; def s[0:1]2579; GFX942-NEXT: ;;#ASMEND2580; GFX942-NEXT: ;;#ASMSTART2581; GFX942-NEXT: ; def s[2:3]2582; GFX942-NEXT: ;;#ASMEND2583; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s12584; GFX942-NEXT: ;;#ASMSTART2585; GFX942-NEXT: ; use s82586; GFX942-NEXT: ;;#ASMEND2587; GFX942-NEXT: s_setpc_b64 s[30:31]2588 %vec0 = call <4 x i16> asm "; def $0", "=s"()2589 %vec1 = call <4 x i16> asm "; def $0", "=s"()2590 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2591 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2592 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 2>2593 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2594 ret void2595}2596 2597define void @s_shuffle_v2i16_v3i16__5_3() {2598; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_3:2599; GFX900: ; %bb.0:2600; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2601; GFX900-NEXT: ;;#ASMSTART2602; GFX900-NEXT: ; def s[4:5]2603; GFX900-NEXT: ;;#ASMEND2604; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42605; GFX900-NEXT: ;;#ASMSTART2606; GFX900-NEXT: ; use s82607; GFX900-NEXT: ;;#ASMEND2608; GFX900-NEXT: s_setpc_b64 s[30:31]2609;2610; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_3:2611; GFX90A: ; %bb.0:2612; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2613; GFX90A-NEXT: ;;#ASMSTART2614; GFX90A-NEXT: ; def s[4:5]2615; GFX90A-NEXT: ;;#ASMEND2616; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42617; GFX90A-NEXT: ;;#ASMSTART2618; GFX90A-NEXT: ; use s82619; GFX90A-NEXT: ;;#ASMEND2620; GFX90A-NEXT: s_setpc_b64 s[30:31]2621;2622; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_3:2623; GFX942: ; %bb.0:2624; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2625; GFX942-NEXT: ;;#ASMSTART2626; GFX942-NEXT: ; def s[0:1]2627; GFX942-NEXT: ;;#ASMEND2628; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02629; GFX942-NEXT: ;;#ASMSTART2630; GFX942-NEXT: ; use s82631; GFX942-NEXT: ;;#ASMEND2632; GFX942-NEXT: s_setpc_b64 s[30:31]2633 %vec0 = call <4 x i16> asm "; def $0", "=s"()2634 %vec1 = call <4 x i16> asm "; def $0", "=s"()2635 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2636 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2637 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 3>2638 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2639 ret void2640}2641 2642define void @s_shuffle_v2i16_v3i16__5_4() {2643; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_4:2644; GFX900: ; %bb.0:2645; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2646; GFX900-NEXT: ;;#ASMSTART2647; GFX900-NEXT: ; def s[4:5]2648; GFX900-NEXT: ;;#ASMEND2649; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s42650; GFX900-NEXT: ;;#ASMSTART2651; GFX900-NEXT: ; use s82652; GFX900-NEXT: ;;#ASMEND2653; GFX900-NEXT: s_setpc_b64 s[30:31]2654;2655; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_4:2656; GFX90A: ; %bb.0:2657; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2658; GFX90A-NEXT: ;;#ASMSTART2659; GFX90A-NEXT: ; def s[4:5]2660; GFX90A-NEXT: ;;#ASMEND2661; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s42662; GFX90A-NEXT: ;;#ASMSTART2663; GFX90A-NEXT: ; use s82664; GFX90A-NEXT: ;;#ASMEND2665; GFX90A-NEXT: s_setpc_b64 s[30:31]2666;2667; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_4:2668; GFX942: ; %bb.0:2669; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2670; GFX942-NEXT: ;;#ASMSTART2671; GFX942-NEXT: ; def s[0:1]2672; GFX942-NEXT: ;;#ASMEND2673; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s02674; GFX942-NEXT: ;;#ASMSTART2675; GFX942-NEXT: ; use s82676; GFX942-NEXT: ;;#ASMEND2677; GFX942-NEXT: s_setpc_b64 s[30:31]2678 %vec0 = call <4 x i16> asm "; def $0", "=s"()2679 %vec1 = call <4 x i16> asm "; def $0", "=s"()2680 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2681 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2682 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 4>2683 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2684 ret void2685}2686 2687define void @s_shuffle_v2i16_v3i16__5_5() {2688; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_5:2689; GFX900: ; %bb.0:2690; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2691; GFX900-NEXT: ;;#ASMSTART2692; GFX900-NEXT: ; def s[4:5]2693; GFX900-NEXT: ;;#ASMEND2694; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s52695; GFX900-NEXT: ;;#ASMSTART2696; GFX900-NEXT: ; use s82697; GFX900-NEXT: ;;#ASMEND2698; GFX900-NEXT: s_setpc_b64 s[30:31]2699;2700; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_5:2701; GFX90A: ; %bb.0:2702; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2703; GFX90A-NEXT: ;;#ASMSTART2704; GFX90A-NEXT: ; def s[4:5]2705; GFX90A-NEXT: ;;#ASMEND2706; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s52707; GFX90A-NEXT: ;;#ASMSTART2708; GFX90A-NEXT: ; use s82709; GFX90A-NEXT: ;;#ASMEND2710; GFX90A-NEXT: s_setpc_b64 s[30:31]2711;2712; GFX942-LABEL: s_shuffle_v2i16_v3i16__5_5:2713; GFX942: ; %bb.0:2714; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2715; GFX942-NEXT: ;;#ASMSTART2716; GFX942-NEXT: ; def s[0:1]2717; GFX942-NEXT: ;;#ASMEND2718; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s12719; GFX942-NEXT: ;;#ASMSTART2720; GFX942-NEXT: ; use s82721; GFX942-NEXT: ;;#ASMEND2722; GFX942-NEXT: s_setpc_b64 s[30:31]2723 %vec0 = call <4 x i16> asm "; def $0", "=s"()2724 %vec1 = call <4 x i16> asm "; def $0", "=s"()2725 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2726 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2727 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 5>2728 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2729 ret void2730}2731 2732define void @s_shuffle_v2i16_v3i16__u_0() {2733; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_0:2734; GFX900: ; %bb.0:2735; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2736; GFX900-NEXT: ;;#ASMSTART2737; GFX900-NEXT: ; def s[4:5]2738; GFX900-NEXT: ;;#ASMEND2739; GFX900-NEXT: s_lshl_b32 s8, s4, 162740; GFX900-NEXT: ;;#ASMSTART2741; GFX900-NEXT: ; use s82742; GFX900-NEXT: ;;#ASMEND2743; GFX900-NEXT: s_setpc_b64 s[30:31]2744;2745; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_0:2746; GFX90A: ; %bb.0:2747; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2748; GFX90A-NEXT: ;;#ASMSTART2749; GFX90A-NEXT: ; def s[4:5]2750; GFX90A-NEXT: ;;#ASMEND2751; GFX90A-NEXT: s_lshl_b32 s8, s4, 162752; GFX90A-NEXT: ;;#ASMSTART2753; GFX90A-NEXT: ; use s82754; GFX90A-NEXT: ;;#ASMEND2755; GFX90A-NEXT: s_setpc_b64 s[30:31]2756;2757; GFX942-LABEL: s_shuffle_v2i16_v3i16__u_0:2758; GFX942: ; %bb.0:2759; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2760; GFX942-NEXT: ;;#ASMSTART2761; GFX942-NEXT: ; def s[0:1]2762; GFX942-NEXT: ;;#ASMEND2763; GFX942-NEXT: s_lshl_b32 s8, s0, 162764; GFX942-NEXT: ;;#ASMSTART2765; GFX942-NEXT: ; use s82766; GFX942-NEXT: ;;#ASMEND2767; GFX942-NEXT: s_setpc_b64 s[30:31]2768 %vec0 = call <4 x i16> asm "; def $0", "=s"()2769 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2770 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 0>2771 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2772 ret void2773}2774 2775define void @s_shuffle_v2i16_v3i16__0_0() {2776; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_0:2777; GFX900: ; %bb.0:2778; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2779; GFX900-NEXT: ;;#ASMSTART2780; GFX900-NEXT: ; def s[4:5]2781; GFX900-NEXT: ;;#ASMEND2782; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s42783; GFX900-NEXT: ;;#ASMSTART2784; GFX900-NEXT: ; use s82785; GFX900-NEXT: ;;#ASMEND2786; GFX900-NEXT: s_setpc_b64 s[30:31]2787;2788; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_0:2789; GFX90A: ; %bb.0:2790; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2791; GFX90A-NEXT: ;;#ASMSTART2792; GFX90A-NEXT: ; def s[4:5]2793; GFX90A-NEXT: ;;#ASMEND2794; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s42795; GFX90A-NEXT: ;;#ASMSTART2796; GFX90A-NEXT: ; use s82797; GFX90A-NEXT: ;;#ASMEND2798; GFX90A-NEXT: s_setpc_b64 s[30:31]2799;2800; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_0:2801; GFX942: ; %bb.0:2802; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2803; GFX942-NEXT: ;;#ASMSTART2804; GFX942-NEXT: ; def s[0:1]2805; GFX942-NEXT: ;;#ASMEND2806; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s02807; GFX942-NEXT: ;;#ASMSTART2808; GFX942-NEXT: ; use s82809; GFX942-NEXT: ;;#ASMEND2810; GFX942-NEXT: s_setpc_b64 s[30:31]2811 %vec0 = call <4 x i16> asm "; def $0", "=s"()2812 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2813 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> zeroinitializer2814 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2815 ret void2816}2817 2818define void @s_shuffle_v2i16_v3i16__1_0() {2819; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_0:2820; GFX900: ; %bb.0:2821; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2822; GFX900-NEXT: ;;#ASMSTART2823; GFX900-NEXT: ; def s[4:5]2824; GFX900-NEXT: ;;#ASMEND2825; GFX900-NEXT: s_lshr_b32 s5, s4, 162826; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42827; GFX900-NEXT: ;;#ASMSTART2828; GFX900-NEXT: ; use s82829; GFX900-NEXT: ;;#ASMEND2830; GFX900-NEXT: s_setpc_b64 s[30:31]2831;2832; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_0:2833; GFX90A: ; %bb.0:2834; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2835; GFX90A-NEXT: ;;#ASMSTART2836; GFX90A-NEXT: ; def s[4:5]2837; GFX90A-NEXT: ;;#ASMEND2838; GFX90A-NEXT: s_lshr_b32 s5, s4, 162839; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42840; GFX90A-NEXT: ;;#ASMSTART2841; GFX90A-NEXT: ; use s82842; GFX90A-NEXT: ;;#ASMEND2843; GFX90A-NEXT: s_setpc_b64 s[30:31]2844;2845; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_0:2846; GFX942: ; %bb.0:2847; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2848; GFX942-NEXT: ;;#ASMSTART2849; GFX942-NEXT: ; def s[0:1]2850; GFX942-NEXT: ;;#ASMEND2851; GFX942-NEXT: s_lshr_b32 s1, s0, 162852; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02853; GFX942-NEXT: ;;#ASMSTART2854; GFX942-NEXT: ; use s82855; GFX942-NEXT: ;;#ASMEND2856; GFX942-NEXT: s_setpc_b64 s[30:31]2857 %vec0 = call <4 x i16> asm "; def $0", "=s"()2858 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2859 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 0>2860 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2861 ret void2862}2863 2864define void @s_shuffle_v2i16_v3i16__2_0() {2865; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_0:2866; GFX900: ; %bb.0:2867; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2868; GFX900-NEXT: ;;#ASMSTART2869; GFX900-NEXT: ; def s[4:5]2870; GFX900-NEXT: ;;#ASMEND2871; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42872; GFX900-NEXT: ;;#ASMSTART2873; GFX900-NEXT: ; use s82874; GFX900-NEXT: ;;#ASMEND2875; GFX900-NEXT: s_setpc_b64 s[30:31]2876;2877; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_0:2878; GFX90A: ; %bb.0:2879; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2880; GFX90A-NEXT: ;;#ASMSTART2881; GFX90A-NEXT: ; def s[4:5]2882; GFX90A-NEXT: ;;#ASMEND2883; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42884; GFX90A-NEXT: ;;#ASMSTART2885; GFX90A-NEXT: ; use s82886; GFX90A-NEXT: ;;#ASMEND2887; GFX90A-NEXT: s_setpc_b64 s[30:31]2888;2889; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_0:2890; GFX942: ; %bb.0:2891; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2892; GFX942-NEXT: ;;#ASMSTART2893; GFX942-NEXT: ; def s[0:1]2894; GFX942-NEXT: ;;#ASMEND2895; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02896; GFX942-NEXT: ;;#ASMSTART2897; GFX942-NEXT: ; use s82898; GFX942-NEXT: ;;#ASMEND2899; GFX942-NEXT: s_setpc_b64 s[30:31]2900 %vec0 = call <4 x i16> asm "; def $0", "=s"()2901 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2902 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 0>2903 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2904 ret void2905}2906 2907define void @s_shuffle_v2i16_v3i16__3_0() {2908; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_0:2909; GFX900: ; %bb.0:2910; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2911; GFX900-NEXT: ;;#ASMSTART2912; GFX900-NEXT: ; def s[4:5]2913; GFX900-NEXT: ;;#ASMEND2914; GFX900-NEXT: s_lshl_b32 s8, s4, 162915; GFX900-NEXT: ;;#ASMSTART2916; GFX900-NEXT: ; use s82917; GFX900-NEXT: ;;#ASMEND2918; GFX900-NEXT: s_setpc_b64 s[30:31]2919;2920; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_0:2921; GFX90A: ; %bb.0:2922; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2923; GFX90A-NEXT: ;;#ASMSTART2924; GFX90A-NEXT: ; def s[4:5]2925; GFX90A-NEXT: ;;#ASMEND2926; GFX90A-NEXT: s_lshl_b32 s8, s4, 162927; GFX90A-NEXT: ;;#ASMSTART2928; GFX90A-NEXT: ; use s82929; GFX90A-NEXT: ;;#ASMEND2930; GFX90A-NEXT: s_setpc_b64 s[30:31]2931;2932; GFX942-LABEL: s_shuffle_v2i16_v3i16__3_0:2933; GFX942: ; %bb.0:2934; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2935; GFX942-NEXT: ;;#ASMSTART2936; GFX942-NEXT: ; def s[0:1]2937; GFX942-NEXT: ;;#ASMEND2938; GFX942-NEXT: s_lshl_b32 s8, s0, 162939; GFX942-NEXT: ;;#ASMSTART2940; GFX942-NEXT: ; use s82941; GFX942-NEXT: ;;#ASMEND2942; GFX942-NEXT: s_setpc_b64 s[30:31]2943 %vec0 = call <4 x i16> asm "; def $0", "=s"()2944 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2945 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 0>2946 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)2947 ret void2948}2949 2950define void @s_shuffle_v2i16_v3i16__4_0() {2951; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_0:2952; GFX900: ; %bb.0:2953; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2954; GFX900-NEXT: ;;#ASMSTART2955; GFX900-NEXT: ; def s[4:5]2956; GFX900-NEXT: ;;#ASMEND2957; GFX900-NEXT: ;;#ASMSTART2958; GFX900-NEXT: ; def s[6:7]2959; GFX900-NEXT: ;;#ASMEND2960; GFX900-NEXT: s_lshr_b32 s5, s6, 162961; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42962; GFX900-NEXT: ;;#ASMSTART2963; GFX900-NEXT: ; use s82964; GFX900-NEXT: ;;#ASMEND2965; GFX900-NEXT: s_setpc_b64 s[30:31]2966;2967; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_0:2968; GFX90A: ; %bb.0:2969; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2970; GFX90A-NEXT: ;;#ASMSTART2971; GFX90A-NEXT: ; def s[4:5]2972; GFX90A-NEXT: ;;#ASMEND2973; GFX90A-NEXT: ;;#ASMSTART2974; GFX90A-NEXT: ; def s[6:7]2975; GFX90A-NEXT: ;;#ASMEND2976; GFX90A-NEXT: s_lshr_b32 s5, s6, 162977; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42978; GFX90A-NEXT: ;;#ASMSTART2979; GFX90A-NEXT: ; use s82980; GFX90A-NEXT: ;;#ASMEND2981; GFX90A-NEXT: s_setpc_b64 s[30:31]2982;2983; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_0:2984; GFX942: ; %bb.0:2985; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2986; GFX942-NEXT: ;;#ASMSTART2987; GFX942-NEXT: ; def s[0:1]2988; GFX942-NEXT: ;;#ASMEND2989; GFX942-NEXT: ;;#ASMSTART2990; GFX942-NEXT: ; def s[2:3]2991; GFX942-NEXT: ;;#ASMEND2992; GFX942-NEXT: s_lshr_b32 s1, s2, 162993; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02994; GFX942-NEXT: ;;#ASMSTART2995; GFX942-NEXT: ; use s82996; GFX942-NEXT: ;;#ASMEND2997; GFX942-NEXT: s_setpc_b64 s[30:31]2998 %vec0 = call <4 x i16> asm "; def $0", "=s"()2999 %vec1 = call <4 x i16> asm "; def $0", "=s"()3000 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3001 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3002 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 0>3003 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3004 ret void3005}3006 3007define void @s_shuffle_v2i16_v3i16__u_1() {3008; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_1:3009; GFX900: ; %bb.0:3010; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3011; GFX900-NEXT: ;;#ASMSTART3012; GFX900-NEXT: ; def s[8:9]3013; GFX900-NEXT: ;;#ASMEND3014; GFX900-NEXT: ;;#ASMSTART3015; GFX900-NEXT: ; use s83016; GFX900-NEXT: ;;#ASMEND3017; GFX900-NEXT: s_setpc_b64 s[30:31]3018;3019; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_1:3020; GFX90A: ; %bb.0:3021; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3022; GFX90A-NEXT: ;;#ASMSTART3023; GFX90A-NEXT: ; def s[8:9]3024; GFX90A-NEXT: ;;#ASMEND3025; GFX90A-NEXT: ;;#ASMSTART3026; GFX90A-NEXT: ; use s83027; GFX90A-NEXT: ;;#ASMEND3028; GFX90A-NEXT: s_setpc_b64 s[30:31]3029;3030; GFX942-LABEL: s_shuffle_v2i16_v3i16__u_1:3031; GFX942: ; %bb.0:3032; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3033; GFX942-NEXT: ;;#ASMSTART3034; GFX942-NEXT: ; def s[8:9]3035; GFX942-NEXT: ;;#ASMEND3036; GFX942-NEXT: s_nop 03037; GFX942-NEXT: ;;#ASMSTART3038; GFX942-NEXT: ; use s83039; GFX942-NEXT: ;;#ASMEND3040; GFX942-NEXT: s_setpc_b64 s[30:31]3041 %vec0 = call <4 x i16> asm "; def $0", "=s"()3042 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3043 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 1>3044 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3045 ret void3046}3047 3048define void @s_shuffle_v2i16_v3i16__0_1() {3049; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_1:3050; GFX900: ; %bb.0:3051; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3052; GFX900-NEXT: ;;#ASMSTART3053; GFX900-NEXT: ; def s[8:9]3054; GFX900-NEXT: ;;#ASMEND3055; GFX900-NEXT: ;;#ASMSTART3056; GFX900-NEXT: ; use s83057; GFX900-NEXT: ;;#ASMEND3058; GFX900-NEXT: s_setpc_b64 s[30:31]3059;3060; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_1:3061; GFX90A: ; %bb.0:3062; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3063; GFX90A-NEXT: ;;#ASMSTART3064; GFX90A-NEXT: ; def s[8:9]3065; GFX90A-NEXT: ;;#ASMEND3066; GFX90A-NEXT: ;;#ASMSTART3067; GFX90A-NEXT: ; use s83068; GFX90A-NEXT: ;;#ASMEND3069; GFX90A-NEXT: s_setpc_b64 s[30:31]3070;3071; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_1:3072; GFX942: ; %bb.0:3073; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3074; GFX942-NEXT: ;;#ASMSTART3075; GFX942-NEXT: ; def s[8:9]3076; GFX942-NEXT: ;;#ASMEND3077; GFX942-NEXT: s_nop 03078; GFX942-NEXT: ;;#ASMSTART3079; GFX942-NEXT: ; use s83080; GFX942-NEXT: ;;#ASMEND3081; GFX942-NEXT: s_setpc_b64 s[30:31]3082 %vec0 = call <4 x i16> asm "; def $0", "=s"()3083 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3084 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 1>3085 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3086 ret void3087}3088 3089define void @s_shuffle_v2i16_v3i16__1_1() {3090; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_1:3091; GFX900: ; %bb.0:3092; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3093; GFX900-NEXT: ;;#ASMSTART3094; GFX900-NEXT: ; def s[4:5]3095; GFX900-NEXT: ;;#ASMEND3096; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s43097; GFX900-NEXT: ;;#ASMSTART3098; GFX900-NEXT: ; use s83099; GFX900-NEXT: ;;#ASMEND3100; GFX900-NEXT: s_setpc_b64 s[30:31]3101;3102; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_1:3103; GFX90A: ; %bb.0:3104; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3105; GFX90A-NEXT: ;;#ASMSTART3106; GFX90A-NEXT: ; def s[4:5]3107; GFX90A-NEXT: ;;#ASMEND3108; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s43109; GFX90A-NEXT: ;;#ASMSTART3110; GFX90A-NEXT: ; use s83111; GFX90A-NEXT: ;;#ASMEND3112; GFX90A-NEXT: s_setpc_b64 s[30:31]3113;3114; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_1:3115; GFX942: ; %bb.0:3116; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3117; GFX942-NEXT: ;;#ASMSTART3118; GFX942-NEXT: ; def s[0:1]3119; GFX942-NEXT: ;;#ASMEND3120; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s03121; GFX942-NEXT: ;;#ASMSTART3122; GFX942-NEXT: ; use s83123; GFX942-NEXT: ;;#ASMEND3124; GFX942-NEXT: s_setpc_b64 s[30:31]3125 %vec0 = call <4 x i16> asm "; def $0", "=s"()3126 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3127 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 1>3128 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3129 ret void3130}3131 3132define void @s_shuffle_v2i16_v3i16__2_1() {3133; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_1:3134; GFX900: ; %bb.0:3135; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3136; GFX900-NEXT: ;;#ASMSTART3137; GFX900-NEXT: ; def s[4:5]3138; GFX900-NEXT: ;;#ASMEND3139; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s43140; GFX900-NEXT: ;;#ASMSTART3141; GFX900-NEXT: ; use s83142; GFX900-NEXT: ;;#ASMEND3143; GFX900-NEXT: s_setpc_b64 s[30:31]3144;3145; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_1:3146; GFX90A: ; %bb.0:3147; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3148; GFX90A-NEXT: ;;#ASMSTART3149; GFX90A-NEXT: ; def s[4:5]3150; GFX90A-NEXT: ;;#ASMEND3151; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s43152; GFX90A-NEXT: ;;#ASMSTART3153; GFX90A-NEXT: ; use s83154; GFX90A-NEXT: ;;#ASMEND3155; GFX90A-NEXT: s_setpc_b64 s[30:31]3156;3157; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_1:3158; GFX942: ; %bb.0:3159; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3160; GFX942-NEXT: ;;#ASMSTART3161; GFX942-NEXT: ; def s[0:1]3162; GFX942-NEXT: ;;#ASMEND3163; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s03164; GFX942-NEXT: ;;#ASMSTART3165; GFX942-NEXT: ; use s83166; GFX942-NEXT: ;;#ASMEND3167; GFX942-NEXT: s_setpc_b64 s[30:31]3168 %vec0 = call <4 x i16> asm "; def $0", "=s"()3169 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3170 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 1>3171 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3172 ret void3173}3174 3175define void @s_shuffle_v2i16_v3i16__3_1() {3176; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_1:3177; GFX900: ; %bb.0:3178; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3179; GFX900-NEXT: ;;#ASMSTART3180; GFX900-NEXT: ; def s[8:9]3181; GFX900-NEXT: ;;#ASMEND3182; GFX900-NEXT: ;;#ASMSTART3183; GFX900-NEXT: ; use s83184; GFX900-NEXT: ;;#ASMEND3185; GFX900-NEXT: s_setpc_b64 s[30:31]3186;3187; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_1:3188; GFX90A: ; %bb.0:3189; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3190; GFX90A-NEXT: ;;#ASMSTART3191; GFX90A-NEXT: ; def s[8:9]3192; GFX90A-NEXT: ;;#ASMEND3193; GFX90A-NEXT: ;;#ASMSTART3194; GFX90A-NEXT: ; use s83195; GFX90A-NEXT: ;;#ASMEND3196; GFX90A-NEXT: s_setpc_b64 s[30:31]3197;3198; GFX942-LABEL: s_shuffle_v2i16_v3i16__3_1:3199; GFX942: ; %bb.0:3200; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3201; GFX942-NEXT: ;;#ASMSTART3202; GFX942-NEXT: ; def s[8:9]3203; GFX942-NEXT: ;;#ASMEND3204; GFX942-NEXT: s_nop 03205; GFX942-NEXT: ;;#ASMSTART3206; GFX942-NEXT: ; use s83207; GFX942-NEXT: ;;#ASMEND3208; GFX942-NEXT: s_setpc_b64 s[30:31]3209 %vec0 = call <4 x i16> asm "; def $0", "=s"()3210 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3211 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 1>3212 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3213 ret void3214}3215 3216define void @s_shuffle_v2i16_v3i16__4_1() {3217; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_1:3218; GFX900: ; %bb.0:3219; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3220; GFX900-NEXT: ;;#ASMSTART3221; GFX900-NEXT: ; def s[4:5]3222; GFX900-NEXT: ;;#ASMEND3223; GFX900-NEXT: ;;#ASMSTART3224; GFX900-NEXT: ; def s[6:7]3225; GFX900-NEXT: ;;#ASMEND3226; GFX900-NEXT: s_pack_hh_b32_b16 s8, s6, s43227; GFX900-NEXT: ;;#ASMSTART3228; GFX900-NEXT: ; use s83229; GFX900-NEXT: ;;#ASMEND3230; GFX900-NEXT: s_setpc_b64 s[30:31]3231;3232; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_1:3233; GFX90A: ; %bb.0:3234; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3235; GFX90A-NEXT: ;;#ASMSTART3236; GFX90A-NEXT: ; def s[4:5]3237; GFX90A-NEXT: ;;#ASMEND3238; GFX90A-NEXT: ;;#ASMSTART3239; GFX90A-NEXT: ; def s[6:7]3240; GFX90A-NEXT: ;;#ASMEND3241; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s6, s43242; GFX90A-NEXT: ;;#ASMSTART3243; GFX90A-NEXT: ; use s83244; GFX90A-NEXT: ;;#ASMEND3245; GFX90A-NEXT: s_setpc_b64 s[30:31]3246;3247; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_1:3248; GFX942: ; %bb.0:3249; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3250; GFX942-NEXT: ;;#ASMSTART3251; GFX942-NEXT: ; def s[0:1]3252; GFX942-NEXT: ;;#ASMEND3253; GFX942-NEXT: ;;#ASMSTART3254; GFX942-NEXT: ; def s[2:3]3255; GFX942-NEXT: ;;#ASMEND3256; GFX942-NEXT: s_pack_hh_b32_b16 s8, s2, s03257; GFX942-NEXT: ;;#ASMSTART3258; GFX942-NEXT: ; use s83259; GFX942-NEXT: ;;#ASMEND3260; GFX942-NEXT: s_setpc_b64 s[30:31]3261 %vec0 = call <4 x i16> asm "; def $0", "=s"()3262 %vec1 = call <4 x i16> asm "; def $0", "=s"()3263 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3264 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3265 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 1>3266 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3267 ret void3268}3269 3270define void @s_shuffle_v2i16_v3i16__u_2() {3271; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_2:3272; GFX900: ; %bb.0:3273; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3274; GFX900-NEXT: ;;#ASMSTART3275; GFX900-NEXT: ; def s[4:5]3276; GFX900-NEXT: ;;#ASMEND3277; GFX900-NEXT: s_lshl_b32 s8, s5, 163278; GFX900-NEXT: ;;#ASMSTART3279; GFX900-NEXT: ; use s83280; GFX900-NEXT: ;;#ASMEND3281; GFX900-NEXT: s_setpc_b64 s[30:31]3282;3283; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_2:3284; GFX90A: ; %bb.0:3285; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3286; GFX90A-NEXT: ;;#ASMSTART3287; GFX90A-NEXT: ; def s[4:5]3288; GFX90A-NEXT: ;;#ASMEND3289; GFX90A-NEXT: s_lshl_b32 s8, s5, 163290; GFX90A-NEXT: ;;#ASMSTART3291; GFX90A-NEXT: ; use s83292; GFX90A-NEXT: ;;#ASMEND3293; GFX90A-NEXT: s_setpc_b64 s[30:31]3294;3295; GFX942-LABEL: s_shuffle_v2i16_v3i16__u_2:3296; GFX942: ; %bb.0:3297; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3298; GFX942-NEXT: ;;#ASMSTART3299; GFX942-NEXT: ; def s[0:1]3300; GFX942-NEXT: ;;#ASMEND3301; GFX942-NEXT: s_lshl_b32 s8, s1, 163302; GFX942-NEXT: ;;#ASMSTART3303; GFX942-NEXT: ; use s83304; GFX942-NEXT: ;;#ASMEND3305; GFX942-NEXT: s_setpc_b64 s[30:31]3306 %vec0 = call <4 x i16> asm "; def $0", "=s"()3307 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3308 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 2>3309 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3310 ret void3311}3312 3313define void @s_shuffle_v2i16_v3i16__0_2() {3314; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_2:3315; GFX900: ; %bb.0:3316; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3317; GFX900-NEXT: ;;#ASMSTART3318; GFX900-NEXT: ; def s[4:5]3319; GFX900-NEXT: ;;#ASMEND3320; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s53321; GFX900-NEXT: ;;#ASMSTART3322; GFX900-NEXT: ; use s83323; GFX900-NEXT: ;;#ASMEND3324; GFX900-NEXT: s_setpc_b64 s[30:31]3325;3326; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_2:3327; GFX90A: ; %bb.0:3328; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3329; GFX90A-NEXT: ;;#ASMSTART3330; GFX90A-NEXT: ; def s[4:5]3331; GFX90A-NEXT: ;;#ASMEND3332; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s53333; GFX90A-NEXT: ;;#ASMSTART3334; GFX90A-NEXT: ; use s83335; GFX90A-NEXT: ;;#ASMEND3336; GFX90A-NEXT: s_setpc_b64 s[30:31]3337;3338; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_2:3339; GFX942: ; %bb.0:3340; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3341; GFX942-NEXT: ;;#ASMSTART3342; GFX942-NEXT: ; def s[0:1]3343; GFX942-NEXT: ;;#ASMEND3344; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s13345; GFX942-NEXT: ;;#ASMSTART3346; GFX942-NEXT: ; use s83347; GFX942-NEXT: ;;#ASMEND3348; GFX942-NEXT: s_setpc_b64 s[30:31]3349 %vec0 = call <4 x i16> asm "; def $0", "=s"()3350 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3351 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 2>3352 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3353 ret void3354}3355 3356define void @s_shuffle_v2i16_v3i16__1_2() {3357; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_2:3358; GFX900: ; %bb.0:3359; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3360; GFX900-NEXT: ;;#ASMSTART3361; GFX900-NEXT: ; def s[4:5]3362; GFX900-NEXT: ;;#ASMEND3363; GFX900-NEXT: s_lshr_b32 s4, s4, 163364; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s53365; GFX900-NEXT: ;;#ASMSTART3366; GFX900-NEXT: ; use s83367; GFX900-NEXT: ;;#ASMEND3368; GFX900-NEXT: s_setpc_b64 s[30:31]3369;3370; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_2:3371; GFX90A: ; %bb.0:3372; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3373; GFX90A-NEXT: ;;#ASMSTART3374; GFX90A-NEXT: ; def s[4:5]3375; GFX90A-NEXT: ;;#ASMEND3376; GFX90A-NEXT: s_lshr_b32 s4, s4, 163377; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s53378; GFX90A-NEXT: ;;#ASMSTART3379; GFX90A-NEXT: ; use s83380; GFX90A-NEXT: ;;#ASMEND3381; GFX90A-NEXT: s_setpc_b64 s[30:31]3382;3383; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_2:3384; GFX942: ; %bb.0:3385; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3386; GFX942-NEXT: ;;#ASMSTART3387; GFX942-NEXT: ; def s[0:1]3388; GFX942-NEXT: ;;#ASMEND3389; GFX942-NEXT: s_lshr_b32 s0, s0, 163390; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s13391; GFX942-NEXT: ;;#ASMSTART3392; GFX942-NEXT: ; use s83393; GFX942-NEXT: ;;#ASMEND3394; GFX942-NEXT: s_setpc_b64 s[30:31]3395 %vec0 = call <4 x i16> asm "; def $0", "=s"()3396 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3397 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 2>3398 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3399 ret void3400}3401 3402define void @s_shuffle_v2i16_v3i16__2_2() {3403; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_2:3404; GFX900: ; %bb.0:3405; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3406; GFX900-NEXT: ;;#ASMSTART3407; GFX900-NEXT: ; def s[4:5]3408; GFX900-NEXT: ;;#ASMEND3409; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s53410; GFX900-NEXT: ;;#ASMSTART3411; GFX900-NEXT: ; use s83412; GFX900-NEXT: ;;#ASMEND3413; GFX900-NEXT: s_setpc_b64 s[30:31]3414;3415; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_2:3416; GFX90A: ; %bb.0:3417; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3418; GFX90A-NEXT: ;;#ASMSTART3419; GFX90A-NEXT: ; def s[4:5]3420; GFX90A-NEXT: ;;#ASMEND3421; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s53422; GFX90A-NEXT: ;;#ASMSTART3423; GFX90A-NEXT: ; use s83424; GFX90A-NEXT: ;;#ASMEND3425; GFX90A-NEXT: s_setpc_b64 s[30:31]3426;3427; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_2:3428; GFX942: ; %bb.0:3429; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3430; GFX942-NEXT: ;;#ASMSTART3431; GFX942-NEXT: ; def s[0:1]3432; GFX942-NEXT: ;;#ASMEND3433; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s13434; GFX942-NEXT: ;;#ASMSTART3435; GFX942-NEXT: ; use s83436; GFX942-NEXT: ;;#ASMEND3437; GFX942-NEXT: s_setpc_b64 s[30:31]3438 %vec0 = call <4 x i16> asm "; def $0", "=s"()3439 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3440 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 2>3441 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3442 ret void3443}3444 3445define void @s_shuffle_v2i16_v3i16__3_2() {3446; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_2:3447; GFX900: ; %bb.0:3448; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3449; GFX900-NEXT: ;;#ASMSTART3450; GFX900-NEXT: ; def s[4:5]3451; GFX900-NEXT: ;;#ASMEND3452; GFX900-NEXT: s_lshl_b32 s8, s5, 163453; GFX900-NEXT: ;;#ASMSTART3454; GFX900-NEXT: ; use s83455; GFX900-NEXT: ;;#ASMEND3456; GFX900-NEXT: s_setpc_b64 s[30:31]3457;3458; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_2:3459; GFX90A: ; %bb.0:3460; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3461; GFX90A-NEXT: ;;#ASMSTART3462; GFX90A-NEXT: ; def s[4:5]3463; GFX90A-NEXT: ;;#ASMEND3464; GFX90A-NEXT: s_lshl_b32 s8, s5, 163465; GFX90A-NEXT: ;;#ASMSTART3466; GFX90A-NEXT: ; use s83467; GFX90A-NEXT: ;;#ASMEND3468; GFX90A-NEXT: s_setpc_b64 s[30:31]3469;3470; GFX942-LABEL: s_shuffle_v2i16_v3i16__3_2:3471; GFX942: ; %bb.0:3472; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3473; GFX942-NEXT: ;;#ASMSTART3474; GFX942-NEXT: ; def s[0:1]3475; GFX942-NEXT: ;;#ASMEND3476; GFX942-NEXT: s_lshl_b32 s8, s1, 163477; GFX942-NEXT: ;;#ASMSTART3478; GFX942-NEXT: ; use s83479; GFX942-NEXT: ;;#ASMEND3480; GFX942-NEXT: s_setpc_b64 s[30:31]3481 %vec0 = call <4 x i16> asm "; def $0", "=s"()3482 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3483 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 2>3484 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3485 ret void3486}3487 3488define void @s_shuffle_v2i16_v3i16__4_2() {3489; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_2:3490; GFX900: ; %bb.0:3491; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3492; GFX900-NEXT: ;;#ASMSTART3493; GFX900-NEXT: ; def s[4:5]3494; GFX900-NEXT: ;;#ASMEND3495; GFX900-NEXT: ;;#ASMSTART3496; GFX900-NEXT: ; def s[6:7]3497; GFX900-NEXT: ;;#ASMEND3498; GFX900-NEXT: s_lshr_b32 s4, s6, 163499; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s53500; GFX900-NEXT: ;;#ASMSTART3501; GFX900-NEXT: ; use s83502; GFX900-NEXT: ;;#ASMEND3503; GFX900-NEXT: s_setpc_b64 s[30:31]3504;3505; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_2:3506; GFX90A: ; %bb.0:3507; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3508; GFX90A-NEXT: ;;#ASMSTART3509; GFX90A-NEXT: ; def s[4:5]3510; GFX90A-NEXT: ;;#ASMEND3511; GFX90A-NEXT: ;;#ASMSTART3512; GFX90A-NEXT: ; def s[6:7]3513; GFX90A-NEXT: ;;#ASMEND3514; GFX90A-NEXT: s_lshr_b32 s4, s6, 163515; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s53516; GFX90A-NEXT: ;;#ASMSTART3517; GFX90A-NEXT: ; use s83518; GFX90A-NEXT: ;;#ASMEND3519; GFX90A-NEXT: s_setpc_b64 s[30:31]3520;3521; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_2:3522; GFX942: ; %bb.0:3523; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3524; GFX942-NEXT: ;;#ASMSTART3525; GFX942-NEXT: ; def s[0:1]3526; GFX942-NEXT: ;;#ASMEND3527; GFX942-NEXT: ;;#ASMSTART3528; GFX942-NEXT: ; def s[2:3]3529; GFX942-NEXT: ;;#ASMEND3530; GFX942-NEXT: s_lshr_b32 s0, s2, 163531; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s13532; GFX942-NEXT: ;;#ASMSTART3533; GFX942-NEXT: ; use s83534; GFX942-NEXT: ;;#ASMEND3535; GFX942-NEXT: s_setpc_b64 s[30:31]3536 %vec0 = call <4 x i16> asm "; def $0", "=s"()3537 %vec1 = call <4 x i16> asm "; def $0", "=s"()3538 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3539 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3540 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 2>3541 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3542 ret void3543}3544 3545define void @s_shuffle_v2i16_v3i16__u_3() {3546; GFX9-LABEL: s_shuffle_v2i16_v3i16__u_3:3547; GFX9: ; %bb.0:3548; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3549; GFX9-NEXT: ;;#ASMSTART3550; GFX9-NEXT: ; use s83551; GFX9-NEXT: ;;#ASMEND3552; GFX9-NEXT: s_setpc_b64 s[30:31]3553 %vec0 = call <4 x i16> asm "; def $0", "=s"()3554 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3555 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 3>3556 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3557 ret void3558}3559 3560define void @s_shuffle_v2i16_v3i16__0_3() {3561; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_3:3562; GFX900: ; %bb.0:3563; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3564; GFX900-NEXT: ;;#ASMSTART3565; GFX900-NEXT: ; def s[8:9]3566; GFX900-NEXT: ;;#ASMEND3567; GFX900-NEXT: ;;#ASMSTART3568; GFX900-NEXT: ; use s83569; GFX900-NEXT: ;;#ASMEND3570; GFX900-NEXT: s_setpc_b64 s[30:31]3571;3572; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_3:3573; GFX90A: ; %bb.0:3574; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3575; GFX90A-NEXT: ;;#ASMSTART3576; GFX90A-NEXT: ; def s[8:9]3577; GFX90A-NEXT: ;;#ASMEND3578; GFX90A-NEXT: ;;#ASMSTART3579; GFX90A-NEXT: ; use s83580; GFX90A-NEXT: ;;#ASMEND3581; GFX90A-NEXT: s_setpc_b64 s[30:31]3582;3583; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_3:3584; GFX942: ; %bb.0:3585; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3586; GFX942-NEXT: ;;#ASMSTART3587; GFX942-NEXT: ; def s[8:9]3588; GFX942-NEXT: ;;#ASMEND3589; GFX942-NEXT: s_nop 03590; GFX942-NEXT: ;;#ASMSTART3591; GFX942-NEXT: ; use s83592; GFX942-NEXT: ;;#ASMEND3593; GFX942-NEXT: s_setpc_b64 s[30:31]3594 %vec0 = call <4 x i16> asm "; def $0", "=s"()3595 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3596 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 3>3597 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3598 ret void3599}3600 3601define void @s_shuffle_v2i16_v3i16__1_3() {3602; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_3:3603; GFX900: ; %bb.0:3604; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3605; GFX900-NEXT: ;;#ASMSTART3606; GFX900-NEXT: ; def s[4:5]3607; GFX900-NEXT: ;;#ASMEND3608; GFX900-NEXT: s_lshr_b32 s8, s4, 163609; GFX900-NEXT: ;;#ASMSTART3610; GFX900-NEXT: ; use s83611; GFX900-NEXT: ;;#ASMEND3612; GFX900-NEXT: s_setpc_b64 s[30:31]3613;3614; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_3:3615; GFX90A: ; %bb.0:3616; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3617; GFX90A-NEXT: ;;#ASMSTART3618; GFX90A-NEXT: ; def s[4:5]3619; GFX90A-NEXT: ;;#ASMEND3620; GFX90A-NEXT: s_lshr_b32 s8, s4, 163621; GFX90A-NEXT: ;;#ASMSTART3622; GFX90A-NEXT: ; use s83623; GFX90A-NEXT: ;;#ASMEND3624; GFX90A-NEXT: s_setpc_b64 s[30:31]3625;3626; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_3:3627; GFX942: ; %bb.0:3628; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3629; GFX942-NEXT: ;;#ASMSTART3630; GFX942-NEXT: ; def s[0:1]3631; GFX942-NEXT: ;;#ASMEND3632; GFX942-NEXT: s_lshr_b32 s8, s0, 163633; GFX942-NEXT: ;;#ASMSTART3634; GFX942-NEXT: ; use s83635; GFX942-NEXT: ;;#ASMEND3636; GFX942-NEXT: s_setpc_b64 s[30:31]3637 %vec0 = call <4 x i16> asm "; def $0", "=s"()3638 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3639 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 3>3640 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3641 ret void3642}3643 3644define void @s_shuffle_v2i16_v3i16__2_3() {3645; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_3:3646; GFX900: ; %bb.0:3647; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3648; GFX900-NEXT: ;;#ASMSTART3649; GFX900-NEXT: ; def s[4:5]3650; GFX900-NEXT: ;;#ASMEND3651; GFX900-NEXT: s_mov_b32 s8, s53652; GFX900-NEXT: ;;#ASMSTART3653; GFX900-NEXT: ; use s83654; GFX900-NEXT: ;;#ASMEND3655; GFX900-NEXT: s_setpc_b64 s[30:31]3656;3657; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_3:3658; GFX90A: ; %bb.0:3659; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3660; GFX90A-NEXT: ;;#ASMSTART3661; GFX90A-NEXT: ; def s[4:5]3662; GFX90A-NEXT: ;;#ASMEND3663; GFX90A-NEXT: s_mov_b32 s8, s53664; GFX90A-NEXT: ;;#ASMSTART3665; GFX90A-NEXT: ; use s83666; GFX90A-NEXT: ;;#ASMEND3667; GFX90A-NEXT: s_setpc_b64 s[30:31]3668;3669; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_3:3670; GFX942: ; %bb.0:3671; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3672; GFX942-NEXT: ;;#ASMSTART3673; GFX942-NEXT: ; def s[0:1]3674; GFX942-NEXT: ;;#ASMEND3675; GFX942-NEXT: s_mov_b32 s8, s13676; GFX942-NEXT: ;;#ASMSTART3677; GFX942-NEXT: ; use s83678; GFX942-NEXT: ;;#ASMEND3679; GFX942-NEXT: s_setpc_b64 s[30:31]3680 %vec0 = call <4 x i16> asm "; def $0", "=s"()3681 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3682 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 3>3683 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3684 ret void3685}3686 3687define void @s_shuffle_v2i16_v3i16__3_3() {3688; GFX9-LABEL: s_shuffle_v2i16_v3i16__3_3:3689; GFX9: ; %bb.0:3690; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3691; GFX9-NEXT: ;;#ASMSTART3692; GFX9-NEXT: ; use s83693; GFX9-NEXT: ;;#ASMEND3694; GFX9-NEXT: s_setpc_b64 s[30:31]3695 %vec0 = call <4 x i16> asm "; def $0", "=s"()3696 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3697 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 3>3698 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3699 ret void3700}3701 3702define void @s_shuffle_v2i16_v3i16__4_3() {3703; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_3:3704; GFX900: ; %bb.0:3705; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3706; GFX900-NEXT: ;;#ASMSTART3707; GFX900-NEXT: ; def s[4:5]3708; GFX900-NEXT: ;;#ASMEND3709; GFX900-NEXT: s_lshr_b32 s5, s4, 163710; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43711; GFX900-NEXT: ;;#ASMSTART3712; GFX900-NEXT: ; use s83713; GFX900-NEXT: ;;#ASMEND3714; GFX900-NEXT: s_setpc_b64 s[30:31]3715;3716; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_3:3717; GFX90A: ; %bb.0:3718; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3719; GFX90A-NEXT: ;;#ASMSTART3720; GFX90A-NEXT: ; def s[4:5]3721; GFX90A-NEXT: ;;#ASMEND3722; GFX90A-NEXT: s_lshr_b32 s5, s4, 163723; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43724; GFX90A-NEXT: ;;#ASMSTART3725; GFX90A-NEXT: ; use s83726; GFX90A-NEXT: ;;#ASMEND3727; GFX90A-NEXT: s_setpc_b64 s[30:31]3728;3729; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_3:3730; GFX942: ; %bb.0:3731; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3732; GFX942-NEXT: ;;#ASMSTART3733; GFX942-NEXT: ; def s[0:1]3734; GFX942-NEXT: ;;#ASMEND3735; GFX942-NEXT: s_lshr_b32 s1, s0, 163736; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03737; GFX942-NEXT: ;;#ASMSTART3738; GFX942-NEXT: ; use s83739; GFX942-NEXT: ;;#ASMEND3740; GFX942-NEXT: s_setpc_b64 s[30:31]3741 %vec0 = call <4 x i16> asm "; def $0", "=s"()3742 %vec1 = call <4 x i16> asm "; def $0", "=s"()3743 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3744 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3745 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 3>3746 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3747 ret void3748}3749 3750define void @s_shuffle_v2i16_v3i16__u_4() {3751; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_4:3752; GFX900: ; %bb.0:3753; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3754; GFX900-NEXT: ;;#ASMSTART3755; GFX900-NEXT: ; def s[8:9]3756; GFX900-NEXT: ;;#ASMEND3757; GFX900-NEXT: ;;#ASMSTART3758; GFX900-NEXT: ; use s83759; GFX900-NEXT: ;;#ASMEND3760; GFX900-NEXT: s_setpc_b64 s[30:31]3761;3762; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_4:3763; GFX90A: ; %bb.0:3764; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3765; GFX90A-NEXT: ;;#ASMSTART3766; GFX90A-NEXT: ; def s[8:9]3767; GFX90A-NEXT: ;;#ASMEND3768; GFX90A-NEXT: ;;#ASMSTART3769; GFX90A-NEXT: ; use s83770; GFX90A-NEXT: ;;#ASMEND3771; GFX90A-NEXT: s_setpc_b64 s[30:31]3772;3773; GFX942-LABEL: s_shuffle_v2i16_v3i16__u_4:3774; GFX942: ; %bb.0:3775; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3776; GFX942-NEXT: ;;#ASMSTART3777; GFX942-NEXT: ; def s[8:9]3778; GFX942-NEXT: ;;#ASMEND3779; GFX942-NEXT: s_nop 03780; GFX942-NEXT: ;;#ASMSTART3781; GFX942-NEXT: ; use s83782; GFX942-NEXT: ;;#ASMEND3783; GFX942-NEXT: s_setpc_b64 s[30:31]3784 %vec0 = call <4 x i16> asm "; def $0", "=s"()3785 %vec1 = call <4 x i16> asm "; def $0", "=s"()3786 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3787 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3788 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 4>3789 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3790 ret void3791}3792 3793define void @s_shuffle_v2i16_v3i16__0_4() {3794; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_4:3795; GFX900: ; %bb.0:3796; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3797; GFX900-NEXT: ;;#ASMSTART3798; GFX900-NEXT: ; def s[4:5]3799; GFX900-NEXT: ;;#ASMEND3800; GFX900-NEXT: ;;#ASMSTART3801; GFX900-NEXT: ; def s[6:7]3802; GFX900-NEXT: ;;#ASMEND3803; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s63804; GFX900-NEXT: ;;#ASMSTART3805; GFX900-NEXT: ; use s83806; GFX900-NEXT: ;;#ASMEND3807; GFX900-NEXT: s_setpc_b64 s[30:31]3808;3809; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_4:3810; GFX90A: ; %bb.0:3811; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3812; GFX90A-NEXT: ;;#ASMSTART3813; GFX90A-NEXT: ; def s[4:5]3814; GFX90A-NEXT: ;;#ASMEND3815; GFX90A-NEXT: ;;#ASMSTART3816; GFX90A-NEXT: ; def s[6:7]3817; GFX90A-NEXT: ;;#ASMEND3818; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s63819; GFX90A-NEXT: ;;#ASMSTART3820; GFX90A-NEXT: ; use s83821; GFX90A-NEXT: ;;#ASMEND3822; GFX90A-NEXT: s_setpc_b64 s[30:31]3823;3824; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_4:3825; GFX942: ; %bb.0:3826; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3827; GFX942-NEXT: ;;#ASMSTART3828; GFX942-NEXT: ; def s[0:1]3829; GFX942-NEXT: ;;#ASMEND3830; GFX942-NEXT: ;;#ASMSTART3831; GFX942-NEXT: ; def s[2:3]3832; GFX942-NEXT: ;;#ASMEND3833; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s23834; GFX942-NEXT: ;;#ASMSTART3835; GFX942-NEXT: ; use s83836; GFX942-NEXT: ;;#ASMEND3837; GFX942-NEXT: s_setpc_b64 s[30:31]3838 %vec0 = call <4 x i16> asm "; def $0", "=s"()3839 %vec1 = call <4 x i16> asm "; def $0", "=s"()3840 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3841 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3842 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 4>3843 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3844 ret void3845}3846 3847define void @s_shuffle_v2i16_v3i16__1_4() {3848; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_4:3849; GFX900: ; %bb.0:3850; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3851; GFX900-NEXT: ;;#ASMSTART3852; GFX900-NEXT: ; def s[4:5]3853; GFX900-NEXT: ;;#ASMEND3854; GFX900-NEXT: ;;#ASMSTART3855; GFX900-NEXT: ; def s[6:7]3856; GFX900-NEXT: ;;#ASMEND3857; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s63858; GFX900-NEXT: ;;#ASMSTART3859; GFX900-NEXT: ; use s83860; GFX900-NEXT: ;;#ASMEND3861; GFX900-NEXT: s_setpc_b64 s[30:31]3862;3863; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_4:3864; GFX90A: ; %bb.0:3865; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3866; GFX90A-NEXT: ;;#ASMSTART3867; GFX90A-NEXT: ; def s[4:5]3868; GFX90A-NEXT: ;;#ASMEND3869; GFX90A-NEXT: ;;#ASMSTART3870; GFX90A-NEXT: ; def s[6:7]3871; GFX90A-NEXT: ;;#ASMEND3872; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s63873; GFX90A-NEXT: ;;#ASMSTART3874; GFX90A-NEXT: ; use s83875; GFX90A-NEXT: ;;#ASMEND3876; GFX90A-NEXT: s_setpc_b64 s[30:31]3877;3878; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_4:3879; GFX942: ; %bb.0:3880; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3881; GFX942-NEXT: ;;#ASMSTART3882; GFX942-NEXT: ; def s[0:1]3883; GFX942-NEXT: ;;#ASMEND3884; GFX942-NEXT: ;;#ASMSTART3885; GFX942-NEXT: ; def s[2:3]3886; GFX942-NEXT: ;;#ASMEND3887; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s23888; GFX942-NEXT: ;;#ASMSTART3889; GFX942-NEXT: ; use s83890; GFX942-NEXT: ;;#ASMEND3891; GFX942-NEXT: s_setpc_b64 s[30:31]3892 %vec0 = call <4 x i16> asm "; def $0", "=s"()3893 %vec1 = call <4 x i16> asm "; def $0", "=s"()3894 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3895 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3896 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 4>3897 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3898 ret void3899}3900 3901define void @s_shuffle_v2i16_v3i16__2_4() {3902; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_4:3903; GFX900: ; %bb.0:3904; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3905; GFX900-NEXT: ;;#ASMSTART3906; GFX900-NEXT: ; def s[4:5]3907; GFX900-NEXT: ;;#ASMEND3908; GFX900-NEXT: ;;#ASMSTART3909; GFX900-NEXT: ; def s[6:7]3910; GFX900-NEXT: ;;#ASMEND3911; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s63912; GFX900-NEXT: ;;#ASMSTART3913; GFX900-NEXT: ; use s83914; GFX900-NEXT: ;;#ASMEND3915; GFX900-NEXT: s_setpc_b64 s[30:31]3916;3917; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_4:3918; GFX90A: ; %bb.0:3919; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3920; GFX90A-NEXT: ;;#ASMSTART3921; GFX90A-NEXT: ; def s[4:5]3922; GFX90A-NEXT: ;;#ASMEND3923; GFX90A-NEXT: ;;#ASMSTART3924; GFX90A-NEXT: ; def s[6:7]3925; GFX90A-NEXT: ;;#ASMEND3926; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s63927; GFX90A-NEXT: ;;#ASMSTART3928; GFX90A-NEXT: ; use s83929; GFX90A-NEXT: ;;#ASMEND3930; GFX90A-NEXT: s_setpc_b64 s[30:31]3931;3932; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_4:3933; GFX942: ; %bb.0:3934; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3935; GFX942-NEXT: ;;#ASMSTART3936; GFX942-NEXT: ; def s[0:1]3937; GFX942-NEXT: ;;#ASMEND3938; GFX942-NEXT: ;;#ASMSTART3939; GFX942-NEXT: ; def s[2:3]3940; GFX942-NEXT: ;;#ASMEND3941; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s23942; GFX942-NEXT: ;;#ASMSTART3943; GFX942-NEXT: ; use s83944; GFX942-NEXT: ;;#ASMEND3945; GFX942-NEXT: s_setpc_b64 s[30:31]3946 %vec0 = call <4 x i16> asm "; def $0", "=s"()3947 %vec1 = call <4 x i16> asm "; def $0", "=s"()3948 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3949 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3950 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 4>3951 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3952 ret void3953}3954 3955define void @s_shuffle_v2i16_v3i16__3_4() {3956; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_4:3957; GFX900: ; %bb.0:3958; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3959; GFX900-NEXT: ;;#ASMSTART3960; GFX900-NEXT: ; def s[8:9]3961; GFX900-NEXT: ;;#ASMEND3962; GFX900-NEXT: ;;#ASMSTART3963; GFX900-NEXT: ; use s83964; GFX900-NEXT: ;;#ASMEND3965; GFX900-NEXT: s_setpc_b64 s[30:31]3966;3967; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_4:3968; GFX90A: ; %bb.0:3969; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3970; GFX90A-NEXT: ;;#ASMSTART3971; GFX90A-NEXT: ; def s[8:9]3972; GFX90A-NEXT: ;;#ASMEND3973; GFX90A-NEXT: ;;#ASMSTART3974; GFX90A-NEXT: ; use s83975; GFX90A-NEXT: ;;#ASMEND3976; GFX90A-NEXT: s_setpc_b64 s[30:31]3977;3978; GFX942-LABEL: s_shuffle_v2i16_v3i16__3_4:3979; GFX942: ; %bb.0:3980; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3981; GFX942-NEXT: ;;#ASMSTART3982; GFX942-NEXT: ; def s[8:9]3983; GFX942-NEXT: ;;#ASMEND3984; GFX942-NEXT: s_nop 03985; GFX942-NEXT: ;;#ASMSTART3986; GFX942-NEXT: ; use s83987; GFX942-NEXT: ;;#ASMEND3988; GFX942-NEXT: s_setpc_b64 s[30:31]3989 %vec0 = call <4 x i16> asm "; def $0", "=s"()3990 %vec1 = call <4 x i16> asm "; def $0", "=s"()3991 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3992 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3993 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 4>3994 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3995 ret void3996}3997 3998define void @s_shuffle_v2i16_v3i16__4_4() {3999; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_4:4000; GFX900: ; %bb.0:4001; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4002; GFX900-NEXT: ;;#ASMSTART4003; GFX900-NEXT: ; def s[4:5]4004; GFX900-NEXT: ;;#ASMEND4005; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s44006; GFX900-NEXT: ;;#ASMSTART4007; GFX900-NEXT: ; use s84008; GFX900-NEXT: ;;#ASMEND4009; GFX900-NEXT: s_setpc_b64 s[30:31]4010;4011; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_4:4012; GFX90A: ; %bb.0:4013; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4014; GFX90A-NEXT: ;;#ASMSTART4015; GFX90A-NEXT: ; def s[4:5]4016; GFX90A-NEXT: ;;#ASMEND4017; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s44018; GFX90A-NEXT: ;;#ASMSTART4019; GFX90A-NEXT: ; use s84020; GFX90A-NEXT: ;;#ASMEND4021; GFX90A-NEXT: s_setpc_b64 s[30:31]4022;4023; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_4:4024; GFX942: ; %bb.0:4025; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4026; GFX942-NEXT: ;;#ASMSTART4027; GFX942-NEXT: ; def s[0:1]4028; GFX942-NEXT: ;;#ASMEND4029; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s04030; GFX942-NEXT: ;;#ASMSTART4031; GFX942-NEXT: ; use s84032; GFX942-NEXT: ;;#ASMEND4033; GFX942-NEXT: s_setpc_b64 s[30:31]4034 %vec0 = call <4 x i16> asm "; def $0", "=s"()4035 %vec1 = call <4 x i16> asm "; def $0", "=s"()4036 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4037 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4038 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 4>4039 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4040 ret void4041}4042 4043define void @s_shuffle_v2i16_v3i16__u_5() {4044; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_5:4045; GFX900: ; %bb.0:4046; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4047; GFX900-NEXT: ;;#ASMSTART4048; GFX900-NEXT: ; def s[4:5]4049; GFX900-NEXT: ;;#ASMEND4050; GFX900-NEXT: s_lshl_b32 s8, s5, 164051; GFX900-NEXT: ;;#ASMSTART4052; GFX900-NEXT: ; use s84053; GFX900-NEXT: ;;#ASMEND4054; GFX900-NEXT: s_setpc_b64 s[30:31]4055;4056; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_5:4057; GFX90A: ; %bb.0:4058; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4059; GFX90A-NEXT: ;;#ASMSTART4060; GFX90A-NEXT: ; def s[4:5]4061; GFX90A-NEXT: ;;#ASMEND4062; GFX90A-NEXT: s_lshl_b32 s8, s5, 164063; GFX90A-NEXT: ;;#ASMSTART4064; GFX90A-NEXT: ; use s84065; GFX90A-NEXT: ;;#ASMEND4066; GFX90A-NEXT: s_setpc_b64 s[30:31]4067;4068; GFX942-LABEL: s_shuffle_v2i16_v3i16__u_5:4069; GFX942: ; %bb.0:4070; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4071; GFX942-NEXT: ;;#ASMSTART4072; GFX942-NEXT: ; def s[0:1]4073; GFX942-NEXT: ;;#ASMEND4074; GFX942-NEXT: s_lshl_b32 s8, s1, 164075; GFX942-NEXT: ;;#ASMSTART4076; GFX942-NEXT: ; use s84077; GFX942-NEXT: ;;#ASMEND4078; GFX942-NEXT: s_setpc_b64 s[30:31]4079 %vec0 = call <4 x i16> asm "; def $0", "=s"()4080 %vec1 = call <4 x i16> asm "; def $0", "=s"()4081 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4082 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4083 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 5>4084 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4085 ret void4086}4087 4088define void @s_shuffle_v2i16_v3i16__0_5() {4089; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_5:4090; GFX900: ; %bb.0:4091; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4092; GFX900-NEXT: ;;#ASMSTART4093; GFX900-NEXT: ; def s[4:5]4094; GFX900-NEXT: ;;#ASMEND4095; GFX900-NEXT: ;;#ASMSTART4096; GFX900-NEXT: ; def s[6:7]4097; GFX900-NEXT: ;;#ASMEND4098; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s74099; GFX900-NEXT: ;;#ASMSTART4100; GFX900-NEXT: ; use s84101; GFX900-NEXT: ;;#ASMEND4102; GFX900-NEXT: s_setpc_b64 s[30:31]4103;4104; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_5:4105; GFX90A: ; %bb.0:4106; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4107; GFX90A-NEXT: ;;#ASMSTART4108; GFX90A-NEXT: ; def s[4:5]4109; GFX90A-NEXT: ;;#ASMEND4110; GFX90A-NEXT: ;;#ASMSTART4111; GFX90A-NEXT: ; def s[6:7]4112; GFX90A-NEXT: ;;#ASMEND4113; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s74114; GFX90A-NEXT: ;;#ASMSTART4115; GFX90A-NEXT: ; use s84116; GFX90A-NEXT: ;;#ASMEND4117; GFX90A-NEXT: s_setpc_b64 s[30:31]4118;4119; GFX942-LABEL: s_shuffle_v2i16_v3i16__0_5:4120; GFX942: ; %bb.0:4121; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4122; GFX942-NEXT: ;;#ASMSTART4123; GFX942-NEXT: ; def s[0:1]4124; GFX942-NEXT: ;;#ASMEND4125; GFX942-NEXT: ;;#ASMSTART4126; GFX942-NEXT: ; def s[2:3]4127; GFX942-NEXT: ;;#ASMEND4128; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s34129; GFX942-NEXT: ;;#ASMSTART4130; GFX942-NEXT: ; use s84131; GFX942-NEXT: ;;#ASMEND4132; GFX942-NEXT: s_setpc_b64 s[30:31]4133 %vec0 = call <4 x i16> asm "; def $0", "=s"()4134 %vec1 = call <4 x i16> asm "; def $0", "=s"()4135 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4136 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4137 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 5>4138 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4139 ret void4140}4141 4142define void @s_shuffle_v2i16_v3i16__1_5() {4143; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_5:4144; GFX900: ; %bb.0:4145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4146; GFX900-NEXT: ;;#ASMSTART4147; GFX900-NEXT: ; def s[4:5]4148; GFX900-NEXT: ;;#ASMEND4149; GFX900-NEXT: s_lshr_b32 s4, s4, 164150; GFX900-NEXT: ;;#ASMSTART4151; GFX900-NEXT: ; def s[6:7]4152; GFX900-NEXT: ;;#ASMEND4153; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s74154; GFX900-NEXT: ;;#ASMSTART4155; GFX900-NEXT: ; use s84156; GFX900-NEXT: ;;#ASMEND4157; GFX900-NEXT: s_setpc_b64 s[30:31]4158;4159; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_5:4160; GFX90A: ; %bb.0:4161; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4162; GFX90A-NEXT: ;;#ASMSTART4163; GFX90A-NEXT: ; def s[4:5]4164; GFX90A-NEXT: ;;#ASMEND4165; GFX90A-NEXT: s_lshr_b32 s4, s4, 164166; GFX90A-NEXT: ;;#ASMSTART4167; GFX90A-NEXT: ; def s[6:7]4168; GFX90A-NEXT: ;;#ASMEND4169; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s74170; GFX90A-NEXT: ;;#ASMSTART4171; GFX90A-NEXT: ; use s84172; GFX90A-NEXT: ;;#ASMEND4173; GFX90A-NEXT: s_setpc_b64 s[30:31]4174;4175; GFX942-LABEL: s_shuffle_v2i16_v3i16__1_5:4176; GFX942: ; %bb.0:4177; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4178; GFX942-NEXT: ;;#ASMSTART4179; GFX942-NEXT: ; def s[0:1]4180; GFX942-NEXT: ;;#ASMEND4181; GFX942-NEXT: s_lshr_b32 s0, s0, 164182; GFX942-NEXT: ;;#ASMSTART4183; GFX942-NEXT: ; def s[2:3]4184; GFX942-NEXT: ;;#ASMEND4185; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s34186; GFX942-NEXT: ;;#ASMSTART4187; GFX942-NEXT: ; use s84188; GFX942-NEXT: ;;#ASMEND4189; GFX942-NEXT: s_setpc_b64 s[30:31]4190 %vec0 = call <4 x i16> asm "; def $0", "=s"()4191 %vec1 = call <4 x i16> asm "; def $0", "=s"()4192 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4193 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4194 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 5>4195 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4196 ret void4197}4198 4199define void @s_shuffle_v2i16_v3i16__2_5() {4200; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_5:4201; GFX900: ; %bb.0:4202; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4203; GFX900-NEXT: ;;#ASMSTART4204; GFX900-NEXT: ; def s[4:5]4205; GFX900-NEXT: ;;#ASMEND4206; GFX900-NEXT: ;;#ASMSTART4207; GFX900-NEXT: ; def s[6:7]4208; GFX900-NEXT: ;;#ASMEND4209; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s74210; GFX900-NEXT: ;;#ASMSTART4211; GFX900-NEXT: ; use s84212; GFX900-NEXT: ;;#ASMEND4213; GFX900-NEXT: s_setpc_b64 s[30:31]4214;4215; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_5:4216; GFX90A: ; %bb.0:4217; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4218; GFX90A-NEXT: ;;#ASMSTART4219; GFX90A-NEXT: ; def s[4:5]4220; GFX90A-NEXT: ;;#ASMEND4221; GFX90A-NEXT: ;;#ASMSTART4222; GFX90A-NEXT: ; def s[6:7]4223; GFX90A-NEXT: ;;#ASMEND4224; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s74225; GFX90A-NEXT: ;;#ASMSTART4226; GFX90A-NEXT: ; use s84227; GFX90A-NEXT: ;;#ASMEND4228; GFX90A-NEXT: s_setpc_b64 s[30:31]4229;4230; GFX942-LABEL: s_shuffle_v2i16_v3i16__2_5:4231; GFX942: ; %bb.0:4232; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4233; GFX942-NEXT: ;;#ASMSTART4234; GFX942-NEXT: ; def s[0:1]4235; GFX942-NEXT: ;;#ASMEND4236; GFX942-NEXT: ;;#ASMSTART4237; GFX942-NEXT: ; def s[2:3]4238; GFX942-NEXT: ;;#ASMEND4239; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s34240; GFX942-NEXT: ;;#ASMSTART4241; GFX942-NEXT: ; use s84242; GFX942-NEXT: ;;#ASMEND4243; GFX942-NEXT: s_setpc_b64 s[30:31]4244 %vec0 = call <4 x i16> asm "; def $0", "=s"()4245 %vec1 = call <4 x i16> asm "; def $0", "=s"()4246 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4247 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4248 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 5>4249 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4250 ret void4251}4252 4253define void @s_shuffle_v2i16_v3i16__3_5() {4254; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_5:4255; GFX900: ; %bb.0:4256; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4257; GFX900-NEXT: ;;#ASMSTART4258; GFX900-NEXT: ; def s[4:5]4259; GFX900-NEXT: ;;#ASMEND4260; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s54261; GFX900-NEXT: ;;#ASMSTART4262; GFX900-NEXT: ; use s84263; GFX900-NEXT: ;;#ASMEND4264; GFX900-NEXT: s_setpc_b64 s[30:31]4265;4266; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_5:4267; GFX90A: ; %bb.0:4268; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4269; GFX90A-NEXT: ;;#ASMSTART4270; GFX90A-NEXT: ; def s[4:5]4271; GFX90A-NEXT: ;;#ASMEND4272; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s54273; GFX90A-NEXT: ;;#ASMSTART4274; GFX90A-NEXT: ; use s84275; GFX90A-NEXT: ;;#ASMEND4276; GFX90A-NEXT: s_setpc_b64 s[30:31]4277;4278; GFX942-LABEL: s_shuffle_v2i16_v3i16__3_5:4279; GFX942: ; %bb.0:4280; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4281; GFX942-NEXT: ;;#ASMSTART4282; GFX942-NEXT: ; def s[0:1]4283; GFX942-NEXT: ;;#ASMEND4284; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s14285; GFX942-NEXT: ;;#ASMSTART4286; GFX942-NEXT: ; use s84287; GFX942-NEXT: ;;#ASMEND4288; GFX942-NEXT: s_setpc_b64 s[30:31]4289 %vec0 = call <4 x i16> asm "; def $0", "=s"()4290 %vec1 = call <4 x i16> asm "; def $0", "=s"()4291 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4292 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4293 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 5>4294 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4295 ret void4296}4297 4298define void @s_shuffle_v2i16_v3i16__4_5() {4299; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_5:4300; GFX900: ; %bb.0:4301; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4302; GFX900-NEXT: ;;#ASMSTART4303; GFX900-NEXT: ; def s[4:5]4304; GFX900-NEXT: ;;#ASMEND4305; GFX900-NEXT: s_lshr_b32 s4, s4, 164306; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s54307; GFX900-NEXT: ;;#ASMSTART4308; GFX900-NEXT: ; use s84309; GFX900-NEXT: ;;#ASMEND4310; GFX900-NEXT: s_setpc_b64 s[30:31]4311;4312; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_5:4313; GFX90A: ; %bb.0:4314; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4315; GFX90A-NEXT: ;;#ASMSTART4316; GFX90A-NEXT: ; def s[4:5]4317; GFX90A-NEXT: ;;#ASMEND4318; GFX90A-NEXT: s_lshr_b32 s4, s4, 164319; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s54320; GFX90A-NEXT: ;;#ASMSTART4321; GFX90A-NEXT: ; use s84322; GFX90A-NEXT: ;;#ASMEND4323; GFX90A-NEXT: s_setpc_b64 s[30:31]4324;4325; GFX942-LABEL: s_shuffle_v2i16_v3i16__4_5:4326; GFX942: ; %bb.0:4327; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4328; GFX942-NEXT: ;;#ASMSTART4329; GFX942-NEXT: ; def s[0:1]4330; GFX942-NEXT: ;;#ASMEND4331; GFX942-NEXT: s_lshr_b32 s0, s0, 164332; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s14333; GFX942-NEXT: ;;#ASMSTART4334; GFX942-NEXT: ; use s84335; GFX942-NEXT: ;;#ASMEND4336; GFX942-NEXT: s_setpc_b64 s[30:31]4337 %vec0 = call <4 x i16> asm "; def $0", "=s"()4338 %vec1 = call <4 x i16> asm "; def $0", "=s"()4339 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4340 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4341 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 5>4342 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4343 ret void4344}4345;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:4346; GFX90APLUS: {{.*}}4347