13972 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_v4i16_v3i16__u_u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v4i16_v3i16__u_u_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, <4 x i32> poison15 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 816 ret void17}18 19define void @v_shuffle_v4i16_v3i16__0_u_u_u(ptr addrspace(1) inreg %ptr) {20; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_u_u_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_dwordx2 v2, v[0:1], 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_v4i16_v3i16__0_u_u_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_dwordx2 v2, v[0:1], 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_v4i16_v3i16__0_u_u_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_dwordx2 v2, v[0:1], 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, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>55 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 856 ret void57}58 59define void @v_shuffle_v4i16_v3i16__1_u_u_u(ptr addrspace(1) inreg %ptr) {60; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_u_u_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_dwordx2 v2, v[0:1], 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_v4i16_v3i16__1_u_u_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_dwordx2 v2, v[0:1], 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_v4i16_v3i16__1_u_u_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_dwordx2 v2, v[0:1], 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, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>98 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 899 ret void100}101 102define void @v_shuffle_v4i16_v3i16__2_u_u_u(ptr addrspace(1) inreg %ptr) {103; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_u_u_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_dwordx2 v2, v[1:2], 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_v4i16_v3i16__2_u_u_u:115; GFX90A: ; %bb.0:116; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)117; GFX90A-NEXT: ;;#ASMSTART118; GFX90A-NEXT: ; def v[0:1]119; GFX90A-NEXT: ;;#ASMEND120; GFX90A-NEXT: v_mov_b32_e32 v2, 0121; GFX90A-NEXT: v_mov_b32_e32 v0, v1122; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]123; GFX90A-NEXT: s_waitcnt vmcnt(0)124; GFX90A-NEXT: s_setpc_b64 s[30:31]125;126; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_u_u_u:127; GFX942: ; %bb.0:128; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)129; GFX942-NEXT: ;;#ASMSTART130; GFX942-NEXT: ; def v[0:1]131; GFX942-NEXT: ;;#ASMEND132; GFX942-NEXT: v_mov_b32_e32 v2, 0133; GFX942-NEXT: v_mov_b32_e32 v0, v1134; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]135; GFX942-NEXT: s_waitcnt vmcnt(0)136; GFX942-NEXT: s_setpc_b64 s[30:31]137 %vec0 = call <4 x i16> asm "; def $0", "=v"()138 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>139 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>140 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8141 ret void142}143 144define void @v_shuffle_v4i16_v3i16__3_u_u_u(ptr addrspace(1) inreg %ptr) {145; GFX9-LABEL: v_shuffle_v4i16_v3i16__3_u_u_u:146; GFX9: ; %bb.0:147; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)148; GFX9-NEXT: s_setpc_b64 s[30:31]149 %vec0 = call <4 x i16> asm "; def $0", "=v"()150 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>151 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>152 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8153 ret void154}155 156define void @v_shuffle_v4i16_v3i16__4_u_u_u(ptr addrspace(1) inreg %ptr) {157; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_u_u_u:158; GFX900: ; %bb.0:159; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)160; GFX900-NEXT: ;;#ASMSTART161; GFX900-NEXT: ; def v[0:1]162; GFX900-NEXT: ;;#ASMEND163; GFX900-NEXT: v_mov_b32_e32 v2, 0164; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 16165; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]166; GFX900-NEXT: s_waitcnt vmcnt(0)167; GFX900-NEXT: s_setpc_b64 s[30:31]168;169; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_u_u_u:170; GFX90A: ; %bb.0:171; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; GFX90A-NEXT: ;;#ASMSTART173; GFX90A-NEXT: ; def v[0:1]174; GFX90A-NEXT: ;;#ASMEND175; GFX90A-NEXT: v_mov_b32_e32 v2, 0176; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 16177; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]178; GFX90A-NEXT: s_waitcnt vmcnt(0)179; GFX90A-NEXT: s_setpc_b64 s[30:31]180;181; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_u_u_u:182; GFX942: ; %bb.0:183; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX942-NEXT: ;;#ASMSTART185; GFX942-NEXT: ; def v[0:1]186; GFX942-NEXT: ;;#ASMEND187; GFX942-NEXT: v_mov_b32_e32 v2, 0188; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 16189; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]190; GFX942-NEXT: s_waitcnt vmcnt(0)191; GFX942-NEXT: s_setpc_b64 s[30:31]192 %vec0 = call <4 x i16> asm "; def $0", "=v"()193 %vec1 = call <4 x i16> asm "; def $0", "=v"()194 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>195 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>196 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 poison, i32 poison, i32 poison>197 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8198 ret void199}200 201define void @v_shuffle_v4i16_v3i16__5_u_u_u(ptr addrspace(1) inreg %ptr) {202; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_u_u:203; GFX900: ; %bb.0:204; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)205; GFX900-NEXT: v_mov_b32_e32 v2, 0206; GFX900-NEXT: ;;#ASMSTART207; GFX900-NEXT: ; def v[0:1]208; GFX900-NEXT: ;;#ASMEND209; GFX900-NEXT: global_store_dwordx2 v2, v[1:2], s[16:17]210; GFX900-NEXT: s_waitcnt vmcnt(0)211; GFX900-NEXT: s_setpc_b64 s[30:31]212;213; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_u_u:214; GFX90A: ; %bb.0:215; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)216; GFX90A-NEXT: ;;#ASMSTART217; GFX90A-NEXT: ; def v[0:1]218; GFX90A-NEXT: ;;#ASMEND219; GFX90A-NEXT: v_mov_b32_e32 v2, 0220; GFX90A-NEXT: v_mov_b32_e32 v0, v1221; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]222; GFX90A-NEXT: s_waitcnt vmcnt(0)223; GFX90A-NEXT: s_setpc_b64 s[30:31]224;225; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_u_u:226; GFX942: ; %bb.0:227; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; GFX942-NEXT: ;;#ASMSTART229; GFX942-NEXT: ; def v[0:1]230; GFX942-NEXT: ;;#ASMEND231; GFX942-NEXT: v_mov_b32_e32 v2, 0232; GFX942-NEXT: v_mov_b32_e32 v0, v1233; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]234; GFX942-NEXT: s_waitcnt vmcnt(0)235; GFX942-NEXT: s_setpc_b64 s[30:31]236 %vec0 = call <4 x i16> asm "; def $0", "=v"()237 %vec1 = call <4 x i16> asm "; def $0", "=v"()238 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>239 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>240 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 poison, i32 poison>241 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8242 ret void243}244 245define void @v_shuffle_v4i16_v3i16__5_0_u_u(ptr addrspace(1) inreg %ptr) {246; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_u_u:247; GFX900: ; %bb.0:248; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX900-NEXT: ;;#ASMSTART250; GFX900-NEXT: ; def v[0:1]251; GFX900-NEXT: ;;#ASMEND252; GFX900-NEXT: s_mov_b32 s4, 0x5040100253; GFX900-NEXT: v_mov_b32_e32 v3, 0254; GFX900-NEXT: ;;#ASMSTART255; GFX900-NEXT: ; def v[1:2]256; GFX900-NEXT: ;;#ASMEND257; GFX900-NEXT: v_perm_b32 v0, v0, v2, s4258; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]259; GFX900-NEXT: s_waitcnt vmcnt(0)260; GFX900-NEXT: s_setpc_b64 s[30:31]261;262; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_u_u:263; GFX90A: ; %bb.0:264; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)265; GFX90A-NEXT: ;;#ASMSTART266; GFX90A-NEXT: ; def v[0:1]267; GFX90A-NEXT: ;;#ASMEND268; GFX90A-NEXT: s_mov_b32 s4, 0x5040100269; GFX90A-NEXT: v_mov_b32_e32 v4, 0270; GFX90A-NEXT: ;;#ASMSTART271; GFX90A-NEXT: ; def v[2:3]272; GFX90A-NEXT: ;;#ASMEND273; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s4274; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]275; GFX90A-NEXT: s_waitcnt vmcnt(0)276; GFX90A-NEXT: s_setpc_b64 s[30:31]277;278; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_u_u:279; GFX942: ; %bb.0:280; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)281; GFX942-NEXT: ;;#ASMSTART282; GFX942-NEXT: ; def v[0:1]283; GFX942-NEXT: ;;#ASMEND284; GFX942-NEXT: s_mov_b32 s2, 0x5040100285; GFX942-NEXT: v_mov_b32_e32 v4, 0286; GFX942-NEXT: ;;#ASMSTART287; GFX942-NEXT: ; def v[2:3]288; GFX942-NEXT: ;;#ASMEND289; GFX942-NEXT: s_nop 0290; GFX942-NEXT: v_perm_b32 v0, v0, v3, s2291; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]292; GFX942-NEXT: s_waitcnt vmcnt(0)293; GFX942-NEXT: s_setpc_b64 s[30:31]294 %vec0 = call <4 x i16> asm "; def $0", "=v"()295 %vec1 = call <4 x i16> asm "; def $0", "=v"()296 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>297 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>298 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 poison, i32 poison>299 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8300 ret void301}302 303define void @v_shuffle_v4i16_v3i16__5_1_u_u(ptr addrspace(1) inreg %ptr) {304; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_u_u:305; GFX900: ; %bb.0:306; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)307; GFX900-NEXT: ;;#ASMSTART308; GFX900-NEXT: ; def v[0:1]309; GFX900-NEXT: ;;#ASMEND310; GFX900-NEXT: s_mov_b32 s4, 0xffff311; GFX900-NEXT: v_mov_b32_e32 v3, 0312; GFX900-NEXT: ;;#ASMSTART313; GFX900-NEXT: ; def v[1:2]314; GFX900-NEXT: ;;#ASMEND315; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v0316; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]317; GFX900-NEXT: s_waitcnt vmcnt(0)318; GFX900-NEXT: s_setpc_b64 s[30:31]319;320; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_u_u:321; GFX90A: ; %bb.0:322; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)323; GFX90A-NEXT: ;;#ASMSTART324; GFX90A-NEXT: ; def v[0:1]325; GFX90A-NEXT: ;;#ASMEND326; GFX90A-NEXT: s_mov_b32 s4, 0xffff327; GFX90A-NEXT: v_mov_b32_e32 v4, 0328; GFX90A-NEXT: ;;#ASMSTART329; GFX90A-NEXT: ; def v[2:3]330; GFX90A-NEXT: ;;#ASMEND331; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v0332; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]333; GFX90A-NEXT: s_waitcnt vmcnt(0)334; GFX90A-NEXT: s_setpc_b64 s[30:31]335;336; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_u_u:337; GFX942: ; %bb.0:338; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)339; GFX942-NEXT: ;;#ASMSTART340; GFX942-NEXT: ; def v[0:1]341; GFX942-NEXT: ;;#ASMEND342; GFX942-NEXT: s_mov_b32 s2, 0xffff343; GFX942-NEXT: v_mov_b32_e32 v4, 0344; GFX942-NEXT: ;;#ASMSTART345; GFX942-NEXT: ; def v[2:3]346; GFX942-NEXT: ;;#ASMEND347; GFX942-NEXT: s_nop 0348; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v0349; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]350; GFX942-NEXT: s_waitcnt vmcnt(0)351; GFX942-NEXT: s_setpc_b64 s[30:31]352 %vec0 = call <4 x i16> asm "; def $0", "=v"()353 %vec1 = call <4 x i16> asm "; def $0", "=v"()354 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>355 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>356 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 poison, i32 poison>357 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8358 ret void359}360 361define void @v_shuffle_v4i16_v3i16__5_2_u_u(ptr addrspace(1) inreg %ptr) {362; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_u_u:363; GFX900: ; %bb.0:364; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)365; GFX900-NEXT: ;;#ASMSTART366; GFX900-NEXT: ; def v[0:1]367; GFX900-NEXT: ;;#ASMEND368; GFX900-NEXT: s_mov_b32 s4, 0x5040100369; GFX900-NEXT: v_mov_b32_e32 v4, 0370; GFX900-NEXT: ;;#ASMSTART371; GFX900-NEXT: ; def v[2:3]372; GFX900-NEXT: ;;#ASMEND373; GFX900-NEXT: v_perm_b32 v0, v1, v3, s4374; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]375; GFX900-NEXT: s_waitcnt vmcnt(0)376; GFX900-NEXT: s_setpc_b64 s[30:31]377;378; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_u_u:379; GFX90A: ; %bb.0:380; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)381; GFX90A-NEXT: ;;#ASMSTART382; GFX90A-NEXT: ; def v[0:1]383; GFX90A-NEXT: ;;#ASMEND384; GFX90A-NEXT: s_mov_b32 s4, 0x5040100385; GFX90A-NEXT: v_mov_b32_e32 v4, 0386; GFX90A-NEXT: ;;#ASMSTART387; GFX90A-NEXT: ; def v[2:3]388; GFX90A-NEXT: ;;#ASMEND389; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s4390; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]391; GFX90A-NEXT: s_waitcnt vmcnt(0)392; GFX90A-NEXT: s_setpc_b64 s[30:31]393;394; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_u_u:395; GFX942: ; %bb.0:396; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; GFX942-NEXT: ;;#ASMSTART398; GFX942-NEXT: ; def v[0:1]399; GFX942-NEXT: ;;#ASMEND400; GFX942-NEXT: s_mov_b32 s2, 0x5040100401; GFX942-NEXT: v_mov_b32_e32 v4, 0402; GFX942-NEXT: ;;#ASMSTART403; GFX942-NEXT: ; def v[2:3]404; GFX942-NEXT: ;;#ASMEND405; GFX942-NEXT: s_nop 0406; GFX942-NEXT: v_perm_b32 v0, v1, v3, s2407; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]408; GFX942-NEXT: s_waitcnt vmcnt(0)409; GFX942-NEXT: s_setpc_b64 s[30:31]410 %vec0 = call <4 x i16> asm "; def $0", "=v"()411 %vec1 = call <4 x i16> asm "; def $0", "=v"()412 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>413 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>414 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 poison, i32 poison>415 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8416 ret void417}418 419define void @v_shuffle_v4i16_v3i16__5_3_u_u(ptr addrspace(1) inreg %ptr) {420; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_u_u:421; GFX900: ; %bb.0:422; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; GFX900-NEXT: ;;#ASMSTART424; GFX900-NEXT: ; def v[0:1]425; GFX900-NEXT: ;;#ASMEND426; GFX900-NEXT: s_mov_b32 s4, 0x5040100427; GFX900-NEXT: v_mov_b32_e32 v2, 0428; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4429; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]430; GFX900-NEXT: s_waitcnt vmcnt(0)431; GFX900-NEXT: s_setpc_b64 s[30:31]432;433; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_3_u_u:434; GFX90A: ; %bb.0:435; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)436; GFX90A-NEXT: ;;#ASMSTART437; GFX90A-NEXT: ; def v[0:1]438; GFX90A-NEXT: ;;#ASMEND439; GFX90A-NEXT: s_mov_b32 s4, 0x5040100440; GFX90A-NEXT: v_mov_b32_e32 v2, 0441; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4442; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]443; GFX90A-NEXT: s_waitcnt vmcnt(0)444; GFX90A-NEXT: s_setpc_b64 s[30:31]445;446; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_u_u:447; GFX942: ; %bb.0:448; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)449; GFX942-NEXT: ;;#ASMSTART450; GFX942-NEXT: ; def v[0:1]451; GFX942-NEXT: ;;#ASMEND452; GFX942-NEXT: s_mov_b32 s2, 0x5040100453; GFX942-NEXT: v_mov_b32_e32 v2, 0454; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2455; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]456; GFX942-NEXT: s_waitcnt vmcnt(0)457; GFX942-NEXT: s_setpc_b64 s[30:31]458 %vec0 = call <4 x i16> asm "; def $0", "=v"()459 %vec1 = call <4 x i16> asm "; def $0", "=v"()460 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>461 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>462 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 poison, i32 poison>463 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8464 ret void465}466 467define void @v_shuffle_v4i16_v3i16__5_4_u_u(ptr addrspace(1) inreg %ptr) {468; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_u_u:469; GFX900: ; %bb.0:470; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)471; GFX900-NEXT: ;;#ASMSTART472; GFX900-NEXT: ; def v[0:1]473; GFX900-NEXT: ;;#ASMEND474; GFX900-NEXT: s_mov_b32 s4, 0xffff475; GFX900-NEXT: v_mov_b32_e32 v2, 0476; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v0477; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]478; GFX900-NEXT: s_waitcnt vmcnt(0)479; GFX900-NEXT: s_setpc_b64 s[30:31]480;481; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_u_u:482; GFX90A: ; %bb.0:483; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX90A-NEXT: ;;#ASMSTART485; GFX90A-NEXT: ; def v[0:1]486; GFX90A-NEXT: ;;#ASMEND487; GFX90A-NEXT: s_mov_b32 s4, 0xffff488; GFX90A-NEXT: v_mov_b32_e32 v2, 0489; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v0490; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]491; GFX90A-NEXT: s_waitcnt vmcnt(0)492; GFX90A-NEXT: s_setpc_b64 s[30:31]493;494; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_u_u:495; GFX942: ; %bb.0:496; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)497; GFX942-NEXT: ;;#ASMSTART498; GFX942-NEXT: ; def v[0:1]499; GFX942-NEXT: ;;#ASMEND500; GFX942-NEXT: s_mov_b32 s2, 0xffff501; GFX942-NEXT: v_mov_b32_e32 v2, 0502; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v0503; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]504; GFX942-NEXT: s_waitcnt vmcnt(0)505; GFX942-NEXT: s_setpc_b64 s[30:31]506 %vec0 = call <4 x i16> asm "; def $0", "=v"()507 %vec1 = call <4 x i16> asm "; def $0", "=v"()508 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>509 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>510 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 poison, i32 poison>511 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8512 ret void513}514 515define void @v_shuffle_v4i16_v3i16__5_5_u_u(ptr addrspace(1) inreg %ptr) {516; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_u:517; GFX900: ; %bb.0:518; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)519; GFX900-NEXT: ;;#ASMSTART520; GFX900-NEXT: ; def v[0:1]521; GFX900-NEXT: ;;#ASMEND522; GFX900-NEXT: s_mov_b32 s4, 0x5040100523; GFX900-NEXT: v_mov_b32_e32 v2, 0524; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4525; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]526; GFX900-NEXT: s_waitcnt vmcnt(0)527; GFX900-NEXT: s_setpc_b64 s[30:31]528;529; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_u:530; GFX90A: ; %bb.0:531; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)532; GFX90A-NEXT: ;;#ASMSTART533; GFX90A-NEXT: ; def v[0:1]534; GFX90A-NEXT: ;;#ASMEND535; GFX90A-NEXT: s_mov_b32 s4, 0x5040100536; GFX90A-NEXT: v_mov_b32_e32 v2, 0537; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4538; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]539; GFX90A-NEXT: s_waitcnt vmcnt(0)540; GFX90A-NEXT: s_setpc_b64 s[30:31]541;542; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_u:543; GFX942: ; %bb.0:544; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)545; GFX942-NEXT: ;;#ASMSTART546; GFX942-NEXT: ; def v[0:1]547; GFX942-NEXT: ;;#ASMEND548; GFX942-NEXT: s_mov_b32 s2, 0x5040100549; GFX942-NEXT: v_mov_b32_e32 v2, 0550; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2551; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]552; GFX942-NEXT: s_waitcnt vmcnt(0)553; GFX942-NEXT: s_setpc_b64 s[30:31]554 %vec0 = call <4 x i16> asm "; def $0", "=v"()555 %vec1 = call <4 x i16> asm "; def $0", "=v"()556 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>557 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>558 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 poison>559 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8560 ret void561}562 563define void @v_shuffle_v4i16_v3i16__5_5_0_u(ptr addrspace(1) inreg %ptr) {564; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_u:565; GFX900: ; %bb.0:566; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)567; GFX900-NEXT: ;;#ASMSTART568; GFX900-NEXT: ; def v[1:2]569; GFX900-NEXT: ;;#ASMEND570; GFX900-NEXT: s_mov_b32 s4, 0x5040100571; GFX900-NEXT: v_mov_b32_e32 v4, 0572; GFX900-NEXT: ;;#ASMSTART573; GFX900-NEXT: ; def v[2:3]574; GFX900-NEXT: ;;#ASMEND575; GFX900-NEXT: v_perm_b32 v0, v3, v3, s4576; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]577; GFX900-NEXT: s_waitcnt vmcnt(0)578; GFX900-NEXT: s_setpc_b64 s[30:31]579;580; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_u:581; GFX90A: ; %bb.0:582; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)583; GFX90A-NEXT: ;;#ASMSTART584; GFX90A-NEXT: ; def v[2:3]585; GFX90A-NEXT: ;;#ASMEND586; GFX90A-NEXT: s_mov_b32 s4, 0x5040100587; GFX90A-NEXT: v_mov_b32_e32 v4, 0588; GFX90A-NEXT: ;;#ASMSTART589; GFX90A-NEXT: ; def v[0:1]590; GFX90A-NEXT: ;;#ASMEND591; GFX90A-NEXT: v_perm_b32 v2, v3, v3, s4592; GFX90A-NEXT: v_mov_b32_e32 v3, v0593; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]594; GFX90A-NEXT: s_waitcnt vmcnt(0)595; GFX90A-NEXT: s_setpc_b64 s[30:31]596;597; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_u:598; GFX942: ; %bb.0:599; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)600; GFX942-NEXT: ;;#ASMSTART601; GFX942-NEXT: ; def v[2:3]602; GFX942-NEXT: ;;#ASMEND603; GFX942-NEXT: s_mov_b32 s2, 0x5040100604; GFX942-NEXT: v_mov_b32_e32 v4, 0605; GFX942-NEXT: ;;#ASMSTART606; GFX942-NEXT: ; def v[0:1]607; GFX942-NEXT: ;;#ASMEND608; GFX942-NEXT: v_perm_b32 v2, v3, v3, s2609; GFX942-NEXT: v_mov_b32_e32 v3, v0610; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]611; GFX942-NEXT: s_waitcnt vmcnt(0)612; GFX942-NEXT: s_setpc_b64 s[30:31]613 %vec0 = call <4 x i16> asm "; def $0", "=v"()614 %vec1 = call <4 x i16> asm "; def $0", "=v"()615 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>616 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>617 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 poison>618 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8619 ret void620}621 622define void @v_shuffle_v4i16_v3i16__5_5_1_u(ptr addrspace(1) inreg %ptr) {623; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_u:624; GFX900: ; %bb.0:625; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)626; GFX900-NEXT: ;;#ASMSTART627; GFX900-NEXT: ; def v[0:1]628; GFX900-NEXT: ;;#ASMEND629; GFX900-NEXT: ;;#ASMSTART630; GFX900-NEXT: ; def v[1:2]631; GFX900-NEXT: ;;#ASMEND632; GFX900-NEXT: v_alignbit_b32 v1, s4, v0, 16633; GFX900-NEXT: s_mov_b32 s4, 0x5040100634; GFX900-NEXT: v_mov_b32_e32 v3, 0635; GFX900-NEXT: v_perm_b32 v0, v2, v2, s4636; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]637; GFX900-NEXT: s_waitcnt vmcnt(0)638; GFX900-NEXT: s_setpc_b64 s[30:31]639;640; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_u:641; GFX90A: ; %bb.0:642; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)643; GFX90A-NEXT: ;;#ASMSTART644; GFX90A-NEXT: ; def v[0:1]645; GFX90A-NEXT: ;;#ASMEND646; GFX90A-NEXT: v_alignbit_b32 v1, s4, v0, 16647; GFX90A-NEXT: s_mov_b32 s4, 0x5040100648; GFX90A-NEXT: v_mov_b32_e32 v4, 0649; GFX90A-NEXT: ;;#ASMSTART650; GFX90A-NEXT: ; def v[2:3]651; GFX90A-NEXT: ;;#ASMEND652; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4653; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]654; GFX90A-NEXT: s_waitcnt vmcnt(0)655; GFX90A-NEXT: s_setpc_b64 s[30:31]656;657; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_u:658; GFX942: ; %bb.0:659; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)660; GFX942-NEXT: ;;#ASMSTART661; GFX942-NEXT: ; def v[0:1]662; GFX942-NEXT: ;;#ASMEND663; GFX942-NEXT: s_mov_b32 s2, 0x5040100664; GFX942-NEXT: v_mov_b32_e32 v4, 0665; GFX942-NEXT: ;;#ASMSTART666; GFX942-NEXT: ; def v[2:3]667; GFX942-NEXT: ;;#ASMEND668; GFX942-NEXT: v_alignbit_b32 v1, s0, v0, 16669; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2670; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]671; GFX942-NEXT: s_waitcnt vmcnt(0)672; GFX942-NEXT: s_setpc_b64 s[30:31]673 %vec0 = call <4 x i16> asm "; def $0", "=v"()674 %vec1 = call <4 x i16> asm "; def $0", "=v"()675 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>676 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>677 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 poison>678 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8679 ret void680}681 682define void @v_shuffle_v4i16_v3i16__5_5_2_u(ptr addrspace(1) inreg %ptr) {683; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_u:684; GFX900: ; %bb.0:685; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)686; GFX900-NEXT: ;;#ASMSTART687; GFX900-NEXT: ; def v[0:1]688; GFX900-NEXT: ;;#ASMEND689; GFX900-NEXT: s_mov_b32 s4, 0x5040100690; GFX900-NEXT: v_mov_b32_e32 v4, 0691; GFX900-NEXT: ;;#ASMSTART692; GFX900-NEXT: ; def v[2:3]693; GFX900-NEXT: ;;#ASMEND694; GFX900-NEXT: v_perm_b32 v0, v3, v3, s4695; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]696; GFX900-NEXT: s_waitcnt vmcnt(0)697; GFX900-NEXT: s_setpc_b64 s[30:31]698;699; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_u:700; GFX90A: ; %bb.0:701; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)702; GFX90A-NEXT: ;;#ASMSTART703; GFX90A-NEXT: ; def v[0:1]704; GFX90A-NEXT: ;;#ASMEND705; GFX90A-NEXT: s_mov_b32 s4, 0x5040100706; GFX90A-NEXT: v_mov_b32_e32 v4, 0707; GFX90A-NEXT: ;;#ASMSTART708; GFX90A-NEXT: ; def v[2:3]709; GFX90A-NEXT: ;;#ASMEND710; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4711; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]712; GFX90A-NEXT: s_waitcnt vmcnt(0)713; GFX90A-NEXT: s_setpc_b64 s[30:31]714;715; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_2_u:716; GFX942: ; %bb.0:717; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)718; GFX942-NEXT: ;;#ASMSTART719; GFX942-NEXT: ; def v[0:1]720; GFX942-NEXT: ;;#ASMEND721; GFX942-NEXT: s_mov_b32 s2, 0x5040100722; GFX942-NEXT: v_mov_b32_e32 v4, 0723; GFX942-NEXT: ;;#ASMSTART724; GFX942-NEXT: ; def v[2:3]725; GFX942-NEXT: ;;#ASMEND726; GFX942-NEXT: s_nop 0727; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2728; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]729; GFX942-NEXT: s_waitcnt vmcnt(0)730; GFX942-NEXT: s_setpc_b64 s[30:31]731 %vec0 = call <4 x i16> asm "; def $0", "=v"()732 %vec1 = call <4 x i16> asm "; def $0", "=v"()733 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>734 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>735 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 poison>736 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8737 ret void738}739 740define void @v_shuffle_v4i16_v3i16__5_5_3_u(ptr addrspace(1) inreg %ptr) {741; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_u:742; GFX900: ; %bb.0:743; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)744; GFX900-NEXT: s_mov_b32 s4, 0x5040100745; GFX900-NEXT: v_mov_b32_e32 v3, 0746; GFX900-NEXT: ;;#ASMSTART747; GFX900-NEXT: ; def v[1:2]748; GFX900-NEXT: ;;#ASMEND749; GFX900-NEXT: v_perm_b32 v0, v2, v2, s4750; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]751; GFX900-NEXT: s_waitcnt vmcnt(0)752; GFX900-NEXT: s_setpc_b64 s[30:31]753;754; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_u:755; GFX90A: ; %bb.0:756; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)757; GFX90A-NEXT: s_mov_b32 s4, 0x5040100758; GFX90A-NEXT: v_mov_b32_e32 v4, 0759; GFX90A-NEXT: ;;#ASMSTART760; GFX90A-NEXT: ; def v[0:1]761; GFX90A-NEXT: ;;#ASMEND762; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4763; GFX90A-NEXT: v_mov_b32_e32 v3, v0764; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]765; GFX90A-NEXT: s_waitcnt vmcnt(0)766; GFX90A-NEXT: s_setpc_b64 s[30:31]767;768; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_u:769; GFX942: ; %bb.0:770; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)771; GFX942-NEXT: s_mov_b32 s2, 0x5040100772; GFX942-NEXT: v_mov_b32_e32 v4, 0773; GFX942-NEXT: ;;#ASMSTART774; GFX942-NEXT: ; def v[0:1]775; GFX942-NEXT: ;;#ASMEND776; GFX942-NEXT: s_nop 0777; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2778; GFX942-NEXT: v_mov_b32_e32 v3, v0779; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]780; GFX942-NEXT: s_waitcnt vmcnt(0)781; GFX942-NEXT: s_setpc_b64 s[30:31]782 %vec0 = call <4 x i16> asm "; def $0", "=v"()783 %vec1 = call <4 x i16> asm "; def $0", "=v"()784 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>785 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>786 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>787 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8788 ret void789}790 791define void @v_shuffle_v4i16_v3i16__5_5_4_u(ptr addrspace(1) inreg %ptr) {792; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_u:793; GFX900: ; %bb.0:794; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)795; GFX900-NEXT: ;;#ASMSTART796; GFX900-NEXT: ; def v[0:1]797; GFX900-NEXT: ;;#ASMEND798; GFX900-NEXT: v_alignbit_b32 v2, s4, v0, 16799; GFX900-NEXT: s_mov_b32 s4, 0x5040100800; GFX900-NEXT: v_mov_b32_e32 v3, 0801; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4802; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]803; GFX900-NEXT: s_waitcnt vmcnt(0)804; GFX900-NEXT: s_setpc_b64 s[30:31]805;806; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_u:807; GFX90A: ; %bb.0:808; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)809; GFX90A-NEXT: ;;#ASMSTART810; GFX90A-NEXT: ; def v[0:1]811; GFX90A-NEXT: ;;#ASMEND812; GFX90A-NEXT: v_alignbit_b32 v3, s4, v0, 16813; GFX90A-NEXT: s_mov_b32 s4, 0x5040100814; GFX90A-NEXT: v_mov_b32_e32 v4, 0815; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4816; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]817; GFX90A-NEXT: s_waitcnt vmcnt(0)818; GFX90A-NEXT: s_setpc_b64 s[30:31]819;820; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_u:821; GFX942: ; %bb.0:822; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)823; GFX942-NEXT: s_mov_b32 s2, 0x5040100824; GFX942-NEXT: v_mov_b32_e32 v4, 0825; GFX942-NEXT: ;;#ASMSTART826; GFX942-NEXT: ; def v[0:1]827; GFX942-NEXT: ;;#ASMEND828; GFX942-NEXT: s_nop 0829; GFX942-NEXT: v_alignbit_b32 v3, s0, v0, 16830; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2831; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]832; GFX942-NEXT: s_waitcnt vmcnt(0)833; GFX942-NEXT: s_setpc_b64 s[30:31]834 %vec0 = call <4 x i16> asm "; def $0", "=v"()835 %vec1 = call <4 x i16> asm "; def $0", "=v"()836 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>837 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>838 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>839 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8840 ret void841}842 843define void @v_shuffle_v4i16_v3i16__5_5_5_u(ptr addrspace(1) inreg %ptr) {844; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_u:845; GFX900: ; %bb.0:846; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)847; GFX900-NEXT: ;;#ASMSTART848; GFX900-NEXT: ; def v[0:1]849; GFX900-NEXT: ;;#ASMEND850; GFX900-NEXT: s_mov_b32 s4, 0x5040100851; GFX900-NEXT: v_mov_b32_e32 v2, 0852; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4853; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]854; GFX900-NEXT: s_waitcnt vmcnt(0)855; GFX900-NEXT: s_setpc_b64 s[30:31]856;857; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_u:858; GFX90A: ; %bb.0:859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)860; GFX90A-NEXT: ;;#ASMSTART861; GFX90A-NEXT: ; def v[0:1]862; GFX90A-NEXT: ;;#ASMEND863; GFX90A-NEXT: s_mov_b32 s4, 0x5040100864; GFX90A-NEXT: v_mov_b32_e32 v2, 0865; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4866; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]867; GFX90A-NEXT: s_waitcnt vmcnt(0)868; GFX90A-NEXT: s_setpc_b64 s[30:31]869;870; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_u:871; GFX942: ; %bb.0:872; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)873; GFX942-NEXT: ;;#ASMSTART874; GFX942-NEXT: ; def v[0:1]875; GFX942-NEXT: ;;#ASMEND876; GFX942-NEXT: s_mov_b32 s2, 0x5040100877; GFX942-NEXT: v_mov_b32_e32 v2, 0878; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2879; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]880; GFX942-NEXT: s_waitcnt vmcnt(0)881; GFX942-NEXT: s_setpc_b64 s[30:31]882 %vec0 = call <4 x i16> asm "; def $0", "=v"()883 %vec1 = call <4 x i16> asm "; def $0", "=v"()884 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>885 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>886 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>887 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8888 ret void889}890 891define void @v_shuffle_v4i16_v3i16__5_5_5_0(ptr addrspace(1) inreg %ptr) {892; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_0:893; GFX900: ; %bb.0:894; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)895; GFX900-NEXT: ;;#ASMSTART896; GFX900-NEXT: ; def v[0:1]897; GFX900-NEXT: ;;#ASMEND898; GFX900-NEXT: ;;#ASMSTART899; GFX900-NEXT: ; def v[1:2]900; GFX900-NEXT: ;;#ASMEND901; GFX900-NEXT: s_mov_b32 s4, 0x5040100902; GFX900-NEXT: v_mov_b32_e32 v3, 0903; GFX900-NEXT: v_perm_b32 v1, v0, v2, s4904; GFX900-NEXT: v_perm_b32 v0, v2, v2, s4905; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]906; GFX900-NEXT: s_waitcnt vmcnt(0)907; GFX900-NEXT: s_setpc_b64 s[30:31]908;909; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_0:910; GFX90A: ; %bb.0:911; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)912; GFX90A-NEXT: ;;#ASMSTART913; GFX90A-NEXT: ; def v[0:1]914; GFX90A-NEXT: ;;#ASMEND915; GFX90A-NEXT: s_mov_b32 s4, 0x5040100916; GFX90A-NEXT: v_mov_b32_e32 v4, 0917; GFX90A-NEXT: ;;#ASMSTART918; GFX90A-NEXT: ; def v[2:3]919; GFX90A-NEXT: ;;#ASMEND920; GFX90A-NEXT: v_perm_b32 v1, v0, v3, s4921; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4922; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]923; GFX90A-NEXT: s_waitcnt vmcnt(0)924; GFX90A-NEXT: s_setpc_b64 s[30:31]925;926; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_0:927; GFX942: ; %bb.0:928; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)929; GFX942-NEXT: ;;#ASMSTART930; GFX942-NEXT: ; def v[0:1]931; GFX942-NEXT: ;;#ASMEND932; GFX942-NEXT: s_mov_b32 s2, 0x5040100933; GFX942-NEXT: v_mov_b32_e32 v4, 0934; GFX942-NEXT: ;;#ASMSTART935; GFX942-NEXT: ; def v[2:3]936; GFX942-NEXT: ;;#ASMEND937; GFX942-NEXT: s_nop 0938; GFX942-NEXT: v_perm_b32 v1, v0, v3, s2939; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2940; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]941; GFX942-NEXT: s_waitcnt vmcnt(0)942; GFX942-NEXT: s_setpc_b64 s[30:31]943 %vec0 = call <4 x i16> asm "; def $0", "=v"()944 %vec1 = call <4 x i16> asm "; def $0", "=v"()945 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>946 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>947 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 0>948 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 8949 ret void950}951 952define void @v_shuffle_v4i16_v3i16__5_5_5_1(ptr addrspace(1) inreg %ptr) {953; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_1:954; GFX900: ; %bb.0:955; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)956; GFX900-NEXT: ;;#ASMSTART957; GFX900-NEXT: ; def v[0:1]958; GFX900-NEXT: ;;#ASMEND959; GFX900-NEXT: ;;#ASMSTART960; GFX900-NEXT: ; def v[1:2]961; GFX900-NEXT: ;;#ASMEND962; GFX900-NEXT: s_mov_b32 s4, 0xffff963; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v0964; GFX900-NEXT: s_mov_b32 s4, 0x5040100965; GFX900-NEXT: v_mov_b32_e32 v3, 0966; GFX900-NEXT: v_perm_b32 v0, v2, v2, s4967; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]968; GFX900-NEXT: s_waitcnt vmcnt(0)969; GFX900-NEXT: s_setpc_b64 s[30:31]970;971; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_1:972; GFX90A: ; %bb.0:973; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)974; GFX90A-NEXT: ;;#ASMSTART975; GFX90A-NEXT: ; def v[0:1]976; GFX90A-NEXT: ;;#ASMEND977; GFX90A-NEXT: s_mov_b32 s4, 0xffff978; GFX90A-NEXT: ;;#ASMSTART979; GFX90A-NEXT: ; def v[2:3]980; GFX90A-NEXT: ;;#ASMEND981; GFX90A-NEXT: v_bfi_b32 v1, s4, v3, v0982; GFX90A-NEXT: s_mov_b32 s4, 0x5040100983; GFX90A-NEXT: v_mov_b32_e32 v4, 0984; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4985; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]986; GFX90A-NEXT: s_waitcnt vmcnt(0)987; GFX90A-NEXT: s_setpc_b64 s[30:31]988;989; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_1:990; GFX942: ; %bb.0:991; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)992; GFX942-NEXT: ;;#ASMSTART993; GFX942-NEXT: ; def v[0:1]994; GFX942-NEXT: ;;#ASMEND995; GFX942-NEXT: s_mov_b32 s2, 0xffff996; GFX942-NEXT: ;;#ASMSTART997; GFX942-NEXT: ; def v[2:3]998; GFX942-NEXT: ;;#ASMEND999; GFX942-NEXT: v_mov_b32_e32 v4, 01000; GFX942-NEXT: v_bfi_b32 v1, s2, v3, v01001; GFX942-NEXT: s_mov_b32 s2, 0x50401001002; GFX942-NEXT: v_perm_b32 v0, v3, v3, s21003; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1004; GFX942-NEXT: s_waitcnt vmcnt(0)1005; GFX942-NEXT: s_setpc_b64 s[30:31]1006 %vec0 = call <4 x i16> asm "; def $0", "=v"()1007 %vec1 = call <4 x i16> asm "; def $0", "=v"()1008 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1009 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1010 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 1>1011 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81012 ret void1013}1014 1015define void @v_shuffle_v4i16_v3i16__5_5_5_2(ptr addrspace(1) inreg %ptr) {1016; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_2:1017; GFX900: ; %bb.0:1018; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX900-NEXT: ;;#ASMSTART1020; GFX900-NEXT: ; def v[0:1]1021; GFX900-NEXT: ;;#ASMEND1022; GFX900-NEXT: s_mov_b32 s4, 0x50401001023; GFX900-NEXT: v_mov_b32_e32 v4, 01024; GFX900-NEXT: ;;#ASMSTART1025; GFX900-NEXT: ; def v[2:3]1026; GFX900-NEXT: ;;#ASMEND1027; GFX900-NEXT: v_perm_b32 v1, v1, v3, s41028; GFX900-NEXT: v_perm_b32 v0, v3, v3, s41029; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1030; GFX900-NEXT: s_waitcnt vmcnt(0)1031; GFX900-NEXT: s_setpc_b64 s[30:31]1032;1033; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_2:1034; GFX90A: ; %bb.0:1035; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1036; GFX90A-NEXT: ;;#ASMSTART1037; GFX90A-NEXT: ; def v[0:1]1038; GFX90A-NEXT: ;;#ASMEND1039; GFX90A-NEXT: s_mov_b32 s4, 0x50401001040; GFX90A-NEXT: v_mov_b32_e32 v4, 01041; GFX90A-NEXT: ;;#ASMSTART1042; GFX90A-NEXT: ; def v[2:3]1043; GFX90A-NEXT: ;;#ASMEND1044; GFX90A-NEXT: v_perm_b32 v1, v1, v3, s41045; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s41046; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1047; GFX90A-NEXT: s_waitcnt vmcnt(0)1048; GFX90A-NEXT: s_setpc_b64 s[30:31]1049;1050; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_2:1051; GFX942: ; %bb.0:1052; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1053; GFX942-NEXT: ;;#ASMSTART1054; GFX942-NEXT: ; def v[0:1]1055; GFX942-NEXT: ;;#ASMEND1056; GFX942-NEXT: s_mov_b32 s2, 0x50401001057; GFX942-NEXT: v_mov_b32_e32 v4, 01058; GFX942-NEXT: ;;#ASMSTART1059; GFX942-NEXT: ; def v[2:3]1060; GFX942-NEXT: ;;#ASMEND1061; GFX942-NEXT: s_nop 01062; GFX942-NEXT: v_perm_b32 v1, v1, v3, s21063; GFX942-NEXT: v_perm_b32 v0, v3, v3, s21064; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1065; GFX942-NEXT: s_waitcnt vmcnt(0)1066; GFX942-NEXT: s_setpc_b64 s[30:31]1067 %vec0 = call <4 x i16> asm "; def $0", "=v"()1068 %vec1 = call <4 x i16> asm "; def $0", "=v"()1069 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1070 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1071 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 2>1072 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81073 ret void1074}1075 1076define void @v_shuffle_v4i16_v3i16__5_5_5_3(ptr addrspace(1) inreg %ptr) {1077; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_3:1078; GFX900: ; %bb.0:1079; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1080; GFX900-NEXT: ;;#ASMSTART1081; GFX900-NEXT: ; def v[0:1]1082; GFX900-NEXT: ;;#ASMEND1083; GFX900-NEXT: s_mov_b32 s4, 0x50401001084; GFX900-NEXT: v_mov_b32_e32 v3, 01085; GFX900-NEXT: v_perm_b32 v2, v0, v1, s41086; GFX900-NEXT: v_perm_b32 v1, v1, v1, s41087; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1088; GFX900-NEXT: s_waitcnt vmcnt(0)1089; GFX900-NEXT: s_setpc_b64 s[30:31]1090;1091; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_3:1092; GFX90A: ; %bb.0:1093; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1094; GFX90A-NEXT: s_mov_b32 s4, 0x50401001095; GFX90A-NEXT: v_mov_b32_e32 v4, 01096; GFX90A-NEXT: ;;#ASMSTART1097; GFX90A-NEXT: ; def v[0:1]1098; GFX90A-NEXT: ;;#ASMEND1099; GFX90A-NEXT: v_perm_b32 v3, v0, v1, s41100; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s41101; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1102; GFX90A-NEXT: s_waitcnt vmcnt(0)1103; GFX90A-NEXT: s_setpc_b64 s[30:31]1104;1105; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_3:1106; GFX942: ; %bb.0:1107; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1108; GFX942-NEXT: s_mov_b32 s2, 0x50401001109; GFX942-NEXT: v_mov_b32_e32 v4, 01110; GFX942-NEXT: ;;#ASMSTART1111; GFX942-NEXT: ; def v[0:1]1112; GFX942-NEXT: ;;#ASMEND1113; GFX942-NEXT: s_nop 01114; GFX942-NEXT: v_perm_b32 v3, v0, v1, s21115; GFX942-NEXT: v_perm_b32 v2, v1, v1, s21116; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1117; GFX942-NEXT: s_waitcnt vmcnt(0)1118; GFX942-NEXT: s_setpc_b64 s[30:31]1119 %vec0 = call <4 x i16> asm "; def $0", "=v"()1120 %vec1 = call <4 x i16> asm "; def $0", "=v"()1121 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1122 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1123 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 3>1124 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81125 ret void1126}1127 1128define void @v_shuffle_v4i16_v3i16__5_5_5_4(ptr addrspace(1) inreg %ptr) {1129; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_4:1130; GFX900: ; %bb.0:1131; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1132; GFX900-NEXT: s_mov_b32 s4, 0xffff1133; GFX900-NEXT: ;;#ASMSTART1134; GFX900-NEXT: ; def v[0:1]1135; GFX900-NEXT: ;;#ASMEND1136; GFX900-NEXT: v_bfi_b32 v2, s4, v1, v01137; GFX900-NEXT: s_mov_b32 s4, 0x50401001138; GFX900-NEXT: v_mov_b32_e32 v3, 01139; GFX900-NEXT: v_perm_b32 v1, v1, v1, s41140; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1141; GFX900-NEXT: s_waitcnt vmcnt(0)1142; GFX900-NEXT: s_setpc_b64 s[30:31]1143;1144; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_4:1145; GFX90A: ; %bb.0:1146; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1147; GFX90A-NEXT: s_mov_b32 s4, 0xffff1148; GFX90A-NEXT: ;;#ASMSTART1149; GFX90A-NEXT: ; def v[0:1]1150; GFX90A-NEXT: ;;#ASMEND1151; GFX90A-NEXT: v_bfi_b32 v3, s4, v1, v01152; GFX90A-NEXT: s_mov_b32 s4, 0x50401001153; GFX90A-NEXT: v_mov_b32_e32 v4, 01154; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s41155; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1156; GFX90A-NEXT: s_waitcnt vmcnt(0)1157; GFX90A-NEXT: s_setpc_b64 s[30:31]1158;1159; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_4:1160; GFX942: ; %bb.0:1161; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1162; GFX942-NEXT: s_mov_b32 s2, 0xffff1163; GFX942-NEXT: ;;#ASMSTART1164; GFX942-NEXT: ; def v[0:1]1165; GFX942-NEXT: ;;#ASMEND1166; GFX942-NEXT: v_mov_b32_e32 v4, 01167; GFX942-NEXT: v_bfi_b32 v3, s2, v1, v01168; GFX942-NEXT: s_mov_b32 s2, 0x50401001169; GFX942-NEXT: v_perm_b32 v2, v1, v1, s21170; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1171; GFX942-NEXT: s_waitcnt vmcnt(0)1172; GFX942-NEXT: s_setpc_b64 s[30:31]1173 %vec0 = call <4 x i16> asm "; def $0", "=v"()1174 %vec1 = call <4 x i16> asm "; def $0", "=v"()1175 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1176 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1177 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 4>1178 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81179 ret void1180}1181 1182define void @v_shuffle_v4i16_v3i16__5_5_5_5(ptr addrspace(1) inreg %ptr) {1183; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_5_5:1184; GFX900: ; %bb.0:1185; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1186; GFX900-NEXT: ;;#ASMSTART1187; GFX900-NEXT: ; def v[0:1]1188; GFX900-NEXT: ;;#ASMEND1189; GFX900-NEXT: s_mov_b32 s4, 0x50401001190; GFX900-NEXT: v_perm_b32 v0, v1, v1, s41191; GFX900-NEXT: v_mov_b32_e32 v2, 01192; GFX900-NEXT: v_mov_b32_e32 v1, v01193; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1194; GFX900-NEXT: s_waitcnt vmcnt(0)1195; GFX900-NEXT: s_setpc_b64 s[30:31]1196;1197; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_5_5:1198; GFX90A: ; %bb.0:1199; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1200; GFX90A-NEXT: ;;#ASMSTART1201; GFX90A-NEXT: ; def v[0:1]1202; GFX90A-NEXT: ;;#ASMEND1203; GFX90A-NEXT: s_mov_b32 s4, 0x50401001204; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s41205; GFX90A-NEXT: v_mov_b32_e32 v2, 01206; GFX90A-NEXT: v_mov_b32_e32 v1, v01207; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1208; GFX90A-NEXT: s_waitcnt vmcnt(0)1209; GFX90A-NEXT: s_setpc_b64 s[30:31]1210;1211; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_5_5:1212; GFX942: ; %bb.0:1213; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1214; GFX942-NEXT: ;;#ASMSTART1215; GFX942-NEXT: ; def v[0:1]1216; GFX942-NEXT: ;;#ASMEND1217; GFX942-NEXT: s_mov_b32 s2, 0x50401001218; GFX942-NEXT: v_perm_b32 v0, v1, v1, s21219; GFX942-NEXT: v_mov_b32_e32 v2, 01220; GFX942-NEXT: v_mov_b32_e32 v1, v01221; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1222; GFX942-NEXT: s_waitcnt vmcnt(0)1223; GFX942-NEXT: s_setpc_b64 s[30:31]1224 %vec0 = call <4 x i16> asm "; def $0", "=v"()1225 %vec1 = call <4 x i16> asm "; def $0", "=v"()1226 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1227 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1228 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 5>1229 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81230 ret void1231}1232 1233define void @v_shuffle_v4i16_v3i16__u_0_0_0(ptr addrspace(1) inreg %ptr) {1234; GFX900-LABEL: v_shuffle_v4i16_v3i16__u_0_0_0:1235; GFX900: ; %bb.0:1236; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1237; GFX900-NEXT: ;;#ASMSTART1238; GFX900-NEXT: ; def v[0:1]1239; GFX900-NEXT: ;;#ASMEND1240; GFX900-NEXT: s_mov_b32 s4, 0x50401001241; GFX900-NEXT: v_mov_b32_e32 v2, 01242; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41243; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v01244; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1245; GFX900-NEXT: s_waitcnt vmcnt(0)1246; GFX900-NEXT: s_setpc_b64 s[30:31]1247;1248; GFX90A-LABEL: v_shuffle_v4i16_v3i16__u_0_0_0:1249; GFX90A: ; %bb.0:1250; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1251; GFX90A-NEXT: ;;#ASMSTART1252; GFX90A-NEXT: ; def v[0:1]1253; GFX90A-NEXT: ;;#ASMEND1254; GFX90A-NEXT: s_mov_b32 s4, 0x50401001255; GFX90A-NEXT: v_mov_b32_e32 v2, 01256; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41257; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v01258; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1259; GFX90A-NEXT: s_waitcnt vmcnt(0)1260; GFX90A-NEXT: s_setpc_b64 s[30:31]1261;1262; GFX942-LABEL: v_shuffle_v4i16_v3i16__u_0_0_0:1263; GFX942: ; %bb.0:1264; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1265; GFX942-NEXT: ;;#ASMSTART1266; GFX942-NEXT: ; def v[0:1]1267; GFX942-NEXT: ;;#ASMEND1268; GFX942-NEXT: s_mov_b32 s2, 0x50401001269; GFX942-NEXT: v_mov_b32_e32 v2, 01270; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21271; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v01272; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1273; GFX942-NEXT: s_waitcnt vmcnt(0)1274; GFX942-NEXT: s_setpc_b64 s[30:31]1275 %vec0 = call <4 x i16> asm "; def $0", "=v"()1276 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1277 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>1278 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81279 ret void1280}1281 1282define void @v_shuffle_v4i16_v3i16__0_0_0_0(ptr addrspace(1) inreg %ptr) {1283; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_0_0_0:1284; GFX900: ; %bb.0:1285; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1286; GFX900-NEXT: ;;#ASMSTART1287; GFX900-NEXT: ; def v[0:1]1288; GFX900-NEXT: ;;#ASMEND1289; GFX900-NEXT: s_mov_b32 s4, 0x50401001290; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41291; GFX900-NEXT: v_mov_b32_e32 v2, 01292; GFX900-NEXT: v_mov_b32_e32 v1, v01293; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1294; GFX900-NEXT: s_waitcnt vmcnt(0)1295; GFX900-NEXT: s_setpc_b64 s[30:31]1296;1297; GFX90A-LABEL: v_shuffle_v4i16_v3i16__0_0_0_0:1298; GFX90A: ; %bb.0:1299; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1300; GFX90A-NEXT: ;;#ASMSTART1301; GFX90A-NEXT: ; def v[0:1]1302; GFX90A-NEXT: ;;#ASMEND1303; GFX90A-NEXT: s_mov_b32 s4, 0x50401001304; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41305; GFX90A-NEXT: v_mov_b32_e32 v2, 01306; GFX90A-NEXT: v_mov_b32_e32 v1, v01307; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1308; GFX90A-NEXT: s_waitcnt vmcnt(0)1309; GFX90A-NEXT: s_setpc_b64 s[30:31]1310;1311; GFX942-LABEL: v_shuffle_v4i16_v3i16__0_0_0_0:1312; GFX942: ; %bb.0:1313; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1314; GFX942-NEXT: ;;#ASMSTART1315; GFX942-NEXT: ; def v[0:1]1316; GFX942-NEXT: ;;#ASMEND1317; GFX942-NEXT: s_mov_b32 s2, 0x50401001318; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21319; GFX942-NEXT: v_mov_b32_e32 v2, 01320; GFX942-NEXT: v_mov_b32_e32 v1, v01321; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1322; GFX942-NEXT: s_waitcnt vmcnt(0)1323; GFX942-NEXT: s_setpc_b64 s[30:31]1324 %vec0 = call <4 x i16> asm "; def $0", "=v"()1325 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1326 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> zeroinitializer1327 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81328 ret void1329}1330 1331define void @v_shuffle_v4i16_v3i16__1_0_0_0(ptr addrspace(1) inreg %ptr) {1332; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_0_0_0:1333; GFX900: ; %bb.0:1334; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1335; GFX900-NEXT: ;;#ASMSTART1336; GFX900-NEXT: ; def v[0:1]1337; GFX900-NEXT: ;;#ASMEND1338; GFX900-NEXT: s_mov_b32 s4, 0x50401001339; GFX900-NEXT: v_mov_b32_e32 v2, 01340; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41341; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 161342; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1343; GFX900-NEXT: s_waitcnt vmcnt(0)1344; GFX900-NEXT: s_setpc_b64 s[30:31]1345;1346; GFX90A-LABEL: v_shuffle_v4i16_v3i16__1_0_0_0:1347; GFX90A: ; %bb.0:1348; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1349; GFX90A-NEXT: ;;#ASMSTART1350; GFX90A-NEXT: ; def v[0:1]1351; GFX90A-NEXT: ;;#ASMEND1352; GFX90A-NEXT: s_mov_b32 s4, 0x50401001353; GFX90A-NEXT: v_mov_b32_e32 v2, 01354; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41355; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 161356; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1357; GFX90A-NEXT: s_waitcnt vmcnt(0)1358; GFX90A-NEXT: s_setpc_b64 s[30:31]1359;1360; GFX942-LABEL: v_shuffle_v4i16_v3i16__1_0_0_0:1361; GFX942: ; %bb.0:1362; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1363; GFX942-NEXT: ;;#ASMSTART1364; GFX942-NEXT: ; def v[0:1]1365; GFX942-NEXT: ;;#ASMEND1366; GFX942-NEXT: s_mov_b32 s2, 0x50401001367; GFX942-NEXT: v_mov_b32_e32 v2, 01368; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21369; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 161370; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1371; GFX942-NEXT: s_waitcnt vmcnt(0)1372; GFX942-NEXT: s_setpc_b64 s[30:31]1373 %vec0 = 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 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>1376 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81377 ret void1378}1379 1380define void @v_shuffle_v4i16_v3i16__2_0_0_0(ptr addrspace(1) inreg %ptr) {1381; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_0_0_0:1382; GFX900: ; %bb.0:1383; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1384; GFX900-NEXT: ;;#ASMSTART1385; GFX900-NEXT: ; def v[0:1]1386; GFX900-NEXT: ;;#ASMEND1387; GFX900-NEXT: s_mov_b32 s4, 0x50401001388; GFX900-NEXT: v_mov_b32_e32 v3, 01389; GFX900-NEXT: v_perm_b32 v1, v0, v1, s41390; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41391; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1392; GFX900-NEXT: s_waitcnt vmcnt(0)1393; GFX900-NEXT: s_setpc_b64 s[30:31]1394;1395; GFX90A-LABEL: v_shuffle_v4i16_v3i16__2_0_0_0:1396; GFX90A: ; %bb.0:1397; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1398; GFX90A-NEXT: s_mov_b32 s4, 0x50401001399; GFX90A-NEXT: v_mov_b32_e32 v4, 01400; GFX90A-NEXT: ;;#ASMSTART1401; GFX90A-NEXT: ; def v[0:1]1402; GFX90A-NEXT: ;;#ASMEND1403; GFX90A-NEXT: v_perm_b32 v2, v0, v1, s41404; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s41405; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1406; GFX90A-NEXT: s_waitcnt vmcnt(0)1407; GFX90A-NEXT: s_setpc_b64 s[30:31]1408;1409; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_0_0_0:1410; GFX942: ; %bb.0:1411; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1412; GFX942-NEXT: s_mov_b32 s2, 0x50401001413; GFX942-NEXT: v_mov_b32_e32 v4, 01414; GFX942-NEXT: ;;#ASMSTART1415; GFX942-NEXT: ; def v[0:1]1416; GFX942-NEXT: ;;#ASMEND1417; GFX942-NEXT: s_nop 01418; GFX942-NEXT: v_perm_b32 v2, v0, v1, s21419; GFX942-NEXT: v_perm_b32 v3, v0, v0, s21420; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1421; GFX942-NEXT: s_waitcnt vmcnt(0)1422; GFX942-NEXT: s_setpc_b64 s[30:31]1423 %vec0 = call <4 x i16> asm "; def $0", "=v"()1424 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1425 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>1426 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81427 ret void1428}1429 1430define void @v_shuffle_v4i16_v3i16__3_0_0_0(ptr addrspace(1) inreg %ptr) {1431; GFX900-LABEL: v_shuffle_v4i16_v3i16__3_0_0_0:1432; GFX900: ; %bb.0:1433; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1434; GFX900-NEXT: ;;#ASMSTART1435; GFX900-NEXT: ; def v[0:1]1436; GFX900-NEXT: ;;#ASMEND1437; GFX900-NEXT: s_mov_b32 s4, 0x50401001438; GFX900-NEXT: v_mov_b32_e32 v2, 01439; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41440; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v01441; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1442; GFX900-NEXT: s_waitcnt vmcnt(0)1443; GFX900-NEXT: s_setpc_b64 s[30:31]1444;1445; GFX90A-LABEL: v_shuffle_v4i16_v3i16__3_0_0_0:1446; GFX90A: ; %bb.0:1447; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1448; GFX90A-NEXT: ;;#ASMSTART1449; GFX90A-NEXT: ; def v[0:1]1450; GFX90A-NEXT: ;;#ASMEND1451; GFX90A-NEXT: s_mov_b32 s4, 0x50401001452; GFX90A-NEXT: v_mov_b32_e32 v2, 01453; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41454; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v01455; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1456; GFX90A-NEXT: s_waitcnt vmcnt(0)1457; GFX90A-NEXT: s_setpc_b64 s[30:31]1458;1459; GFX942-LABEL: v_shuffle_v4i16_v3i16__3_0_0_0:1460; GFX942: ; %bb.0:1461; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1462; GFX942-NEXT: ;;#ASMSTART1463; GFX942-NEXT: ; def v[0:1]1464; GFX942-NEXT: ;;#ASMEND1465; GFX942-NEXT: s_mov_b32 s2, 0x50401001466; GFX942-NEXT: v_mov_b32_e32 v2, 01467; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21468; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v01469; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1470; GFX942-NEXT: s_waitcnt vmcnt(0)1471; GFX942-NEXT: s_setpc_b64 s[30:31]1472 %vec0 = call <4 x i16> asm "; def $0", "=v"()1473 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1474 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>1475 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81476 ret void1477}1478 1479define void @v_shuffle_v4i16_v3i16__4_0_0_0(ptr addrspace(1) inreg %ptr) {1480; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_0_0_0:1481; GFX900: ; %bb.0:1482; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1483; GFX900-NEXT: ;;#ASMSTART1484; GFX900-NEXT: ; def v[0:1]1485; GFX900-NEXT: ;;#ASMEND1486; GFX900-NEXT: ;;#ASMSTART1487; GFX900-NEXT: ; def v[1:2]1488; GFX900-NEXT: ;;#ASMEND1489; GFX900-NEXT: s_mov_b32 s4, 0x50401001490; GFX900-NEXT: v_mov_b32_e32 v3, 01491; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41492; GFX900-NEXT: v_alignbit_b32 v1, v0, v1, 161493; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1494; GFX900-NEXT: s_waitcnt vmcnt(0)1495; GFX900-NEXT: s_setpc_b64 s[30:31]1496;1497; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_0_0_0:1498; GFX90A: ; %bb.0:1499; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1500; GFX90A-NEXT: ;;#ASMSTART1501; GFX90A-NEXT: ; def v[0:1]1502; GFX90A-NEXT: ;;#ASMEND1503; GFX90A-NEXT: s_mov_b32 s4, 0x50401001504; GFX90A-NEXT: v_mov_b32_e32 v4, 01505; GFX90A-NEXT: ;;#ASMSTART1506; GFX90A-NEXT: ; def v[2:3]1507; GFX90A-NEXT: ;;#ASMEND1508; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41509; GFX90A-NEXT: v_alignbit_b32 v0, v0, v2, 161510; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1511; GFX90A-NEXT: s_waitcnt vmcnt(0)1512; GFX90A-NEXT: s_setpc_b64 s[30:31]1513;1514; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_0_0_0:1515; GFX942: ; %bb.0:1516; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1517; GFX942-NEXT: ;;#ASMSTART1518; GFX942-NEXT: ; def v[0:1]1519; GFX942-NEXT: ;;#ASMEND1520; GFX942-NEXT: s_mov_b32 s2, 0x50401001521; GFX942-NEXT: v_mov_b32_e32 v4, 01522; GFX942-NEXT: ;;#ASMSTART1523; GFX942-NEXT: ; def v[2:3]1524; GFX942-NEXT: ;;#ASMEND1525; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21526; GFX942-NEXT: v_alignbit_b32 v0, v0, v2, 161527; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1528; GFX942-NEXT: s_waitcnt vmcnt(0)1529; GFX942-NEXT: s_setpc_b64 s[30:31]1530 %vec0 = call <4 x i16> asm "; def $0", "=v"()1531 %vec1 = call <4 x i16> asm "; def $0", "=v"()1532 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1533 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1534 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 0, i32 0, i32 0>1535 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81536 ret void1537}1538 1539define void @v_shuffle_v4i16_v3i16__5_0_0_0(ptr addrspace(1) inreg %ptr) {1540; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_0_0:1541; GFX900: ; %bb.0:1542; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1543; GFX900-NEXT: ;;#ASMSTART1544; GFX900-NEXT: ; def v[0:1]1545; GFX900-NEXT: ;;#ASMEND1546; GFX900-NEXT: ;;#ASMSTART1547; GFX900-NEXT: ; def v[1:2]1548; GFX900-NEXT: ;;#ASMEND1549; GFX900-NEXT: s_mov_b32 s4, 0x50401001550; GFX900-NEXT: v_mov_b32_e32 v3, 01551; GFX900-NEXT: v_perm_b32 v1, v0, v2, s41552; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41553; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1554; GFX900-NEXT: s_waitcnt vmcnt(0)1555; GFX900-NEXT: s_setpc_b64 s[30:31]1556;1557; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_0_0:1558; GFX90A: ; %bb.0:1559; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1560; GFX90A-NEXT: ;;#ASMSTART1561; GFX90A-NEXT: ; def v[2:3]1562; GFX90A-NEXT: ;;#ASMEND1563; GFX90A-NEXT: s_mov_b32 s4, 0x50401001564; GFX90A-NEXT: v_mov_b32_e32 v4, 01565; GFX90A-NEXT: ;;#ASMSTART1566; GFX90A-NEXT: ; def v[0:1]1567; GFX90A-NEXT: ;;#ASMEND1568; GFX90A-NEXT: v_perm_b32 v2, v0, v3, s41569; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s41570; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1571; GFX90A-NEXT: s_waitcnt vmcnt(0)1572; GFX90A-NEXT: s_setpc_b64 s[30:31]1573;1574; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_0_0:1575; GFX942: ; %bb.0:1576; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX942-NEXT: ;;#ASMSTART1578; GFX942-NEXT: ; def v[2:3]1579; GFX942-NEXT: ;;#ASMEND1580; GFX942-NEXT: s_mov_b32 s2, 0x50401001581; GFX942-NEXT: v_mov_b32_e32 v4, 01582; GFX942-NEXT: ;;#ASMSTART1583; GFX942-NEXT: ; def v[0:1]1584; GFX942-NEXT: ;;#ASMEND1585; GFX942-NEXT: s_nop 01586; GFX942-NEXT: v_perm_b32 v2, v0, v3, s21587; GFX942-NEXT: v_perm_b32 v3, v0, v0, s21588; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1589; GFX942-NEXT: s_waitcnt vmcnt(0)1590; GFX942-NEXT: s_setpc_b64 s[30:31]1591 %vec0 = call <4 x i16> asm "; def $0", "=v"()1592 %vec1 = call <4 x i16> asm "; def $0", "=v"()1593 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1594 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1595 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 0, i32 0>1596 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81597 ret void1598}1599 1600define void @v_shuffle_v4i16_v3i16__5_u_0_0(ptr addrspace(1) inreg %ptr) {1601; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_0_0:1602; GFX900: ; %bb.0:1603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1604; GFX900-NEXT: ;;#ASMSTART1605; GFX900-NEXT: ; def v[2:3]1606; GFX900-NEXT: ;;#ASMEND1607; GFX900-NEXT: s_mov_b32 s4, 0x50401001608; GFX900-NEXT: v_mov_b32_e32 v4, 01609; GFX900-NEXT: v_perm_b32 v2, v2, v2, s41610; GFX900-NEXT: ;;#ASMSTART1611; GFX900-NEXT: ; def v[0:1]1612; GFX900-NEXT: ;;#ASMEND1613; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1614; GFX900-NEXT: s_waitcnt vmcnt(0)1615; GFX900-NEXT: s_setpc_b64 s[30:31]1616;1617; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_0_0:1618; GFX90A: ; %bb.0:1619; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1620; GFX90A-NEXT: ;;#ASMSTART1621; GFX90A-NEXT: ; def v[0:1]1622; GFX90A-NEXT: ;;#ASMEND1623; GFX90A-NEXT: s_mov_b32 s4, 0x50401001624; GFX90A-NEXT: v_mov_b32_e32 v4, 01625; GFX90A-NEXT: ;;#ASMSTART1626; GFX90A-NEXT: ; def v[2:3]1627; GFX90A-NEXT: ;;#ASMEND1628; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41629; GFX90A-NEXT: v_mov_b32_e32 v0, v31630; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1631; GFX90A-NEXT: s_waitcnt vmcnt(0)1632; GFX90A-NEXT: s_setpc_b64 s[30:31]1633;1634; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_0_0:1635; GFX942: ; %bb.0:1636; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1637; GFX942-NEXT: ;;#ASMSTART1638; GFX942-NEXT: ; def v[0:1]1639; GFX942-NEXT: ;;#ASMEND1640; GFX942-NEXT: s_mov_b32 s2, 0x50401001641; GFX942-NEXT: v_mov_b32_e32 v4, 01642; GFX942-NEXT: ;;#ASMSTART1643; GFX942-NEXT: ; def v[2:3]1644; GFX942-NEXT: ;;#ASMEND1645; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21646; GFX942-NEXT: v_mov_b32_e32 v0, v31647; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1648; GFX942-NEXT: s_waitcnt vmcnt(0)1649; GFX942-NEXT: s_setpc_b64 s[30:31]1650 %vec0 = call <4 x i16> asm "; def $0", "=v"()1651 %vec1 = call <4 x i16> asm "; def $0", "=v"()1652 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1653 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1654 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>1655 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81656 ret void1657}1658 1659define void @v_shuffle_v4i16_v3i16__5_1_0_0(ptr addrspace(1) inreg %ptr) {1660; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_0_0:1661; GFX900: ; %bb.0:1662; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1663; GFX900-NEXT: ;;#ASMSTART1664; GFX900-NEXT: ; def v[0:1]1665; GFX900-NEXT: ;;#ASMEND1666; GFX900-NEXT: ;;#ASMSTART1667; GFX900-NEXT: ; def v[1:2]1668; GFX900-NEXT: ;;#ASMEND1669; GFX900-NEXT: s_mov_b32 s4, 0xffff1670; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v01671; GFX900-NEXT: s_mov_b32 s4, 0x50401001672; GFX900-NEXT: v_mov_b32_e32 v3, 01673; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41674; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1675; GFX900-NEXT: s_waitcnt vmcnt(0)1676; GFX900-NEXT: s_setpc_b64 s[30:31]1677;1678; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_0_0:1679; GFX90A: ; %bb.0:1680; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1681; GFX90A-NEXT: ;;#ASMSTART1682; GFX90A-NEXT: ; def v[2:3]1683; GFX90A-NEXT: ;;#ASMEND1684; GFX90A-NEXT: s_mov_b32 s4, 0xffff1685; GFX90A-NEXT: ;;#ASMSTART1686; GFX90A-NEXT: ; def v[0:1]1687; GFX90A-NEXT: ;;#ASMEND1688; GFX90A-NEXT: v_bfi_b32 v2, s4, v3, v01689; GFX90A-NEXT: s_mov_b32 s4, 0x50401001690; GFX90A-NEXT: v_mov_b32_e32 v4, 01691; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s41692; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1693; GFX90A-NEXT: s_waitcnt vmcnt(0)1694; GFX90A-NEXT: s_setpc_b64 s[30:31]1695;1696; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_0_0:1697; GFX942: ; %bb.0:1698; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1699; GFX942-NEXT: ;;#ASMSTART1700; GFX942-NEXT: ; def v[2:3]1701; GFX942-NEXT: ;;#ASMEND1702; GFX942-NEXT: s_mov_b32 s2, 0xffff1703; GFX942-NEXT: ;;#ASMSTART1704; GFX942-NEXT: ; def v[0:1]1705; GFX942-NEXT: ;;#ASMEND1706; GFX942-NEXT: v_mov_b32_e32 v4, 01707; GFX942-NEXT: v_bfi_b32 v2, s2, v3, v01708; GFX942-NEXT: s_mov_b32 s2, 0x50401001709; GFX942-NEXT: v_perm_b32 v3, v0, v0, s21710; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1711; GFX942-NEXT: s_waitcnt vmcnt(0)1712; GFX942-NEXT: s_setpc_b64 s[30:31]1713 %vec0 = call <4 x i16> asm "; def $0", "=v"()1714 %vec1 = call <4 x i16> asm "; def $0", "=v"()1715 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1716 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1717 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 0, i32 0>1718 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81719 ret void1720}1721 1722define void @v_shuffle_v4i16_v3i16__5_2_0_0(ptr addrspace(1) inreg %ptr) {1723; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_0_0:1724; GFX900: ; %bb.0:1725; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1726; GFX900-NEXT: ;;#ASMSTART1727; GFX900-NEXT: ; def v[0:1]1728; GFX900-NEXT: ;;#ASMEND1729; GFX900-NEXT: ;;#ASMSTART1730; GFX900-NEXT: ; def v[2:3]1731; GFX900-NEXT: ;;#ASMEND1732; GFX900-NEXT: s_mov_b32 s4, 0x50401001733; GFX900-NEXT: v_mov_b32_e32 v4, 01734; GFX900-NEXT: v_perm_b32 v1, v1, v3, s41735; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41736; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]1737; GFX900-NEXT: s_waitcnt vmcnt(0)1738; GFX900-NEXT: s_setpc_b64 s[30:31]1739;1740; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_0_0:1741; GFX90A: ; %bb.0:1742; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1743; GFX90A-NEXT: ;;#ASMSTART1744; GFX90A-NEXT: ; def v[2:3]1745; GFX90A-NEXT: ;;#ASMEND1746; GFX90A-NEXT: s_mov_b32 s4, 0x50401001747; GFX90A-NEXT: v_mov_b32_e32 v4, 01748; GFX90A-NEXT: ;;#ASMSTART1749; GFX90A-NEXT: ; def v[0:1]1750; GFX90A-NEXT: ;;#ASMEND1751; GFX90A-NEXT: v_perm_b32 v2, v1, v3, s41752; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s41753; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1754; GFX90A-NEXT: s_waitcnt vmcnt(0)1755; GFX90A-NEXT: s_setpc_b64 s[30:31]1756;1757; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_0_0:1758; GFX942: ; %bb.0:1759; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1760; GFX942-NEXT: ;;#ASMSTART1761; GFX942-NEXT: ; def v[2:3]1762; GFX942-NEXT: ;;#ASMEND1763; GFX942-NEXT: s_mov_b32 s2, 0x50401001764; GFX942-NEXT: v_mov_b32_e32 v4, 01765; GFX942-NEXT: ;;#ASMSTART1766; GFX942-NEXT: ; def v[0:1]1767; GFX942-NEXT: ;;#ASMEND1768; GFX942-NEXT: s_nop 01769; GFX942-NEXT: v_perm_b32 v2, v1, v3, s21770; GFX942-NEXT: v_perm_b32 v3, v0, v0, s21771; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1772; GFX942-NEXT: s_waitcnt vmcnt(0)1773; GFX942-NEXT: s_setpc_b64 s[30:31]1774 %vec0 = call <4 x i16> asm "; def $0", "=v"()1775 %vec1 = call <4 x i16> asm "; def $0", "=v"()1776 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1777 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1778 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 0, i32 0>1779 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81780 ret void1781}1782 1783define void @v_shuffle_v4i16_v3i16__5_3_0_0(ptr addrspace(1) inreg %ptr) {1784; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_0_0:1785; GFX900: ; %bb.0:1786; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1787; GFX900-NEXT: ;;#ASMSTART1788; GFX900-NEXT: ; def v[0:1]1789; GFX900-NEXT: ;;#ASMEND1790; GFX900-NEXT: ;;#ASMSTART1791; GFX900-NEXT: ; def v[1:2]1792; GFX900-NEXT: ;;#ASMEND1793; GFX900-NEXT: s_mov_b32 s4, 0x50401001794; GFX900-NEXT: v_mov_b32_e32 v3, 01795; GFX900-NEXT: v_perm_b32 v1, v1, v2, s41796; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41797; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], 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_v4i16_v3i16__5_3_0_0:1802; GFX90A: ; %bb.0:1803; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1804; GFX90A-NEXT: ;;#ASMSTART1805; GFX90A-NEXT: ; def v[2:3]1806; GFX90A-NEXT: ;;#ASMEND1807; GFX90A-NEXT: s_mov_b32 s4, 0x50401001808; GFX90A-NEXT: v_mov_b32_e32 v4, 01809; GFX90A-NEXT: ;;#ASMSTART1810; GFX90A-NEXT: ; def v[0:1]1811; GFX90A-NEXT: ;;#ASMEND1812; GFX90A-NEXT: v_perm_b32 v2, v2, v3, s41813; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s41814; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1815; GFX90A-NEXT: s_waitcnt vmcnt(0)1816; GFX90A-NEXT: s_setpc_b64 s[30:31]1817;1818; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_0_0:1819; GFX942: ; %bb.0:1820; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1821; GFX942-NEXT: ;;#ASMSTART1822; GFX942-NEXT: ; def v[2:3]1823; GFX942-NEXT: ;;#ASMEND1824; GFX942-NEXT: s_mov_b32 s2, 0x50401001825; GFX942-NEXT: v_mov_b32_e32 v4, 01826; GFX942-NEXT: ;;#ASMSTART1827; GFX942-NEXT: ; def v[0:1]1828; GFX942-NEXT: ;;#ASMEND1829; GFX942-NEXT: v_perm_b32 v2, v2, v3, s21830; GFX942-NEXT: v_perm_b32 v3, v0, v0, s21831; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1832; GFX942-NEXT: s_waitcnt vmcnt(0)1833; GFX942-NEXT: s_setpc_b64 s[30:31]1834 %vec0 = call <4 x i16> asm "; def $0", "=v"()1835 %vec1 = call <4 x i16> asm "; def $0", "=v"()1836 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1837 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1838 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 0, i32 0>1839 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81840 ret void1841}1842 1843define void @v_shuffle_v4i16_v3i16__5_4_0_0(ptr addrspace(1) inreg %ptr) {1844; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_0_0:1845; GFX900: ; %bb.0:1846; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1847; GFX900-NEXT: ;;#ASMSTART1848; GFX900-NEXT: ; def v[0:1]1849; GFX900-NEXT: ;;#ASMEND1850; GFX900-NEXT: ;;#ASMSTART1851; GFX900-NEXT: ; def v[1:2]1852; GFX900-NEXT: ;;#ASMEND1853; GFX900-NEXT: s_mov_b32 s4, 0xffff1854; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v11855; GFX900-NEXT: s_mov_b32 s4, 0x50401001856; GFX900-NEXT: v_mov_b32_e32 v3, 01857; GFX900-NEXT: v_perm_b32 v2, v0, v0, s41858; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1859; GFX900-NEXT: s_waitcnt vmcnt(0)1860; GFX900-NEXT: s_setpc_b64 s[30:31]1861;1862; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_0_0:1863; GFX90A: ; %bb.0:1864; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1865; GFX90A-NEXT: ;;#ASMSTART1866; GFX90A-NEXT: ; def v[2:3]1867; GFX90A-NEXT: ;;#ASMEND1868; GFX90A-NEXT: s_mov_b32 s4, 0xffff1869; GFX90A-NEXT: v_bfi_b32 v2, s4, v3, v21870; GFX90A-NEXT: s_mov_b32 s4, 0x50401001871; GFX90A-NEXT: v_mov_b32_e32 v4, 01872; GFX90A-NEXT: ;;#ASMSTART1873; GFX90A-NEXT: ; def v[0:1]1874; GFX90A-NEXT: ;;#ASMEND1875; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s41876; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1877; GFX90A-NEXT: s_waitcnt vmcnt(0)1878; GFX90A-NEXT: s_setpc_b64 s[30:31]1879;1880; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_0_0:1881; GFX942: ; %bb.0:1882; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX942-NEXT: ;;#ASMSTART1884; GFX942-NEXT: ; def v[2:3]1885; GFX942-NEXT: ;;#ASMEND1886; GFX942-NEXT: s_mov_b32 s2, 0xffff1887; GFX942-NEXT: v_bfi_b32 v2, s2, v3, v21888; GFX942-NEXT: s_mov_b32 s2, 0x50401001889; GFX942-NEXT: v_mov_b32_e32 v4, 01890; GFX942-NEXT: ;;#ASMSTART1891; GFX942-NEXT: ; def v[0:1]1892; GFX942-NEXT: ;;#ASMEND1893; GFX942-NEXT: s_nop 01894; GFX942-NEXT: v_perm_b32 v3, v0, v0, s21895; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]1896; GFX942-NEXT: s_waitcnt vmcnt(0)1897; GFX942-NEXT: s_setpc_b64 s[30:31]1898 %vec0 = call <4 x i16> asm "; def $0", "=v"()1899 %vec1 = call <4 x i16> asm "; def $0", "=v"()1900 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1901 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1902 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 0, i32 0>1903 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81904 ret void1905}1906 1907define void @v_shuffle_v4i16_v3i16__5_5_0_0(ptr addrspace(1) inreg %ptr) {1908; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_0:1909; GFX900: ; %bb.0:1910; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1911; GFX900-NEXT: ;;#ASMSTART1912; GFX900-NEXT: ; def v[0:1]1913; GFX900-NEXT: ;;#ASMEND1914; GFX900-NEXT: ;;#ASMSTART1915; GFX900-NEXT: ; def v[1:2]1916; GFX900-NEXT: ;;#ASMEND1917; GFX900-NEXT: s_mov_b32 s4, 0x50401001918; GFX900-NEXT: v_mov_b32_e32 v3, 01919; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41920; GFX900-NEXT: v_perm_b32 v0, v2, v2, s41921; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]1922; GFX900-NEXT: s_waitcnt vmcnt(0)1923; GFX900-NEXT: s_setpc_b64 s[30:31]1924;1925; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_0:1926; GFX90A: ; %bb.0:1927; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1928; GFX90A-NEXT: ;;#ASMSTART1929; GFX90A-NEXT: ; def v[0:1]1930; GFX90A-NEXT: ;;#ASMEND1931; GFX90A-NEXT: s_mov_b32 s4, 0x50401001932; GFX90A-NEXT: v_mov_b32_e32 v4, 01933; GFX90A-NEXT: ;;#ASMSTART1934; GFX90A-NEXT: ; def v[2:3]1935; GFX90A-NEXT: ;;#ASMEND1936; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41937; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s41938; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]1939; GFX90A-NEXT: s_waitcnt vmcnt(0)1940; GFX90A-NEXT: s_setpc_b64 s[30:31]1941;1942; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_0:1943; GFX942: ; %bb.0:1944; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1945; GFX942-NEXT: ;;#ASMSTART1946; GFX942-NEXT: ; def v[0:1]1947; GFX942-NEXT: ;;#ASMEND1948; GFX942-NEXT: s_mov_b32 s2, 0x50401001949; GFX942-NEXT: v_mov_b32_e32 v4, 01950; GFX942-NEXT: ;;#ASMSTART1951; GFX942-NEXT: ; def v[2:3]1952; GFX942-NEXT: ;;#ASMEND1953; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21954; GFX942-NEXT: v_perm_b32 v0, v3, v3, s21955; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]1956; GFX942-NEXT: s_waitcnt vmcnt(0)1957; GFX942-NEXT: s_setpc_b64 s[30:31]1958 %vec0 = call <4 x i16> asm "; def $0", "=v"()1959 %vec1 = call <4 x i16> asm "; def $0", "=v"()1960 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1961 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>1962 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 0>1963 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 81964 ret void1965}1966 1967define void @v_shuffle_v4i16_v3i16__5_5_u_0(ptr addrspace(1) inreg %ptr) {1968; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_0:1969; GFX900: ; %bb.0:1970; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1971; GFX900-NEXT: ;;#ASMSTART1972; GFX900-NEXT: ; def v[0:1]1973; GFX900-NEXT: ;;#ASMEND1974; GFX900-NEXT: ;;#ASMSTART1975; GFX900-NEXT: ; def v[1:2]1976; GFX900-NEXT: ;;#ASMEND1977; GFX900-NEXT: s_mov_b32 s4, 0x50401001978; GFX900-NEXT: v_mov_b32_e32 v3, 01979; GFX900-NEXT: v_perm_b32 v1, v2, v2, s41980; GFX900-NEXT: v_lshlrev_b32_e32 v2, 16, v01981; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]1982; GFX900-NEXT: s_waitcnt vmcnt(0)1983; GFX900-NEXT: s_setpc_b64 s[30:31]1984;1985; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_0:1986; GFX90A: ; %bb.0:1987; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1988; GFX90A-NEXT: ;;#ASMSTART1989; GFX90A-NEXT: ; def v[2:3]1990; GFX90A-NEXT: ;;#ASMEND1991; GFX90A-NEXT: s_mov_b32 s4, 0x50401001992; GFX90A-NEXT: v_mov_b32_e32 v4, 01993; GFX90A-NEXT: ;;#ASMSTART1994; GFX90A-NEXT: ; def v[0:1]1995; GFX90A-NEXT: ;;#ASMEND1996; GFX90A-NEXT: v_perm_b32 v2, v3, v3, s41997; GFX90A-NEXT: v_lshlrev_b32_e32 v3, 16, v01998; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]1999; GFX90A-NEXT: s_waitcnt vmcnt(0)2000; GFX90A-NEXT: s_setpc_b64 s[30:31]2001;2002; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_0:2003; GFX942: ; %bb.0:2004; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2005; GFX942-NEXT: ;;#ASMSTART2006; GFX942-NEXT: ; def v[2:3]2007; GFX942-NEXT: ;;#ASMEND2008; GFX942-NEXT: s_mov_b32 s2, 0x50401002009; GFX942-NEXT: v_mov_b32_e32 v4, 02010; GFX942-NEXT: ;;#ASMSTART2011; GFX942-NEXT: ; def v[0:1]2012; GFX942-NEXT: ;;#ASMEND2013; GFX942-NEXT: v_perm_b32 v2, v3, v3, s22014; GFX942-NEXT: v_lshlrev_b32_e32 v3, 16, v02015; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2016; GFX942-NEXT: s_waitcnt vmcnt(0)2017; GFX942-NEXT: s_setpc_b64 s[30:31]2018 %vec0 = call <4 x i16> asm "; def $0", "=v"()2019 %vec1 = call <4 x i16> asm "; def $0", "=v"()2020 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2021 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2022 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>2023 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82024 ret void2025}2026 2027define void @v_shuffle_v4i16_v3i16__5_5_1_0(ptr addrspace(1) inreg %ptr) {2028; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_0:2029; GFX900: ; %bb.0:2030; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2031; GFX900-NEXT: ;;#ASMSTART2032; GFX900-NEXT: ; def v[0:1]2033; GFX900-NEXT: ;;#ASMEND2034; GFX900-NEXT: ;;#ASMSTART2035; GFX900-NEXT: ; def v[1:2]2036; GFX900-NEXT: ;;#ASMEND2037; GFX900-NEXT: s_mov_b32 s4, 0x50401002038; GFX900-NEXT: v_mov_b32_e32 v3, 02039; GFX900-NEXT: v_alignbit_b32 v1, v0, v0, 162040; GFX900-NEXT: v_perm_b32 v0, v2, v2, s42041; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]2042; GFX900-NEXT: s_waitcnt vmcnt(0)2043; GFX900-NEXT: s_setpc_b64 s[30:31]2044;2045; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_0:2046; GFX90A: ; %bb.0:2047; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2048; GFX90A-NEXT: ;;#ASMSTART2049; GFX90A-NEXT: ; def v[0:1]2050; GFX90A-NEXT: ;;#ASMEND2051; GFX90A-NEXT: s_mov_b32 s4, 0x50401002052; GFX90A-NEXT: v_mov_b32_e32 v4, 02053; GFX90A-NEXT: ;;#ASMSTART2054; GFX90A-NEXT: ; def v[2:3]2055; GFX90A-NEXT: ;;#ASMEND2056; GFX90A-NEXT: v_alignbit_b32 v1, v0, v0, 162057; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42058; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2059; GFX90A-NEXT: s_waitcnt vmcnt(0)2060; GFX90A-NEXT: s_setpc_b64 s[30:31]2061;2062; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_0:2063; GFX942: ; %bb.0:2064; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2065; GFX942-NEXT: ;;#ASMSTART2066; GFX942-NEXT: ; def v[0:1]2067; GFX942-NEXT: ;;#ASMEND2068; GFX942-NEXT: s_mov_b32 s2, 0x50401002069; GFX942-NEXT: v_mov_b32_e32 v4, 02070; GFX942-NEXT: ;;#ASMSTART2071; GFX942-NEXT: ; def v[2:3]2072; GFX942-NEXT: ;;#ASMEND2073; GFX942-NEXT: v_alignbit_b32 v1, v0, v0, 162074; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22075; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2076; GFX942-NEXT: s_waitcnt vmcnt(0)2077; GFX942-NEXT: s_setpc_b64 s[30:31]2078 %vec0 = call <4 x i16> asm "; def $0", "=v"()2079 %vec1 = call <4 x i16> asm "; def $0", "=v"()2080 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2081 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2082 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 0>2083 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82084 ret void2085}2086 2087define void @v_shuffle_v4i16_v3i16__5_5_2_0(ptr addrspace(1) inreg %ptr) {2088; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_0:2089; GFX900: ; %bb.0:2090; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2091; GFX900-NEXT: ;;#ASMSTART2092; GFX900-NEXT: ; def v[0:1]2093; GFX900-NEXT: ;;#ASMEND2094; GFX900-NEXT: s_mov_b32 s4, 0x50401002095; GFX900-NEXT: v_mov_b32_e32 v4, 02096; GFX900-NEXT: ;;#ASMSTART2097; GFX900-NEXT: ; def v[2:3]2098; GFX900-NEXT: ;;#ASMEND2099; GFX900-NEXT: v_perm_b32 v1, v0, v1, s42100; GFX900-NEXT: v_perm_b32 v0, v3, v3, s42101; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2102; GFX900-NEXT: s_waitcnt vmcnt(0)2103; GFX900-NEXT: s_setpc_b64 s[30:31]2104;2105; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_0:2106; GFX90A: ; %bb.0:2107; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2108; GFX90A-NEXT: ;;#ASMSTART2109; GFX90A-NEXT: ; def v[0:1]2110; GFX90A-NEXT: ;;#ASMEND2111; GFX90A-NEXT: s_mov_b32 s4, 0x50401002112; GFX90A-NEXT: v_mov_b32_e32 v4, 02113; GFX90A-NEXT: ;;#ASMSTART2114; GFX90A-NEXT: ; def v[2:3]2115; GFX90A-NEXT: ;;#ASMEND2116; GFX90A-NEXT: v_perm_b32 v1, v0, v1, s42117; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42118; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], 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_v4i16_v3i16__5_5_2_0: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 v4, 02130; GFX942-NEXT: ;;#ASMSTART2131; GFX942-NEXT: ; def v[2:3]2132; GFX942-NEXT: ;;#ASMEND2133; GFX942-NEXT: v_perm_b32 v1, v0, v1, s22134; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22135; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2136; GFX942-NEXT: s_waitcnt vmcnt(0)2137; GFX942-NEXT: s_setpc_b64 s[30:31]2138 %vec0 = call <4 x i16> asm "; def $0", "=v"()2139 %vec1 = call <4 x i16> asm "; def $0", "=v"()2140 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2141 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2142 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 0>2143 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82144 ret void2145}2146 2147define void @v_shuffle_v4i16_v3i16__5_5_3_0(ptr addrspace(1) inreg %ptr) {2148; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_0:2149; GFX900: ; %bb.0:2150; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2151; GFX900-NEXT: ;;#ASMSTART2152; GFX900-NEXT: ; def v[0:1]2153; GFX900-NEXT: ;;#ASMEND2154; GFX900-NEXT: ;;#ASMSTART2155; GFX900-NEXT: ; def v[1:2]2156; GFX900-NEXT: ;;#ASMEND2157; GFX900-NEXT: s_mov_b32 s4, 0x50401002158; GFX900-NEXT: v_mov_b32_e32 v3, 02159; GFX900-NEXT: v_perm_b32 v1, v0, v1, s42160; GFX900-NEXT: v_perm_b32 v0, v2, v2, s42161; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]2162; GFX900-NEXT: s_waitcnt vmcnt(0)2163; GFX900-NEXT: s_setpc_b64 s[30:31]2164;2165; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_0:2166; GFX90A: ; %bb.0:2167; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2168; GFX90A-NEXT: ;;#ASMSTART2169; GFX90A-NEXT: ; def v[0:1]2170; GFX90A-NEXT: ;;#ASMEND2171; GFX90A-NEXT: s_mov_b32 s4, 0x50401002172; GFX90A-NEXT: v_mov_b32_e32 v4, 02173; GFX90A-NEXT: ;;#ASMSTART2174; GFX90A-NEXT: ; def v[2:3]2175; GFX90A-NEXT: ;;#ASMEND2176; GFX90A-NEXT: v_perm_b32 v1, v0, v2, s42177; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42178; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2179; GFX90A-NEXT: s_waitcnt vmcnt(0)2180; GFX90A-NEXT: s_setpc_b64 s[30:31]2181;2182; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_0:2183; GFX942: ; %bb.0:2184; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2185; GFX942-NEXT: ;;#ASMSTART2186; GFX942-NEXT: ; def v[0:1]2187; GFX942-NEXT: ;;#ASMEND2188; GFX942-NEXT: s_mov_b32 s2, 0x50401002189; GFX942-NEXT: v_mov_b32_e32 v4, 02190; GFX942-NEXT: ;;#ASMSTART2191; GFX942-NEXT: ; def v[2:3]2192; GFX942-NEXT: ;;#ASMEND2193; GFX942-NEXT: s_nop 02194; GFX942-NEXT: v_perm_b32 v1, v0, v2, s22195; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22196; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2197; GFX942-NEXT: s_waitcnt vmcnt(0)2198; GFX942-NEXT: s_setpc_b64 s[30:31]2199 %vec0 = call <4 x i16> asm "; def $0", "=v"()2200 %vec1 = call <4 x i16> asm "; def $0", "=v"()2201 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2202 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2203 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 0>2204 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82205 ret void2206}2207 2208define void @v_shuffle_v4i16_v3i16__5_5_4_0(ptr addrspace(1) inreg %ptr) {2209; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_0:2210; GFX900: ; %bb.0:2211; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX900-NEXT: ;;#ASMSTART2213; GFX900-NEXT: ; def v[0:1]2214; GFX900-NEXT: ;;#ASMEND2215; GFX900-NEXT: ;;#ASMSTART2216; GFX900-NEXT: ; def v[1:2]2217; GFX900-NEXT: ;;#ASMEND2218; GFX900-NEXT: s_mov_b32 s4, 0x50401002219; GFX900-NEXT: v_mov_b32_e32 v3, 02220; GFX900-NEXT: v_alignbit_b32 v1, v0, v1, 162221; GFX900-NEXT: v_perm_b32 v0, v2, v2, s42222; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]2223; GFX900-NEXT: s_waitcnt vmcnt(0)2224; GFX900-NEXT: s_setpc_b64 s[30:31]2225;2226; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_0:2227; GFX90A: ; %bb.0:2228; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX90A-NEXT: ;;#ASMSTART2230; GFX90A-NEXT: ; def v[0:1]2231; GFX90A-NEXT: ;;#ASMEND2232; GFX90A-NEXT: s_mov_b32 s4, 0x50401002233; GFX90A-NEXT: v_mov_b32_e32 v4, 02234; GFX90A-NEXT: ;;#ASMSTART2235; GFX90A-NEXT: ; def v[2:3]2236; GFX90A-NEXT: ;;#ASMEND2237; GFX90A-NEXT: v_alignbit_b32 v1, v0, v2, 162238; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42239; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2240; GFX90A-NEXT: s_waitcnt vmcnt(0)2241; GFX90A-NEXT: s_setpc_b64 s[30:31]2242;2243; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_0:2244; GFX942: ; %bb.0:2245; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2246; GFX942-NEXT: ;;#ASMSTART2247; GFX942-NEXT: ; def v[0:1]2248; GFX942-NEXT: ;;#ASMEND2249; GFX942-NEXT: s_mov_b32 s2, 0x50401002250; GFX942-NEXT: v_mov_b32_e32 v4, 02251; GFX942-NEXT: ;;#ASMSTART2252; GFX942-NEXT: ; def v[2:3]2253; GFX942-NEXT: ;;#ASMEND2254; GFX942-NEXT: s_nop 02255; GFX942-NEXT: v_alignbit_b32 v1, v0, v2, 162256; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22257; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2258; GFX942-NEXT: s_waitcnt vmcnt(0)2259; GFX942-NEXT: s_setpc_b64 s[30:31]2260 %vec0 = call <4 x i16> asm "; def $0", "=v"()2261 %vec1 = call <4 x i16> asm "; def $0", "=v"()2262 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2263 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2264 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 0>2265 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82266 ret void2267}2268 2269define void @v_shuffle_v4i16_v3i16__u_1_1_1(ptr addrspace(1) inreg %ptr) {2270; GFX900-LABEL: v_shuffle_v4i16_v3i16__u_1_1_1:2271; GFX900: ; %bb.0:2272; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2273; GFX900-NEXT: ;;#ASMSTART2274; GFX900-NEXT: ; def v[0:1]2275; GFX900-NEXT: ;;#ASMEND2276; GFX900-NEXT: s_mov_b32 s4, 0x70603022277; GFX900-NEXT: v_mov_b32_e32 v2, 02278; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42279; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2280; GFX900-NEXT: s_waitcnt vmcnt(0)2281; GFX900-NEXT: s_setpc_b64 s[30:31]2282;2283; GFX90A-LABEL: v_shuffle_v4i16_v3i16__u_1_1_1:2284; GFX90A: ; %bb.0:2285; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2286; GFX90A-NEXT: ;;#ASMSTART2287; GFX90A-NEXT: ; def v[0:1]2288; GFX90A-NEXT: ;;#ASMEND2289; GFX90A-NEXT: s_mov_b32 s4, 0x70603022290; GFX90A-NEXT: v_mov_b32_e32 v2, 02291; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42292; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2293; GFX90A-NEXT: s_waitcnt vmcnt(0)2294; GFX90A-NEXT: s_setpc_b64 s[30:31]2295;2296; GFX942-LABEL: v_shuffle_v4i16_v3i16__u_1_1_1:2297; GFX942: ; %bb.0:2298; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2299; GFX942-NEXT: ;;#ASMSTART2300; GFX942-NEXT: ; def v[0:1]2301; GFX942-NEXT: ;;#ASMEND2302; GFX942-NEXT: s_mov_b32 s2, 0x70603022303; GFX942-NEXT: v_mov_b32_e32 v2, 02304; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22305; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2306; GFX942-NEXT: s_waitcnt vmcnt(0)2307; GFX942-NEXT: s_setpc_b64 s[30:31]2308 %vec0 = call <4 x i16> asm "; def $0", "=v"()2309 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2310 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>2311 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82312 ret void2313}2314 2315define void @v_shuffle_v4i16_v3i16__0_1_1_1(ptr addrspace(1) inreg %ptr) {2316; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_1_1_1:2317; GFX900: ; %bb.0:2318; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2319; GFX900-NEXT: ;;#ASMSTART2320; GFX900-NEXT: ; def v[0:1]2321; GFX900-NEXT: ;;#ASMEND2322; GFX900-NEXT: s_mov_b32 s4, 0x70603022323; GFX900-NEXT: v_mov_b32_e32 v2, 02324; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42325; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2326; GFX900-NEXT: s_waitcnt vmcnt(0)2327; GFX900-NEXT: s_setpc_b64 s[30:31]2328;2329; GFX90A-LABEL: v_shuffle_v4i16_v3i16__0_1_1_1:2330; GFX90A: ; %bb.0:2331; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2332; GFX90A-NEXT: ;;#ASMSTART2333; GFX90A-NEXT: ; def v[0:1]2334; GFX90A-NEXT: ;;#ASMEND2335; GFX90A-NEXT: s_mov_b32 s4, 0x70603022336; GFX90A-NEXT: v_mov_b32_e32 v2, 02337; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42338; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2339; GFX90A-NEXT: s_waitcnt vmcnt(0)2340; GFX90A-NEXT: s_setpc_b64 s[30:31]2341;2342; GFX942-LABEL: v_shuffle_v4i16_v3i16__0_1_1_1:2343; GFX942: ; %bb.0:2344; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2345; GFX942-NEXT: ;;#ASMSTART2346; GFX942-NEXT: ; def v[0:1]2347; GFX942-NEXT: ;;#ASMEND2348; GFX942-NEXT: s_mov_b32 s2, 0x70603022349; GFX942-NEXT: v_mov_b32_e32 v2, 02350; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22351; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2352; GFX942-NEXT: s_waitcnt vmcnt(0)2353; GFX942-NEXT: s_setpc_b64 s[30:31]2354 %vec0 = call <4 x i16> asm "; def $0", "=v"()2355 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2356 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>2357 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82358 ret void2359}2360 2361define void @v_shuffle_v4i16_v3i16__1_1_1_1(ptr addrspace(1) inreg %ptr) {2362; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_1_1_1:2363; GFX900: ; %bb.0:2364; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2365; GFX900-NEXT: ;;#ASMSTART2366; GFX900-NEXT: ; def v[0:1]2367; GFX900-NEXT: ;;#ASMEND2368; GFX900-NEXT: s_mov_b32 s4, 0x70603022369; GFX900-NEXT: v_perm_b32 v0, v0, v0, s42370; GFX900-NEXT: v_mov_b32_e32 v2, 02371; GFX900-NEXT: v_mov_b32_e32 v1, v02372; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2373; GFX900-NEXT: s_waitcnt vmcnt(0)2374; GFX900-NEXT: s_setpc_b64 s[30:31]2375;2376; GFX90A-LABEL: v_shuffle_v4i16_v3i16__1_1_1_1:2377; GFX90A: ; %bb.0:2378; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2379; GFX90A-NEXT: ;;#ASMSTART2380; GFX90A-NEXT: ; def v[0:1]2381; GFX90A-NEXT: ;;#ASMEND2382; GFX90A-NEXT: s_mov_b32 s4, 0x70603022383; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s42384; GFX90A-NEXT: v_mov_b32_e32 v2, 02385; GFX90A-NEXT: v_mov_b32_e32 v1, v02386; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2387; GFX90A-NEXT: s_waitcnt vmcnt(0)2388; GFX90A-NEXT: s_setpc_b64 s[30:31]2389;2390; GFX942-LABEL: v_shuffle_v4i16_v3i16__1_1_1_1:2391; GFX942: ; %bb.0:2392; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2393; GFX942-NEXT: ;;#ASMSTART2394; GFX942-NEXT: ; def v[0:1]2395; GFX942-NEXT: ;;#ASMEND2396; GFX942-NEXT: s_mov_b32 s2, 0x70603022397; GFX942-NEXT: v_perm_b32 v0, v0, v0, s22398; GFX942-NEXT: v_mov_b32_e32 v2, 02399; GFX942-NEXT: v_mov_b32_e32 v1, v02400; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2401; GFX942-NEXT: s_waitcnt vmcnt(0)2402; GFX942-NEXT: s_setpc_b64 s[30:31]2403 %vec0 = call <4 x i16> asm "; def $0", "=v"()2404 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2405 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>2406 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82407 ret void2408}2409 2410define void @v_shuffle_v4i16_v3i16__2_1_1_1(ptr addrspace(1) inreg %ptr) {2411; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_1_1_1:2412; GFX900: ; %bb.0:2413; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2414; GFX900-NEXT: ;;#ASMSTART2415; GFX900-NEXT: ; def v[0:1]2416; GFX900-NEXT: ;;#ASMEND2417; GFX900-NEXT: s_mov_b32 s4, 0xffff2418; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v02419; GFX900-NEXT: s_mov_b32 s4, 0x70603022420; GFX900-NEXT: v_mov_b32_e32 v3, 02421; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42422; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]2423; GFX900-NEXT: s_waitcnt vmcnt(0)2424; GFX900-NEXT: s_setpc_b64 s[30:31]2425;2426; GFX90A-LABEL: v_shuffle_v4i16_v3i16__2_1_1_1:2427; GFX90A: ; %bb.0:2428; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2429; GFX90A-NEXT: s_mov_b32 s4, 0xffff2430; GFX90A-NEXT: ;;#ASMSTART2431; GFX90A-NEXT: ; def v[0:1]2432; GFX90A-NEXT: ;;#ASMEND2433; GFX90A-NEXT: v_bfi_b32 v2, s4, v1, v02434; GFX90A-NEXT: s_mov_b32 s4, 0x70603022435; GFX90A-NEXT: v_mov_b32_e32 v4, 02436; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42437; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2438; GFX90A-NEXT: s_waitcnt vmcnt(0)2439; GFX90A-NEXT: s_setpc_b64 s[30:31]2440;2441; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_1_1_1:2442; GFX942: ; %bb.0:2443; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2444; GFX942-NEXT: s_mov_b32 s2, 0xffff2445; GFX942-NEXT: ;;#ASMSTART2446; GFX942-NEXT: ; def v[0:1]2447; GFX942-NEXT: ;;#ASMEND2448; GFX942-NEXT: v_mov_b32_e32 v4, 02449; GFX942-NEXT: v_bfi_b32 v2, s2, v1, v02450; GFX942-NEXT: s_mov_b32 s2, 0x70603022451; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22452; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2453; GFX942-NEXT: s_waitcnt vmcnt(0)2454; GFX942-NEXT: s_setpc_b64 s[30:31]2455 %vec0 = call <4 x i16> asm "; def $0", "=v"()2456 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2457 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>2458 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82459 ret void2460}2461 2462define void @v_shuffle_v4i16_v3i16__3_1_1_1(ptr addrspace(1) inreg %ptr) {2463; GFX900-LABEL: v_shuffle_v4i16_v3i16__3_1_1_1:2464; GFX900: ; %bb.0:2465; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2466; GFX900-NEXT: ;;#ASMSTART2467; GFX900-NEXT: ; def v[0:1]2468; GFX900-NEXT: ;;#ASMEND2469; GFX900-NEXT: s_mov_b32 s4, 0x70603022470; GFX900-NEXT: v_mov_b32_e32 v2, 02471; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42472; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2473; GFX900-NEXT: s_waitcnt vmcnt(0)2474; GFX900-NEXT: s_setpc_b64 s[30:31]2475;2476; GFX90A-LABEL: v_shuffle_v4i16_v3i16__3_1_1_1:2477; GFX90A: ; %bb.0:2478; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2479; GFX90A-NEXT: ;;#ASMSTART2480; GFX90A-NEXT: ; def v[0:1]2481; GFX90A-NEXT: ;;#ASMEND2482; GFX90A-NEXT: s_mov_b32 s4, 0x70603022483; GFX90A-NEXT: v_mov_b32_e32 v2, 02484; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42485; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2486; GFX90A-NEXT: s_waitcnt vmcnt(0)2487; GFX90A-NEXT: s_setpc_b64 s[30:31]2488;2489; GFX942-LABEL: v_shuffle_v4i16_v3i16__3_1_1_1:2490; GFX942: ; %bb.0:2491; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2492; GFX942-NEXT: ;;#ASMSTART2493; GFX942-NEXT: ; def v[0:1]2494; GFX942-NEXT: ;;#ASMEND2495; GFX942-NEXT: s_mov_b32 s2, 0x70603022496; GFX942-NEXT: v_mov_b32_e32 v2, 02497; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22498; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2499; GFX942-NEXT: s_waitcnt vmcnt(0)2500; GFX942-NEXT: s_setpc_b64 s[30:31]2501 %vec0 = call <4 x i16> asm "; def $0", "=v"()2502 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2503 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>2504 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82505 ret void2506}2507 2508define void @v_shuffle_v4i16_v3i16__4_1_1_1(ptr addrspace(1) inreg %ptr) {2509; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_1_1_1:2510; GFX900: ; %bb.0:2511; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2512; GFX900-NEXT: ;;#ASMSTART2513; GFX900-NEXT: ; def v[0:1]2514; GFX900-NEXT: ;;#ASMEND2515; GFX900-NEXT: ;;#ASMSTART2516; GFX900-NEXT: ; def v[1:2]2517; GFX900-NEXT: ;;#ASMEND2518; GFX900-NEXT: s_mov_b32 s4, 0x70603022519; GFX900-NEXT: v_mov_b32_e32 v3, 02520; GFX900-NEXT: v_perm_b32 v1, v0, v1, s42521; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42522; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]2523; GFX900-NEXT: s_waitcnt vmcnt(0)2524; GFX900-NEXT: s_setpc_b64 s[30:31]2525;2526; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_1_1_1:2527; GFX90A: ; %bb.0:2528; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2529; GFX90A-NEXT: ;;#ASMSTART2530; GFX90A-NEXT: ; def v[2:3]2531; GFX90A-NEXT: ;;#ASMEND2532; GFX90A-NEXT: s_mov_b32 s4, 0x70603022533; GFX90A-NEXT: v_mov_b32_e32 v4, 02534; GFX90A-NEXT: ;;#ASMSTART2535; GFX90A-NEXT: ; def v[0:1]2536; GFX90A-NEXT: ;;#ASMEND2537; GFX90A-NEXT: v_perm_b32 v2, v0, v2, s42538; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42539; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2540; GFX90A-NEXT: s_waitcnt vmcnt(0)2541; GFX90A-NEXT: s_setpc_b64 s[30:31]2542;2543; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_1_1_1:2544; GFX942: ; %bb.0:2545; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2546; GFX942-NEXT: ;;#ASMSTART2547; GFX942-NEXT: ; def v[2:3]2548; GFX942-NEXT: ;;#ASMEND2549; GFX942-NEXT: s_mov_b32 s2, 0x70603022550; GFX942-NEXT: v_mov_b32_e32 v4, 02551; GFX942-NEXT: ;;#ASMSTART2552; GFX942-NEXT: ; def v[0:1]2553; GFX942-NEXT: ;;#ASMEND2554; GFX942-NEXT: s_nop 02555; GFX942-NEXT: v_perm_b32 v2, v0, v2, s22556; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22557; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2558; GFX942-NEXT: s_waitcnt vmcnt(0)2559; GFX942-NEXT: s_setpc_b64 s[30:31]2560 %vec0 = call <4 x i16> asm "; def $0", "=v"()2561 %vec1 = call <4 x i16> asm "; def $0", "=v"()2562 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2563 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2564 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 1, i32 1, i32 1>2565 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82566 ret void2567}2568 2569define void @v_shuffle_v4i16_v3i16__5_1_1_1(ptr addrspace(1) inreg %ptr) {2570; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_1_1:2571; GFX900: ; %bb.0:2572; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2573; GFX900-NEXT: ;;#ASMSTART2574; GFX900-NEXT: ; def v[0:1]2575; GFX900-NEXT: ;;#ASMEND2576; GFX900-NEXT: ;;#ASMSTART2577; GFX900-NEXT: ; def v[1:2]2578; GFX900-NEXT: ;;#ASMEND2579; GFX900-NEXT: s_mov_b32 s4, 0xffff2580; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v02581; GFX900-NEXT: s_mov_b32 s4, 0x70603022582; GFX900-NEXT: v_mov_b32_e32 v3, 02583; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42584; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]2585; GFX900-NEXT: s_waitcnt vmcnt(0)2586; GFX900-NEXT: s_setpc_b64 s[30:31]2587;2588; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_1_1:2589; GFX90A: ; %bb.0:2590; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2591; GFX90A-NEXT: ;;#ASMSTART2592; GFX90A-NEXT: ; def v[2:3]2593; GFX90A-NEXT: ;;#ASMEND2594; GFX90A-NEXT: s_mov_b32 s4, 0xffff2595; GFX90A-NEXT: ;;#ASMSTART2596; GFX90A-NEXT: ; def v[0:1]2597; GFX90A-NEXT: ;;#ASMEND2598; GFX90A-NEXT: v_bfi_b32 v2, s4, v3, v02599; GFX90A-NEXT: s_mov_b32 s4, 0x70603022600; GFX90A-NEXT: v_mov_b32_e32 v4, 02601; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42602; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2603; GFX90A-NEXT: s_waitcnt vmcnt(0)2604; GFX90A-NEXT: s_setpc_b64 s[30:31]2605;2606; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_1_1:2607; GFX942: ; %bb.0:2608; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2609; GFX942-NEXT: ;;#ASMSTART2610; GFX942-NEXT: ; def v[2:3]2611; GFX942-NEXT: ;;#ASMEND2612; GFX942-NEXT: s_mov_b32 s2, 0xffff2613; GFX942-NEXT: ;;#ASMSTART2614; GFX942-NEXT: ; def v[0:1]2615; GFX942-NEXT: ;;#ASMEND2616; GFX942-NEXT: v_mov_b32_e32 v4, 02617; GFX942-NEXT: v_bfi_b32 v2, s2, v3, v02618; GFX942-NEXT: s_mov_b32 s2, 0x70603022619; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22620; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2621; GFX942-NEXT: s_waitcnt vmcnt(0)2622; GFX942-NEXT: s_setpc_b64 s[30:31]2623 %vec0 = call <4 x i16> asm "; def $0", "=v"()2624 %vec1 = call <4 x i16> asm "; def $0", "=v"()2625 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2626 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2627 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 1, i32 1>2628 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82629 ret void2630}2631 2632define void @v_shuffle_v4i16_v3i16__5_u_1_1(ptr addrspace(1) inreg %ptr) {2633; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_1_1:2634; GFX900: ; %bb.0:2635; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX900-NEXT: ;;#ASMSTART2637; GFX900-NEXT: ; def v[2:3]2638; GFX900-NEXT: ;;#ASMEND2639; GFX900-NEXT: s_mov_b32 s4, 0x70603022640; GFX900-NEXT: v_mov_b32_e32 v4, 02641; GFX900-NEXT: v_perm_b32 v2, v2, v2, s42642; GFX900-NEXT: ;;#ASMSTART2643; GFX900-NEXT: ; def v[0:1]2644; GFX900-NEXT: ;;#ASMEND2645; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]2646; GFX900-NEXT: s_waitcnt vmcnt(0)2647; GFX900-NEXT: s_setpc_b64 s[30:31]2648;2649; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_1_1:2650; GFX90A: ; %bb.0:2651; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2652; GFX90A-NEXT: ;;#ASMSTART2653; GFX90A-NEXT: ; def v[0:1]2654; GFX90A-NEXT: ;;#ASMEND2655; GFX90A-NEXT: s_mov_b32 s4, 0x70603022656; GFX90A-NEXT: v_mov_b32_e32 v4, 02657; GFX90A-NEXT: ;;#ASMSTART2658; GFX90A-NEXT: ; def v[2:3]2659; GFX90A-NEXT: ;;#ASMEND2660; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42661; GFX90A-NEXT: v_mov_b32_e32 v0, v32662; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2663; GFX90A-NEXT: s_waitcnt vmcnt(0)2664; GFX90A-NEXT: s_setpc_b64 s[30:31]2665;2666; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_1_1:2667; GFX942: ; %bb.0:2668; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2669; GFX942-NEXT: ;;#ASMSTART2670; GFX942-NEXT: ; def v[0:1]2671; GFX942-NEXT: ;;#ASMEND2672; GFX942-NEXT: s_mov_b32 s2, 0x70603022673; GFX942-NEXT: v_mov_b32_e32 v4, 02674; GFX942-NEXT: ;;#ASMSTART2675; GFX942-NEXT: ; def v[2:3]2676; GFX942-NEXT: ;;#ASMEND2677; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22678; GFX942-NEXT: v_mov_b32_e32 v0, v32679; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2680; GFX942-NEXT: s_waitcnt vmcnt(0)2681; GFX942-NEXT: s_setpc_b64 s[30:31]2682 %vec0 = call <4 x i16> asm "; def $0", "=v"()2683 %vec1 = call <4 x i16> asm "; def $0", "=v"()2684 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2685 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2686 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>2687 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82688 ret void2689}2690 2691define void @v_shuffle_v4i16_v3i16__5_0_1_1(ptr addrspace(1) inreg %ptr) {2692; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_1_1:2693; GFX900: ; %bb.0:2694; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2695; GFX900-NEXT: ;;#ASMSTART2696; GFX900-NEXT: ; def v[0:1]2697; GFX900-NEXT: ;;#ASMEND2698; GFX900-NEXT: ;;#ASMSTART2699; GFX900-NEXT: ; def v[1:2]2700; GFX900-NEXT: ;;#ASMEND2701; GFX900-NEXT: s_mov_b32 s4, 0x50401002702; GFX900-NEXT: v_perm_b32 v1, v0, v2, s42703; GFX900-NEXT: s_mov_b32 s4, 0x70603022704; GFX900-NEXT: v_mov_b32_e32 v3, 02705; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42706; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]2707; GFX900-NEXT: s_waitcnt vmcnt(0)2708; GFX900-NEXT: s_setpc_b64 s[30:31]2709;2710; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_1_1:2711; GFX90A: ; %bb.0:2712; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2713; GFX90A-NEXT: ;;#ASMSTART2714; GFX90A-NEXT: ; def v[2:3]2715; GFX90A-NEXT: ;;#ASMEND2716; GFX90A-NEXT: s_mov_b32 s4, 0x50401002717; GFX90A-NEXT: ;;#ASMSTART2718; GFX90A-NEXT: ; def v[0:1]2719; GFX90A-NEXT: ;;#ASMEND2720; GFX90A-NEXT: v_perm_b32 v2, v0, v3, s42721; GFX90A-NEXT: s_mov_b32 s4, 0x70603022722; GFX90A-NEXT: v_mov_b32_e32 v4, 02723; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42724; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2725; GFX90A-NEXT: s_waitcnt vmcnt(0)2726; GFX90A-NEXT: s_setpc_b64 s[30:31]2727;2728; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_1_1:2729; GFX942: ; %bb.0:2730; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2731; GFX942-NEXT: ;;#ASMSTART2732; GFX942-NEXT: ; def v[2:3]2733; GFX942-NEXT: ;;#ASMEND2734; GFX942-NEXT: s_mov_b32 s2, 0x50401002735; GFX942-NEXT: ;;#ASMSTART2736; GFX942-NEXT: ; def v[0:1]2737; GFX942-NEXT: ;;#ASMEND2738; GFX942-NEXT: v_mov_b32_e32 v4, 02739; GFX942-NEXT: v_perm_b32 v2, v0, v3, s22740; GFX942-NEXT: s_mov_b32 s2, 0x70603022741; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22742; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2743; GFX942-NEXT: s_waitcnt vmcnt(0)2744; GFX942-NEXT: s_setpc_b64 s[30:31]2745 %vec0 = call <4 x i16> asm "; def $0", "=v"()2746 %vec1 = call <4 x i16> asm "; def $0", "=v"()2747 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2748 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2749 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 1, i32 1>2750 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82751 ret void2752}2753 2754define void @v_shuffle_v4i16_v3i16__5_2_1_1(ptr addrspace(1) inreg %ptr) {2755; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_1_1:2756; GFX900: ; %bb.0:2757; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2758; GFX900-NEXT: ;;#ASMSTART2759; GFX900-NEXT: ; def v[0:1]2760; GFX900-NEXT: ;;#ASMEND2761; GFX900-NEXT: s_mov_b32 s4, 0x50401002762; GFX900-NEXT: ;;#ASMSTART2763; GFX900-NEXT: ; def v[2:3]2764; GFX900-NEXT: ;;#ASMEND2765; GFX900-NEXT: v_perm_b32 v1, v1, v3, s42766; GFX900-NEXT: s_mov_b32 s4, 0x70603022767; GFX900-NEXT: v_mov_b32_e32 v4, 02768; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42769; GFX900-NEXT: global_store_dwordx2 v4, v[1:2], s[16:17]2770; GFX900-NEXT: s_waitcnt vmcnt(0)2771; GFX900-NEXT: s_setpc_b64 s[30:31]2772;2773; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_1_1:2774; GFX90A: ; %bb.0:2775; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2776; GFX90A-NEXT: ;;#ASMSTART2777; GFX90A-NEXT: ; def v[2:3]2778; GFX90A-NEXT: ;;#ASMEND2779; GFX90A-NEXT: s_mov_b32 s4, 0x50401002780; GFX90A-NEXT: ;;#ASMSTART2781; GFX90A-NEXT: ; def v[0:1]2782; GFX90A-NEXT: ;;#ASMEND2783; GFX90A-NEXT: v_perm_b32 v2, v1, v3, s42784; GFX90A-NEXT: s_mov_b32 s4, 0x70603022785; GFX90A-NEXT: v_mov_b32_e32 v4, 02786; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42787; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2788; GFX90A-NEXT: s_waitcnt vmcnt(0)2789; GFX90A-NEXT: s_setpc_b64 s[30:31]2790;2791; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_1_1:2792; GFX942: ; %bb.0:2793; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2794; GFX942-NEXT: ;;#ASMSTART2795; GFX942-NEXT: ; def v[2:3]2796; GFX942-NEXT: ;;#ASMEND2797; GFX942-NEXT: s_mov_b32 s2, 0x50401002798; GFX942-NEXT: ;;#ASMSTART2799; GFX942-NEXT: ; def v[0:1]2800; GFX942-NEXT: ;;#ASMEND2801; GFX942-NEXT: v_mov_b32_e32 v4, 02802; GFX942-NEXT: v_perm_b32 v2, v1, v3, s22803; GFX942-NEXT: s_mov_b32 s2, 0x70603022804; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22805; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2806; GFX942-NEXT: s_waitcnt vmcnt(0)2807; GFX942-NEXT: s_setpc_b64 s[30:31]2808 %vec0 = call <4 x i16> asm "; def $0", "=v"()2809 %vec1 = call <4 x i16> asm "; def $0", "=v"()2810 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2811 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2812 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 1, i32 1>2813 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82814 ret void2815}2816 2817define void @v_shuffle_v4i16_v3i16__5_3_1_1(ptr addrspace(1) inreg %ptr) {2818; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_1_1:2819; GFX900: ; %bb.0:2820; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2821; GFX900-NEXT: ;;#ASMSTART2822; GFX900-NEXT: ; def v[0:1]2823; GFX900-NEXT: ;;#ASMEND2824; GFX900-NEXT: ;;#ASMSTART2825; GFX900-NEXT: ; def v[1:2]2826; GFX900-NEXT: ;;#ASMEND2827; GFX900-NEXT: s_mov_b32 s4, 0x50401002828; GFX900-NEXT: v_perm_b32 v1, v1, v2, s42829; GFX900-NEXT: s_mov_b32 s4, 0x70603022830; GFX900-NEXT: v_mov_b32_e32 v3, 02831; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42832; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]2833; GFX900-NEXT: s_waitcnt vmcnt(0)2834; GFX900-NEXT: s_setpc_b64 s[30:31]2835;2836; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_3_1_1:2837; GFX90A: ; %bb.0:2838; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2839; GFX90A-NEXT: ;;#ASMSTART2840; GFX90A-NEXT: ; def v[2:3]2841; GFX90A-NEXT: ;;#ASMEND2842; GFX90A-NEXT: s_mov_b32 s4, 0x50401002843; GFX90A-NEXT: v_perm_b32 v2, v2, v3, s42844; GFX90A-NEXT: s_mov_b32 s4, 0x70603022845; GFX90A-NEXT: v_mov_b32_e32 v4, 02846; GFX90A-NEXT: ;;#ASMSTART2847; GFX90A-NEXT: ; def v[0:1]2848; GFX90A-NEXT: ;;#ASMEND2849; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42850; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2851; GFX90A-NEXT: s_waitcnt vmcnt(0)2852; GFX90A-NEXT: s_setpc_b64 s[30:31]2853;2854; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_1_1:2855; GFX942: ; %bb.0:2856; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2857; GFX942-NEXT: ;;#ASMSTART2858; GFX942-NEXT: ; def v[2:3]2859; GFX942-NEXT: ;;#ASMEND2860; GFX942-NEXT: s_mov_b32 s2, 0x50401002861; GFX942-NEXT: v_perm_b32 v2, v2, v3, s22862; GFX942-NEXT: s_mov_b32 s2, 0x70603022863; GFX942-NEXT: v_mov_b32_e32 v4, 02864; GFX942-NEXT: ;;#ASMSTART2865; GFX942-NEXT: ; def v[0:1]2866; GFX942-NEXT: ;;#ASMEND2867; GFX942-NEXT: s_nop 02868; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22869; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2870; GFX942-NEXT: s_waitcnt vmcnt(0)2871; GFX942-NEXT: s_setpc_b64 s[30:31]2872 %vec0 = call <4 x i16> asm "; def $0", "=v"()2873 %vec1 = call <4 x i16> asm "; def $0", "=v"()2874 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2875 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2876 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 1, i32 1>2877 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82878 ret void2879}2880 2881define void @v_shuffle_v4i16_v3i16__5_4_1_1(ptr addrspace(1) inreg %ptr) {2882; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_1_1:2883; GFX900: ; %bb.0:2884; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2885; GFX900-NEXT: ;;#ASMSTART2886; GFX900-NEXT: ; def v[0:1]2887; GFX900-NEXT: ;;#ASMEND2888; GFX900-NEXT: ;;#ASMSTART2889; GFX900-NEXT: ; def v[1:2]2890; GFX900-NEXT: ;;#ASMEND2891; GFX900-NEXT: s_mov_b32 s4, 0xffff2892; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v12893; GFX900-NEXT: s_mov_b32 s4, 0x70603022894; GFX900-NEXT: v_mov_b32_e32 v3, 02895; GFX900-NEXT: v_perm_b32 v2, v0, v0, s42896; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]2897; GFX900-NEXT: s_waitcnt vmcnt(0)2898; GFX900-NEXT: s_setpc_b64 s[30:31]2899;2900; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_1_1:2901; GFX90A: ; %bb.0:2902; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2903; GFX90A-NEXT: ;;#ASMSTART2904; GFX90A-NEXT: ; def v[2:3]2905; GFX90A-NEXT: ;;#ASMEND2906; GFX90A-NEXT: s_mov_b32 s4, 0xffff2907; GFX90A-NEXT: v_bfi_b32 v2, s4, v3, v22908; GFX90A-NEXT: s_mov_b32 s4, 0x70603022909; GFX90A-NEXT: v_mov_b32_e32 v4, 02910; GFX90A-NEXT: ;;#ASMSTART2911; GFX90A-NEXT: ; def v[0:1]2912; GFX90A-NEXT: ;;#ASMEND2913; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s42914; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]2915; GFX90A-NEXT: s_waitcnt vmcnt(0)2916; GFX90A-NEXT: s_setpc_b64 s[30:31]2917;2918; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_1_1:2919; GFX942: ; %bb.0:2920; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2921; GFX942-NEXT: ;;#ASMSTART2922; GFX942-NEXT: ; def v[2:3]2923; GFX942-NEXT: ;;#ASMEND2924; GFX942-NEXT: s_mov_b32 s2, 0xffff2925; GFX942-NEXT: v_bfi_b32 v2, s2, v3, v22926; GFX942-NEXT: s_mov_b32 s2, 0x70603022927; GFX942-NEXT: v_mov_b32_e32 v4, 02928; GFX942-NEXT: ;;#ASMSTART2929; GFX942-NEXT: ; def v[0:1]2930; GFX942-NEXT: ;;#ASMEND2931; GFX942-NEXT: s_nop 02932; GFX942-NEXT: v_perm_b32 v3, v0, v0, s22933; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]2934; GFX942-NEXT: s_waitcnt vmcnt(0)2935; GFX942-NEXT: s_setpc_b64 s[30:31]2936 %vec0 = call <4 x i16> asm "; def $0", "=v"()2937 %vec1 = call <4 x i16> asm "; def $0", "=v"()2938 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2939 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>2940 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 1, i32 1>2941 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 82942 ret void2943}2944 2945define void @v_shuffle_v4i16_v3i16__5_5_1_1(ptr addrspace(1) inreg %ptr) {2946; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_1:2947; GFX900: ; %bb.0:2948; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2949; GFX900-NEXT: ;;#ASMSTART2950; GFX900-NEXT: ; def v[0:1]2951; GFX900-NEXT: ;;#ASMEND2952; GFX900-NEXT: ;;#ASMSTART2953; GFX900-NEXT: ; def v[1:2]2954; GFX900-NEXT: ;;#ASMEND2955; GFX900-NEXT: s_mov_b32 s4, 0x70603022956; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42957; GFX900-NEXT: s_mov_b32 s4, 0x50401002958; GFX900-NEXT: v_mov_b32_e32 v3, 02959; GFX900-NEXT: v_perm_b32 v0, v2, v2, s42960; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]2961; GFX900-NEXT: s_waitcnt vmcnt(0)2962; GFX900-NEXT: s_setpc_b64 s[30:31]2963;2964; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_1:2965; GFX90A: ; %bb.0:2966; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2967; GFX90A-NEXT: ;;#ASMSTART2968; GFX90A-NEXT: ; def v[0:1]2969; GFX90A-NEXT: ;;#ASMEND2970; GFX90A-NEXT: s_mov_b32 s4, 0x70603022971; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42972; GFX90A-NEXT: s_mov_b32 s4, 0x50401002973; GFX90A-NEXT: v_mov_b32_e32 v4, 02974; GFX90A-NEXT: ;;#ASMSTART2975; GFX90A-NEXT: ; def v[2:3]2976; GFX90A-NEXT: ;;#ASMEND2977; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42978; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]2979; GFX90A-NEXT: s_waitcnt vmcnt(0)2980; GFX90A-NEXT: s_setpc_b64 s[30:31]2981;2982; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_1:2983; GFX942: ; %bb.0:2984; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2985; GFX942-NEXT: ;;#ASMSTART2986; GFX942-NEXT: ; def v[0:1]2987; GFX942-NEXT: ;;#ASMEND2988; GFX942-NEXT: s_mov_b32 s2, 0x70603022989; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22990; GFX942-NEXT: s_mov_b32 s2, 0x50401002991; GFX942-NEXT: v_mov_b32_e32 v4, 02992; GFX942-NEXT: ;;#ASMSTART2993; GFX942-NEXT: ; def v[2:3]2994; GFX942-NEXT: ;;#ASMEND2995; GFX942-NEXT: s_nop 02996; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22997; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]2998; GFX942-NEXT: s_waitcnt vmcnt(0)2999; GFX942-NEXT: s_setpc_b64 s[30:31]3000 %vec0 = call <4 x i16> asm "; def $0", "=v"()3001 %vec1 = call <4 x i16> asm "; def $0", "=v"()3002 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3003 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3004 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 1>3005 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83006 ret void3007}3008 3009define void @v_shuffle_v4i16_v3i16__5_5_u_1(ptr addrspace(1) inreg %ptr) {3010; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_1:3011; GFX900: ; %bb.0:3012; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3013; GFX900-NEXT: ;;#ASMSTART3014; GFX900-NEXT: ; def v[1:2]3015; GFX900-NEXT: ;;#ASMEND3016; GFX900-NEXT: s_mov_b32 s4, 0x50401003017; GFX900-NEXT: v_mov_b32_e32 v4, 03018; GFX900-NEXT: ;;#ASMSTART3019; GFX900-NEXT: ; def v[2:3]3020; GFX900-NEXT: ;;#ASMEND3021; GFX900-NEXT: v_perm_b32 v0, v3, v3, s43022; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3023; GFX900-NEXT: s_waitcnt vmcnt(0)3024; GFX900-NEXT: s_setpc_b64 s[30:31]3025;3026; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_1:3027; GFX90A: ; %bb.0:3028; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3029; GFX90A-NEXT: ;;#ASMSTART3030; GFX90A-NEXT: ; def v[2:3]3031; GFX90A-NEXT: ;;#ASMEND3032; GFX90A-NEXT: s_mov_b32 s4, 0x50401003033; GFX90A-NEXT: v_mov_b32_e32 v4, 03034; GFX90A-NEXT: ;;#ASMSTART3035; GFX90A-NEXT: ; def v[0:1]3036; GFX90A-NEXT: ;;#ASMEND3037; GFX90A-NEXT: v_perm_b32 v2, v3, v3, s43038; GFX90A-NEXT: v_mov_b32_e32 v3, v03039; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3040; GFX90A-NEXT: s_waitcnt vmcnt(0)3041; GFX90A-NEXT: s_setpc_b64 s[30:31]3042;3043; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_1:3044; GFX942: ; %bb.0:3045; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3046; GFX942-NEXT: ;;#ASMSTART3047; GFX942-NEXT: ; def v[2:3]3048; GFX942-NEXT: ;;#ASMEND3049; GFX942-NEXT: s_mov_b32 s2, 0x50401003050; GFX942-NEXT: v_mov_b32_e32 v4, 03051; GFX942-NEXT: ;;#ASMSTART3052; GFX942-NEXT: ; def v[0:1]3053; GFX942-NEXT: ;;#ASMEND3054; GFX942-NEXT: v_perm_b32 v2, v3, v3, s23055; GFX942-NEXT: v_mov_b32_e32 v3, v03056; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3057; GFX942-NEXT: s_waitcnt vmcnt(0)3058; GFX942-NEXT: s_setpc_b64 s[30:31]3059 %vec0 = call <4 x i16> asm "; def $0", "=v"()3060 %vec1 = call <4 x i16> asm "; def $0", "=v"()3061 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3062 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3063 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>3064 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83065 ret void3066}3067 3068define void @v_shuffle_v4i16_v3i16__5_5_0_1(ptr addrspace(1) inreg %ptr) {3069; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_1:3070; GFX900: ; %bb.0:3071; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3072; GFX900-NEXT: ;;#ASMSTART3073; GFX900-NEXT: ; def v[1:2]3074; GFX900-NEXT: ;;#ASMEND3075; GFX900-NEXT: s_mov_b32 s4, 0x50401003076; GFX900-NEXT: v_mov_b32_e32 v4, 03077; GFX900-NEXT: ;;#ASMSTART3078; GFX900-NEXT: ; def v[2:3]3079; GFX900-NEXT: ;;#ASMEND3080; GFX900-NEXT: v_perm_b32 v0, v3, v3, s43081; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3082; GFX900-NEXT: s_waitcnt vmcnt(0)3083; GFX900-NEXT: s_setpc_b64 s[30:31]3084;3085; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_1:3086; GFX90A: ; %bb.0:3087; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3088; GFX90A-NEXT: ;;#ASMSTART3089; GFX90A-NEXT: ; def v[2:3]3090; GFX90A-NEXT: ;;#ASMEND3091; GFX90A-NEXT: s_mov_b32 s4, 0x50401003092; GFX90A-NEXT: v_mov_b32_e32 v4, 03093; GFX90A-NEXT: ;;#ASMSTART3094; GFX90A-NEXT: ; def v[0:1]3095; GFX90A-NEXT: ;;#ASMEND3096; GFX90A-NEXT: v_perm_b32 v2, v3, v3, s43097; GFX90A-NEXT: v_mov_b32_e32 v3, v03098; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3099; GFX90A-NEXT: s_waitcnt vmcnt(0)3100; GFX90A-NEXT: s_setpc_b64 s[30:31]3101;3102; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_1:3103; GFX942: ; %bb.0:3104; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3105; GFX942-NEXT: ;;#ASMSTART3106; GFX942-NEXT: ; def v[2:3]3107; GFX942-NEXT: ;;#ASMEND3108; GFX942-NEXT: s_mov_b32 s2, 0x50401003109; GFX942-NEXT: v_mov_b32_e32 v4, 03110; GFX942-NEXT: ;;#ASMSTART3111; GFX942-NEXT: ; def v[0:1]3112; GFX942-NEXT: ;;#ASMEND3113; GFX942-NEXT: v_perm_b32 v2, v3, v3, s23114; GFX942-NEXT: v_mov_b32_e32 v3, v03115; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3116; GFX942-NEXT: s_waitcnt vmcnt(0)3117; GFX942-NEXT: s_setpc_b64 s[30:31]3118 %vec0 = call <4 x i16> asm "; def $0", "=v"()3119 %vec1 = call <4 x i16> asm "; def $0", "=v"()3120 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3121 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3122 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 1>3123 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83124 ret void3125}3126 3127define void @v_shuffle_v4i16_v3i16__5_5_2_1(ptr addrspace(1) inreg %ptr) {3128; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_1:3129; GFX900: ; %bb.0:3130; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3131; GFX900-NEXT: ;;#ASMSTART3132; GFX900-NEXT: ; def v[0:1]3133; GFX900-NEXT: ;;#ASMEND3134; GFX900-NEXT: s_mov_b32 s4, 0xffff3135; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v03136; GFX900-NEXT: s_mov_b32 s4, 0x50401003137; GFX900-NEXT: v_mov_b32_e32 v4, 03138; GFX900-NEXT: ;;#ASMSTART3139; GFX900-NEXT: ; def v[2:3]3140; GFX900-NEXT: ;;#ASMEND3141; GFX900-NEXT: v_perm_b32 v0, v3, v3, s43142; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3143; GFX900-NEXT: s_waitcnt vmcnt(0)3144; GFX900-NEXT: s_setpc_b64 s[30:31]3145;3146; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_1:3147; GFX90A: ; %bb.0:3148; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3149; GFX90A-NEXT: ;;#ASMSTART3150; GFX90A-NEXT: ; def v[0:1]3151; GFX90A-NEXT: ;;#ASMEND3152; GFX90A-NEXT: s_mov_b32 s4, 0xffff3153; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v03154; GFX90A-NEXT: s_mov_b32 s4, 0x50401003155; GFX90A-NEXT: v_mov_b32_e32 v4, 03156; GFX90A-NEXT: ;;#ASMSTART3157; GFX90A-NEXT: ; def v[2:3]3158; GFX90A-NEXT: ;;#ASMEND3159; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s43160; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3161; GFX90A-NEXT: s_waitcnt vmcnt(0)3162; GFX90A-NEXT: s_setpc_b64 s[30:31]3163;3164; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_2_1:3165; GFX942: ; %bb.0:3166; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3167; GFX942-NEXT: ;;#ASMSTART3168; GFX942-NEXT: ; def v[0:1]3169; GFX942-NEXT: ;;#ASMEND3170; GFX942-NEXT: s_mov_b32 s2, 0xffff3171; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v03172; GFX942-NEXT: s_mov_b32 s2, 0x50401003173; GFX942-NEXT: v_mov_b32_e32 v4, 03174; GFX942-NEXT: ;;#ASMSTART3175; GFX942-NEXT: ; def v[2:3]3176; GFX942-NEXT: ;;#ASMEND3177; GFX942-NEXT: s_nop 03178; GFX942-NEXT: v_perm_b32 v0, v3, v3, s23179; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3180; GFX942-NEXT: s_waitcnt vmcnt(0)3181; GFX942-NEXT: s_setpc_b64 s[30:31]3182 %vec0 = call <4 x i16> asm "; def $0", "=v"()3183 %vec1 = call <4 x i16> asm "; def $0", "=v"()3184 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3185 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3186 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 1>3187 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83188 ret void3189}3190 3191define void @v_shuffle_v4i16_v3i16__5_5_3_1(ptr addrspace(1) inreg %ptr) {3192; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_1:3193; GFX900: ; %bb.0:3194; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3195; GFX900-NEXT: ;;#ASMSTART3196; GFX900-NEXT: ; def v[0:1]3197; GFX900-NEXT: ;;#ASMEND3198; GFX900-NEXT: ;;#ASMSTART3199; GFX900-NEXT: ; def v[1:2]3200; GFX900-NEXT: ;;#ASMEND3201; GFX900-NEXT: s_mov_b32 s4, 0xffff3202; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v03203; GFX900-NEXT: s_mov_b32 s4, 0x50401003204; GFX900-NEXT: v_mov_b32_e32 v3, 03205; GFX900-NEXT: v_perm_b32 v0, v2, v2, s43206; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]3207; GFX900-NEXT: s_waitcnt vmcnt(0)3208; GFX900-NEXT: s_setpc_b64 s[30:31]3209;3210; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_1:3211; GFX90A: ; %bb.0:3212; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3213; GFX90A-NEXT: ;;#ASMSTART3214; GFX90A-NEXT: ; def v[0:1]3215; GFX90A-NEXT: ;;#ASMEND3216; GFX90A-NEXT: s_mov_b32 s4, 0xffff3217; GFX90A-NEXT: ;;#ASMSTART3218; GFX90A-NEXT: ; def v[2:3]3219; GFX90A-NEXT: ;;#ASMEND3220; GFX90A-NEXT: v_bfi_b32 v1, s4, v2, v03221; GFX90A-NEXT: s_mov_b32 s4, 0x50401003222; GFX90A-NEXT: v_mov_b32_e32 v4, 03223; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s43224; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3225; GFX90A-NEXT: s_waitcnt vmcnt(0)3226; GFX90A-NEXT: s_setpc_b64 s[30:31]3227;3228; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_1:3229; GFX942: ; %bb.0:3230; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3231; GFX942-NEXT: ;;#ASMSTART3232; GFX942-NEXT: ; def v[0:1]3233; GFX942-NEXT: ;;#ASMEND3234; GFX942-NEXT: s_mov_b32 s2, 0xffff3235; GFX942-NEXT: ;;#ASMSTART3236; GFX942-NEXT: ; def v[2:3]3237; GFX942-NEXT: ;;#ASMEND3238; GFX942-NEXT: v_mov_b32_e32 v4, 03239; GFX942-NEXT: v_bfi_b32 v1, s2, v2, v03240; GFX942-NEXT: s_mov_b32 s2, 0x50401003241; GFX942-NEXT: v_perm_b32 v0, v3, v3, s23242; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3243; GFX942-NEXT: s_waitcnt vmcnt(0)3244; GFX942-NEXT: s_setpc_b64 s[30:31]3245 %vec0 = call <4 x i16> asm "; def $0", "=v"()3246 %vec1 = call <4 x i16> asm "; def $0", "=v"()3247 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3248 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3249 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 1>3250 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83251 ret void3252}3253 3254define void @v_shuffle_v4i16_v3i16__5_5_4_1(ptr addrspace(1) inreg %ptr) {3255; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_1:3256; GFX900: ; %bb.0:3257; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3258; GFX900-NEXT: ;;#ASMSTART3259; GFX900-NEXT: ; def v[0:1]3260; GFX900-NEXT: ;;#ASMEND3261; GFX900-NEXT: ;;#ASMSTART3262; GFX900-NEXT: ; def v[1:2]3263; GFX900-NEXT: ;;#ASMEND3264; GFX900-NEXT: s_mov_b32 s4, 0x70603023265; GFX900-NEXT: v_perm_b32 v1, v0, v1, s43266; GFX900-NEXT: s_mov_b32 s4, 0x50401003267; GFX900-NEXT: v_mov_b32_e32 v3, 03268; GFX900-NEXT: v_perm_b32 v0, v2, v2, s43269; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]3270; GFX900-NEXT: s_waitcnt vmcnt(0)3271; GFX900-NEXT: s_setpc_b64 s[30:31]3272;3273; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_1:3274; GFX90A: ; %bb.0:3275; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3276; GFX90A-NEXT: ;;#ASMSTART3277; GFX90A-NEXT: ; def v[0:1]3278; GFX90A-NEXT: ;;#ASMEND3279; GFX90A-NEXT: s_mov_b32 s4, 0x70603023280; GFX90A-NEXT: ;;#ASMSTART3281; GFX90A-NEXT: ; def v[2:3]3282; GFX90A-NEXT: ;;#ASMEND3283; GFX90A-NEXT: v_perm_b32 v1, v0, v2, s43284; GFX90A-NEXT: s_mov_b32 s4, 0x50401003285; GFX90A-NEXT: v_mov_b32_e32 v4, 03286; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s43287; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3288; GFX90A-NEXT: s_waitcnt vmcnt(0)3289; GFX90A-NEXT: s_setpc_b64 s[30:31]3290;3291; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_1:3292; GFX942: ; %bb.0:3293; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3294; GFX942-NEXT: ;;#ASMSTART3295; GFX942-NEXT: ; def v[0:1]3296; GFX942-NEXT: ;;#ASMEND3297; GFX942-NEXT: s_mov_b32 s2, 0x70603023298; GFX942-NEXT: ;;#ASMSTART3299; GFX942-NEXT: ; def v[2:3]3300; GFX942-NEXT: ;;#ASMEND3301; GFX942-NEXT: v_mov_b32_e32 v4, 03302; GFX942-NEXT: v_perm_b32 v1, v0, v2, s23303; GFX942-NEXT: s_mov_b32 s2, 0x50401003304; GFX942-NEXT: v_perm_b32 v0, v3, v3, s23305; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3306; GFX942-NEXT: s_waitcnt vmcnt(0)3307; GFX942-NEXT: s_setpc_b64 s[30:31]3308 %vec0 = call <4 x i16> asm "; def $0", "=v"()3309 %vec1 = call <4 x i16> asm "; def $0", "=v"()3310 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3311 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3312 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 1>3313 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83314 ret void3315}3316 3317define void @v_shuffle_v4i16_v3i16__u_2_2_2(ptr addrspace(1) inreg %ptr) {3318; GFX900-LABEL: v_shuffle_v4i16_v3i16__u_2_2_2:3319; GFX900: ; %bb.0:3320; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3321; GFX900-NEXT: ;;#ASMSTART3322; GFX900-NEXT: ; def v[0:1]3323; GFX900-NEXT: ;;#ASMEND3324; GFX900-NEXT: s_mov_b32 s4, 0x50401003325; GFX900-NEXT: v_mov_b32_e32 v3, 03326; GFX900-NEXT: v_perm_b32 v2, v1, v1, s43327; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v13328; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]3329; GFX900-NEXT: s_waitcnt vmcnt(0)3330; GFX900-NEXT: s_setpc_b64 s[30:31]3331;3332; GFX90A-LABEL: v_shuffle_v4i16_v3i16__u_2_2_2:3333; GFX90A: ; %bb.0:3334; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3335; GFX90A-NEXT: s_mov_b32 s4, 0x50401003336; GFX90A-NEXT: v_mov_b32_e32 v4, 03337; GFX90A-NEXT: ;;#ASMSTART3338; GFX90A-NEXT: ; def v[0:1]3339; GFX90A-NEXT: ;;#ASMEND3340; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s43341; GFX90A-NEXT: v_lshlrev_b32_e32 v2, 16, v13342; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3343; GFX90A-NEXT: s_waitcnt vmcnt(0)3344; GFX90A-NEXT: s_setpc_b64 s[30:31]3345;3346; GFX942-LABEL: v_shuffle_v4i16_v3i16__u_2_2_2:3347; GFX942: ; %bb.0:3348; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3349; GFX942-NEXT: s_mov_b32 s2, 0x50401003350; GFX942-NEXT: v_mov_b32_e32 v4, 03351; GFX942-NEXT: ;;#ASMSTART3352; GFX942-NEXT: ; def v[0:1]3353; GFX942-NEXT: ;;#ASMEND3354; GFX942-NEXT: s_nop 03355; GFX942-NEXT: v_perm_b32 v3, v1, v1, s23356; GFX942-NEXT: v_lshlrev_b32_e32 v2, 16, v13357; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3358; GFX942-NEXT: s_waitcnt vmcnt(0)3359; GFX942-NEXT: s_setpc_b64 s[30:31]3360 %vec0 = call <4 x i16> asm "; def $0", "=v"()3361 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3362 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>3363 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83364 ret void3365}3366 3367define void @v_shuffle_v4i16_v3i16__0_2_2_2(ptr addrspace(1) inreg %ptr) {3368; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_2_2_2:3369; GFX900: ; %bb.0:3370; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3371; GFX900-NEXT: ;;#ASMSTART3372; GFX900-NEXT: ; def v[0:1]3373; GFX900-NEXT: ;;#ASMEND3374; GFX900-NEXT: s_mov_b32 s4, 0x50401003375; GFX900-NEXT: v_mov_b32_e32 v2, 03376; GFX900-NEXT: v_perm_b32 v0, v1, v0, s43377; GFX900-NEXT: v_perm_b32 v1, v1, v1, s43378; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3379; GFX900-NEXT: s_waitcnt vmcnt(0)3380; GFX900-NEXT: s_setpc_b64 s[30:31]3381;3382; GFX90A-LABEL: v_shuffle_v4i16_v3i16__0_2_2_2:3383; GFX90A: ; %bb.0:3384; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3385; GFX90A-NEXT: ;;#ASMSTART3386; GFX90A-NEXT: ; def v[0:1]3387; GFX90A-NEXT: ;;#ASMEND3388; GFX90A-NEXT: s_mov_b32 s4, 0x50401003389; GFX90A-NEXT: v_mov_b32_e32 v2, 03390; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s43391; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43392; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3393; GFX90A-NEXT: s_waitcnt vmcnt(0)3394; GFX90A-NEXT: s_setpc_b64 s[30:31]3395;3396; GFX942-LABEL: v_shuffle_v4i16_v3i16__0_2_2_2:3397; GFX942: ; %bb.0:3398; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3399; GFX942-NEXT: ;;#ASMSTART3400; GFX942-NEXT: ; def v[0:1]3401; GFX942-NEXT: ;;#ASMEND3402; GFX942-NEXT: s_mov_b32 s2, 0x50401003403; GFX942-NEXT: v_mov_b32_e32 v2, 03404; GFX942-NEXT: v_perm_b32 v0, v1, v0, s23405; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23406; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3407; GFX942-NEXT: s_waitcnt vmcnt(0)3408; GFX942-NEXT: s_setpc_b64 s[30:31]3409 %vec0 = call <4 x i16> asm "; def $0", "=v"()3410 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3411 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>3412 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83413 ret void3414}3415 3416define void @v_shuffle_v4i16_v3i16__1_2_2_2(ptr addrspace(1) inreg %ptr) {3417; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_2_2_2:3418; GFX900: ; %bb.0:3419; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3420; GFX900-NEXT: ;;#ASMSTART3421; GFX900-NEXT: ; def v[0:1]3422; GFX900-NEXT: ;;#ASMEND3423; GFX900-NEXT: s_mov_b32 s4, 0x50401003424; GFX900-NEXT: v_mov_b32_e32 v3, 03425; GFX900-NEXT: v_perm_b32 v2, v1, v1, s43426; GFX900-NEXT: v_alignbit_b32 v1, v1, v0, 163427; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]3428; GFX900-NEXT: s_waitcnt vmcnt(0)3429; GFX900-NEXT: s_setpc_b64 s[30:31]3430;3431; GFX90A-LABEL: v_shuffle_v4i16_v3i16__1_2_2_2:3432; GFX90A: ; %bb.0:3433; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3434; GFX90A-NEXT: s_mov_b32 s4, 0x50401003435; GFX90A-NEXT: v_mov_b32_e32 v4, 03436; GFX90A-NEXT: ;;#ASMSTART3437; GFX90A-NEXT: ; def v[0:1]3438; GFX90A-NEXT: ;;#ASMEND3439; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s43440; GFX90A-NEXT: v_alignbit_b32 v2, v1, v0, 163441; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3442; GFX90A-NEXT: s_waitcnt vmcnt(0)3443; GFX90A-NEXT: s_setpc_b64 s[30:31]3444;3445; GFX942-LABEL: v_shuffle_v4i16_v3i16__1_2_2_2:3446; GFX942: ; %bb.0:3447; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3448; GFX942-NEXT: s_mov_b32 s2, 0x50401003449; GFX942-NEXT: v_mov_b32_e32 v4, 03450; GFX942-NEXT: ;;#ASMSTART3451; GFX942-NEXT: ; def v[0:1]3452; GFX942-NEXT: ;;#ASMEND3453; GFX942-NEXT: s_nop 03454; GFX942-NEXT: v_perm_b32 v3, v1, v1, s23455; GFX942-NEXT: v_alignbit_b32 v2, v1, v0, 163456; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3457; GFX942-NEXT: s_waitcnt vmcnt(0)3458; GFX942-NEXT: s_setpc_b64 s[30:31]3459 %vec0 = call <4 x i16> asm "; def $0", "=v"()3460 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3461 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>3462 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83463 ret void3464}3465 3466define void @v_shuffle_v4i16_v3i16__2_2_2_2(ptr addrspace(1) inreg %ptr) {3467; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_2_2_2:3468; GFX900: ; %bb.0:3469; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3470; GFX900-NEXT: ;;#ASMSTART3471; GFX900-NEXT: ; def v[0:1]3472; GFX900-NEXT: ;;#ASMEND3473; GFX900-NEXT: s_mov_b32 s4, 0x50401003474; GFX900-NEXT: v_perm_b32 v0, v1, v1, s43475; GFX900-NEXT: v_mov_b32_e32 v2, 03476; GFX900-NEXT: v_mov_b32_e32 v1, v03477; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3478; GFX900-NEXT: s_waitcnt vmcnt(0)3479; GFX900-NEXT: s_setpc_b64 s[30:31]3480;3481; GFX90A-LABEL: v_shuffle_v4i16_v3i16__2_2_2_2:3482; GFX90A: ; %bb.0:3483; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3484; GFX90A-NEXT: ;;#ASMSTART3485; GFX90A-NEXT: ; def v[0:1]3486; GFX90A-NEXT: ;;#ASMEND3487; GFX90A-NEXT: s_mov_b32 s4, 0x50401003488; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s43489; GFX90A-NEXT: v_mov_b32_e32 v2, 03490; GFX90A-NEXT: v_mov_b32_e32 v1, v03491; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3492; GFX90A-NEXT: s_waitcnt vmcnt(0)3493; GFX90A-NEXT: s_setpc_b64 s[30:31]3494;3495; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_2_2_2:3496; GFX942: ; %bb.0:3497; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3498; GFX942-NEXT: ;;#ASMSTART3499; GFX942-NEXT: ; def v[0:1]3500; GFX942-NEXT: ;;#ASMEND3501; GFX942-NEXT: s_mov_b32 s2, 0x50401003502; GFX942-NEXT: v_perm_b32 v0, v1, v1, s23503; GFX942-NEXT: v_mov_b32_e32 v2, 03504; GFX942-NEXT: v_mov_b32_e32 v1, v03505; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3506; GFX942-NEXT: s_waitcnt vmcnt(0)3507; GFX942-NEXT: s_setpc_b64 s[30:31]3508 %vec0 = call <4 x i16> asm "; def $0", "=v"()3509 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3510 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>3511 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83512 ret void3513}3514 3515define void @v_shuffle_v4i16_v3i16__3_2_2_2(ptr addrspace(1) inreg %ptr) {3516; GFX900-LABEL: v_shuffle_v4i16_v3i16__3_2_2_2:3517; GFX900: ; %bb.0:3518; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3519; GFX900-NEXT: ;;#ASMSTART3520; GFX900-NEXT: ; def v[0:1]3521; GFX900-NEXT: ;;#ASMEND3522; GFX900-NEXT: s_mov_b32 s4, 0x50401003523; GFX900-NEXT: v_mov_b32_e32 v3, 03524; GFX900-NEXT: v_perm_b32 v2, v1, v1, s43525; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v13526; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]3527; GFX900-NEXT: s_waitcnt vmcnt(0)3528; GFX900-NEXT: s_setpc_b64 s[30:31]3529;3530; GFX90A-LABEL: v_shuffle_v4i16_v3i16__3_2_2_2:3531; GFX90A: ; %bb.0:3532; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3533; GFX90A-NEXT: s_mov_b32 s4, 0x50401003534; GFX90A-NEXT: v_mov_b32_e32 v4, 03535; GFX90A-NEXT: ;;#ASMSTART3536; GFX90A-NEXT: ; def v[0:1]3537; GFX90A-NEXT: ;;#ASMEND3538; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s43539; GFX90A-NEXT: v_lshlrev_b32_e32 v2, 16, v13540; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3541; GFX90A-NEXT: s_waitcnt vmcnt(0)3542; GFX90A-NEXT: s_setpc_b64 s[30:31]3543;3544; GFX942-LABEL: v_shuffle_v4i16_v3i16__3_2_2_2:3545; GFX942: ; %bb.0:3546; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3547; GFX942-NEXT: s_mov_b32 s2, 0x50401003548; GFX942-NEXT: v_mov_b32_e32 v4, 03549; GFX942-NEXT: ;;#ASMSTART3550; GFX942-NEXT: ; def v[0:1]3551; GFX942-NEXT: ;;#ASMEND3552; GFX942-NEXT: s_nop 03553; GFX942-NEXT: v_perm_b32 v3, v1, v1, s23554; GFX942-NEXT: v_lshlrev_b32_e32 v2, 16, v13555; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3556; GFX942-NEXT: s_waitcnt vmcnt(0)3557; GFX942-NEXT: s_setpc_b64 s[30:31]3558 %vec0 = call <4 x i16> asm "; def $0", "=v"()3559 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3560 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>3561 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83562 ret void3563}3564 3565define void @v_shuffle_v4i16_v3i16__4_2_2_2(ptr addrspace(1) inreg %ptr) {3566; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_2_2_2:3567; GFX900: ; %bb.0:3568; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3569; GFX900-NEXT: ;;#ASMSTART3570; GFX900-NEXT: ; def v[2:3]3571; GFX900-NEXT: ;;#ASMEND3572; GFX900-NEXT: s_mov_b32 s4, 0x50401003573; GFX900-NEXT: v_mov_b32_e32 v4, 03574; GFX900-NEXT: ;;#ASMSTART3575; GFX900-NEXT: ; def v[0:1]3576; GFX900-NEXT: ;;#ASMEND3577; GFX900-NEXT: v_perm_b32 v3, v1, v1, s43578; GFX900-NEXT: v_alignbit_b32 v2, v1, v2, 163579; GFX900-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3580; GFX900-NEXT: s_waitcnt vmcnt(0)3581; GFX900-NEXT: s_setpc_b64 s[30:31]3582;3583; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_2_2_2:3584; GFX90A: ; %bb.0:3585; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3586; GFX90A-NEXT: ;;#ASMSTART3587; GFX90A-NEXT: ; def v[2:3]3588; GFX90A-NEXT: ;;#ASMEND3589; GFX90A-NEXT: s_mov_b32 s4, 0x50401003590; GFX90A-NEXT: v_mov_b32_e32 v4, 03591; GFX90A-NEXT: ;;#ASMSTART3592; GFX90A-NEXT: ; def v[0:1]3593; GFX90A-NEXT: ;;#ASMEND3594; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s43595; GFX90A-NEXT: v_alignbit_b32 v2, v1, v2, 163596; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]3597; GFX90A-NEXT: s_waitcnt vmcnt(0)3598; GFX90A-NEXT: s_setpc_b64 s[30:31]3599;3600; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_2_2_2:3601; GFX942: ; %bb.0:3602; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3603; GFX942-NEXT: ;;#ASMSTART3604; GFX942-NEXT: ; def v[2:3]3605; GFX942-NEXT: ;;#ASMEND3606; GFX942-NEXT: s_mov_b32 s2, 0x50401003607; GFX942-NEXT: v_mov_b32_e32 v4, 03608; GFX942-NEXT: ;;#ASMSTART3609; GFX942-NEXT: ; def v[0:1]3610; GFX942-NEXT: ;;#ASMEND3611; GFX942-NEXT: s_nop 03612; GFX942-NEXT: v_perm_b32 v3, v1, v1, s23613; GFX942-NEXT: v_alignbit_b32 v2, v1, v2, 163614; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]3615; GFX942-NEXT: s_waitcnt vmcnt(0)3616; GFX942-NEXT: s_setpc_b64 s[30:31]3617 %vec0 = call <4 x i16> asm "; def $0", "=v"()3618 %vec1 = call <4 x i16> asm "; def $0", "=v"()3619 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3620 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3621 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 2, i32 2, i32 2>3622 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83623 ret void3624}3625 3626define void @v_shuffle_v4i16_v3i16__5_2_2_2(ptr addrspace(1) inreg %ptr) {3627; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_2_2:3628; GFX900: ; %bb.0:3629; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3630; GFX900-NEXT: ;;#ASMSTART3631; GFX900-NEXT: ; def v[0:1]3632; GFX900-NEXT: ;;#ASMEND3633; GFX900-NEXT: s_mov_b32 s4, 0x50401003634; GFX900-NEXT: v_mov_b32_e32 v4, 03635; GFX900-NEXT: ;;#ASMSTART3636; GFX900-NEXT: ; def v[2:3]3637; GFX900-NEXT: ;;#ASMEND3638; GFX900-NEXT: v_perm_b32 v0, v1, v3, s43639; GFX900-NEXT: v_perm_b32 v1, v1, v1, s43640; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3641; GFX900-NEXT: s_waitcnt vmcnt(0)3642; GFX900-NEXT: s_setpc_b64 s[30:31]3643;3644; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_2_2:3645; GFX90A: ; %bb.0:3646; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3647; GFX90A-NEXT: ;;#ASMSTART3648; GFX90A-NEXT: ; def v[0:1]3649; GFX90A-NEXT: ;;#ASMEND3650; GFX90A-NEXT: s_mov_b32 s4, 0x50401003651; GFX90A-NEXT: v_mov_b32_e32 v4, 03652; GFX90A-NEXT: ;;#ASMSTART3653; GFX90A-NEXT: ; def v[2:3]3654; GFX90A-NEXT: ;;#ASMEND3655; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s43656; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43657; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3658; GFX90A-NEXT: s_waitcnt vmcnt(0)3659; GFX90A-NEXT: s_setpc_b64 s[30:31]3660;3661; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_2_2:3662; GFX942: ; %bb.0:3663; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3664; GFX942-NEXT: ;;#ASMSTART3665; GFX942-NEXT: ; def v[0:1]3666; GFX942-NEXT: ;;#ASMEND3667; GFX942-NEXT: s_mov_b32 s2, 0x50401003668; GFX942-NEXT: v_mov_b32_e32 v4, 03669; GFX942-NEXT: ;;#ASMSTART3670; GFX942-NEXT: ; def v[2:3]3671; GFX942-NEXT: ;;#ASMEND3672; GFX942-NEXT: s_nop 03673; GFX942-NEXT: v_perm_b32 v0, v1, v3, s23674; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23675; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3676; GFX942-NEXT: s_waitcnt vmcnt(0)3677; GFX942-NEXT: s_setpc_b64 s[30:31]3678 %vec0 = call <4 x i16> asm "; def $0", "=v"()3679 %vec1 = call <4 x i16> asm "; def $0", "=v"()3680 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3681 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3682 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 2, i32 2>3683 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83684 ret void3685}3686 3687define void @v_shuffle_v4i16_v3i16__5_u_2_2(ptr addrspace(1) inreg %ptr) {3688; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_2_2:3689; GFX900: ; %bb.0:3690; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3691; GFX900-NEXT: ;;#ASMSTART3692; GFX900-NEXT: ; def v[1:2]3693; GFX900-NEXT: ;;#ASMEND3694; GFX900-NEXT: s_mov_b32 s4, 0x50401003695; GFX900-NEXT: v_mov_b32_e32 v3, 03696; GFX900-NEXT: v_perm_b32 v2, v2, v2, s43697; GFX900-NEXT: ;;#ASMSTART3698; GFX900-NEXT: ; def v[0:1]3699; GFX900-NEXT: ;;#ASMEND3700; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]3701; GFX900-NEXT: s_waitcnt vmcnt(0)3702; GFX900-NEXT: s_setpc_b64 s[30:31]3703;3704; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_2_2:3705; GFX90A: ; %bb.0:3706; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3707; GFX90A-NEXT: ;;#ASMSTART3708; GFX90A-NEXT: ; def v[0:1]3709; GFX90A-NEXT: ;;#ASMEND3710; GFX90A-NEXT: s_mov_b32 s4, 0x50401003711; GFX90A-NEXT: v_mov_b32_e32 v4, 03712; GFX90A-NEXT: ;;#ASMSTART3713; GFX90A-NEXT: ; def v[2:3]3714; GFX90A-NEXT: ;;#ASMEND3715; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43716; GFX90A-NEXT: v_mov_b32_e32 v0, v33717; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3718; GFX90A-NEXT: s_waitcnt vmcnt(0)3719; GFX90A-NEXT: s_setpc_b64 s[30:31]3720;3721; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_2_2:3722; GFX942: ; %bb.0:3723; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3724; GFX942-NEXT: ;;#ASMSTART3725; GFX942-NEXT: ; def v[0:1]3726; GFX942-NEXT: ;;#ASMEND3727; GFX942-NEXT: s_mov_b32 s2, 0x50401003728; GFX942-NEXT: v_mov_b32_e32 v4, 03729; GFX942-NEXT: ;;#ASMSTART3730; GFX942-NEXT: ; def v[2:3]3731; GFX942-NEXT: ;;#ASMEND3732; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23733; GFX942-NEXT: v_mov_b32_e32 v0, v33734; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3735; GFX942-NEXT: s_waitcnt vmcnt(0)3736; GFX942-NEXT: s_setpc_b64 s[30:31]3737 %vec0 = call <4 x i16> asm "; def $0", "=v"()3738 %vec1 = call <4 x i16> asm "; def $0", "=v"()3739 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3740 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3741 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>3742 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83743 ret void3744}3745 3746define void @v_shuffle_v4i16_v3i16__5_0_2_2(ptr addrspace(1) inreg %ptr) {3747; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_2_2:3748; GFX900: ; %bb.0:3749; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3750; GFX900-NEXT: ;;#ASMSTART3751; GFX900-NEXT: ; def v[0:1]3752; GFX900-NEXT: ;;#ASMEND3753; GFX900-NEXT: s_mov_b32 s4, 0x50401003754; GFX900-NEXT: v_mov_b32_e32 v4, 03755; GFX900-NEXT: ;;#ASMSTART3756; GFX900-NEXT: ; def v[2:3]3757; GFX900-NEXT: ;;#ASMEND3758; GFX900-NEXT: v_perm_b32 v0, v0, v3, s43759; GFX900-NEXT: v_perm_b32 v1, v1, v1, s43760; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3761; GFX900-NEXT: s_waitcnt vmcnt(0)3762; GFX900-NEXT: s_setpc_b64 s[30:31]3763;3764; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_2_2:3765; GFX90A: ; %bb.0:3766; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3767; GFX90A-NEXT: ;;#ASMSTART3768; GFX90A-NEXT: ; def v[0:1]3769; GFX90A-NEXT: ;;#ASMEND3770; GFX90A-NEXT: s_mov_b32 s4, 0x50401003771; GFX90A-NEXT: v_mov_b32_e32 v4, 03772; GFX90A-NEXT: ;;#ASMSTART3773; GFX90A-NEXT: ; def v[2:3]3774; GFX90A-NEXT: ;;#ASMEND3775; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s43776; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43777; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3778; GFX90A-NEXT: s_waitcnt vmcnt(0)3779; GFX90A-NEXT: s_setpc_b64 s[30:31]3780;3781; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_2_2:3782; GFX942: ; %bb.0:3783; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3784; GFX942-NEXT: ;;#ASMSTART3785; GFX942-NEXT: ; def v[0:1]3786; GFX942-NEXT: ;;#ASMEND3787; GFX942-NEXT: s_mov_b32 s2, 0x50401003788; GFX942-NEXT: v_mov_b32_e32 v4, 03789; GFX942-NEXT: ;;#ASMSTART3790; GFX942-NEXT: ; def v[2:3]3791; GFX942-NEXT: ;;#ASMEND3792; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23793; GFX942-NEXT: v_perm_b32 v0, v0, v3, s23794; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3795; GFX942-NEXT: s_waitcnt vmcnt(0)3796; GFX942-NEXT: s_setpc_b64 s[30:31]3797 %vec0 = call <4 x i16> asm "; def $0", "=v"()3798 %vec1 = call <4 x i16> asm "; def $0", "=v"()3799 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3800 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3801 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 2, i32 2>3802 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83803 ret void3804}3805 3806define void @v_shuffle_v4i16_v3i16__5_1_2_2(ptr addrspace(1) inreg %ptr) {3807; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_2_2:3808; GFX900: ; %bb.0:3809; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3810; GFX900-NEXT: ;;#ASMSTART3811; GFX900-NEXT: ; def v[0:1]3812; GFX900-NEXT: ;;#ASMEND3813; GFX900-NEXT: s_mov_b32 s4, 0xffff3814; GFX900-NEXT: ;;#ASMSTART3815; GFX900-NEXT: ; def v[2:3]3816; GFX900-NEXT: ;;#ASMEND3817; GFX900-NEXT: v_bfi_b32 v0, s4, v3, v03818; GFX900-NEXT: s_mov_b32 s4, 0x50401003819; GFX900-NEXT: v_mov_b32_e32 v4, 03820; GFX900-NEXT: v_perm_b32 v1, v1, v1, s43821; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3822; GFX900-NEXT: s_waitcnt vmcnt(0)3823; GFX900-NEXT: s_setpc_b64 s[30:31]3824;3825; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_2_2:3826; GFX90A: ; %bb.0:3827; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3828; GFX90A-NEXT: ;;#ASMSTART3829; GFX90A-NEXT: ; def v[0:1]3830; GFX90A-NEXT: ;;#ASMEND3831; GFX90A-NEXT: s_mov_b32 s4, 0xffff3832; GFX90A-NEXT: ;;#ASMSTART3833; GFX90A-NEXT: ; def v[2:3]3834; GFX90A-NEXT: ;;#ASMEND3835; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v03836; GFX90A-NEXT: s_mov_b32 s4, 0x50401003837; GFX90A-NEXT: v_mov_b32_e32 v4, 03838; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43839; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3840; GFX90A-NEXT: s_waitcnt vmcnt(0)3841; GFX90A-NEXT: s_setpc_b64 s[30:31]3842;3843; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_2_2:3844; GFX942: ; %bb.0:3845; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3846; GFX942-NEXT: ;;#ASMSTART3847; GFX942-NEXT: ; def v[0:1]3848; GFX942-NEXT: ;;#ASMEND3849; GFX942-NEXT: s_mov_b32 s2, 0xffff3850; GFX942-NEXT: ;;#ASMSTART3851; GFX942-NEXT: ; def v[2:3]3852; GFX942-NEXT: ;;#ASMEND3853; GFX942-NEXT: v_mov_b32_e32 v4, 03854; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v03855; GFX942-NEXT: s_mov_b32 s2, 0x50401003856; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23857; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3858; GFX942-NEXT: s_waitcnt vmcnt(0)3859; GFX942-NEXT: s_setpc_b64 s[30:31]3860 %vec0 = call <4 x i16> asm "; def $0", "=v"()3861 %vec1 = call <4 x i16> asm "; def $0", "=v"()3862 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3863 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3864 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 2, i32 2>3865 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83866 ret void3867}3868 3869define void @v_shuffle_v4i16_v3i16__5_3_2_2(ptr addrspace(1) inreg %ptr) {3870; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_2_2:3871; GFX900: ; %bb.0:3872; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3873; GFX900-NEXT: ;;#ASMSTART3874; GFX900-NEXT: ; def v[0:1]3875; GFX900-NEXT: ;;#ASMEND3876; GFX900-NEXT: s_mov_b32 s4, 0x50401003877; GFX900-NEXT: v_mov_b32_e32 v4, 03878; GFX900-NEXT: ;;#ASMSTART3879; GFX900-NEXT: ; def v[2:3]3880; GFX900-NEXT: ;;#ASMEND3881; GFX900-NEXT: v_perm_b32 v0, v2, v3, s43882; GFX900-NEXT: v_perm_b32 v1, v1, v1, s43883; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3884; GFX900-NEXT: s_waitcnt vmcnt(0)3885; GFX900-NEXT: s_setpc_b64 s[30:31]3886;3887; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_3_2_2:3888; GFX90A: ; %bb.0:3889; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3890; GFX90A-NEXT: ;;#ASMSTART3891; GFX90A-NEXT: ; def v[0:1]3892; GFX90A-NEXT: ;;#ASMEND3893; GFX90A-NEXT: s_mov_b32 s4, 0x50401003894; GFX90A-NEXT: v_mov_b32_e32 v4, 03895; GFX90A-NEXT: ;;#ASMSTART3896; GFX90A-NEXT: ; def v[2:3]3897; GFX90A-NEXT: ;;#ASMEND3898; GFX90A-NEXT: v_perm_b32 v0, v2, v3, s43899; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43900; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3901; GFX90A-NEXT: s_waitcnt vmcnt(0)3902; GFX90A-NEXT: s_setpc_b64 s[30:31]3903;3904; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_2_2:3905; GFX942: ; %bb.0:3906; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3907; GFX942-NEXT: ;;#ASMSTART3908; GFX942-NEXT: ; def v[0:1]3909; GFX942-NEXT: ;;#ASMEND3910; GFX942-NEXT: s_mov_b32 s2, 0x50401003911; GFX942-NEXT: v_mov_b32_e32 v4, 03912; GFX942-NEXT: ;;#ASMSTART3913; GFX942-NEXT: ; def v[2:3]3914; GFX942-NEXT: ;;#ASMEND3915; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23916; GFX942-NEXT: v_perm_b32 v0, v2, v3, s23917; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3918; GFX942-NEXT: s_waitcnt vmcnt(0)3919; GFX942-NEXT: s_setpc_b64 s[30:31]3920 %vec0 = call <4 x i16> asm "; def $0", "=v"()3921 %vec1 = call <4 x i16> asm "; def $0", "=v"()3922 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3923 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3924 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 2, i32 2>3925 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83926 ret void3927}3928 3929define void @v_shuffle_v4i16_v3i16__5_4_2_2(ptr addrspace(1) inreg %ptr) {3930; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_2_2:3931; GFX900: ; %bb.0:3932; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3933; GFX900-NEXT: ;;#ASMSTART3934; GFX900-NEXT: ; def v[0:1]3935; GFX900-NEXT: ;;#ASMEND3936; GFX900-NEXT: s_mov_b32 s4, 0xffff3937; GFX900-NEXT: ;;#ASMSTART3938; GFX900-NEXT: ; def v[2:3]3939; GFX900-NEXT: ;;#ASMEND3940; GFX900-NEXT: v_bfi_b32 v0, s4, v3, v23941; GFX900-NEXT: s_mov_b32 s4, 0x50401003942; GFX900-NEXT: v_mov_b32_e32 v4, 03943; GFX900-NEXT: v_perm_b32 v1, v1, v1, s43944; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3945; GFX900-NEXT: s_waitcnt vmcnt(0)3946; GFX900-NEXT: s_setpc_b64 s[30:31]3947;3948; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_2_2:3949; GFX90A: ; %bb.0:3950; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3951; GFX90A-NEXT: ;;#ASMSTART3952; GFX90A-NEXT: ; def v[0:1]3953; GFX90A-NEXT: ;;#ASMEND3954; GFX90A-NEXT: s_mov_b32 s4, 0xffff3955; GFX90A-NEXT: ;;#ASMSTART3956; GFX90A-NEXT: ; def v[2:3]3957; GFX90A-NEXT: ;;#ASMEND3958; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v23959; GFX90A-NEXT: s_mov_b32 s4, 0x50401003960; GFX90A-NEXT: v_mov_b32_e32 v4, 03961; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s43962; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]3963; GFX90A-NEXT: s_waitcnt vmcnt(0)3964; GFX90A-NEXT: s_setpc_b64 s[30:31]3965;3966; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_2_2:3967; GFX942: ; %bb.0:3968; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3969; GFX942-NEXT: ;;#ASMSTART3970; GFX942-NEXT: ; def v[0:1]3971; GFX942-NEXT: ;;#ASMEND3972; GFX942-NEXT: s_mov_b32 s2, 0xffff3973; GFX942-NEXT: ;;#ASMSTART3974; GFX942-NEXT: ; def v[2:3]3975; GFX942-NEXT: ;;#ASMEND3976; GFX942-NEXT: v_mov_b32_e32 v4, 03977; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v23978; GFX942-NEXT: s_mov_b32 s2, 0x50401003979; GFX942-NEXT: v_perm_b32 v1, v1, v1, s23980; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]3981; GFX942-NEXT: s_waitcnt vmcnt(0)3982; GFX942-NEXT: s_setpc_b64 s[30:31]3983 %vec0 = call <4 x i16> asm "; def $0", "=v"()3984 %vec1 = call <4 x i16> asm "; def $0", "=v"()3985 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3986 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>3987 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 2, i32 2>3988 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 83989 ret void3990}3991 3992define void @v_shuffle_v4i16_v3i16__5_5_2_2(ptr addrspace(1) inreg %ptr) {3993; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_2:3994; GFX900: ; %bb.0:3995; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3996; GFX900-NEXT: ;;#ASMSTART3997; GFX900-NEXT: ; def v[0:1]3998; GFX900-NEXT: ;;#ASMEND3999; GFX900-NEXT: s_mov_b32 s4, 0x50401004000; GFX900-NEXT: v_mov_b32_e32 v4, 04001; GFX900-NEXT: ;;#ASMSTART4002; GFX900-NEXT: ; def v[2:3]4003; GFX900-NEXT: ;;#ASMEND4004; GFX900-NEXT: v_perm_b32 v1, v1, v1, s44005; GFX900-NEXT: v_perm_b32 v0, v3, v3, s44006; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4007; GFX900-NEXT: s_waitcnt vmcnt(0)4008; GFX900-NEXT: s_setpc_b64 s[30:31]4009;4010; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_2:4011; GFX90A: ; %bb.0:4012; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4013; GFX90A-NEXT: ;;#ASMSTART4014; GFX90A-NEXT: ; def v[0:1]4015; GFX90A-NEXT: ;;#ASMEND4016; GFX90A-NEXT: s_mov_b32 s4, 0x50401004017; GFX90A-NEXT: v_mov_b32_e32 v4, 04018; GFX90A-NEXT: ;;#ASMSTART4019; GFX90A-NEXT: ; def v[2:3]4020; GFX90A-NEXT: ;;#ASMEND4021; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s44022; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s44023; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4024; GFX90A-NEXT: s_waitcnt vmcnt(0)4025; GFX90A-NEXT: s_setpc_b64 s[30:31]4026;4027; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_2_2:4028; GFX942: ; %bb.0:4029; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4030; GFX942-NEXT: ;;#ASMSTART4031; GFX942-NEXT: ; def v[0:1]4032; GFX942-NEXT: ;;#ASMEND4033; GFX942-NEXT: s_mov_b32 s2, 0x50401004034; GFX942-NEXT: v_mov_b32_e32 v4, 04035; GFX942-NEXT: ;;#ASMSTART4036; GFX942-NEXT: ; def v[2:3]4037; GFX942-NEXT: ;;#ASMEND4038; GFX942-NEXT: v_perm_b32 v1, v1, v1, s24039; GFX942-NEXT: v_perm_b32 v0, v3, v3, s24040; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4041; GFX942-NEXT: s_waitcnt vmcnt(0)4042; GFX942-NEXT: s_setpc_b64 s[30:31]4043 %vec0 = call <4 x i16> asm "; def $0", "=v"()4044 %vec1 = call <4 x i16> asm "; def $0", "=v"()4045 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4046 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4047 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 2>4048 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84049 ret void4050}4051 4052define void @v_shuffle_v4i16_v3i16__5_5_u_2(ptr addrspace(1) inreg %ptr) {4053; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_2:4054; GFX900: ; %bb.0:4055; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4056; GFX900-NEXT: ;;#ASMSTART4057; GFX900-NEXT: ; def v[0:1]4058; GFX900-NEXT: ;;#ASMEND4059; GFX900-NEXT: s_mov_b32 s4, 0x50401004060; GFX900-NEXT: v_mov_b32_e32 v4, 04061; GFX900-NEXT: ;;#ASMSTART4062; GFX900-NEXT: ; def v[2:3]4063; GFX900-NEXT: ;;#ASMEND4064; GFX900-NEXT: v_perm_b32 v0, v3, v3, s44065; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v14066; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4067; GFX900-NEXT: s_waitcnt vmcnt(0)4068; GFX900-NEXT: s_setpc_b64 s[30:31]4069;4070; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_2:4071; GFX90A: ; %bb.0:4072; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4073; GFX90A-NEXT: ;;#ASMSTART4074; GFX90A-NEXT: ; def v[0:1]4075; GFX90A-NEXT: ;;#ASMEND4076; GFX90A-NEXT: s_mov_b32 s4, 0x50401004077; GFX90A-NEXT: v_mov_b32_e32 v4, 04078; GFX90A-NEXT: ;;#ASMSTART4079; GFX90A-NEXT: ; def v[2:3]4080; GFX90A-NEXT: ;;#ASMEND4081; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s44082; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v14083; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4084; GFX90A-NEXT: s_waitcnt vmcnt(0)4085; GFX90A-NEXT: s_setpc_b64 s[30:31]4086;4087; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_2:4088; GFX942: ; %bb.0:4089; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4090; GFX942-NEXT: ;;#ASMSTART4091; GFX942-NEXT: ; def v[0:1]4092; GFX942-NEXT: ;;#ASMEND4093; GFX942-NEXT: s_mov_b32 s2, 0x50401004094; GFX942-NEXT: v_mov_b32_e32 v4, 04095; GFX942-NEXT: ;;#ASMSTART4096; GFX942-NEXT: ; def v[2:3]4097; GFX942-NEXT: ;;#ASMEND4098; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v14099; GFX942-NEXT: v_perm_b32 v0, v3, v3, s24100; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4101; GFX942-NEXT: s_waitcnt vmcnt(0)4102; GFX942-NEXT: s_setpc_b64 s[30:31]4103 %vec0 = call <4 x i16> asm "; def $0", "=v"()4104 %vec1 = call <4 x i16> asm "; def $0", "=v"()4105 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4106 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4107 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>4108 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84109 ret void4110}4111 4112define void @v_shuffle_v4i16_v3i16__5_5_0_2(ptr addrspace(1) inreg %ptr) {4113; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_2:4114; GFX900: ; %bb.0:4115; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4116; GFX900-NEXT: ;;#ASMSTART4117; GFX900-NEXT: ; def v[0:1]4118; GFX900-NEXT: ;;#ASMEND4119; GFX900-NEXT: s_mov_b32 s4, 0x50401004120; GFX900-NEXT: v_mov_b32_e32 v4, 04121; GFX900-NEXT: ;;#ASMSTART4122; GFX900-NEXT: ; def v[2:3]4123; GFX900-NEXT: ;;#ASMEND4124; GFX900-NEXT: v_perm_b32 v1, v1, v0, s44125; GFX900-NEXT: v_perm_b32 v0, v3, v3, s44126; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4127; GFX900-NEXT: s_waitcnt vmcnt(0)4128; GFX900-NEXT: s_setpc_b64 s[30:31]4129;4130; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_2:4131; GFX90A: ; %bb.0:4132; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4133; GFX90A-NEXT: ;;#ASMSTART4134; GFX90A-NEXT: ; def v[0:1]4135; GFX90A-NEXT: ;;#ASMEND4136; GFX90A-NEXT: s_mov_b32 s4, 0x50401004137; GFX90A-NEXT: v_mov_b32_e32 v4, 04138; GFX90A-NEXT: ;;#ASMSTART4139; GFX90A-NEXT: ; def v[2:3]4140; GFX90A-NEXT: ;;#ASMEND4141; GFX90A-NEXT: v_perm_b32 v1, v1, v0, s44142; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s44143; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4144; GFX90A-NEXT: s_waitcnt vmcnt(0)4145; GFX90A-NEXT: s_setpc_b64 s[30:31]4146;4147; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_2:4148; GFX942: ; %bb.0:4149; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4150; GFX942-NEXT: ;;#ASMSTART4151; GFX942-NEXT: ; def v[0:1]4152; GFX942-NEXT: ;;#ASMEND4153; GFX942-NEXT: s_mov_b32 s2, 0x50401004154; GFX942-NEXT: v_mov_b32_e32 v4, 04155; GFX942-NEXT: ;;#ASMSTART4156; GFX942-NEXT: ; def v[2:3]4157; GFX942-NEXT: ;;#ASMEND4158; GFX942-NEXT: v_perm_b32 v1, v1, v0, s24159; GFX942-NEXT: v_perm_b32 v0, v3, v3, s24160; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4161; GFX942-NEXT: s_waitcnt vmcnt(0)4162; GFX942-NEXT: s_setpc_b64 s[30:31]4163 %vec0 = call <4 x i16> asm "; def $0", "=v"()4164 %vec1 = call <4 x i16> asm "; def $0", "=v"()4165 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4166 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4167 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 2>4168 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84169 ret void4170}4171 4172define void @v_shuffle_v4i16_v3i16__5_5_1_2(ptr addrspace(1) inreg %ptr) {4173; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_2:4174; GFX900: ; %bb.0:4175; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4176; GFX900-NEXT: ;;#ASMSTART4177; GFX900-NEXT: ; def v[0:1]4178; GFX900-NEXT: ;;#ASMEND4179; GFX900-NEXT: s_mov_b32 s4, 0x50401004180; GFX900-NEXT: v_mov_b32_e32 v4, 04181; GFX900-NEXT: ;;#ASMSTART4182; GFX900-NEXT: ; def v[2:3]4183; GFX900-NEXT: ;;#ASMEND4184; GFX900-NEXT: v_alignbit_b32 v1, v1, v0, 164185; GFX900-NEXT: v_perm_b32 v0, v3, v3, s44186; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4187; GFX900-NEXT: s_waitcnt vmcnt(0)4188; GFX900-NEXT: s_setpc_b64 s[30:31]4189;4190; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_2:4191; GFX90A: ; %bb.0:4192; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4193; GFX90A-NEXT: ;;#ASMSTART4194; GFX90A-NEXT: ; def v[0:1]4195; GFX90A-NEXT: ;;#ASMEND4196; GFX90A-NEXT: s_mov_b32 s4, 0x50401004197; GFX90A-NEXT: v_mov_b32_e32 v4, 04198; GFX90A-NEXT: ;;#ASMSTART4199; GFX90A-NEXT: ; def v[2:3]4200; GFX90A-NEXT: ;;#ASMEND4201; GFX90A-NEXT: v_alignbit_b32 v1, v1, v0, 164202; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s44203; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4204; GFX90A-NEXT: s_waitcnt vmcnt(0)4205; GFX90A-NEXT: s_setpc_b64 s[30:31]4206;4207; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_2:4208; GFX942: ; %bb.0:4209; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4210; GFX942-NEXT: ;;#ASMSTART4211; GFX942-NEXT: ; def v[0:1]4212; GFX942-NEXT: ;;#ASMEND4213; GFX942-NEXT: s_mov_b32 s2, 0x50401004214; GFX942-NEXT: v_mov_b32_e32 v4, 04215; GFX942-NEXT: ;;#ASMSTART4216; GFX942-NEXT: ; def v[2:3]4217; GFX942-NEXT: ;;#ASMEND4218; GFX942-NEXT: v_alignbit_b32 v1, v1, v0, 164219; GFX942-NEXT: v_perm_b32 v0, v3, v3, s24220; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4221; GFX942-NEXT: s_waitcnt vmcnt(0)4222; GFX942-NEXT: s_setpc_b64 s[30:31]4223 %vec0 = call <4 x i16> asm "; def $0", "=v"()4224 %vec1 = call <4 x i16> asm "; def $0", "=v"()4225 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4226 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4227 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 2>4228 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84229 ret void4230}4231 4232define void @v_shuffle_v4i16_v3i16__5_5_3_2(ptr addrspace(1) inreg %ptr) {4233; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_2:4234; GFX900: ; %bb.0:4235; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4236; GFX900-NEXT: ;;#ASMSTART4237; GFX900-NEXT: ; def v[0:1]4238; GFX900-NEXT: ;;#ASMEND4239; GFX900-NEXT: s_mov_b32 s4, 0x50401004240; GFX900-NEXT: v_mov_b32_e32 v4, 04241; GFX900-NEXT: ;;#ASMSTART4242; GFX900-NEXT: ; def v[2:3]4243; GFX900-NEXT: ;;#ASMEND4244; GFX900-NEXT: v_perm_b32 v1, v1, v2, s44245; GFX900-NEXT: v_perm_b32 v0, v3, v3, s44246; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4247; GFX900-NEXT: s_waitcnt vmcnt(0)4248; GFX900-NEXT: s_setpc_b64 s[30:31]4249;4250; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_2:4251; GFX90A: ; %bb.0:4252; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4253; GFX90A-NEXT: ;;#ASMSTART4254; GFX90A-NEXT: ; def v[0:1]4255; GFX90A-NEXT: ;;#ASMEND4256; GFX90A-NEXT: s_mov_b32 s4, 0x50401004257; GFX90A-NEXT: v_mov_b32_e32 v4, 04258; GFX90A-NEXT: ;;#ASMSTART4259; GFX90A-NEXT: ; def v[2:3]4260; GFX90A-NEXT: ;;#ASMEND4261; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s44262; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s44263; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4264; GFX90A-NEXT: s_waitcnt vmcnt(0)4265; GFX90A-NEXT: s_setpc_b64 s[30:31]4266;4267; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_2:4268; GFX942: ; %bb.0:4269; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4270; GFX942-NEXT: ;;#ASMSTART4271; GFX942-NEXT: ; def v[0:1]4272; GFX942-NEXT: ;;#ASMEND4273; GFX942-NEXT: s_mov_b32 s2, 0x50401004274; GFX942-NEXT: v_mov_b32_e32 v4, 04275; GFX942-NEXT: ;;#ASMSTART4276; GFX942-NEXT: ; def v[2:3]4277; GFX942-NEXT: ;;#ASMEND4278; GFX942-NEXT: s_nop 04279; GFX942-NEXT: v_perm_b32 v1, v1, v2, s24280; GFX942-NEXT: v_perm_b32 v0, v3, v3, s24281; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4282; GFX942-NEXT: s_waitcnt vmcnt(0)4283; GFX942-NEXT: s_setpc_b64 s[30:31]4284 %vec0 = call <4 x i16> asm "; def $0", "=v"()4285 %vec1 = call <4 x i16> asm "; def $0", "=v"()4286 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4287 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4288 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 2>4289 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84290 ret void4291}4292 4293define void @v_shuffle_v4i16_v3i16__5_5_4_2(ptr addrspace(1) inreg %ptr) {4294; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_2:4295; GFX900: ; %bb.0:4296; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4297; GFX900-NEXT: ;;#ASMSTART4298; GFX900-NEXT: ; def v[0:1]4299; GFX900-NEXT: ;;#ASMEND4300; GFX900-NEXT: s_mov_b32 s4, 0x50401004301; GFX900-NEXT: v_mov_b32_e32 v4, 04302; GFX900-NEXT: ;;#ASMSTART4303; GFX900-NEXT: ; def v[2:3]4304; GFX900-NEXT: ;;#ASMEND4305; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 164306; GFX900-NEXT: v_perm_b32 v0, v3, v3, s44307; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4308; GFX900-NEXT: s_waitcnt vmcnt(0)4309; GFX900-NEXT: s_setpc_b64 s[30:31]4310;4311; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_2:4312; GFX90A: ; %bb.0:4313; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4314; GFX90A-NEXT: ;;#ASMSTART4315; GFX90A-NEXT: ; def v[0:1]4316; GFX90A-NEXT: ;;#ASMEND4317; GFX90A-NEXT: s_mov_b32 s4, 0x50401004318; GFX90A-NEXT: v_mov_b32_e32 v4, 04319; GFX90A-NEXT: ;;#ASMSTART4320; GFX90A-NEXT: ; def v[2:3]4321; GFX90A-NEXT: ;;#ASMEND4322; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 164323; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s44324; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4325; GFX90A-NEXT: s_waitcnt vmcnt(0)4326; GFX90A-NEXT: s_setpc_b64 s[30:31]4327;4328; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_2:4329; GFX942: ; %bb.0:4330; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4331; GFX942-NEXT: ;;#ASMSTART4332; GFX942-NEXT: ; def v[0:1]4333; GFX942-NEXT: ;;#ASMEND4334; GFX942-NEXT: s_mov_b32 s2, 0x50401004335; GFX942-NEXT: v_mov_b32_e32 v4, 04336; GFX942-NEXT: ;;#ASMSTART4337; GFX942-NEXT: ; def v[2:3]4338; GFX942-NEXT: ;;#ASMEND4339; GFX942-NEXT: s_nop 04340; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 164341; GFX942-NEXT: v_perm_b32 v0, v3, v3, s24342; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4343; GFX942-NEXT: s_waitcnt vmcnt(0)4344; GFX942-NEXT: s_setpc_b64 s[30:31]4345 %vec0 = call <4 x i16> asm "; def $0", "=v"()4346 %vec1 = call <4 x i16> asm "; def $0", "=v"()4347 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4348 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4349 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 2>4350 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84351 ret void4352}4353 4354define void @v_shuffle_v4i16_v3i16__u_3_3_3(ptr addrspace(1) inreg %ptr) {4355; GFX9-LABEL: v_shuffle_v4i16_v3i16__u_3_3_3:4356; GFX9: ; %bb.0:4357; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4358; GFX9-NEXT: s_setpc_b64 s[30:31]4359 %vec0 = call <4 x i16> asm "; def $0", "=v"()4360 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4361 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>4362 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84363 ret void4364}4365 4366define void @v_shuffle_v4i16_v3i16__0_3_3_3(ptr addrspace(1) inreg %ptr) {4367; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_3_3_3:4368; GFX900: ; %bb.0:4369; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4370; GFX900-NEXT: v_mov_b32_e32 v2, 04371; GFX900-NEXT: ;;#ASMSTART4372; GFX900-NEXT: ; def v[0:1]4373; GFX900-NEXT: ;;#ASMEND4374; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4375; GFX900-NEXT: s_waitcnt vmcnt(0)4376; GFX900-NEXT: s_setpc_b64 s[30:31]4377;4378; GFX90A-LABEL: v_shuffle_v4i16_v3i16__0_3_3_3:4379; GFX90A: ; %bb.0:4380; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4381; GFX90A-NEXT: v_mov_b32_e32 v2, 04382; GFX90A-NEXT: ;;#ASMSTART4383; GFX90A-NEXT: ; def v[0:1]4384; GFX90A-NEXT: ;;#ASMEND4385; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4386; GFX90A-NEXT: s_waitcnt vmcnt(0)4387; GFX90A-NEXT: s_setpc_b64 s[30:31]4388;4389; GFX942-LABEL: v_shuffle_v4i16_v3i16__0_3_3_3:4390; GFX942: ; %bb.0:4391; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4392; GFX942-NEXT: v_mov_b32_e32 v2, 04393; GFX942-NEXT: ;;#ASMSTART4394; GFX942-NEXT: ; def v[0:1]4395; GFX942-NEXT: ;;#ASMEND4396; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4397; GFX942-NEXT: s_waitcnt vmcnt(0)4398; GFX942-NEXT: s_setpc_b64 s[30:31]4399 %vec0 = call <4 x i16> asm "; def $0", "=v"()4400 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4401 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>4402 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84403 ret void4404}4405 4406define void @v_shuffle_v4i16_v3i16__1_3_3_3(ptr addrspace(1) inreg %ptr) {4407; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_3_3_3:4408; GFX900: ; %bb.0:4409; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4410; GFX900-NEXT: ;;#ASMSTART4411; GFX900-NEXT: ; def v[0:1]4412; GFX900-NEXT: ;;#ASMEND4413; GFX900-NEXT: v_mov_b32_e32 v2, 04414; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 164415; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4416; GFX900-NEXT: s_waitcnt vmcnt(0)4417; GFX900-NEXT: s_setpc_b64 s[30:31]4418;4419; GFX90A-LABEL: v_shuffle_v4i16_v3i16__1_3_3_3:4420; GFX90A: ; %bb.0:4421; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4422; GFX90A-NEXT: ;;#ASMSTART4423; GFX90A-NEXT: ; def v[0:1]4424; GFX90A-NEXT: ;;#ASMEND4425; GFX90A-NEXT: v_mov_b32_e32 v2, 04426; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 164427; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4428; GFX90A-NEXT: s_waitcnt vmcnt(0)4429; GFX90A-NEXT: s_setpc_b64 s[30:31]4430;4431; GFX942-LABEL: v_shuffle_v4i16_v3i16__1_3_3_3:4432; GFX942: ; %bb.0:4433; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4434; GFX942-NEXT: ;;#ASMSTART4435; GFX942-NEXT: ; def v[0:1]4436; GFX942-NEXT: ;;#ASMEND4437; GFX942-NEXT: v_mov_b32_e32 v2, 04438; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 164439; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4440; GFX942-NEXT: s_waitcnt vmcnt(0)4441; GFX942-NEXT: s_setpc_b64 s[30:31]4442 %vec0 = call <4 x i16> asm "; def $0", "=v"()4443 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4444 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>4445 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84446 ret void4447}4448 4449define void @v_shuffle_v4i16_v3i16__2_3_3_3(ptr addrspace(1) inreg %ptr) {4450; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_3_3_3:4451; GFX900: ; %bb.0:4452; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4453; GFX900-NEXT: v_mov_b32_e32 v2, 04454; GFX900-NEXT: ;;#ASMSTART4455; GFX900-NEXT: ; def v[0:1]4456; GFX900-NEXT: ;;#ASMEND4457; GFX900-NEXT: global_store_dwordx2 v2, v[1:2], s[16:17]4458; GFX900-NEXT: s_waitcnt vmcnt(0)4459; GFX900-NEXT: s_setpc_b64 s[30:31]4460;4461; GFX90A-LABEL: v_shuffle_v4i16_v3i16__2_3_3_3:4462; GFX90A: ; %bb.0:4463; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4464; GFX90A-NEXT: ;;#ASMSTART4465; GFX90A-NEXT: ; def v[0:1]4466; GFX90A-NEXT: ;;#ASMEND4467; GFX90A-NEXT: v_mov_b32_e32 v2, 04468; GFX90A-NEXT: v_mov_b32_e32 v0, v14469; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4470; GFX90A-NEXT: s_waitcnt vmcnt(0)4471; GFX90A-NEXT: s_setpc_b64 s[30:31]4472;4473; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_3_3_3:4474; GFX942: ; %bb.0:4475; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4476; GFX942-NEXT: ;;#ASMSTART4477; GFX942-NEXT: ; def v[0:1]4478; GFX942-NEXT: ;;#ASMEND4479; GFX942-NEXT: v_mov_b32_e32 v2, 04480; GFX942-NEXT: v_mov_b32_e32 v0, v14481; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4482; GFX942-NEXT: s_waitcnt vmcnt(0)4483; GFX942-NEXT: s_setpc_b64 s[30:31]4484 %vec0 = call <4 x i16> asm "; def $0", "=v"()4485 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4486 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>4487 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84488 ret void4489}4490 4491define void @v_shuffle_v4i16_v3i16__3_3_3_3(ptr addrspace(1) inreg %ptr) {4492; GFX9-LABEL: v_shuffle_v4i16_v3i16__3_3_3_3:4493; GFX9: ; %bb.0:4494; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4495; GFX9-NEXT: s_setpc_b64 s[30:31]4496 %vec0 = call <4 x i16> asm "; def $0", "=v"()4497 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4498 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>4499 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84500 ret void4501}4502 4503define void @v_shuffle_v4i16_v3i16__4_3_3_3(ptr addrspace(1) inreg %ptr) {4504; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_3_3_3:4505; GFX900: ; %bb.0:4506; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4507; GFX900-NEXT: ;;#ASMSTART4508; GFX900-NEXT: ; def v[0:1]4509; GFX900-NEXT: ;;#ASMEND4510; GFX900-NEXT: s_mov_b32 s4, 0x50401004511; GFX900-NEXT: v_mov_b32_e32 v2, 04512; GFX900-NEXT: v_perm_b32 v1, v0, v0, s44513; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 164514; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4515; GFX900-NEXT: s_waitcnt vmcnt(0)4516; GFX900-NEXT: s_setpc_b64 s[30:31]4517;4518; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_3_3_3:4519; GFX90A: ; %bb.0:4520; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4521; GFX90A-NEXT: ;;#ASMSTART4522; GFX90A-NEXT: ; def v[0:1]4523; GFX90A-NEXT: ;;#ASMEND4524; GFX90A-NEXT: s_mov_b32 s4, 0x50401004525; GFX90A-NEXT: v_mov_b32_e32 v2, 04526; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s44527; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 164528; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]4529; GFX90A-NEXT: s_waitcnt vmcnt(0)4530; GFX90A-NEXT: s_setpc_b64 s[30:31]4531;4532; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_3_3_3:4533; GFX942: ; %bb.0:4534; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4535; GFX942-NEXT: ;;#ASMSTART4536; GFX942-NEXT: ; def v[0:1]4537; GFX942-NEXT: ;;#ASMEND4538; GFX942-NEXT: s_mov_b32 s2, 0x50401004539; GFX942-NEXT: v_mov_b32_e32 v2, 04540; GFX942-NEXT: v_perm_b32 v1, v0, v0, s24541; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 164542; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]4543; GFX942-NEXT: s_waitcnt vmcnt(0)4544; GFX942-NEXT: s_setpc_b64 s[30:31]4545 %vec0 = call <4 x i16> asm "; def $0", "=v"()4546 %vec1 = call <4 x i16> asm "; def $0", "=v"()4547 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4548 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4549 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 3, i32 3, i32 3>4550 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84551 ret void4552}4553 4554define void @v_shuffle_v4i16_v3i16__5_3_3_3(ptr addrspace(1) inreg %ptr) {4555; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_3_3:4556; GFX900: ; %bb.0:4557; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4558; GFX900-NEXT: ;;#ASMSTART4559; GFX900-NEXT: ; def v[0:1]4560; GFX900-NEXT: ;;#ASMEND4561; GFX900-NEXT: s_mov_b32 s4, 0x50401004562; GFX900-NEXT: v_mov_b32_e32 v3, 04563; GFX900-NEXT: v_perm_b32 v1, v0, v1, s44564; GFX900-NEXT: v_perm_b32 v2, v0, v0, s44565; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]4566; GFX900-NEXT: s_waitcnt vmcnt(0)4567; GFX900-NEXT: s_setpc_b64 s[30:31]4568;4569; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_3_3_3:4570; GFX90A: ; %bb.0:4571; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4572; GFX90A-NEXT: s_mov_b32 s4, 0x50401004573; GFX90A-NEXT: v_mov_b32_e32 v4, 04574; GFX90A-NEXT: ;;#ASMSTART4575; GFX90A-NEXT: ; def v[0:1]4576; GFX90A-NEXT: ;;#ASMEND4577; GFX90A-NEXT: v_perm_b32 v2, v0, v1, s44578; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s44579; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]4580; GFX90A-NEXT: s_waitcnt vmcnt(0)4581; GFX90A-NEXT: s_setpc_b64 s[30:31]4582;4583; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_3_3:4584; GFX942: ; %bb.0:4585; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4586; GFX942-NEXT: s_mov_b32 s2, 0x50401004587; GFX942-NEXT: v_mov_b32_e32 v4, 04588; GFX942-NEXT: ;;#ASMSTART4589; GFX942-NEXT: ; def v[0:1]4590; GFX942-NEXT: ;;#ASMEND4591; GFX942-NEXT: s_nop 04592; GFX942-NEXT: v_perm_b32 v2, v0, v1, s24593; GFX942-NEXT: v_perm_b32 v3, v0, v0, s24594; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]4595; GFX942-NEXT: s_waitcnt vmcnt(0)4596; GFX942-NEXT: s_setpc_b64 s[30:31]4597 %vec0 = call <4 x i16> asm "; def $0", "=v"()4598 %vec1 = call <4 x i16> asm "; def $0", "=v"()4599 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4600 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4601 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 3, i32 3>4602 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84603 ret void4604}4605 4606define void @v_shuffle_v4i16_v3i16__5_u_3_3(ptr addrspace(1) inreg %ptr) {4607; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_3_3:4608; GFX900: ; %bb.0:4609; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4610; GFX900-NEXT: s_mov_b32 s4, 0x50401004611; GFX900-NEXT: v_mov_b32_e32 v3, 04612; GFX900-NEXT: ;;#ASMSTART4613; GFX900-NEXT: ; def v[0:1]4614; GFX900-NEXT: ;;#ASMEND4615; GFX900-NEXT: v_perm_b32 v2, v0, v0, s44616; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]4617; GFX900-NEXT: s_waitcnt vmcnt(0)4618; GFX900-NEXT: s_setpc_b64 s[30:31]4619;4620; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_3_3:4621; GFX90A: ; %bb.0:4622; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4623; GFX90A-NEXT: s_mov_b32 s4, 0x50401004624; GFX90A-NEXT: v_mov_b32_e32 v4, 04625; GFX90A-NEXT: ;;#ASMSTART4626; GFX90A-NEXT: ; def v[0:1]4627; GFX90A-NEXT: ;;#ASMEND4628; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s44629; GFX90A-NEXT: v_mov_b32_e32 v2, v14630; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]4631; GFX90A-NEXT: s_waitcnt vmcnt(0)4632; GFX90A-NEXT: s_setpc_b64 s[30:31]4633;4634; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_3_3:4635; GFX942: ; %bb.0:4636; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4637; GFX942-NEXT: s_mov_b32 s2, 0x50401004638; GFX942-NEXT: v_mov_b32_e32 v4, 04639; GFX942-NEXT: ;;#ASMSTART4640; GFX942-NEXT: ; def v[0:1]4641; GFX942-NEXT: ;;#ASMEND4642; GFX942-NEXT: s_nop 04643; GFX942-NEXT: v_perm_b32 v3, v0, v0, s24644; GFX942-NEXT: v_mov_b32_e32 v2, v14645; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]4646; GFX942-NEXT: s_waitcnt vmcnt(0)4647; GFX942-NEXT: s_setpc_b64 s[30:31]4648 %vec0 = call <4 x i16> asm "; def $0", "=v"()4649 %vec1 = call <4 x i16> asm "; def $0", "=v"()4650 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4651 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4652 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>4653 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84654 ret void4655}4656 4657define void @v_shuffle_v4i16_v3i16__5_0_3_3(ptr addrspace(1) inreg %ptr) {4658; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_3_3:4659; GFX900: ; %bb.0:4660; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4661; GFX900-NEXT: ;;#ASMSTART4662; GFX900-NEXT: ; def v[0:1]4663; GFX900-NEXT: ;;#ASMEND4664; GFX900-NEXT: ;;#ASMSTART4665; GFX900-NEXT: ; def v[1:2]4666; GFX900-NEXT: ;;#ASMEND4667; GFX900-NEXT: s_mov_b32 s4, 0x50401004668; GFX900-NEXT: v_mov_b32_e32 v3, 04669; GFX900-NEXT: v_perm_b32 v0, v0, v2, s44670; GFX900-NEXT: v_perm_b32 v1, v1, v1, s44671; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]4672; GFX900-NEXT: s_waitcnt vmcnt(0)4673; GFX900-NEXT: s_setpc_b64 s[30:31]4674;4675; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_3_3:4676; GFX90A: ; %bb.0:4677; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4678; GFX90A-NEXT: ;;#ASMSTART4679; GFX90A-NEXT: ; def v[0:1]4680; GFX90A-NEXT: ;;#ASMEND4681; GFX90A-NEXT: s_mov_b32 s4, 0x50401004682; GFX90A-NEXT: v_mov_b32_e32 v4, 04683; GFX90A-NEXT: ;;#ASMSTART4684; GFX90A-NEXT: ; def v[2:3]4685; GFX90A-NEXT: ;;#ASMEND4686; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s44687; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s44688; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4689; GFX90A-NEXT: s_waitcnt vmcnt(0)4690; GFX90A-NEXT: s_setpc_b64 s[30:31]4691;4692; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_3_3:4693; GFX942: ; %bb.0:4694; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4695; GFX942-NEXT: ;;#ASMSTART4696; GFX942-NEXT: ; def v[0:1]4697; GFX942-NEXT: ;;#ASMEND4698; GFX942-NEXT: s_mov_b32 s2, 0x50401004699; GFX942-NEXT: v_mov_b32_e32 v4, 04700; GFX942-NEXT: ;;#ASMSTART4701; GFX942-NEXT: ; def v[2:3]4702; GFX942-NEXT: ;;#ASMEND4703; GFX942-NEXT: s_nop 04704; GFX942-NEXT: v_perm_b32 v0, v0, v3, s24705; GFX942-NEXT: v_perm_b32 v1, v2, v2, s24706; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4707; GFX942-NEXT: s_waitcnt vmcnt(0)4708; GFX942-NEXT: s_setpc_b64 s[30:31]4709 %vec0 = call <4 x i16> asm "; def $0", "=v"()4710 %vec1 = call <4 x i16> asm "; def $0", "=v"()4711 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4712 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4713 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 3, i32 3>4714 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84715 ret void4716}4717 4718define void @v_shuffle_v4i16_v3i16__5_1_3_3(ptr addrspace(1) inreg %ptr) {4719; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_3_3:4720; GFX900: ; %bb.0:4721; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4722; GFX900-NEXT: ;;#ASMSTART4723; GFX900-NEXT: ; def v[0:1]4724; GFX900-NEXT: ;;#ASMEND4725; GFX900-NEXT: s_mov_b32 s4, 0xffff4726; GFX900-NEXT: ;;#ASMSTART4727; GFX900-NEXT: ; def v[1:2]4728; GFX900-NEXT: ;;#ASMEND4729; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v04730; GFX900-NEXT: s_mov_b32 s4, 0x50401004731; GFX900-NEXT: v_mov_b32_e32 v3, 04732; GFX900-NEXT: v_perm_b32 v1, v1, v1, s44733; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]4734; GFX900-NEXT: s_waitcnt vmcnt(0)4735; GFX900-NEXT: s_setpc_b64 s[30:31]4736;4737; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_3_3:4738; GFX90A: ; %bb.0:4739; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4740; GFX90A-NEXT: ;;#ASMSTART4741; GFX90A-NEXT: ; def v[0:1]4742; GFX90A-NEXT: ;;#ASMEND4743; GFX90A-NEXT: s_mov_b32 s4, 0xffff4744; GFX90A-NEXT: ;;#ASMSTART4745; GFX90A-NEXT: ; def v[2:3]4746; GFX90A-NEXT: ;;#ASMEND4747; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v04748; GFX90A-NEXT: s_mov_b32 s4, 0x50401004749; GFX90A-NEXT: v_mov_b32_e32 v4, 04750; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s44751; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4752; GFX90A-NEXT: s_waitcnt vmcnt(0)4753; GFX90A-NEXT: s_setpc_b64 s[30:31]4754;4755; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_3_3:4756; GFX942: ; %bb.0:4757; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4758; GFX942-NEXT: ;;#ASMSTART4759; GFX942-NEXT: ; def v[0:1]4760; GFX942-NEXT: ;;#ASMEND4761; GFX942-NEXT: s_mov_b32 s2, 0xffff4762; GFX942-NEXT: ;;#ASMSTART4763; GFX942-NEXT: ; def v[2:3]4764; GFX942-NEXT: ;;#ASMEND4765; GFX942-NEXT: v_mov_b32_e32 v4, 04766; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v04767; GFX942-NEXT: s_mov_b32 s2, 0x50401004768; GFX942-NEXT: v_perm_b32 v1, v2, v2, s24769; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4770; GFX942-NEXT: s_waitcnt vmcnt(0)4771; GFX942-NEXT: s_setpc_b64 s[30:31]4772 %vec0 = call <4 x i16> asm "; def $0", "=v"()4773 %vec1 = call <4 x i16> asm "; def $0", "=v"()4774 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4775 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4776 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 3, i32 3>4777 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84778 ret void4779}4780 4781define void @v_shuffle_v4i16_v3i16__5_2_3_3(ptr addrspace(1) inreg %ptr) {4782; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_3_3:4783; GFX900: ; %bb.0:4784; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4785; GFX900-NEXT: ;;#ASMSTART4786; GFX900-NEXT: ; def v[0:1]4787; GFX900-NEXT: ;;#ASMEND4788; GFX900-NEXT: s_mov_b32 s4, 0x50401004789; GFX900-NEXT: v_mov_b32_e32 v4, 04790; GFX900-NEXT: ;;#ASMSTART4791; GFX900-NEXT: ; def v[2:3]4792; GFX900-NEXT: ;;#ASMEND4793; GFX900-NEXT: v_perm_b32 v0, v1, v3, s44794; GFX900-NEXT: v_perm_b32 v1, v2, v2, s44795; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4796; GFX900-NEXT: s_waitcnt vmcnt(0)4797; GFX900-NEXT: s_setpc_b64 s[30:31]4798;4799; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_3_3:4800; GFX90A: ; %bb.0:4801; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4802; GFX90A-NEXT: ;;#ASMSTART4803; GFX90A-NEXT: ; def v[0:1]4804; GFX90A-NEXT: ;;#ASMEND4805; GFX90A-NEXT: s_mov_b32 s4, 0x50401004806; GFX90A-NEXT: v_mov_b32_e32 v4, 04807; GFX90A-NEXT: ;;#ASMSTART4808; GFX90A-NEXT: ; def v[2:3]4809; GFX90A-NEXT: ;;#ASMEND4810; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s44811; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s44812; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]4813; GFX90A-NEXT: s_waitcnt vmcnt(0)4814; GFX90A-NEXT: s_setpc_b64 s[30:31]4815;4816; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_3_3:4817; GFX942: ; %bb.0:4818; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4819; GFX942-NEXT: ;;#ASMSTART4820; GFX942-NEXT: ; def v[0:1]4821; GFX942-NEXT: ;;#ASMEND4822; GFX942-NEXT: s_mov_b32 s2, 0x50401004823; GFX942-NEXT: v_mov_b32_e32 v4, 04824; GFX942-NEXT: ;;#ASMSTART4825; GFX942-NEXT: ; def v[2:3]4826; GFX942-NEXT: ;;#ASMEND4827; GFX942-NEXT: s_nop 04828; GFX942-NEXT: v_perm_b32 v0, v1, v3, s24829; GFX942-NEXT: v_perm_b32 v1, v2, v2, s24830; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]4831; GFX942-NEXT: s_waitcnt vmcnt(0)4832; GFX942-NEXT: s_setpc_b64 s[30:31]4833 %vec0 = call <4 x i16> asm "; def $0", "=v"()4834 %vec1 = call <4 x i16> asm "; def $0", "=v"()4835 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4836 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4837 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 3, i32 3>4838 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84839 ret void4840}4841 4842define void @v_shuffle_v4i16_v3i16__5_4_3_3(ptr addrspace(1) inreg %ptr) {4843; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_3_3:4844; GFX900: ; %bb.0:4845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4846; GFX900-NEXT: ;;#ASMSTART4847; GFX900-NEXT: ; def v[0:1]4848; GFX900-NEXT: ;;#ASMEND4849; GFX900-NEXT: s_mov_b32 s4, 0xffff4850; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v04851; GFX900-NEXT: s_mov_b32 s4, 0x50401004852; GFX900-NEXT: v_mov_b32_e32 v3, 04853; GFX900-NEXT: v_perm_b32 v2, v0, v0, s44854; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]4855; GFX900-NEXT: s_waitcnt vmcnt(0)4856; GFX900-NEXT: s_setpc_b64 s[30:31]4857;4858; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_3_3:4859; GFX90A: ; %bb.0:4860; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4861; GFX90A-NEXT: s_mov_b32 s4, 0xffff4862; GFX90A-NEXT: ;;#ASMSTART4863; GFX90A-NEXT: ; def v[0:1]4864; GFX90A-NEXT: ;;#ASMEND4865; GFX90A-NEXT: v_bfi_b32 v2, s4, v1, v04866; GFX90A-NEXT: s_mov_b32 s4, 0x50401004867; GFX90A-NEXT: v_mov_b32_e32 v4, 04868; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s44869; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]4870; GFX90A-NEXT: s_waitcnt vmcnt(0)4871; GFX90A-NEXT: s_setpc_b64 s[30:31]4872;4873; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_3_3:4874; GFX942: ; %bb.0:4875; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4876; GFX942-NEXT: s_mov_b32 s2, 0xffff4877; GFX942-NEXT: ;;#ASMSTART4878; GFX942-NEXT: ; def v[0:1]4879; GFX942-NEXT: ;;#ASMEND4880; GFX942-NEXT: v_mov_b32_e32 v4, 04881; GFX942-NEXT: v_bfi_b32 v2, s2, v1, v04882; GFX942-NEXT: s_mov_b32 s2, 0x50401004883; GFX942-NEXT: v_perm_b32 v3, v0, v0, s24884; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]4885; GFX942-NEXT: s_waitcnt vmcnt(0)4886; GFX942-NEXT: s_setpc_b64 s[30:31]4887 %vec0 = call <4 x i16> asm "; def $0", "=v"()4888 %vec1 = call <4 x i16> asm "; def $0", "=v"()4889 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4890 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4891 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 3, i32 3>4892 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84893 ret void4894}4895 4896define void @v_shuffle_v4i16_v3i16__5_5_3_3(ptr addrspace(1) inreg %ptr) {4897; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_3:4898; GFX900: ; %bb.0:4899; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4900; GFX900-NEXT: ;;#ASMSTART4901; GFX900-NEXT: ; def v[0:1]4902; GFX900-NEXT: ;;#ASMEND4903; GFX900-NEXT: s_mov_b32 s4, 0x50401004904; GFX900-NEXT: v_mov_b32_e32 v3, 04905; GFX900-NEXT: v_perm_b32 v2, v0, v0, s44906; GFX900-NEXT: v_perm_b32 v1, v1, v1, s44907; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]4908; GFX900-NEXT: s_waitcnt vmcnt(0)4909; GFX900-NEXT: s_setpc_b64 s[30:31]4910;4911; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_3:4912; GFX90A: ; %bb.0:4913; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4914; GFX90A-NEXT: s_mov_b32 s4, 0x50401004915; GFX90A-NEXT: v_mov_b32_e32 v4, 04916; GFX90A-NEXT: ;;#ASMSTART4917; GFX90A-NEXT: ; def v[0:1]4918; GFX90A-NEXT: ;;#ASMEND4919; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s44920; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s44921; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]4922; GFX90A-NEXT: s_waitcnt vmcnt(0)4923; GFX90A-NEXT: s_setpc_b64 s[30:31]4924;4925; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_3:4926; GFX942: ; %bb.0:4927; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4928; GFX942-NEXT: s_mov_b32 s2, 0x50401004929; GFX942-NEXT: v_mov_b32_e32 v4, 04930; GFX942-NEXT: ;;#ASMSTART4931; GFX942-NEXT: ; def v[0:1]4932; GFX942-NEXT: ;;#ASMEND4933; GFX942-NEXT: s_nop 04934; GFX942-NEXT: v_perm_b32 v3, v0, v0, s24935; GFX942-NEXT: v_perm_b32 v2, v1, v1, s24936; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]4937; GFX942-NEXT: s_waitcnt vmcnt(0)4938; GFX942-NEXT: s_setpc_b64 s[30:31]4939 %vec0 = call <4 x i16> asm "; def $0", "=v"()4940 %vec1 = call <4 x i16> asm "; def $0", "=v"()4941 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4942 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4943 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 3>4944 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84945 ret void4946}4947 4948define void @v_shuffle_v4i16_v3i16__5_5_u_3(ptr addrspace(1) inreg %ptr) {4949; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_3:4950; GFX900: ; %bb.0:4951; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4952; GFX900-NEXT: ;;#ASMSTART4953; GFX900-NEXT: ; def v[0:1]4954; GFX900-NEXT: ;;#ASMEND4955; GFX900-NEXT: s_mov_b32 s4, 0x50401004956; GFX900-NEXT: v_mov_b32_e32 v3, 04957; GFX900-NEXT: v_perm_b32 v1, v1, v1, s44958; GFX900-NEXT: v_lshlrev_b32_e32 v2, 16, v04959; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]4960; GFX900-NEXT: s_waitcnt vmcnt(0)4961; GFX900-NEXT: s_setpc_b64 s[30:31]4962;4963; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_3:4964; GFX90A: ; %bb.0:4965; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4966; GFX90A-NEXT: s_mov_b32 s4, 0x50401004967; GFX90A-NEXT: v_mov_b32_e32 v4, 04968; GFX90A-NEXT: ;;#ASMSTART4969; GFX90A-NEXT: ; def v[0:1]4970; GFX90A-NEXT: ;;#ASMEND4971; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s44972; GFX90A-NEXT: v_lshlrev_b32_e32 v3, 16, v04973; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]4974; GFX90A-NEXT: s_waitcnt vmcnt(0)4975; GFX90A-NEXT: s_setpc_b64 s[30:31]4976;4977; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_3:4978; GFX942: ; %bb.0:4979; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4980; GFX942-NEXT: s_mov_b32 s2, 0x50401004981; GFX942-NEXT: v_mov_b32_e32 v4, 04982; GFX942-NEXT: ;;#ASMSTART4983; GFX942-NEXT: ; def v[0:1]4984; GFX942-NEXT: ;;#ASMEND4985; GFX942-NEXT: s_nop 04986; GFX942-NEXT: v_perm_b32 v2, v1, v1, s24987; GFX942-NEXT: v_lshlrev_b32_e32 v3, 16, v04988; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]4989; GFX942-NEXT: s_waitcnt vmcnt(0)4990; GFX942-NEXT: s_setpc_b64 s[30:31]4991 %vec0 = call <4 x i16> asm "; def $0", "=v"()4992 %vec1 = call <4 x i16> asm "; def $0", "=v"()4993 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4994 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>4995 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>4996 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 84997 ret void4998}4999 5000define void @v_shuffle_v4i16_v3i16__5_5_0_3(ptr addrspace(1) inreg %ptr) {5001; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_3:5002; GFX900: ; %bb.0:5003; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5004; GFX900-NEXT: ;;#ASMSTART5005; GFX900-NEXT: ; def v[0:1]5006; GFX900-NEXT: ;;#ASMEND5007; GFX900-NEXT: ;;#ASMSTART5008; GFX900-NEXT: ; def v[1:2]5009; GFX900-NEXT: ;;#ASMEND5010; GFX900-NEXT: s_mov_b32 s4, 0x50401005011; GFX900-NEXT: v_mov_b32_e32 v3, 05012; GFX900-NEXT: v_perm_b32 v1, v1, v0, s45013; GFX900-NEXT: v_perm_b32 v0, v2, v2, s45014; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5015; GFX900-NEXT: s_waitcnt vmcnt(0)5016; GFX900-NEXT: s_setpc_b64 s[30:31]5017;5018; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_3:5019; GFX90A: ; %bb.0:5020; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5021; GFX90A-NEXT: ;;#ASMSTART5022; GFX90A-NEXT: ; def v[0:1]5023; GFX90A-NEXT: ;;#ASMEND5024; GFX90A-NEXT: s_mov_b32 s4, 0x50401005025; GFX90A-NEXT: v_mov_b32_e32 v4, 05026; GFX90A-NEXT: ;;#ASMSTART5027; GFX90A-NEXT: ; def v[2:3]5028; GFX90A-NEXT: ;;#ASMEND5029; GFX90A-NEXT: v_perm_b32 v1, v2, v0, s45030; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s45031; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5032; GFX90A-NEXT: s_waitcnt vmcnt(0)5033; GFX90A-NEXT: s_setpc_b64 s[30:31]5034;5035; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_3:5036; GFX942: ; %bb.0:5037; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5038; GFX942-NEXT: ;;#ASMSTART5039; GFX942-NEXT: ; def v[0:1]5040; GFX942-NEXT: ;;#ASMEND5041; GFX942-NEXT: s_mov_b32 s2, 0x50401005042; GFX942-NEXT: v_mov_b32_e32 v4, 05043; GFX942-NEXT: ;;#ASMSTART5044; GFX942-NEXT: ; def v[2:3]5045; GFX942-NEXT: ;;#ASMEND5046; GFX942-NEXT: s_nop 05047; GFX942-NEXT: v_perm_b32 v1, v2, v0, s25048; GFX942-NEXT: v_perm_b32 v0, v3, v3, s25049; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5050; GFX942-NEXT: s_waitcnt vmcnt(0)5051; GFX942-NEXT: s_setpc_b64 s[30:31]5052 %vec0 = call <4 x i16> asm "; def $0", "=v"()5053 %vec1 = call <4 x i16> asm "; def $0", "=v"()5054 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5055 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5056 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 3>5057 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85058 ret void5059}5060 5061define void @v_shuffle_v4i16_v3i16__5_5_1_3(ptr addrspace(1) inreg %ptr) {5062; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_3:5063; GFX900: ; %bb.0:5064; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5065; GFX900-NEXT: ;;#ASMSTART5066; GFX900-NEXT: ; def v[0:1]5067; GFX900-NEXT: ;;#ASMEND5068; GFX900-NEXT: ;;#ASMSTART5069; GFX900-NEXT: ; def v[1:2]5070; GFX900-NEXT: ;;#ASMEND5071; GFX900-NEXT: s_mov_b32 s4, 0x50401005072; GFX900-NEXT: v_mov_b32_e32 v3, 05073; GFX900-NEXT: v_alignbit_b32 v1, v1, v0, 165074; GFX900-NEXT: v_perm_b32 v0, v2, v2, s45075; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5076; GFX900-NEXT: s_waitcnt vmcnt(0)5077; GFX900-NEXT: s_setpc_b64 s[30:31]5078;5079; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_3:5080; GFX90A: ; %bb.0:5081; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5082; GFX90A-NEXT: ;;#ASMSTART5083; GFX90A-NEXT: ; def v[0:1]5084; GFX90A-NEXT: ;;#ASMEND5085; GFX90A-NEXT: s_mov_b32 s4, 0x50401005086; GFX90A-NEXT: v_mov_b32_e32 v4, 05087; GFX90A-NEXT: ;;#ASMSTART5088; GFX90A-NEXT: ; def v[2:3]5089; GFX90A-NEXT: ;;#ASMEND5090; GFX90A-NEXT: v_alignbit_b32 v1, v2, v0, 165091; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s45092; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5093; GFX90A-NEXT: s_waitcnt vmcnt(0)5094; GFX90A-NEXT: s_setpc_b64 s[30:31]5095;5096; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_3:5097; GFX942: ; %bb.0:5098; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5099; GFX942-NEXT: ;;#ASMSTART5100; GFX942-NEXT: ; def v[0:1]5101; GFX942-NEXT: ;;#ASMEND5102; GFX942-NEXT: s_mov_b32 s2, 0x50401005103; GFX942-NEXT: v_mov_b32_e32 v4, 05104; GFX942-NEXT: ;;#ASMSTART5105; GFX942-NEXT: ; def v[2:3]5106; GFX942-NEXT: ;;#ASMEND5107; GFX942-NEXT: s_nop 05108; GFX942-NEXT: v_alignbit_b32 v1, v2, v0, 165109; GFX942-NEXT: v_perm_b32 v0, v3, v3, s25110; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5111; GFX942-NEXT: s_waitcnt vmcnt(0)5112; GFX942-NEXT: s_setpc_b64 s[30:31]5113 %vec0 = call <4 x i16> asm "; def $0", "=v"()5114 %vec1 = call <4 x i16> asm "; def $0", "=v"()5115 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5116 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5117 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 3>5118 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85119 ret void5120}5121 5122define void @v_shuffle_v4i16_v3i16__5_5_2_3(ptr addrspace(1) inreg %ptr) {5123; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_3:5124; GFX900: ; %bb.0:5125; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5126; GFX900-NEXT: ;;#ASMSTART5127; GFX900-NEXT: ; def v[0:1]5128; GFX900-NEXT: ;;#ASMEND5129; GFX900-NEXT: s_mov_b32 s4, 0x50401005130; GFX900-NEXT: v_mov_b32_e32 v4, 05131; GFX900-NEXT: ;;#ASMSTART5132; GFX900-NEXT: ; def v[2:3]5133; GFX900-NEXT: ;;#ASMEND5134; GFX900-NEXT: v_perm_b32 v1, v2, v1, s45135; GFX900-NEXT: v_perm_b32 v0, v3, v3, s45136; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5137; GFX900-NEXT: s_waitcnt vmcnt(0)5138; GFX900-NEXT: s_setpc_b64 s[30:31]5139;5140; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_3:5141; GFX90A: ; %bb.0:5142; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5143; GFX90A-NEXT: ;;#ASMSTART5144; GFX90A-NEXT: ; def v[0:1]5145; GFX90A-NEXT: ;;#ASMEND5146; GFX90A-NEXT: s_mov_b32 s4, 0x50401005147; GFX90A-NEXT: v_mov_b32_e32 v4, 05148; GFX90A-NEXT: ;;#ASMSTART5149; GFX90A-NEXT: ; def v[2:3]5150; GFX90A-NEXT: ;;#ASMEND5151; GFX90A-NEXT: v_perm_b32 v1, v2, v1, s45152; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s45153; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5154; GFX90A-NEXT: s_waitcnt vmcnt(0)5155; GFX90A-NEXT: s_setpc_b64 s[30:31]5156;5157; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_2_3:5158; GFX942: ; %bb.0:5159; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5160; GFX942-NEXT: ;;#ASMSTART5161; GFX942-NEXT: ; def v[0:1]5162; GFX942-NEXT: ;;#ASMEND5163; GFX942-NEXT: s_mov_b32 s2, 0x50401005164; GFX942-NEXT: v_mov_b32_e32 v4, 05165; GFX942-NEXT: ;;#ASMSTART5166; GFX942-NEXT: ; def v[2:3]5167; GFX942-NEXT: ;;#ASMEND5168; GFX942-NEXT: s_nop 05169; GFX942-NEXT: v_perm_b32 v1, v2, v1, s25170; GFX942-NEXT: v_perm_b32 v0, v3, v3, s25171; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5172; GFX942-NEXT: s_waitcnt vmcnt(0)5173; GFX942-NEXT: s_setpc_b64 s[30:31]5174 %vec0 = call <4 x i16> asm "; def $0", "=v"()5175 %vec1 = call <4 x i16> asm "; def $0", "=v"()5176 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5177 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5178 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 3>5179 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85180 ret void5181}5182 5183define void @v_shuffle_v4i16_v3i16__5_5_4_3(ptr addrspace(1) inreg %ptr) {5184; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_3:5185; GFX900: ; %bb.0:5186; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5187; GFX900-NEXT: ;;#ASMSTART5188; GFX900-NEXT: ; def v[0:1]5189; GFX900-NEXT: ;;#ASMEND5190; GFX900-NEXT: s_mov_b32 s4, 0x50401005191; GFX900-NEXT: v_mov_b32_e32 v3, 05192; GFX900-NEXT: v_alignbit_b32 v2, v0, v0, 165193; GFX900-NEXT: v_perm_b32 v1, v1, v1, s45194; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]5195; GFX900-NEXT: s_waitcnt vmcnt(0)5196; GFX900-NEXT: s_setpc_b64 s[30:31]5197;5198; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_3:5199; GFX90A: ; %bb.0:5200; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5201; GFX90A-NEXT: s_mov_b32 s4, 0x50401005202; GFX90A-NEXT: v_mov_b32_e32 v4, 05203; GFX90A-NEXT: ;;#ASMSTART5204; GFX90A-NEXT: ; def v[0:1]5205; GFX90A-NEXT: ;;#ASMEND5206; GFX90A-NEXT: v_alignbit_b32 v3, v0, v0, 165207; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s45208; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]5209; GFX90A-NEXT: s_waitcnt vmcnt(0)5210; GFX90A-NEXT: s_setpc_b64 s[30:31]5211;5212; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_3:5213; GFX942: ; %bb.0:5214; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5215; GFX942-NEXT: s_mov_b32 s2, 0x50401005216; GFX942-NEXT: v_mov_b32_e32 v4, 05217; GFX942-NEXT: ;;#ASMSTART5218; GFX942-NEXT: ; def v[0:1]5219; GFX942-NEXT: ;;#ASMEND5220; GFX942-NEXT: s_nop 05221; GFX942-NEXT: v_alignbit_b32 v3, v0, v0, 165222; GFX942-NEXT: v_perm_b32 v2, v1, v1, s25223; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]5224; GFX942-NEXT: s_waitcnt vmcnt(0)5225; GFX942-NEXT: s_setpc_b64 s[30:31]5226 %vec0 = call <4 x i16> asm "; def $0", "=v"()5227 %vec1 = call <4 x i16> asm "; def $0", "=v"()5228 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5229 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5230 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 3>5231 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85232 ret void5233}5234 5235define void @v_shuffle_v4i16_v3i16__u_4_4_4(ptr addrspace(1) inreg %ptr) {5236; GFX900-LABEL: v_shuffle_v4i16_v3i16__u_4_4_4:5237; GFX900: ; %bb.0:5238; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5239; GFX900-NEXT: ;;#ASMSTART5240; GFX900-NEXT: ; def v[0:1]5241; GFX900-NEXT: ;;#ASMEND5242; GFX900-NEXT: s_mov_b32 s4, 0x70603025243; GFX900-NEXT: v_mov_b32_e32 v2, 05244; GFX900-NEXT: v_perm_b32 v1, v0, v0, s45245; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]5246; GFX900-NEXT: s_waitcnt vmcnt(0)5247; GFX900-NEXT: s_setpc_b64 s[30:31]5248;5249; GFX90A-LABEL: v_shuffle_v4i16_v3i16__u_4_4_4:5250; GFX90A: ; %bb.0:5251; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5252; GFX90A-NEXT: ;;#ASMSTART5253; GFX90A-NEXT: ; def v[0:1]5254; GFX90A-NEXT: ;;#ASMEND5255; GFX90A-NEXT: s_mov_b32 s4, 0x70603025256; GFX90A-NEXT: v_mov_b32_e32 v2, 05257; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s45258; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]5259; GFX90A-NEXT: s_waitcnt vmcnt(0)5260; GFX90A-NEXT: s_setpc_b64 s[30:31]5261;5262; GFX942-LABEL: v_shuffle_v4i16_v3i16__u_4_4_4:5263; GFX942: ; %bb.0:5264; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5265; GFX942-NEXT: ;;#ASMSTART5266; GFX942-NEXT: ; def v[0:1]5267; GFX942-NEXT: ;;#ASMEND5268; GFX942-NEXT: s_mov_b32 s2, 0x70603025269; GFX942-NEXT: v_mov_b32_e32 v2, 05270; GFX942-NEXT: v_perm_b32 v1, v0, v0, s25271; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]5272; GFX942-NEXT: s_waitcnt vmcnt(0)5273; GFX942-NEXT: s_setpc_b64 s[30:31]5274 %vec0 = call <4 x i16> asm "; def $0", "=v"()5275 %vec1 = call <4 x i16> asm "; def $0", "=v"()5276 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5277 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5278 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>5279 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85280 ret void5281}5282 5283define void @v_shuffle_v4i16_v3i16__0_4_4_4(ptr addrspace(1) inreg %ptr) {5284; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_4_4_4:5285; GFX900: ; %bb.0:5286; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5287; GFX900-NEXT: ;;#ASMSTART5288; GFX900-NEXT: ; def v[0:1]5289; GFX900-NEXT: ;;#ASMEND5290; GFX900-NEXT: s_mov_b32 s4, 0xffff5291; GFX900-NEXT: ;;#ASMSTART5292; GFX900-NEXT: ; def v[1:2]5293; GFX900-NEXT: ;;#ASMEND5294; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v15295; GFX900-NEXT: s_mov_b32 s4, 0x70603025296; GFX900-NEXT: v_mov_b32_e32 v3, 05297; GFX900-NEXT: v_perm_b32 v1, v1, v1, s45298; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5299; GFX900-NEXT: s_waitcnt vmcnt(0)5300; GFX900-NEXT: s_setpc_b64 s[30:31]5301;5302; GFX90A-LABEL: v_shuffle_v4i16_v3i16__0_4_4_4:5303; GFX90A: ; %bb.0:5304; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5305; GFX90A-NEXT: ;;#ASMSTART5306; GFX90A-NEXT: ; def v[0:1]5307; GFX90A-NEXT: ;;#ASMEND5308; GFX90A-NEXT: s_mov_b32 s4, 0xffff5309; GFX90A-NEXT: ;;#ASMSTART5310; GFX90A-NEXT: ; def v[2:3]5311; GFX90A-NEXT: ;;#ASMEND5312; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v25313; GFX90A-NEXT: s_mov_b32 s4, 0x70603025314; GFX90A-NEXT: v_mov_b32_e32 v4, 05315; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s45316; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5317; GFX90A-NEXT: s_waitcnt vmcnt(0)5318; GFX90A-NEXT: s_setpc_b64 s[30:31]5319;5320; GFX942-LABEL: v_shuffle_v4i16_v3i16__0_4_4_4:5321; GFX942: ; %bb.0:5322; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5323; GFX942-NEXT: ;;#ASMSTART5324; GFX942-NEXT: ; def v[0:1]5325; GFX942-NEXT: ;;#ASMEND5326; GFX942-NEXT: s_mov_b32 s2, 0xffff5327; GFX942-NEXT: ;;#ASMSTART5328; GFX942-NEXT: ; def v[2:3]5329; GFX942-NEXT: ;;#ASMEND5330; GFX942-NEXT: v_mov_b32_e32 v4, 05331; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v25332; GFX942-NEXT: s_mov_b32 s2, 0x70603025333; GFX942-NEXT: v_perm_b32 v1, v2, v2, s25334; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5335; GFX942-NEXT: s_waitcnt vmcnt(0)5336; GFX942-NEXT: s_setpc_b64 s[30:31]5337 %vec0 = call <4 x i16> asm "; def $0", "=v"()5338 %vec1 = call <4 x i16> asm "; def $0", "=v"()5339 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5340 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5341 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 0, i32 4, i32 4, i32 4>5342 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85343 ret void5344}5345 5346define void @v_shuffle_v4i16_v3i16__1_4_4_4(ptr addrspace(1) inreg %ptr) {5347; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_4_4_4:5348; GFX900: ; %bb.0:5349; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5350; GFX900-NEXT: ;;#ASMSTART5351; GFX900-NEXT: ; def v[0:1]5352; GFX900-NEXT: ;;#ASMEND5353; GFX900-NEXT: ;;#ASMSTART5354; GFX900-NEXT: ; def v[1:2]5355; GFX900-NEXT: ;;#ASMEND5356; GFX900-NEXT: s_mov_b32 s4, 0x70603025357; GFX900-NEXT: v_mov_b32_e32 v3, 05358; GFX900-NEXT: v_perm_b32 v0, v1, v0, s45359; GFX900-NEXT: v_perm_b32 v1, v1, v1, s45360; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5361; GFX900-NEXT: s_waitcnt vmcnt(0)5362; GFX900-NEXT: s_setpc_b64 s[30:31]5363;5364; GFX90A-LABEL: v_shuffle_v4i16_v3i16__1_4_4_4:5365; GFX90A: ; %bb.0:5366; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5367; GFX90A-NEXT: ;;#ASMSTART5368; GFX90A-NEXT: ; def v[0:1]5369; GFX90A-NEXT: ;;#ASMEND5370; GFX90A-NEXT: s_mov_b32 s4, 0x70603025371; GFX90A-NEXT: v_mov_b32_e32 v4, 05372; GFX90A-NEXT: ;;#ASMSTART5373; GFX90A-NEXT: ; def v[2:3]5374; GFX90A-NEXT: ;;#ASMEND5375; GFX90A-NEXT: v_perm_b32 v0, v2, v0, s45376; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s45377; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5378; GFX90A-NEXT: s_waitcnt vmcnt(0)5379; GFX90A-NEXT: s_setpc_b64 s[30:31]5380;5381; GFX942-LABEL: v_shuffle_v4i16_v3i16__1_4_4_4:5382; GFX942: ; %bb.0:5383; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5384; GFX942-NEXT: ;;#ASMSTART5385; GFX942-NEXT: ; def v[0:1]5386; GFX942-NEXT: ;;#ASMEND5387; GFX942-NEXT: s_mov_b32 s2, 0x70603025388; GFX942-NEXT: v_mov_b32_e32 v4, 05389; GFX942-NEXT: ;;#ASMSTART5390; GFX942-NEXT: ; def v[2:3]5391; GFX942-NEXT: ;;#ASMEND5392; GFX942-NEXT: s_nop 05393; GFX942-NEXT: v_perm_b32 v0, v2, v0, s25394; GFX942-NEXT: v_perm_b32 v1, v2, v2, s25395; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5396; GFX942-NEXT: s_waitcnt vmcnt(0)5397; GFX942-NEXT: s_setpc_b64 s[30:31]5398 %vec0 = call <4 x i16> asm "; def $0", "=v"()5399 %vec1 = call <4 x i16> asm "; def $0", "=v"()5400 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5401 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5402 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 1, i32 4, i32 4, i32 4>5403 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85404 ret void5405}5406 5407define void @v_shuffle_v4i16_v3i16__2_4_4_4(ptr addrspace(1) inreg %ptr) {5408; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_4_4_4:5409; GFX900: ; %bb.0:5410; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5411; GFX900-NEXT: ;;#ASMSTART5412; GFX900-NEXT: ; def v[0:1]5413; GFX900-NEXT: ;;#ASMEND5414; GFX900-NEXT: s_mov_b32 s4, 0xffff5415; GFX900-NEXT: ;;#ASMSTART5416; GFX900-NEXT: ; def v[2:3]5417; GFX900-NEXT: ;;#ASMEND5418; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v25419; GFX900-NEXT: s_mov_b32 s4, 0x70603025420; GFX900-NEXT: v_mov_b32_e32 v4, 05421; GFX900-NEXT: v_perm_b32 v1, v2, v2, s45422; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5423; GFX900-NEXT: s_waitcnt vmcnt(0)5424; GFX900-NEXT: s_setpc_b64 s[30:31]5425;5426; GFX90A-LABEL: v_shuffle_v4i16_v3i16__2_4_4_4:5427; GFX90A: ; %bb.0:5428; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5429; GFX90A-NEXT: ;;#ASMSTART5430; GFX90A-NEXT: ; def v[0:1]5431; GFX90A-NEXT: ;;#ASMEND5432; GFX90A-NEXT: s_mov_b32 s4, 0xffff5433; GFX90A-NEXT: ;;#ASMSTART5434; GFX90A-NEXT: ; def v[2:3]5435; GFX90A-NEXT: ;;#ASMEND5436; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v25437; GFX90A-NEXT: s_mov_b32 s4, 0x70603025438; GFX90A-NEXT: v_mov_b32_e32 v4, 05439; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s45440; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5441; GFX90A-NEXT: s_waitcnt vmcnt(0)5442; GFX90A-NEXT: s_setpc_b64 s[30:31]5443;5444; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_4_4_4:5445; GFX942: ; %bb.0:5446; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5447; GFX942-NEXT: ;;#ASMSTART5448; GFX942-NEXT: ; def v[0:1]5449; GFX942-NEXT: ;;#ASMEND5450; GFX942-NEXT: s_mov_b32 s2, 0xffff5451; GFX942-NEXT: ;;#ASMSTART5452; GFX942-NEXT: ; def v[2:3]5453; GFX942-NEXT: ;;#ASMEND5454; GFX942-NEXT: v_mov_b32_e32 v4, 05455; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v25456; GFX942-NEXT: s_mov_b32 s2, 0x70603025457; GFX942-NEXT: v_perm_b32 v1, v2, v2, s25458; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5459; GFX942-NEXT: s_waitcnt vmcnt(0)5460; GFX942-NEXT: s_setpc_b64 s[30:31]5461 %vec0 = call <4 x i16> asm "; def $0", "=v"()5462 %vec1 = call <4 x i16> asm "; def $0", "=v"()5463 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5464 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5465 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 2, i32 4, i32 4, i32 4>5466 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85467 ret void5468}5469 5470define void @v_shuffle_v4i16_v3i16__3_4_4_4(ptr addrspace(1) inreg %ptr) {5471; GFX900-LABEL: v_shuffle_v4i16_v3i16__3_4_4_4:5472; GFX900: ; %bb.0:5473; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5474; GFX900-NEXT: ;;#ASMSTART5475; GFX900-NEXT: ; def v[0:1]5476; GFX900-NEXT: ;;#ASMEND5477; GFX900-NEXT: s_mov_b32 s4, 0x70603025478; GFX900-NEXT: v_mov_b32_e32 v2, 05479; GFX900-NEXT: v_perm_b32 v1, v0, v0, s45480; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]5481; GFX900-NEXT: s_waitcnt vmcnt(0)5482; GFX900-NEXT: s_setpc_b64 s[30:31]5483;5484; GFX90A-LABEL: v_shuffle_v4i16_v3i16__3_4_4_4:5485; GFX90A: ; %bb.0:5486; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5487; GFX90A-NEXT: ;;#ASMSTART5488; GFX90A-NEXT: ; def v[0:1]5489; GFX90A-NEXT: ;;#ASMEND5490; GFX90A-NEXT: s_mov_b32 s4, 0x70603025491; GFX90A-NEXT: v_mov_b32_e32 v2, 05492; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s45493; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]5494; GFX90A-NEXT: s_waitcnt vmcnt(0)5495; GFX90A-NEXT: s_setpc_b64 s[30:31]5496;5497; GFX942-LABEL: v_shuffle_v4i16_v3i16__3_4_4_4:5498; GFX942: ; %bb.0:5499; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5500; GFX942-NEXT: ;;#ASMSTART5501; GFX942-NEXT: ; def v[0:1]5502; GFX942-NEXT: ;;#ASMEND5503; GFX942-NEXT: s_mov_b32 s2, 0x70603025504; GFX942-NEXT: v_mov_b32_e32 v2, 05505; GFX942-NEXT: v_perm_b32 v1, v0, v0, s25506; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]5507; GFX942-NEXT: s_waitcnt vmcnt(0)5508; GFX942-NEXT: s_setpc_b64 s[30:31]5509 %vec0 = call <4 x i16> asm "; def $0", "=v"()5510 %vec1 = call <4 x i16> asm "; def $0", "=v"()5511 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5512 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5513 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 3, i32 4, i32 4, i32 4>5514 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85515 ret void5516}5517 5518define void @v_shuffle_v4i16_v3i16__4_4_4_4(ptr addrspace(1) inreg %ptr) {5519; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_4_4_4:5520; GFX900: ; %bb.0:5521; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5522; GFX900-NEXT: ;;#ASMSTART5523; GFX900-NEXT: ; def v[0:1]5524; GFX900-NEXT: ;;#ASMEND5525; GFX900-NEXT: s_mov_b32 s4, 0x70603025526; GFX900-NEXT: v_perm_b32 v0, v0, v0, s45527; GFX900-NEXT: v_mov_b32_e32 v2, 05528; GFX900-NEXT: v_mov_b32_e32 v1, v05529; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]5530; GFX900-NEXT: s_waitcnt vmcnt(0)5531; GFX900-NEXT: s_setpc_b64 s[30:31]5532;5533; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_4_4_4:5534; GFX90A: ; %bb.0:5535; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5536; GFX90A-NEXT: ;;#ASMSTART5537; GFX90A-NEXT: ; def v[0:1]5538; GFX90A-NEXT: ;;#ASMEND5539; GFX90A-NEXT: s_mov_b32 s4, 0x70603025540; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s45541; GFX90A-NEXT: v_mov_b32_e32 v2, 05542; GFX90A-NEXT: v_mov_b32_e32 v1, v05543; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]5544; GFX90A-NEXT: s_waitcnt vmcnt(0)5545; GFX90A-NEXT: s_setpc_b64 s[30:31]5546;5547; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_4_4_4:5548; GFX942: ; %bb.0:5549; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5550; GFX942-NEXT: ;;#ASMSTART5551; GFX942-NEXT: ; def v[0:1]5552; GFX942-NEXT: ;;#ASMEND5553; GFX942-NEXT: s_mov_b32 s2, 0x70603025554; GFX942-NEXT: v_perm_b32 v0, v0, v0, s25555; GFX942-NEXT: v_mov_b32_e32 v2, 05556; GFX942-NEXT: v_mov_b32_e32 v1, v05557; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]5558; GFX942-NEXT: s_waitcnt vmcnt(0)5559; GFX942-NEXT: s_setpc_b64 s[30:31]5560 %vec0 = call <4 x i16> asm "; def $0", "=v"()5561 %vec1 = call <4 x i16> asm "; def $0", "=v"()5562 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5563 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5564 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 4, i32 4, i32 4>5565 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85566 ret void5567}5568 5569define void @v_shuffle_v4i16_v3i16__5_4_4_4(ptr addrspace(1) inreg %ptr) {5570; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_4_4:5571; GFX900: ; %bb.0:5572; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5573; GFX900-NEXT: ;;#ASMSTART5574; GFX900-NEXT: ; def v[0:1]5575; GFX900-NEXT: ;;#ASMEND5576; GFX900-NEXT: s_mov_b32 s4, 0xffff5577; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v05578; GFX900-NEXT: s_mov_b32 s4, 0x70603025579; GFX900-NEXT: v_mov_b32_e32 v3, 05580; GFX900-NEXT: v_perm_b32 v2, v0, v0, s45581; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]5582; GFX900-NEXT: s_waitcnt vmcnt(0)5583; GFX900-NEXT: s_setpc_b64 s[30:31]5584;5585; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_4_4:5586; GFX90A: ; %bb.0:5587; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5588; GFX90A-NEXT: s_mov_b32 s4, 0xffff5589; GFX90A-NEXT: ;;#ASMSTART5590; GFX90A-NEXT: ; def v[0:1]5591; GFX90A-NEXT: ;;#ASMEND5592; GFX90A-NEXT: v_bfi_b32 v2, s4, v1, v05593; GFX90A-NEXT: s_mov_b32 s4, 0x70603025594; GFX90A-NEXT: v_mov_b32_e32 v4, 05595; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s45596; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]5597; GFX90A-NEXT: s_waitcnt vmcnt(0)5598; GFX90A-NEXT: s_setpc_b64 s[30:31]5599;5600; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_4_4:5601; GFX942: ; %bb.0:5602; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5603; GFX942-NEXT: s_mov_b32 s2, 0xffff5604; GFX942-NEXT: ;;#ASMSTART5605; GFX942-NEXT: ; def v[0:1]5606; GFX942-NEXT: ;;#ASMEND5607; GFX942-NEXT: v_mov_b32_e32 v4, 05608; GFX942-NEXT: v_bfi_b32 v2, s2, v1, v05609; GFX942-NEXT: s_mov_b32 s2, 0x70603025610; GFX942-NEXT: v_perm_b32 v3, v0, v0, s25611; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]5612; GFX942-NEXT: s_waitcnt vmcnt(0)5613; GFX942-NEXT: s_setpc_b64 s[30:31]5614 %vec0 = call <4 x i16> asm "; def $0", "=v"()5615 %vec1 = call <4 x i16> asm "; def $0", "=v"()5616 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5617 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5618 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 4, i32 4>5619 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85620 ret void5621}5622 5623define void @v_shuffle_v4i16_v3i16__5_u_4_4(ptr addrspace(1) inreg %ptr) {5624; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_4_4:5625; GFX900: ; %bb.0:5626; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5627; GFX900-NEXT: s_mov_b32 s4, 0x70603025628; GFX900-NEXT: v_mov_b32_e32 v3, 05629; GFX900-NEXT: ;;#ASMSTART5630; GFX900-NEXT: ; def v[0:1]5631; GFX900-NEXT: ;;#ASMEND5632; GFX900-NEXT: v_perm_b32 v2, v0, v0, s45633; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]5634; GFX900-NEXT: s_waitcnt vmcnt(0)5635; GFX900-NEXT: s_setpc_b64 s[30:31]5636;5637; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_4_4:5638; GFX90A: ; %bb.0:5639; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5640; GFX90A-NEXT: s_mov_b32 s4, 0x70603025641; GFX90A-NEXT: v_mov_b32_e32 v4, 05642; GFX90A-NEXT: ;;#ASMSTART5643; GFX90A-NEXT: ; def v[0:1]5644; GFX90A-NEXT: ;;#ASMEND5645; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s45646; GFX90A-NEXT: v_mov_b32_e32 v2, v15647; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]5648; GFX90A-NEXT: s_waitcnt vmcnt(0)5649; GFX90A-NEXT: s_setpc_b64 s[30:31]5650;5651; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_4_4:5652; GFX942: ; %bb.0:5653; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5654; GFX942-NEXT: s_mov_b32 s2, 0x70603025655; GFX942-NEXT: v_mov_b32_e32 v4, 05656; GFX942-NEXT: ;;#ASMSTART5657; GFX942-NEXT: ; def v[0:1]5658; GFX942-NEXT: ;;#ASMEND5659; GFX942-NEXT: s_nop 05660; GFX942-NEXT: v_perm_b32 v3, v0, v0, s25661; GFX942-NEXT: v_mov_b32_e32 v2, v15662; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]5663; GFX942-NEXT: s_waitcnt vmcnt(0)5664; GFX942-NEXT: s_setpc_b64 s[30:31]5665 %vec0 = call <4 x i16> asm "; def $0", "=v"()5666 %vec1 = call <4 x i16> asm "; def $0", "=v"()5667 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5668 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5669 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>5670 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85671 ret void5672}5673 5674define void @v_shuffle_v4i16_v3i16__5_0_4_4(ptr addrspace(1) inreg %ptr) {5675; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_4_4:5676; GFX900: ; %bb.0:5677; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5678; GFX900-NEXT: ;;#ASMSTART5679; GFX900-NEXT: ; def v[0:1]5680; GFX900-NEXT: ;;#ASMEND5681; GFX900-NEXT: s_mov_b32 s4, 0x50401005682; GFX900-NEXT: ;;#ASMSTART5683; GFX900-NEXT: ; def v[1:2]5684; GFX900-NEXT: ;;#ASMEND5685; GFX900-NEXT: v_perm_b32 v0, v0, v2, s45686; GFX900-NEXT: s_mov_b32 s4, 0x70603025687; GFX900-NEXT: v_mov_b32_e32 v3, 05688; GFX900-NEXT: v_perm_b32 v1, v1, v1, s45689; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5690; GFX900-NEXT: s_waitcnt vmcnt(0)5691; GFX900-NEXT: s_setpc_b64 s[30:31]5692;5693; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_4_4:5694; GFX90A: ; %bb.0:5695; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5696; GFX90A-NEXT: ;;#ASMSTART5697; GFX90A-NEXT: ; def v[0:1]5698; GFX90A-NEXT: ;;#ASMEND5699; GFX90A-NEXT: s_mov_b32 s4, 0x50401005700; GFX90A-NEXT: ;;#ASMSTART5701; GFX90A-NEXT: ; def v[2:3]5702; GFX90A-NEXT: ;;#ASMEND5703; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s45704; GFX90A-NEXT: s_mov_b32 s4, 0x70603025705; GFX90A-NEXT: v_mov_b32_e32 v4, 05706; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s45707; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5708; GFX90A-NEXT: s_waitcnt vmcnt(0)5709; GFX90A-NEXT: s_setpc_b64 s[30:31]5710;5711; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_4_4:5712; GFX942: ; %bb.0:5713; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5714; GFX942-NEXT: ;;#ASMSTART5715; GFX942-NEXT: ; def v[0:1]5716; GFX942-NEXT: ;;#ASMEND5717; GFX942-NEXT: s_mov_b32 s2, 0x50401005718; GFX942-NEXT: ;;#ASMSTART5719; GFX942-NEXT: ; def v[2:3]5720; GFX942-NEXT: ;;#ASMEND5721; GFX942-NEXT: v_mov_b32_e32 v4, 05722; GFX942-NEXT: v_perm_b32 v0, v0, v3, s25723; GFX942-NEXT: s_mov_b32 s2, 0x70603025724; GFX942-NEXT: v_perm_b32 v1, v2, v2, s25725; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5726; GFX942-NEXT: s_waitcnt vmcnt(0)5727; GFX942-NEXT: s_setpc_b64 s[30:31]5728 %vec0 = call <4 x i16> asm "; def $0", "=v"()5729 %vec1 = call <4 x i16> asm "; def $0", "=v"()5730 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5731 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5732 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 4, i32 4>5733 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85734 ret void5735}5736 5737define void @v_shuffle_v4i16_v3i16__5_1_4_4(ptr addrspace(1) inreg %ptr) {5738; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_4_4:5739; GFX900: ; %bb.0:5740; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5741; GFX900-NEXT: ;;#ASMSTART5742; GFX900-NEXT: ; def v[0:1]5743; GFX900-NEXT: ;;#ASMEND5744; GFX900-NEXT: s_mov_b32 s4, 0xffff5745; GFX900-NEXT: ;;#ASMSTART5746; GFX900-NEXT: ; def v[1:2]5747; GFX900-NEXT: ;;#ASMEND5748; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v05749; GFX900-NEXT: s_mov_b32 s4, 0x70603025750; GFX900-NEXT: v_mov_b32_e32 v3, 05751; GFX900-NEXT: v_perm_b32 v1, v1, v1, s45752; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5753; GFX900-NEXT: s_waitcnt vmcnt(0)5754; GFX900-NEXT: s_setpc_b64 s[30:31]5755;5756; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_4_4:5757; GFX90A: ; %bb.0:5758; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5759; GFX90A-NEXT: ;;#ASMSTART5760; GFX90A-NEXT: ; def v[0:1]5761; GFX90A-NEXT: ;;#ASMEND5762; GFX90A-NEXT: s_mov_b32 s4, 0xffff5763; GFX90A-NEXT: ;;#ASMSTART5764; GFX90A-NEXT: ; def v[2:3]5765; GFX90A-NEXT: ;;#ASMEND5766; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v05767; GFX90A-NEXT: s_mov_b32 s4, 0x70603025768; GFX90A-NEXT: v_mov_b32_e32 v4, 05769; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s45770; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5771; GFX90A-NEXT: s_waitcnt vmcnt(0)5772; GFX90A-NEXT: s_setpc_b64 s[30:31]5773;5774; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_4_4:5775; GFX942: ; %bb.0:5776; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5777; GFX942-NEXT: ;;#ASMSTART5778; GFX942-NEXT: ; def v[0:1]5779; GFX942-NEXT: ;;#ASMEND5780; GFX942-NEXT: s_mov_b32 s2, 0xffff5781; GFX942-NEXT: ;;#ASMSTART5782; GFX942-NEXT: ; def v[2:3]5783; GFX942-NEXT: ;;#ASMEND5784; GFX942-NEXT: v_mov_b32_e32 v4, 05785; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v05786; GFX942-NEXT: s_mov_b32 s2, 0x70603025787; GFX942-NEXT: v_perm_b32 v1, v2, v2, s25788; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5789; GFX942-NEXT: s_waitcnt vmcnt(0)5790; GFX942-NEXT: s_setpc_b64 s[30:31]5791 %vec0 = call <4 x i16> asm "; def $0", "=v"()5792 %vec1 = call <4 x i16> asm "; def $0", "=v"()5793 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5794 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5795 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 4, i32 4>5796 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85797 ret void5798}5799 5800define void @v_shuffle_v4i16_v3i16__5_2_4_4(ptr addrspace(1) inreg %ptr) {5801; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_4_4:5802; GFX900: ; %bb.0:5803; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5804; GFX900-NEXT: ;;#ASMSTART5805; GFX900-NEXT: ; def v[0:1]5806; GFX900-NEXT: ;;#ASMEND5807; GFX900-NEXT: s_mov_b32 s4, 0x50401005808; GFX900-NEXT: ;;#ASMSTART5809; GFX900-NEXT: ; def v[2:3]5810; GFX900-NEXT: ;;#ASMEND5811; GFX900-NEXT: v_perm_b32 v0, v1, v3, s45812; GFX900-NEXT: s_mov_b32 s4, 0x70603025813; GFX900-NEXT: v_mov_b32_e32 v4, 05814; GFX900-NEXT: v_perm_b32 v1, v2, v2, s45815; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5816; GFX900-NEXT: s_waitcnt vmcnt(0)5817; GFX900-NEXT: s_setpc_b64 s[30:31]5818;5819; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_4_4:5820; GFX90A: ; %bb.0:5821; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5822; GFX90A-NEXT: ;;#ASMSTART5823; GFX90A-NEXT: ; def v[0:1]5824; GFX90A-NEXT: ;;#ASMEND5825; GFX90A-NEXT: s_mov_b32 s4, 0x50401005826; GFX90A-NEXT: ;;#ASMSTART5827; GFX90A-NEXT: ; def v[2:3]5828; GFX90A-NEXT: ;;#ASMEND5829; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s45830; GFX90A-NEXT: s_mov_b32 s4, 0x70603025831; GFX90A-NEXT: v_mov_b32_e32 v4, 05832; GFX90A-NEXT: v_perm_b32 v1, v2, v2, s45833; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]5834; GFX90A-NEXT: s_waitcnt vmcnt(0)5835; GFX90A-NEXT: s_setpc_b64 s[30:31]5836;5837; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_4_4:5838; GFX942: ; %bb.0:5839; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5840; GFX942-NEXT: ;;#ASMSTART5841; GFX942-NEXT: ; def v[0:1]5842; GFX942-NEXT: ;;#ASMEND5843; GFX942-NEXT: s_mov_b32 s2, 0x50401005844; GFX942-NEXT: ;;#ASMSTART5845; GFX942-NEXT: ; def v[2:3]5846; GFX942-NEXT: ;;#ASMEND5847; GFX942-NEXT: v_mov_b32_e32 v4, 05848; GFX942-NEXT: v_perm_b32 v0, v1, v3, s25849; GFX942-NEXT: s_mov_b32 s2, 0x70603025850; GFX942-NEXT: v_perm_b32 v1, v2, v2, s25851; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]5852; GFX942-NEXT: s_waitcnt vmcnt(0)5853; GFX942-NEXT: s_setpc_b64 s[30:31]5854 %vec0 = call <4 x i16> asm "; def $0", "=v"()5855 %vec1 = call <4 x i16> asm "; def $0", "=v"()5856 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5857 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5858 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 4, i32 4>5859 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85860 ret void5861}5862 5863define void @v_shuffle_v4i16_v3i16__5_3_4_4(ptr addrspace(1) inreg %ptr) {5864; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_4_4:5865; GFX900: ; %bb.0:5866; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5867; GFX900-NEXT: ;;#ASMSTART5868; GFX900-NEXT: ; def v[0:1]5869; GFX900-NEXT: ;;#ASMEND5870; GFX900-NEXT: s_mov_b32 s4, 0x50401005871; GFX900-NEXT: v_perm_b32 v1, v0, v1, s45872; GFX900-NEXT: s_mov_b32 s4, 0x70603025873; GFX900-NEXT: v_mov_b32_e32 v3, 05874; GFX900-NEXT: v_perm_b32 v2, v0, v0, s45875; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]5876; GFX900-NEXT: s_waitcnt vmcnt(0)5877; GFX900-NEXT: s_setpc_b64 s[30:31]5878;5879; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_3_4_4:5880; GFX90A: ; %bb.0:5881; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5882; GFX90A-NEXT: s_mov_b32 s4, 0x50401005883; GFX90A-NEXT: ;;#ASMSTART5884; GFX90A-NEXT: ; def v[0:1]5885; GFX90A-NEXT: ;;#ASMEND5886; GFX90A-NEXT: v_perm_b32 v2, v0, v1, s45887; GFX90A-NEXT: s_mov_b32 s4, 0x70603025888; GFX90A-NEXT: v_mov_b32_e32 v4, 05889; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s45890; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]5891; GFX90A-NEXT: s_waitcnt vmcnt(0)5892; GFX90A-NEXT: s_setpc_b64 s[30:31]5893;5894; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_4_4:5895; GFX942: ; %bb.0:5896; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5897; GFX942-NEXT: s_mov_b32 s2, 0x50401005898; GFX942-NEXT: ;;#ASMSTART5899; GFX942-NEXT: ; def v[0:1]5900; GFX942-NEXT: ;;#ASMEND5901; GFX942-NEXT: v_mov_b32_e32 v4, 05902; GFX942-NEXT: v_perm_b32 v2, v0, v1, s25903; GFX942-NEXT: s_mov_b32 s2, 0x70603025904; GFX942-NEXT: v_perm_b32 v3, v0, v0, s25905; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]5906; GFX942-NEXT: s_waitcnt vmcnt(0)5907; GFX942-NEXT: s_setpc_b64 s[30:31]5908 %vec0 = call <4 x i16> asm "; def $0", "=v"()5909 %vec1 = call <4 x i16> asm "; def $0", "=v"()5910 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5911 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5912 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 4, i32 4>5913 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85914 ret void5915}5916 5917define void @v_shuffle_v4i16_v3i16__5_5_4_4(ptr addrspace(1) inreg %ptr) {5918; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_4:5919; GFX900: ; %bb.0:5920; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5921; GFX900-NEXT: s_mov_b32 s4, 0x70603025922; GFX900-NEXT: ;;#ASMSTART5923; GFX900-NEXT: ; def v[0:1]5924; GFX900-NEXT: ;;#ASMEND5925; GFX900-NEXT: v_perm_b32 v2, v0, v0, s45926; GFX900-NEXT: s_mov_b32 s4, 0x50401005927; GFX900-NEXT: v_mov_b32_e32 v3, 05928; GFX900-NEXT: v_perm_b32 v1, v1, v1, s45929; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]5930; GFX900-NEXT: s_waitcnt vmcnt(0)5931; GFX900-NEXT: s_setpc_b64 s[30:31]5932;5933; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_4:5934; GFX90A: ; %bb.0:5935; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5936; GFX90A-NEXT: s_mov_b32 s4, 0x70603025937; GFX90A-NEXT: ;;#ASMSTART5938; GFX90A-NEXT: ; def v[0:1]5939; GFX90A-NEXT: ;;#ASMEND5940; GFX90A-NEXT: v_perm_b32 v3, v0, v0, s45941; GFX90A-NEXT: s_mov_b32 s4, 0x50401005942; GFX90A-NEXT: v_mov_b32_e32 v4, 05943; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s45944; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]5945; GFX90A-NEXT: s_waitcnt vmcnt(0)5946; GFX90A-NEXT: s_setpc_b64 s[30:31]5947;5948; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_4:5949; GFX942: ; %bb.0:5950; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5951; GFX942-NEXT: s_mov_b32 s2, 0x70603025952; GFX942-NEXT: ;;#ASMSTART5953; GFX942-NEXT: ; def v[0:1]5954; GFX942-NEXT: ;;#ASMEND5955; GFX942-NEXT: v_mov_b32_e32 v4, 05956; GFX942-NEXT: v_perm_b32 v3, v0, v0, s25957; GFX942-NEXT: s_mov_b32 s2, 0x50401005958; GFX942-NEXT: v_perm_b32 v2, v1, v1, s25959; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]5960; GFX942-NEXT: s_waitcnt vmcnt(0)5961; GFX942-NEXT: s_setpc_b64 s[30:31]5962 %vec0 = call <4 x i16> asm "; def $0", "=v"()5963 %vec1 = call <4 x i16> asm "; def $0", "=v"()5964 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5965 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>5966 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 4>5967 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 85968 ret void5969}5970 5971define void @v_shuffle_v4i16_v3i16__5_5_u_4(ptr addrspace(1) inreg %ptr) {5972; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_4:5973; GFX900: ; %bb.0:5974; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5975; GFX900-NEXT: s_mov_b32 s4, 0x50401005976; GFX900-NEXT: v_mov_b32_e32 v3, 05977; GFX900-NEXT: ;;#ASMSTART5978; GFX900-NEXT: ; def v[1:2]5979; GFX900-NEXT: ;;#ASMEND5980; GFX900-NEXT: v_perm_b32 v0, v2, v2, s45981; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]5982; GFX900-NEXT: s_waitcnt vmcnt(0)5983; GFX900-NEXT: s_setpc_b64 s[30:31]5984;5985; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_4:5986; GFX90A: ; %bb.0:5987; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5988; GFX90A-NEXT: s_mov_b32 s4, 0x50401005989; GFX90A-NEXT: v_mov_b32_e32 v4, 05990; GFX90A-NEXT: ;;#ASMSTART5991; GFX90A-NEXT: ; def v[0:1]5992; GFX90A-NEXT: ;;#ASMEND5993; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s45994; GFX90A-NEXT: v_mov_b32_e32 v3, v05995; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]5996; GFX90A-NEXT: s_waitcnt vmcnt(0)5997; GFX90A-NEXT: s_setpc_b64 s[30:31]5998;5999; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_4:6000; GFX942: ; %bb.0:6001; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6002; GFX942-NEXT: s_mov_b32 s2, 0x50401006003; GFX942-NEXT: v_mov_b32_e32 v4, 06004; GFX942-NEXT: ;;#ASMSTART6005; GFX942-NEXT: ; def v[0:1]6006; GFX942-NEXT: ;;#ASMEND6007; GFX942-NEXT: s_nop 06008; GFX942-NEXT: v_perm_b32 v2, v1, v1, s26009; GFX942-NEXT: v_mov_b32_e32 v3, v06010; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]6011; GFX942-NEXT: s_waitcnt vmcnt(0)6012; GFX942-NEXT: s_setpc_b64 s[30:31]6013 %vec0 = call <4 x i16> asm "; def $0", "=v"()6014 %vec1 = call <4 x i16> asm "; def $0", "=v"()6015 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6016 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6017 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>6018 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86019 ret void6020}6021 6022define void @v_shuffle_v4i16_v3i16__5_5_0_4(ptr addrspace(1) inreg %ptr) {6023; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_4:6024; GFX900: ; %bb.0:6025; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6026; GFX900-NEXT: ;;#ASMSTART6027; GFX900-NEXT: ; def v[0:1]6028; GFX900-NEXT: ;;#ASMEND6029; GFX900-NEXT: ;;#ASMSTART6030; GFX900-NEXT: ; def v[1:2]6031; GFX900-NEXT: ;;#ASMEND6032; GFX900-NEXT: s_mov_b32 s4, 0xffff6033; GFX900-NEXT: v_bfi_b32 v1, s4, v0, v16034; GFX900-NEXT: s_mov_b32 s4, 0x50401006035; GFX900-NEXT: v_mov_b32_e32 v3, 06036; GFX900-NEXT: v_perm_b32 v0, v2, v2, s46037; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6038; GFX900-NEXT: s_waitcnt vmcnt(0)6039; GFX900-NEXT: s_setpc_b64 s[30:31]6040;6041; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_4:6042; GFX90A: ; %bb.0:6043; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6044; GFX90A-NEXT: ;;#ASMSTART6045; GFX90A-NEXT: ; def v[0:1]6046; GFX90A-NEXT: ;;#ASMEND6047; GFX90A-NEXT: s_mov_b32 s4, 0xffff6048; GFX90A-NEXT: ;;#ASMSTART6049; GFX90A-NEXT: ; def v[2:3]6050; GFX90A-NEXT: ;;#ASMEND6051; GFX90A-NEXT: v_bfi_b32 v1, s4, v0, v26052; GFX90A-NEXT: s_mov_b32 s4, 0x50401006053; GFX90A-NEXT: v_mov_b32_e32 v4, 06054; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s46055; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6056; GFX90A-NEXT: s_waitcnt vmcnt(0)6057; GFX90A-NEXT: s_setpc_b64 s[30:31]6058;6059; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_4:6060; GFX942: ; %bb.0:6061; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6062; GFX942-NEXT: ;;#ASMSTART6063; GFX942-NEXT: ; def v[0:1]6064; GFX942-NEXT: ;;#ASMEND6065; GFX942-NEXT: s_mov_b32 s2, 0xffff6066; GFX942-NEXT: ;;#ASMSTART6067; GFX942-NEXT: ; def v[2:3]6068; GFX942-NEXT: ;;#ASMEND6069; GFX942-NEXT: v_mov_b32_e32 v4, 06070; GFX942-NEXT: v_bfi_b32 v1, s2, v0, v26071; GFX942-NEXT: s_mov_b32 s2, 0x50401006072; GFX942-NEXT: v_perm_b32 v0, v3, v3, s26073; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6074; GFX942-NEXT: s_waitcnt vmcnt(0)6075; GFX942-NEXT: s_setpc_b64 s[30:31]6076 %vec0 = call <4 x i16> asm "; def $0", "=v"()6077 %vec1 = call <4 x i16> asm "; def $0", "=v"()6078 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6079 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6080 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 4>6081 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86082 ret void6083}6084 6085define void @v_shuffle_v4i16_v3i16__5_5_1_4(ptr addrspace(1) inreg %ptr) {6086; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_4:6087; GFX900: ; %bb.0:6088; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6089; GFX900-NEXT: ;;#ASMSTART6090; GFX900-NEXT: ; def v[0:1]6091; GFX900-NEXT: ;;#ASMEND6092; GFX900-NEXT: ;;#ASMSTART6093; GFX900-NEXT: ; def v[1:2]6094; GFX900-NEXT: ;;#ASMEND6095; GFX900-NEXT: s_mov_b32 s4, 0x70603026096; GFX900-NEXT: v_perm_b32 v1, v1, v0, s46097; GFX900-NEXT: s_mov_b32 s4, 0x50401006098; GFX900-NEXT: v_mov_b32_e32 v3, 06099; GFX900-NEXT: v_perm_b32 v0, v2, v2, s46100; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6101; GFX900-NEXT: s_waitcnt vmcnt(0)6102; GFX900-NEXT: s_setpc_b64 s[30:31]6103;6104; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_4:6105; GFX90A: ; %bb.0:6106; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6107; GFX90A-NEXT: ;;#ASMSTART6108; GFX90A-NEXT: ; def v[0:1]6109; GFX90A-NEXT: ;;#ASMEND6110; GFX90A-NEXT: s_mov_b32 s4, 0x70603026111; GFX90A-NEXT: ;;#ASMSTART6112; GFX90A-NEXT: ; def v[2:3]6113; GFX90A-NEXT: ;;#ASMEND6114; GFX90A-NEXT: v_perm_b32 v1, v2, v0, s46115; GFX90A-NEXT: s_mov_b32 s4, 0x50401006116; GFX90A-NEXT: v_mov_b32_e32 v4, 06117; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s46118; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6119; GFX90A-NEXT: s_waitcnt vmcnt(0)6120; GFX90A-NEXT: s_setpc_b64 s[30:31]6121;6122; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_4:6123; GFX942: ; %bb.0:6124; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6125; GFX942-NEXT: ;;#ASMSTART6126; GFX942-NEXT: ; def v[0:1]6127; GFX942-NEXT: ;;#ASMEND6128; GFX942-NEXT: s_mov_b32 s2, 0x70603026129; GFX942-NEXT: ;;#ASMSTART6130; GFX942-NEXT: ; def v[2:3]6131; GFX942-NEXT: ;;#ASMEND6132; GFX942-NEXT: v_mov_b32_e32 v4, 06133; GFX942-NEXT: v_perm_b32 v1, v2, v0, s26134; GFX942-NEXT: s_mov_b32 s2, 0x50401006135; GFX942-NEXT: v_perm_b32 v0, v3, v3, s26136; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6137; GFX942-NEXT: s_waitcnt vmcnt(0)6138; GFX942-NEXT: s_setpc_b64 s[30:31]6139 %vec0 = call <4 x i16> asm "; def $0", "=v"()6140 %vec1 = call <4 x i16> asm "; def $0", "=v"()6141 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6142 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6143 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 4>6144 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86145 ret void6146}6147 6148define void @v_shuffle_v4i16_v3i16__5_5_2_4(ptr addrspace(1) inreg %ptr) {6149; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_4:6150; GFX900: ; %bb.0:6151; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6152; GFX900-NEXT: ;;#ASMSTART6153; GFX900-NEXT: ; def v[0:1]6154; GFX900-NEXT: ;;#ASMEND6155; GFX900-NEXT: s_mov_b32 s4, 0xffff6156; GFX900-NEXT: ;;#ASMSTART6157; GFX900-NEXT: ; def v[2:3]6158; GFX900-NEXT: ;;#ASMEND6159; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v26160; GFX900-NEXT: s_mov_b32 s4, 0x50401006161; GFX900-NEXT: v_mov_b32_e32 v4, 06162; GFX900-NEXT: v_perm_b32 v0, v3, v3, s46163; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6164; GFX900-NEXT: s_waitcnt vmcnt(0)6165; GFX900-NEXT: s_setpc_b64 s[30:31]6166;6167; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_4:6168; GFX90A: ; %bb.0:6169; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6170; GFX90A-NEXT: ;;#ASMSTART6171; GFX90A-NEXT: ; def v[0:1]6172; GFX90A-NEXT: ;;#ASMEND6173; GFX90A-NEXT: s_mov_b32 s4, 0xffff6174; GFX90A-NEXT: ;;#ASMSTART6175; GFX90A-NEXT: ; def v[2:3]6176; GFX90A-NEXT: ;;#ASMEND6177; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v26178; GFX90A-NEXT: s_mov_b32 s4, 0x50401006179; GFX90A-NEXT: v_mov_b32_e32 v4, 06180; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s46181; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6182; GFX90A-NEXT: s_waitcnt vmcnt(0)6183; GFX90A-NEXT: s_setpc_b64 s[30:31]6184;6185; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_2_4:6186; GFX942: ; %bb.0:6187; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6188; GFX942-NEXT: ;;#ASMSTART6189; GFX942-NEXT: ; def v[0:1]6190; GFX942-NEXT: ;;#ASMEND6191; GFX942-NEXT: s_mov_b32 s2, 0xffff6192; GFX942-NEXT: ;;#ASMSTART6193; GFX942-NEXT: ; def v[2:3]6194; GFX942-NEXT: ;;#ASMEND6195; GFX942-NEXT: v_mov_b32_e32 v4, 06196; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v26197; GFX942-NEXT: s_mov_b32 s2, 0x50401006198; GFX942-NEXT: v_perm_b32 v0, v3, v3, s26199; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6200; GFX942-NEXT: s_waitcnt vmcnt(0)6201; GFX942-NEXT: s_setpc_b64 s[30:31]6202 %vec0 = call <4 x i16> asm "; def $0", "=v"()6203 %vec1 = call <4 x i16> asm "; def $0", "=v"()6204 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6205 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6206 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 4>6207 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86208 ret void6209}6210 6211define void @v_shuffle_v4i16_v3i16__5_5_3_4(ptr addrspace(1) inreg %ptr) {6212; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_4:6213; GFX900: ; %bb.0:6214; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6215; GFX900-NEXT: s_mov_b32 s4, 0x50401006216; GFX900-NEXT: v_mov_b32_e32 v3, 06217; GFX900-NEXT: ;;#ASMSTART6218; GFX900-NEXT: ; def v[1:2]6219; GFX900-NEXT: ;;#ASMEND6220; GFX900-NEXT: v_perm_b32 v0, v2, v2, s46221; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6222; GFX900-NEXT: s_waitcnt vmcnt(0)6223; GFX900-NEXT: s_setpc_b64 s[30:31]6224;6225; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_4:6226; GFX90A: ; %bb.0:6227; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6228; GFX90A-NEXT: s_mov_b32 s4, 0x50401006229; GFX90A-NEXT: v_mov_b32_e32 v4, 06230; GFX90A-NEXT: ;;#ASMSTART6231; GFX90A-NEXT: ; def v[0:1]6232; GFX90A-NEXT: ;;#ASMEND6233; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s46234; GFX90A-NEXT: v_mov_b32_e32 v3, v06235; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]6236; GFX90A-NEXT: s_waitcnt vmcnt(0)6237; GFX90A-NEXT: s_setpc_b64 s[30:31]6238;6239; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_4:6240; GFX942: ; %bb.0:6241; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6242; GFX942-NEXT: s_mov_b32 s2, 0x50401006243; GFX942-NEXT: v_mov_b32_e32 v4, 06244; GFX942-NEXT: ;;#ASMSTART6245; GFX942-NEXT: ; def v[0:1]6246; GFX942-NEXT: ;;#ASMEND6247; GFX942-NEXT: s_nop 06248; GFX942-NEXT: v_perm_b32 v2, v1, v1, s26249; GFX942-NEXT: v_mov_b32_e32 v3, v06250; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]6251; GFX942-NEXT: s_waitcnt vmcnt(0)6252; GFX942-NEXT: s_setpc_b64 s[30:31]6253 %vec0 = call <4 x i16> asm "; def $0", "=v"()6254 %vec1 = call <4 x i16> asm "; def $0", "=v"()6255 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6256 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6257 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 4>6258 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86259 ret void6260}6261 6262define void @v_shuffle_v4i16_v3i16__u_5_5_5(ptr addrspace(1) inreg %ptr) {6263; GFX900-LABEL: v_shuffle_v4i16_v3i16__u_5_5_5:6264; GFX900: ; %bb.0:6265; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6266; GFX900-NEXT: ;;#ASMSTART6267; GFX900-NEXT: ; def v[0:1]6268; GFX900-NEXT: ;;#ASMEND6269; GFX900-NEXT: s_mov_b32 s4, 0x50401006270; GFX900-NEXT: v_mov_b32_e32 v3, 06271; GFX900-NEXT: v_perm_b32 v2, v1, v1, s46272; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v16273; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]6274; GFX900-NEXT: s_waitcnt vmcnt(0)6275; GFX900-NEXT: s_setpc_b64 s[30:31]6276;6277; GFX90A-LABEL: v_shuffle_v4i16_v3i16__u_5_5_5:6278; GFX90A: ; %bb.0:6279; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6280; GFX90A-NEXT: s_mov_b32 s4, 0x50401006281; GFX90A-NEXT: v_mov_b32_e32 v4, 06282; GFX90A-NEXT: ;;#ASMSTART6283; GFX90A-NEXT: ; def v[0:1]6284; GFX90A-NEXT: ;;#ASMEND6285; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s46286; GFX90A-NEXT: v_lshlrev_b32_e32 v2, 16, v16287; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]6288; GFX90A-NEXT: s_waitcnt vmcnt(0)6289; GFX90A-NEXT: s_setpc_b64 s[30:31]6290;6291; GFX942-LABEL: v_shuffle_v4i16_v3i16__u_5_5_5:6292; GFX942: ; %bb.0:6293; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6294; GFX942-NEXT: s_mov_b32 s2, 0x50401006295; GFX942-NEXT: v_mov_b32_e32 v4, 06296; GFX942-NEXT: ;;#ASMSTART6297; GFX942-NEXT: ; def v[0:1]6298; GFX942-NEXT: ;;#ASMEND6299; GFX942-NEXT: s_nop 06300; GFX942-NEXT: v_perm_b32 v3, v1, v1, s26301; GFX942-NEXT: v_lshlrev_b32_e32 v2, 16, v16302; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]6303; GFX942-NEXT: s_waitcnt vmcnt(0)6304; GFX942-NEXT: s_setpc_b64 s[30:31]6305 %vec0 = call <4 x i16> asm "; def $0", "=v"()6306 %vec1 = call <4 x i16> asm "; def $0", "=v"()6307 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6308 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6309 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>6310 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86311 ret void6312}6313 6314define void @v_shuffle_v4i16_v3i16__0_5_5_5(ptr addrspace(1) inreg %ptr) {6315; GFX900-LABEL: v_shuffle_v4i16_v3i16__0_5_5_5:6316; GFX900: ; %bb.0:6317; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6318; GFX900-NEXT: ;;#ASMSTART6319; GFX900-NEXT: ; def v[0:1]6320; GFX900-NEXT: ;;#ASMEND6321; GFX900-NEXT: ;;#ASMSTART6322; GFX900-NEXT: ; def v[1:2]6323; GFX900-NEXT: ;;#ASMEND6324; GFX900-NEXT: s_mov_b32 s4, 0x50401006325; GFX900-NEXT: v_mov_b32_e32 v3, 06326; GFX900-NEXT: v_perm_b32 v0, v2, v0, s46327; GFX900-NEXT: v_perm_b32 v1, v2, v2, s46328; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6329; GFX900-NEXT: s_waitcnt vmcnt(0)6330; GFX900-NEXT: s_setpc_b64 s[30:31]6331;6332; GFX90A-LABEL: v_shuffle_v4i16_v3i16__0_5_5_5:6333; GFX90A: ; %bb.0:6334; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6335; GFX90A-NEXT: ;;#ASMSTART6336; GFX90A-NEXT: ; def v[0:1]6337; GFX90A-NEXT: ;;#ASMEND6338; GFX90A-NEXT: s_mov_b32 s4, 0x50401006339; GFX90A-NEXT: v_mov_b32_e32 v4, 06340; GFX90A-NEXT: ;;#ASMSTART6341; GFX90A-NEXT: ; def v[2:3]6342; GFX90A-NEXT: ;;#ASMEND6343; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s46344; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s46345; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6346; GFX90A-NEXT: s_waitcnt vmcnt(0)6347; GFX90A-NEXT: s_setpc_b64 s[30:31]6348;6349; GFX942-LABEL: v_shuffle_v4i16_v3i16__0_5_5_5:6350; GFX942: ; %bb.0:6351; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6352; GFX942-NEXT: ;;#ASMSTART6353; GFX942-NEXT: ; def v[0:1]6354; GFX942-NEXT: ;;#ASMEND6355; GFX942-NEXT: s_mov_b32 s2, 0x50401006356; GFX942-NEXT: v_mov_b32_e32 v4, 06357; GFX942-NEXT: ;;#ASMSTART6358; GFX942-NEXT: ; def v[2:3]6359; GFX942-NEXT: ;;#ASMEND6360; GFX942-NEXT: s_nop 06361; GFX942-NEXT: v_perm_b32 v0, v3, v0, s26362; GFX942-NEXT: v_perm_b32 v1, v3, v3, s26363; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6364; GFX942-NEXT: s_waitcnt vmcnt(0)6365; GFX942-NEXT: s_setpc_b64 s[30:31]6366 %vec0 = call <4 x i16> asm "; def $0", "=v"()6367 %vec1 = call <4 x i16> asm "; def $0", "=v"()6368 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6369 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6370 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 0, i32 5, i32 5, i32 5>6371 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86372 ret void6373}6374 6375define void @v_shuffle_v4i16_v3i16__1_5_5_5(ptr addrspace(1) inreg %ptr) {6376; GFX900-LABEL: v_shuffle_v4i16_v3i16__1_5_5_5:6377; GFX900: ; %bb.0:6378; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6379; GFX900-NEXT: ;;#ASMSTART6380; GFX900-NEXT: ; def v[0:1]6381; GFX900-NEXT: ;;#ASMEND6382; GFX900-NEXT: ;;#ASMSTART6383; GFX900-NEXT: ; def v[1:2]6384; GFX900-NEXT: ;;#ASMEND6385; GFX900-NEXT: s_mov_b32 s4, 0x50401006386; GFX900-NEXT: v_mov_b32_e32 v3, 06387; GFX900-NEXT: v_perm_b32 v1, v2, v2, s46388; GFX900-NEXT: v_alignbit_b32 v0, v2, v0, 166389; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6390; GFX900-NEXT: s_waitcnt vmcnt(0)6391; GFX900-NEXT: s_setpc_b64 s[30:31]6392;6393; GFX90A-LABEL: v_shuffle_v4i16_v3i16__1_5_5_5:6394; GFX90A: ; %bb.0:6395; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6396; GFX90A-NEXT: ;;#ASMSTART6397; GFX90A-NEXT: ; def v[0:1]6398; GFX90A-NEXT: ;;#ASMEND6399; GFX90A-NEXT: s_mov_b32 s4, 0x50401006400; GFX90A-NEXT: v_mov_b32_e32 v4, 06401; GFX90A-NEXT: ;;#ASMSTART6402; GFX90A-NEXT: ; def v[2:3]6403; GFX90A-NEXT: ;;#ASMEND6404; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s46405; GFX90A-NEXT: v_alignbit_b32 v0, v3, v0, 166406; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6407; GFX90A-NEXT: s_waitcnt vmcnt(0)6408; GFX90A-NEXT: s_setpc_b64 s[30:31]6409;6410; GFX942-LABEL: v_shuffle_v4i16_v3i16__1_5_5_5:6411; GFX942: ; %bb.0:6412; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6413; GFX942-NEXT: ;;#ASMSTART6414; GFX942-NEXT: ; def v[0:1]6415; GFX942-NEXT: ;;#ASMEND6416; GFX942-NEXT: s_mov_b32 s2, 0x50401006417; GFX942-NEXT: v_mov_b32_e32 v4, 06418; GFX942-NEXT: ;;#ASMSTART6419; GFX942-NEXT: ; def v[2:3]6420; GFX942-NEXT: ;;#ASMEND6421; GFX942-NEXT: s_nop 06422; GFX942-NEXT: v_perm_b32 v1, v3, v3, s26423; GFX942-NEXT: v_alignbit_b32 v0, v3, v0, 166424; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6425; GFX942-NEXT: s_waitcnt vmcnt(0)6426; GFX942-NEXT: s_setpc_b64 s[30:31]6427 %vec0 = call <4 x i16> asm "; def $0", "=v"()6428 %vec1 = call <4 x i16> asm "; def $0", "=v"()6429 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6430 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6431 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 1, i32 5, i32 5, i32 5>6432 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86433 ret void6434}6435 6436define void @v_shuffle_v4i16_v3i16__2_5_5_5(ptr addrspace(1) inreg %ptr) {6437; GFX900-LABEL: v_shuffle_v4i16_v3i16__2_5_5_5:6438; GFX900: ; %bb.0:6439; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6440; GFX900-NEXT: ;;#ASMSTART6441; GFX900-NEXT: ; def v[0:1]6442; GFX900-NEXT: ;;#ASMEND6443; GFX900-NEXT: s_mov_b32 s4, 0x50401006444; GFX900-NEXT: v_mov_b32_e32 v4, 06445; GFX900-NEXT: ;;#ASMSTART6446; GFX900-NEXT: ; def v[2:3]6447; GFX900-NEXT: ;;#ASMEND6448; GFX900-NEXT: v_perm_b32 v0, v3, v1, s46449; GFX900-NEXT: v_perm_b32 v1, v3, v3, s46450; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6451; GFX900-NEXT: s_waitcnt vmcnt(0)6452; GFX900-NEXT: s_setpc_b64 s[30:31]6453;6454; GFX90A-LABEL: v_shuffle_v4i16_v3i16__2_5_5_5:6455; GFX90A: ; %bb.0:6456; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6457; GFX90A-NEXT: ;;#ASMSTART6458; GFX90A-NEXT: ; def v[0:1]6459; GFX90A-NEXT: ;;#ASMEND6460; GFX90A-NEXT: s_mov_b32 s4, 0x50401006461; GFX90A-NEXT: v_mov_b32_e32 v4, 06462; GFX90A-NEXT: ;;#ASMSTART6463; GFX90A-NEXT: ; def v[2:3]6464; GFX90A-NEXT: ;;#ASMEND6465; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s46466; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s46467; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6468; GFX90A-NEXT: s_waitcnt vmcnt(0)6469; GFX90A-NEXT: s_setpc_b64 s[30:31]6470;6471; GFX942-LABEL: v_shuffle_v4i16_v3i16__2_5_5_5:6472; GFX942: ; %bb.0:6473; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6474; GFX942-NEXT: ;;#ASMSTART6475; GFX942-NEXT: ; def v[0:1]6476; GFX942-NEXT: ;;#ASMEND6477; GFX942-NEXT: s_mov_b32 s2, 0x50401006478; GFX942-NEXT: v_mov_b32_e32 v4, 06479; GFX942-NEXT: ;;#ASMSTART6480; GFX942-NEXT: ; def v[2:3]6481; GFX942-NEXT: ;;#ASMEND6482; GFX942-NEXT: s_nop 06483; GFX942-NEXT: v_perm_b32 v0, v3, v1, s26484; GFX942-NEXT: v_perm_b32 v1, v3, v3, s26485; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6486; GFX942-NEXT: s_waitcnt vmcnt(0)6487; GFX942-NEXT: s_setpc_b64 s[30:31]6488 %vec0 = call <4 x i16> asm "; def $0", "=v"()6489 %vec1 = call <4 x i16> asm "; def $0", "=v"()6490 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6491 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6492 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 2, i32 5, i32 5, i32 5>6493 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86494 ret void6495}6496 6497define void @v_shuffle_v4i16_v3i16__3_5_5_5(ptr addrspace(1) inreg %ptr) {6498; GFX900-LABEL: v_shuffle_v4i16_v3i16__3_5_5_5:6499; GFX900: ; %bb.0:6500; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6501; GFX900-NEXT: ;;#ASMSTART6502; GFX900-NEXT: ; def v[0:1]6503; GFX900-NEXT: ;;#ASMEND6504; GFX900-NEXT: s_mov_b32 s4, 0x50401006505; GFX900-NEXT: v_mov_b32_e32 v2, 06506; GFX900-NEXT: v_perm_b32 v0, v1, v0, s46507; GFX900-NEXT: v_perm_b32 v1, v1, v1, s46508; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6509; GFX900-NEXT: s_waitcnt vmcnt(0)6510; GFX900-NEXT: s_setpc_b64 s[30:31]6511;6512; GFX90A-LABEL: v_shuffle_v4i16_v3i16__3_5_5_5:6513; GFX90A: ; %bb.0:6514; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6515; GFX90A-NEXT: ;;#ASMSTART6516; GFX90A-NEXT: ; def v[0:1]6517; GFX90A-NEXT: ;;#ASMEND6518; GFX90A-NEXT: s_mov_b32 s4, 0x50401006519; GFX90A-NEXT: v_mov_b32_e32 v2, 06520; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s46521; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s46522; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6523; GFX90A-NEXT: s_waitcnt vmcnt(0)6524; GFX90A-NEXT: s_setpc_b64 s[30:31]6525;6526; GFX942-LABEL: v_shuffle_v4i16_v3i16__3_5_5_5:6527; GFX942: ; %bb.0:6528; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6529; GFX942-NEXT: ;;#ASMSTART6530; GFX942-NEXT: ; def v[0:1]6531; GFX942-NEXT: ;;#ASMEND6532; GFX942-NEXT: s_mov_b32 s2, 0x50401006533; GFX942-NEXT: v_mov_b32_e32 v2, 06534; GFX942-NEXT: v_perm_b32 v0, v1, v0, s26535; GFX942-NEXT: v_perm_b32 v1, v1, v1, s26536; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]6537; GFX942-NEXT: s_waitcnt vmcnt(0)6538; GFX942-NEXT: s_setpc_b64 s[30:31]6539 %vec0 = call <4 x i16> asm "; def $0", "=v"()6540 %vec1 = call <4 x i16> asm "; def $0", "=v"()6541 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6542 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6543 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 3, i32 5, i32 5, i32 5>6544 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86545 ret void6546}6547 6548define void @v_shuffle_v4i16_v3i16__4_5_5_5(ptr addrspace(1) inreg %ptr) {6549; GFX900-LABEL: v_shuffle_v4i16_v3i16__4_5_5_5:6550; GFX900: ; %bb.0:6551; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6552; GFX900-NEXT: ;;#ASMSTART6553; GFX900-NEXT: ; def v[0:1]6554; GFX900-NEXT: ;;#ASMEND6555; GFX900-NEXT: s_mov_b32 s4, 0x50401006556; GFX900-NEXT: v_mov_b32_e32 v3, 06557; GFX900-NEXT: v_perm_b32 v2, v1, v1, s46558; GFX900-NEXT: v_alignbit_b32 v1, v1, v0, 166559; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]6560; GFX900-NEXT: s_waitcnt vmcnt(0)6561; GFX900-NEXT: s_setpc_b64 s[30:31]6562;6563; GFX90A-LABEL: v_shuffle_v4i16_v3i16__4_5_5_5:6564; GFX90A: ; %bb.0:6565; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6566; GFX90A-NEXT: s_mov_b32 s4, 0x50401006567; GFX90A-NEXT: v_mov_b32_e32 v4, 06568; GFX90A-NEXT: ;;#ASMSTART6569; GFX90A-NEXT: ; def v[0:1]6570; GFX90A-NEXT: ;;#ASMEND6571; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s46572; GFX90A-NEXT: v_alignbit_b32 v2, v1, v0, 166573; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]6574; GFX90A-NEXT: s_waitcnt vmcnt(0)6575; GFX90A-NEXT: s_setpc_b64 s[30:31]6576;6577; GFX942-LABEL: v_shuffle_v4i16_v3i16__4_5_5_5:6578; GFX942: ; %bb.0:6579; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6580; GFX942-NEXT: s_mov_b32 s2, 0x50401006581; GFX942-NEXT: v_mov_b32_e32 v4, 06582; GFX942-NEXT: ;;#ASMSTART6583; GFX942-NEXT: ; def v[0:1]6584; GFX942-NEXT: ;;#ASMEND6585; GFX942-NEXT: s_nop 06586; GFX942-NEXT: v_perm_b32 v3, v1, v1, s26587; GFX942-NEXT: v_alignbit_b32 v2, v1, v0, 166588; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]6589; GFX942-NEXT: s_waitcnt vmcnt(0)6590; GFX942-NEXT: s_setpc_b64 s[30:31]6591 %vec0 = call <4 x i16> asm "; def $0", "=v"()6592 %vec1 = call <4 x i16> asm "; def $0", "=v"()6593 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6594 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6595 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 5, i32 5, i32 5>6596 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86597 ret void6598}6599 6600define void @v_shuffle_v4i16_v3i16__5_u_5_5(ptr addrspace(1) inreg %ptr) {6601; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_u_5_5:6602; GFX900: ; %bb.0:6603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6604; GFX900-NEXT: s_mov_b32 s4, 0x50401006605; GFX900-NEXT: v_mov_b32_e32 v3, 06606; GFX900-NEXT: ;;#ASMSTART6607; GFX900-NEXT: ; def v[0:1]6608; GFX900-NEXT: ;;#ASMEND6609; GFX900-NEXT: v_perm_b32 v2, v1, v1, s46610; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]6611; GFX900-NEXT: s_waitcnt vmcnt(0)6612; GFX900-NEXT: s_setpc_b64 s[30:31]6613;6614; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_u_5_5:6615; GFX90A: ; %bb.0:6616; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6617; GFX90A-NEXT: s_mov_b32 s4, 0x50401006618; GFX90A-NEXT: v_mov_b32_e32 v4, 06619; GFX90A-NEXT: ;;#ASMSTART6620; GFX90A-NEXT: ; def v[0:1]6621; GFX90A-NEXT: ;;#ASMEND6622; GFX90A-NEXT: v_perm_b32 v3, v1, v1, s46623; GFX90A-NEXT: v_mov_b32_e32 v2, v16624; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]6625; GFX90A-NEXT: s_waitcnt vmcnt(0)6626; GFX90A-NEXT: s_setpc_b64 s[30:31]6627;6628; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_u_5_5:6629; GFX942: ; %bb.0:6630; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6631; GFX942-NEXT: s_mov_b32 s2, 0x50401006632; GFX942-NEXT: v_mov_b32_e32 v4, 06633; GFX942-NEXT: ;;#ASMSTART6634; GFX942-NEXT: ; def v[0:1]6635; GFX942-NEXT: ;;#ASMEND6636; GFX942-NEXT: s_nop 06637; GFX942-NEXT: v_perm_b32 v3, v1, v1, s26638; GFX942-NEXT: v_mov_b32_e32 v2, v16639; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]6640; GFX942-NEXT: s_waitcnt vmcnt(0)6641; GFX942-NEXT: s_setpc_b64 s[30:31]6642 %vec0 = call <4 x i16> asm "; def $0", "=v"()6643 %vec1 = call <4 x i16> asm "; def $0", "=v"()6644 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6645 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6646 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>6647 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86648 ret void6649}6650 6651define void @v_shuffle_v4i16_v3i16__5_0_5_5(ptr addrspace(1) inreg %ptr) {6652; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_0_5_5:6653; GFX900: ; %bb.0:6654; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6655; GFX900-NEXT: ;;#ASMSTART6656; GFX900-NEXT: ; def v[0:1]6657; GFX900-NEXT: ;;#ASMEND6658; GFX900-NEXT: ;;#ASMSTART6659; GFX900-NEXT: ; def v[1:2]6660; GFX900-NEXT: ;;#ASMEND6661; GFX900-NEXT: s_mov_b32 s4, 0x50401006662; GFX900-NEXT: v_mov_b32_e32 v3, 06663; GFX900-NEXT: v_perm_b32 v0, v0, v2, s46664; GFX900-NEXT: v_perm_b32 v1, v2, v2, s46665; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6666; GFX900-NEXT: s_waitcnt vmcnt(0)6667; GFX900-NEXT: s_setpc_b64 s[30:31]6668;6669; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_0_5_5:6670; GFX90A: ; %bb.0:6671; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6672; GFX90A-NEXT: ;;#ASMSTART6673; GFX90A-NEXT: ; def v[0:1]6674; GFX90A-NEXT: ;;#ASMEND6675; GFX90A-NEXT: s_mov_b32 s4, 0x50401006676; GFX90A-NEXT: v_mov_b32_e32 v4, 06677; GFX90A-NEXT: ;;#ASMSTART6678; GFX90A-NEXT: ; def v[2:3]6679; GFX90A-NEXT: ;;#ASMEND6680; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s46681; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s46682; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6683; GFX90A-NEXT: s_waitcnt vmcnt(0)6684; GFX90A-NEXT: s_setpc_b64 s[30:31]6685;6686; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_0_5_5:6687; GFX942: ; %bb.0:6688; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6689; GFX942-NEXT: ;;#ASMSTART6690; GFX942-NEXT: ; def v[0:1]6691; GFX942-NEXT: ;;#ASMEND6692; GFX942-NEXT: s_mov_b32 s2, 0x50401006693; GFX942-NEXT: v_mov_b32_e32 v4, 06694; GFX942-NEXT: ;;#ASMSTART6695; GFX942-NEXT: ; def v[2:3]6696; GFX942-NEXT: ;;#ASMEND6697; GFX942-NEXT: s_nop 06698; GFX942-NEXT: v_perm_b32 v0, v0, v3, s26699; GFX942-NEXT: v_perm_b32 v1, v3, v3, s26700; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6701; GFX942-NEXT: s_waitcnt vmcnt(0)6702; GFX942-NEXT: s_setpc_b64 s[30:31]6703 %vec0 = call <4 x i16> asm "; def $0", "=v"()6704 %vec1 = call <4 x i16> asm "; def $0", "=v"()6705 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6706 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6707 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 5, i32 5>6708 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86709 ret void6710}6711 6712define void @v_shuffle_v4i16_v3i16__5_1_5_5(ptr addrspace(1) inreg %ptr) {6713; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_1_5_5:6714; GFX900: ; %bb.0:6715; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6716; GFX900-NEXT: ;;#ASMSTART6717; GFX900-NEXT: ; def v[0:1]6718; GFX900-NEXT: ;;#ASMEND6719; GFX900-NEXT: s_mov_b32 s4, 0xffff6720; GFX900-NEXT: ;;#ASMSTART6721; GFX900-NEXT: ; def v[1:2]6722; GFX900-NEXT: ;;#ASMEND6723; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v06724; GFX900-NEXT: s_mov_b32 s4, 0x50401006725; GFX900-NEXT: v_mov_b32_e32 v3, 06726; GFX900-NEXT: v_perm_b32 v1, v2, v2, s46727; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]6728; GFX900-NEXT: s_waitcnt vmcnt(0)6729; GFX900-NEXT: s_setpc_b64 s[30:31]6730;6731; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_1_5_5:6732; GFX90A: ; %bb.0:6733; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6734; GFX90A-NEXT: ;;#ASMSTART6735; GFX90A-NEXT: ; def v[0:1]6736; GFX90A-NEXT: ;;#ASMEND6737; GFX90A-NEXT: s_mov_b32 s4, 0xffff6738; GFX90A-NEXT: ;;#ASMSTART6739; GFX90A-NEXT: ; def v[2:3]6740; GFX90A-NEXT: ;;#ASMEND6741; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v06742; GFX90A-NEXT: s_mov_b32 s4, 0x50401006743; GFX90A-NEXT: v_mov_b32_e32 v4, 06744; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s46745; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6746; GFX90A-NEXT: s_waitcnt vmcnt(0)6747; GFX90A-NEXT: s_setpc_b64 s[30:31]6748;6749; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_1_5_5:6750; GFX942: ; %bb.0:6751; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6752; GFX942-NEXT: ;;#ASMSTART6753; GFX942-NEXT: ; def v[0:1]6754; GFX942-NEXT: ;;#ASMEND6755; GFX942-NEXT: s_mov_b32 s2, 0xffff6756; GFX942-NEXT: ;;#ASMSTART6757; GFX942-NEXT: ; def v[2:3]6758; GFX942-NEXT: ;;#ASMEND6759; GFX942-NEXT: v_mov_b32_e32 v4, 06760; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v06761; GFX942-NEXT: s_mov_b32 s2, 0x50401006762; GFX942-NEXT: v_perm_b32 v1, v3, v3, s26763; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6764; GFX942-NEXT: s_waitcnt vmcnt(0)6765; GFX942-NEXT: s_setpc_b64 s[30:31]6766 %vec0 = call <4 x i16> asm "; def $0", "=v"()6767 %vec1 = call <4 x i16> asm "; def $0", "=v"()6768 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6769 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6770 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 5, i32 5>6771 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86772 ret void6773}6774 6775define void @v_shuffle_v4i16_v3i16__5_2_5_5(ptr addrspace(1) inreg %ptr) {6776; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_2_5_5:6777; GFX900: ; %bb.0:6778; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6779; GFX900-NEXT: ;;#ASMSTART6780; GFX900-NEXT: ; def v[0:1]6781; GFX900-NEXT: ;;#ASMEND6782; GFX900-NEXT: s_mov_b32 s4, 0x50401006783; GFX900-NEXT: v_mov_b32_e32 v4, 06784; GFX900-NEXT: ;;#ASMSTART6785; GFX900-NEXT: ; def v[2:3]6786; GFX900-NEXT: ;;#ASMEND6787; GFX900-NEXT: v_perm_b32 v0, v1, v3, s46788; GFX900-NEXT: v_perm_b32 v1, v3, v3, s46789; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6790; GFX900-NEXT: s_waitcnt vmcnt(0)6791; GFX900-NEXT: s_setpc_b64 s[30:31]6792;6793; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_2_5_5:6794; GFX90A: ; %bb.0:6795; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6796; GFX90A-NEXT: ;;#ASMSTART6797; GFX90A-NEXT: ; def v[0:1]6798; GFX90A-NEXT: ;;#ASMEND6799; GFX90A-NEXT: s_mov_b32 s4, 0x50401006800; GFX90A-NEXT: v_mov_b32_e32 v4, 06801; GFX90A-NEXT: ;;#ASMSTART6802; GFX90A-NEXT: ; def v[2:3]6803; GFX90A-NEXT: ;;#ASMEND6804; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s46805; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s46806; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]6807; GFX90A-NEXT: s_waitcnt vmcnt(0)6808; GFX90A-NEXT: s_setpc_b64 s[30:31]6809;6810; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_2_5_5:6811; GFX942: ; %bb.0:6812; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6813; GFX942-NEXT: ;;#ASMSTART6814; GFX942-NEXT: ; def v[0:1]6815; GFX942-NEXT: ;;#ASMEND6816; GFX942-NEXT: s_mov_b32 s2, 0x50401006817; GFX942-NEXT: v_mov_b32_e32 v4, 06818; GFX942-NEXT: ;;#ASMSTART6819; GFX942-NEXT: ; def v[2:3]6820; GFX942-NEXT: ;;#ASMEND6821; GFX942-NEXT: s_nop 06822; GFX942-NEXT: v_perm_b32 v0, v1, v3, s26823; GFX942-NEXT: v_perm_b32 v1, v3, v3, s26824; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]6825; GFX942-NEXT: s_waitcnt vmcnt(0)6826; GFX942-NEXT: s_setpc_b64 s[30:31]6827 %vec0 = call <4 x i16> asm "; def $0", "=v"()6828 %vec1 = call <4 x i16> asm "; def $0", "=v"()6829 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6830 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6831 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 5, i32 5>6832 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86833 ret void6834}6835 6836define void @v_shuffle_v4i16_v3i16__5_3_5_5(ptr addrspace(1) inreg %ptr) {6837; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_3_5_5:6838; GFX900: ; %bb.0:6839; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6840; GFX900-NEXT: ;;#ASMSTART6841; GFX900-NEXT: ; def v[0:1]6842; GFX900-NEXT: ;;#ASMEND6843; GFX900-NEXT: s_mov_b32 s4, 0x50401006844; GFX900-NEXT: v_mov_b32_e32 v2, 06845; GFX900-NEXT: v_perm_b32 v0, v0, v1, s46846; GFX900-NEXT: v_perm_b32 v1, v1, v1, s46847; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6848; GFX900-NEXT: s_waitcnt vmcnt(0)6849; GFX900-NEXT: s_setpc_b64 s[30:31]6850;6851; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_3_5_5:6852; GFX90A: ; %bb.0:6853; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6854; GFX90A-NEXT: ;;#ASMSTART6855; GFX90A-NEXT: ; def v[0:1]6856; GFX90A-NEXT: ;;#ASMEND6857; GFX90A-NEXT: s_mov_b32 s4, 0x50401006858; GFX90A-NEXT: v_mov_b32_e32 v2, 06859; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s46860; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s46861; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6862; GFX90A-NEXT: s_waitcnt vmcnt(0)6863; GFX90A-NEXT: s_setpc_b64 s[30:31]6864;6865; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_3_5_5:6866; GFX942: ; %bb.0:6867; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6868; GFX942-NEXT: ;;#ASMSTART6869; GFX942-NEXT: ; def v[0:1]6870; GFX942-NEXT: ;;#ASMEND6871; GFX942-NEXT: s_mov_b32 s2, 0x50401006872; GFX942-NEXT: v_mov_b32_e32 v2, 06873; GFX942-NEXT: v_perm_b32 v0, v0, v1, s26874; GFX942-NEXT: v_perm_b32 v1, v1, v1, s26875; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]6876; GFX942-NEXT: s_waitcnt vmcnt(0)6877; GFX942-NEXT: s_setpc_b64 s[30:31]6878 %vec0 = call <4 x i16> asm "; def $0", "=v"()6879 %vec1 = call <4 x i16> asm "; def $0", "=v"()6880 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6881 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6882 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 5, i32 5>6883 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86884 ret void6885}6886 6887define void @v_shuffle_v4i16_v3i16__5_4_5_5(ptr addrspace(1) inreg %ptr) {6888; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_4_5_5:6889; GFX900: ; %bb.0:6890; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6891; GFX900-NEXT: ;;#ASMSTART6892; GFX900-NEXT: ; def v[0:1]6893; GFX900-NEXT: ;;#ASMEND6894; GFX900-NEXT: s_mov_b32 s4, 0xffff6895; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v06896; GFX900-NEXT: s_mov_b32 s4, 0x50401006897; GFX900-NEXT: v_mov_b32_e32 v2, 06898; GFX900-NEXT: v_perm_b32 v1, v1, v1, s46899; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6900; GFX900-NEXT: s_waitcnt vmcnt(0)6901; GFX900-NEXT: s_setpc_b64 s[30:31]6902;6903; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_4_5_5:6904; GFX90A: ; %bb.0:6905; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6906; GFX90A-NEXT: ;;#ASMSTART6907; GFX90A-NEXT: ; def v[0:1]6908; GFX90A-NEXT: ;;#ASMEND6909; GFX90A-NEXT: s_mov_b32 s4, 0xffff6910; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v06911; GFX90A-NEXT: s_mov_b32 s4, 0x50401006912; GFX90A-NEXT: v_mov_b32_e32 v2, 06913; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s46914; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6915; GFX90A-NEXT: s_waitcnt vmcnt(0)6916; GFX90A-NEXT: s_setpc_b64 s[30:31]6917;6918; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_4_5_5:6919; GFX942: ; %bb.0:6920; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6921; GFX942-NEXT: ;;#ASMSTART6922; GFX942-NEXT: ; def v[0:1]6923; GFX942-NEXT: ;;#ASMEND6924; GFX942-NEXT: s_mov_b32 s2, 0xffff6925; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v06926; GFX942-NEXT: s_mov_b32 s2, 0x50401006927; GFX942-NEXT: v_mov_b32_e32 v2, 06928; GFX942-NEXT: v_perm_b32 v1, v1, v1, s26929; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]6930; GFX942-NEXT: s_waitcnt vmcnt(0)6931; GFX942-NEXT: s_setpc_b64 s[30:31]6932 %vec0 = call <4 x i16> asm "; def $0", "=v"()6933 %vec1 = call <4 x i16> asm "; def $0", "=v"()6934 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6935 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6936 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 5, i32 5>6937 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86938 ret void6939}6940 6941define void @v_shuffle_v4i16_v3i16__5_5_u_5(ptr addrspace(1) inreg %ptr) {6942; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_u_5:6943; GFX900: ; %bb.0:6944; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6945; GFX900-NEXT: ;;#ASMSTART6946; GFX900-NEXT: ; def v[0:1]6947; GFX900-NEXT: ;;#ASMEND6948; GFX900-NEXT: s_mov_b32 s4, 0x50401006949; GFX900-NEXT: v_mov_b32_e32 v2, 06950; GFX900-NEXT: v_perm_b32 v0, v1, v1, s46951; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v16952; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6953; GFX900-NEXT: s_waitcnt vmcnt(0)6954; GFX900-NEXT: s_setpc_b64 s[30:31]6955;6956; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_u_5:6957; GFX90A: ; %bb.0:6958; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6959; GFX90A-NEXT: ;;#ASMSTART6960; GFX90A-NEXT: ; def v[0:1]6961; GFX90A-NEXT: ;;#ASMEND6962; GFX90A-NEXT: s_mov_b32 s4, 0x50401006963; GFX90A-NEXT: v_mov_b32_e32 v2, 06964; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s46965; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v16966; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]6967; GFX90A-NEXT: s_waitcnt vmcnt(0)6968; GFX90A-NEXT: s_setpc_b64 s[30:31]6969;6970; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_u_5:6971; GFX942: ; %bb.0:6972; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6973; GFX942-NEXT: ;;#ASMSTART6974; GFX942-NEXT: ; def v[0:1]6975; GFX942-NEXT: ;;#ASMEND6976; GFX942-NEXT: s_mov_b32 s2, 0x50401006977; GFX942-NEXT: v_mov_b32_e32 v2, 06978; GFX942-NEXT: v_perm_b32 v0, v1, v1, s26979; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v16980; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]6981; GFX942-NEXT: s_waitcnt vmcnt(0)6982; GFX942-NEXT: s_setpc_b64 s[30:31]6983 %vec0 = call <4 x i16> asm "; def $0", "=v"()6984 %vec1 = call <4 x i16> asm "; def $0", "=v"()6985 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6986 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>6987 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>6988 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 86989 ret void6990}6991 6992define void @v_shuffle_v4i16_v3i16__5_5_0_5(ptr addrspace(1) inreg %ptr) {6993; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_0_5:6994; GFX900: ; %bb.0:6995; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6996; GFX900-NEXT: ;;#ASMSTART6997; GFX900-NEXT: ; def v[0:1]6998; GFX900-NEXT: ;;#ASMEND6999; GFX900-NEXT: ;;#ASMSTART7000; GFX900-NEXT: ; def v[1:2]7001; GFX900-NEXT: ;;#ASMEND7002; GFX900-NEXT: s_mov_b32 s4, 0x50401007003; GFX900-NEXT: v_mov_b32_e32 v3, 07004; GFX900-NEXT: v_perm_b32 v1, v2, v0, s47005; GFX900-NEXT: v_perm_b32 v0, v2, v2, s47006; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]7007; GFX900-NEXT: s_waitcnt vmcnt(0)7008; GFX900-NEXT: s_setpc_b64 s[30:31]7009;7010; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_0_5:7011; GFX90A: ; %bb.0:7012; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7013; GFX90A-NEXT: ;;#ASMSTART7014; GFX90A-NEXT: ; def v[0:1]7015; GFX90A-NEXT: ;;#ASMEND7016; GFX90A-NEXT: s_mov_b32 s4, 0x50401007017; GFX90A-NEXT: v_mov_b32_e32 v4, 07018; GFX90A-NEXT: ;;#ASMSTART7019; GFX90A-NEXT: ; def v[2:3]7020; GFX90A-NEXT: ;;#ASMEND7021; GFX90A-NEXT: v_perm_b32 v1, v3, v0, s47022; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s47023; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]7024; GFX90A-NEXT: s_waitcnt vmcnt(0)7025; GFX90A-NEXT: s_setpc_b64 s[30:31]7026;7027; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_0_5:7028; GFX942: ; %bb.0:7029; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7030; GFX942-NEXT: ;;#ASMSTART7031; GFX942-NEXT: ; def v[0:1]7032; GFX942-NEXT: ;;#ASMEND7033; GFX942-NEXT: s_mov_b32 s2, 0x50401007034; GFX942-NEXT: v_mov_b32_e32 v4, 07035; GFX942-NEXT: ;;#ASMSTART7036; GFX942-NEXT: ; def v[2:3]7037; GFX942-NEXT: ;;#ASMEND7038; GFX942-NEXT: s_nop 07039; GFX942-NEXT: v_perm_b32 v1, v3, v0, s27040; GFX942-NEXT: v_perm_b32 v0, v3, v3, s27041; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]7042; GFX942-NEXT: s_waitcnt vmcnt(0)7043; GFX942-NEXT: s_setpc_b64 s[30:31]7044 %vec0 = call <4 x i16> asm "; def $0", "=v"()7045 %vec1 = call <4 x i16> asm "; def $0", "=v"()7046 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7047 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7048 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 5>7049 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 87050 ret void7051}7052 7053define void @v_shuffle_v4i16_v3i16__5_5_1_5(ptr addrspace(1) inreg %ptr) {7054; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_1_5:7055; GFX900: ; %bb.0:7056; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7057; GFX900-NEXT: ;;#ASMSTART7058; GFX900-NEXT: ; def v[0:1]7059; GFX900-NEXT: ;;#ASMEND7060; GFX900-NEXT: ;;#ASMSTART7061; GFX900-NEXT: ; def v[1:2]7062; GFX900-NEXT: ;;#ASMEND7063; GFX900-NEXT: s_mov_b32 s4, 0x50401007064; GFX900-NEXT: v_mov_b32_e32 v3, 07065; GFX900-NEXT: v_alignbit_b32 v1, v2, v0, 167066; GFX900-NEXT: v_perm_b32 v0, v2, v2, s47067; GFX900-NEXT: global_store_dwordx2 v3, v[0:1], s[16:17]7068; GFX900-NEXT: s_waitcnt vmcnt(0)7069; GFX900-NEXT: s_setpc_b64 s[30:31]7070;7071; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_1_5:7072; GFX90A: ; %bb.0:7073; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7074; GFX90A-NEXT: ;;#ASMSTART7075; GFX90A-NEXT: ; def v[0:1]7076; GFX90A-NEXT: ;;#ASMEND7077; GFX90A-NEXT: s_mov_b32 s4, 0x50401007078; GFX90A-NEXT: v_mov_b32_e32 v4, 07079; GFX90A-NEXT: ;;#ASMSTART7080; GFX90A-NEXT: ; def v[2:3]7081; GFX90A-NEXT: ;;#ASMEND7082; GFX90A-NEXT: v_alignbit_b32 v1, v3, v0, 167083; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s47084; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]7085; GFX90A-NEXT: s_waitcnt vmcnt(0)7086; GFX90A-NEXT: s_setpc_b64 s[30:31]7087;7088; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_1_5:7089; GFX942: ; %bb.0:7090; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7091; GFX942-NEXT: ;;#ASMSTART7092; GFX942-NEXT: ; def v[0:1]7093; GFX942-NEXT: ;;#ASMEND7094; GFX942-NEXT: s_mov_b32 s2, 0x50401007095; GFX942-NEXT: v_mov_b32_e32 v4, 07096; GFX942-NEXT: ;;#ASMSTART7097; GFX942-NEXT: ; def v[2:3]7098; GFX942-NEXT: ;;#ASMEND7099; GFX942-NEXT: s_nop 07100; GFX942-NEXT: v_alignbit_b32 v1, v3, v0, 167101; GFX942-NEXT: v_perm_b32 v0, v3, v3, s27102; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]7103; GFX942-NEXT: s_waitcnt vmcnt(0)7104; GFX942-NEXT: s_setpc_b64 s[30:31]7105 %vec0 = call <4 x i16> asm "; def $0", "=v"()7106 %vec1 = call <4 x i16> asm "; def $0", "=v"()7107 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7108 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7109 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 5>7110 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 87111 ret void7112}7113 7114define void @v_shuffle_v4i16_v3i16__5_5_2_5(ptr addrspace(1) inreg %ptr) {7115; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_2_5:7116; GFX900: ; %bb.0:7117; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7118; GFX900-NEXT: ;;#ASMSTART7119; GFX900-NEXT: ; def v[0:1]7120; GFX900-NEXT: ;;#ASMEND7121; GFX900-NEXT: s_mov_b32 s4, 0x50401007122; GFX900-NEXT: v_mov_b32_e32 v4, 07123; GFX900-NEXT: ;;#ASMSTART7124; GFX900-NEXT: ; def v[2:3]7125; GFX900-NEXT: ;;#ASMEND7126; GFX900-NEXT: v_perm_b32 v1, v3, v1, s47127; GFX900-NEXT: v_perm_b32 v0, v3, v3, s47128; GFX900-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]7129; GFX900-NEXT: s_waitcnt vmcnt(0)7130; GFX900-NEXT: s_setpc_b64 s[30:31]7131;7132; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_2_5:7133; GFX90A: ; %bb.0:7134; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7135; GFX90A-NEXT: ;;#ASMSTART7136; GFX90A-NEXT: ; def v[0:1]7137; GFX90A-NEXT: ;;#ASMEND7138; GFX90A-NEXT: s_mov_b32 s4, 0x50401007139; GFX90A-NEXT: v_mov_b32_e32 v4, 07140; GFX90A-NEXT: ;;#ASMSTART7141; GFX90A-NEXT: ; def v[2:3]7142; GFX90A-NEXT: ;;#ASMEND7143; GFX90A-NEXT: v_perm_b32 v1, v3, v1, s47144; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s47145; GFX90A-NEXT: global_store_dwordx2 v4, v[0:1], s[16:17]7146; GFX90A-NEXT: s_waitcnt vmcnt(0)7147; GFX90A-NEXT: s_setpc_b64 s[30:31]7148;7149; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_2_5:7150; GFX942: ; %bb.0:7151; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7152; GFX942-NEXT: ;;#ASMSTART7153; GFX942-NEXT: ; def v[0:1]7154; GFX942-NEXT: ;;#ASMEND7155; GFX942-NEXT: s_mov_b32 s2, 0x50401007156; GFX942-NEXT: v_mov_b32_e32 v4, 07157; GFX942-NEXT: ;;#ASMSTART7158; GFX942-NEXT: ; def v[2:3]7159; GFX942-NEXT: ;;#ASMEND7160; GFX942-NEXT: s_nop 07161; GFX942-NEXT: v_perm_b32 v1, v3, v1, s27162; GFX942-NEXT: v_perm_b32 v0, v3, v3, s27163; GFX942-NEXT: global_store_dwordx2 v4, v[0:1], s[0:1]7164; GFX942-NEXT: s_waitcnt vmcnt(0)7165; GFX942-NEXT: s_setpc_b64 s[30:31]7166 %vec0 = call <4 x i16> asm "; def $0", "=v"()7167 %vec1 = call <4 x i16> asm "; def $0", "=v"()7168 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7169 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7170 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 5>7171 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 87172 ret void7173}7174 7175define void @v_shuffle_v4i16_v3i16__5_5_3_5(ptr addrspace(1) inreg %ptr) {7176; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_3_5:7177; GFX900: ; %bb.0:7178; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7179; GFX900-NEXT: ;;#ASMSTART7180; GFX900-NEXT: ; def v[0:1]7181; GFX900-NEXT: ;;#ASMEND7182; GFX900-NEXT: s_mov_b32 s4, 0x50401007183; GFX900-NEXT: v_mov_b32_e32 v3, 07184; GFX900-NEXT: v_perm_b32 v2, v1, v0, s47185; GFX900-NEXT: v_perm_b32 v1, v1, v1, s47186; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]7187; GFX900-NEXT: s_waitcnt vmcnt(0)7188; GFX900-NEXT: s_setpc_b64 s[30:31]7189;7190; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_3_5:7191; GFX90A: ; %bb.0:7192; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7193; GFX90A-NEXT: s_mov_b32 s4, 0x50401007194; GFX90A-NEXT: v_mov_b32_e32 v4, 07195; GFX90A-NEXT: ;;#ASMSTART7196; GFX90A-NEXT: ; def v[0:1]7197; GFX90A-NEXT: ;;#ASMEND7198; GFX90A-NEXT: v_perm_b32 v3, v1, v0, s47199; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s47200; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]7201; GFX90A-NEXT: s_waitcnt vmcnt(0)7202; GFX90A-NEXT: s_setpc_b64 s[30:31]7203;7204; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_3_5:7205; GFX942: ; %bb.0:7206; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7207; GFX942-NEXT: s_mov_b32 s2, 0x50401007208; GFX942-NEXT: v_mov_b32_e32 v4, 07209; GFX942-NEXT: ;;#ASMSTART7210; GFX942-NEXT: ; def v[0:1]7211; GFX942-NEXT: ;;#ASMEND7212; GFX942-NEXT: s_nop 07213; GFX942-NEXT: v_perm_b32 v3, v1, v0, s27214; GFX942-NEXT: v_perm_b32 v2, v1, v1, s27215; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]7216; GFX942-NEXT: s_waitcnt vmcnt(0)7217; GFX942-NEXT: s_setpc_b64 s[30:31]7218 %vec0 = call <4 x i16> asm "; def $0", "=v"()7219 %vec1 = call <4 x i16> asm "; def $0", "=v"()7220 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7221 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7222 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 5>7223 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 87224 ret void7225}7226 7227define void @v_shuffle_v4i16_v3i16__5_5_4_5(ptr addrspace(1) inreg %ptr) {7228; GFX900-LABEL: v_shuffle_v4i16_v3i16__5_5_4_5:7229; GFX900: ; %bb.0:7230; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7231; GFX900-NEXT: ;;#ASMSTART7232; GFX900-NEXT: ; def v[0:1]7233; GFX900-NEXT: ;;#ASMEND7234; GFX900-NEXT: s_mov_b32 s4, 0x50401007235; GFX900-NEXT: v_mov_b32_e32 v3, 07236; GFX900-NEXT: v_alignbit_b32 v2, v1, v0, 167237; GFX900-NEXT: v_perm_b32 v1, v1, v1, s47238; GFX900-NEXT: global_store_dwordx2 v3, v[1:2], s[16:17]7239; GFX900-NEXT: s_waitcnt vmcnt(0)7240; GFX900-NEXT: s_setpc_b64 s[30:31]7241;7242; GFX90A-LABEL: v_shuffle_v4i16_v3i16__5_5_4_5:7243; GFX90A: ; %bb.0:7244; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7245; GFX90A-NEXT: s_mov_b32 s4, 0x50401007246; GFX90A-NEXT: v_mov_b32_e32 v4, 07247; GFX90A-NEXT: ;;#ASMSTART7248; GFX90A-NEXT: ; def v[0:1]7249; GFX90A-NEXT: ;;#ASMEND7250; GFX90A-NEXT: v_alignbit_b32 v3, v1, v0, 167251; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s47252; GFX90A-NEXT: global_store_dwordx2 v4, v[2:3], s[16:17]7253; GFX90A-NEXT: s_waitcnt vmcnt(0)7254; GFX90A-NEXT: s_setpc_b64 s[30:31]7255;7256; GFX942-LABEL: v_shuffle_v4i16_v3i16__5_5_4_5:7257; GFX942: ; %bb.0:7258; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7259; GFX942-NEXT: s_mov_b32 s2, 0x50401007260; GFX942-NEXT: v_mov_b32_e32 v4, 07261; GFX942-NEXT: ;;#ASMSTART7262; GFX942-NEXT: ; def v[0:1]7263; GFX942-NEXT: ;;#ASMEND7264; GFX942-NEXT: s_nop 07265; GFX942-NEXT: v_alignbit_b32 v3, v1, v0, 167266; GFX942-NEXT: v_perm_b32 v2, v1, v1, s27267; GFX942-NEXT: global_store_dwordx2 v4, v[2:3], s[0:1]7268; GFX942-NEXT: s_waitcnt vmcnt(0)7269; GFX942-NEXT: s_setpc_b64 s[30:31]7270 %vec0 = call <4 x i16> asm "; def $0", "=v"()7271 %vec1 = call <4 x i16> asm "; def $0", "=v"()7272 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7273 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7274 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 5>7275 store <4 x i16> %shuf, ptr addrspace(1) %ptr, align 87276 ret void7277}7278 7279define void @s_shuffle_v4i16_v3i16__u_u_u_u() {7280; GFX9-LABEL: s_shuffle_v4i16_v3i16__u_u_u_u:7281; GFX9: ; %bb.0:7282; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7283; GFX9-NEXT: ;;#ASMSTART7284; GFX9-NEXT: ; use s[8:9]7285; GFX9-NEXT: ;;#ASMEND7286; GFX9-NEXT: s_setpc_b64 s[30:31]7287 %vec0 = call <4 x i16> asm "; def $0", "=s"()7288 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7289 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> poison7290 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7291 ret void7292}7293 7294define void @s_shuffle_v4i16_v3i16__0_u_u_u() {7295; GFX900-LABEL: s_shuffle_v4i16_v3i16__0_u_u_u:7296; GFX900: ; %bb.0:7297; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7298; GFX900-NEXT: ;;#ASMSTART7299; GFX900-NEXT: ; def s[8:9]7300; GFX900-NEXT: ;;#ASMEND7301; GFX900-NEXT: ;;#ASMSTART7302; GFX900-NEXT: ; use s[8:9]7303; GFX900-NEXT: ;;#ASMEND7304; GFX900-NEXT: s_setpc_b64 s[30:31]7305;7306; GFX90A-LABEL: s_shuffle_v4i16_v3i16__0_u_u_u:7307; GFX90A: ; %bb.0:7308; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7309; GFX90A-NEXT: ;;#ASMSTART7310; GFX90A-NEXT: ; def s[8:9]7311; GFX90A-NEXT: ;;#ASMEND7312; GFX90A-NEXT: ;;#ASMSTART7313; GFX90A-NEXT: ; use s[8:9]7314; GFX90A-NEXT: ;;#ASMEND7315; GFX90A-NEXT: s_setpc_b64 s[30:31]7316;7317; GFX942-LABEL: s_shuffle_v4i16_v3i16__0_u_u_u:7318; GFX942: ; %bb.0:7319; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7320; GFX942-NEXT: ;;#ASMSTART7321; GFX942-NEXT: ; def s[8:9]7322; GFX942-NEXT: ;;#ASMEND7323; GFX942-NEXT: s_nop 07324; GFX942-NEXT: ;;#ASMSTART7325; GFX942-NEXT: ; use s[8:9]7326; GFX942-NEXT: ;;#ASMEND7327; GFX942-NEXT: s_setpc_b64 s[30:31]7328 %vec0 = call <4 x i16> asm "; def $0", "=s"()7329 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7330 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>7331 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7332 ret void7333}7334 7335define void @s_shuffle_v4i16_v3i16__1_u_u_u() {7336; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_u_u_u:7337; GFX900: ; %bb.0:7338; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7339; GFX900-NEXT: ;;#ASMSTART7340; GFX900-NEXT: ; def s[4:5]7341; GFX900-NEXT: ;;#ASMEND7342; GFX900-NEXT: s_lshr_b32 s8, s4, 167343; GFX900-NEXT: ;;#ASMSTART7344; GFX900-NEXT: ; use s[8:9]7345; GFX900-NEXT: ;;#ASMEND7346; GFX900-NEXT: s_setpc_b64 s[30:31]7347;7348; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_u_u_u:7349; GFX90A: ; %bb.0:7350; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7351; GFX90A-NEXT: ;;#ASMSTART7352; GFX90A-NEXT: ; def s[4:5]7353; GFX90A-NEXT: ;;#ASMEND7354; GFX90A-NEXT: s_lshr_b32 s8, s4, 167355; GFX90A-NEXT: ;;#ASMSTART7356; GFX90A-NEXT: ; use s[8:9]7357; GFX90A-NEXT: ;;#ASMEND7358; GFX90A-NEXT: s_setpc_b64 s[30:31]7359;7360; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_u_u_u:7361; GFX942: ; %bb.0:7362; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7363; GFX942-NEXT: ;;#ASMSTART7364; GFX942-NEXT: ; def s[0:1]7365; GFX942-NEXT: ;;#ASMEND7366; GFX942-NEXT: s_lshr_b32 s8, s0, 167367; GFX942-NEXT: ;;#ASMSTART7368; GFX942-NEXT: ; use s[8:9]7369; GFX942-NEXT: ;;#ASMEND7370; GFX942-NEXT: s_setpc_b64 s[30:31]7371 %vec0 = call <4 x i16> asm "; def $0", "=s"()7372 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7373 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>7374 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7375 ret void7376}7377 7378define void @s_shuffle_v4i16_v3i16__2_u_u_u() {7379; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_u_u_u:7380; GFX900: ; %bb.0:7381; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7382; GFX900-NEXT: ;;#ASMSTART7383; GFX900-NEXT: ; def s[4:5]7384; GFX900-NEXT: ;;#ASMEND7385; GFX900-NEXT: s_mov_b32 s8, s57386; GFX900-NEXT: ;;#ASMSTART7387; GFX900-NEXT: ; use s[8:9]7388; GFX900-NEXT: ;;#ASMEND7389; GFX900-NEXT: s_setpc_b64 s[30:31]7390;7391; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_u_u_u:7392; GFX90A: ; %bb.0:7393; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7394; GFX90A-NEXT: ;;#ASMSTART7395; GFX90A-NEXT: ; def s[4:5]7396; GFX90A-NEXT: ;;#ASMEND7397; GFX90A-NEXT: s_mov_b32 s8, s57398; GFX90A-NEXT: ;;#ASMSTART7399; GFX90A-NEXT: ; use s[8:9]7400; GFX90A-NEXT: ;;#ASMEND7401; GFX90A-NEXT: s_setpc_b64 s[30:31]7402;7403; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_u_u_u:7404; GFX942: ; %bb.0:7405; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7406; GFX942-NEXT: ;;#ASMSTART7407; GFX942-NEXT: ; def s[0:1]7408; GFX942-NEXT: ;;#ASMEND7409; GFX942-NEXT: s_mov_b32 s8, s17410; GFX942-NEXT: ;;#ASMSTART7411; GFX942-NEXT: ; use s[8:9]7412; GFX942-NEXT: ;;#ASMEND7413; GFX942-NEXT: s_setpc_b64 s[30:31]7414 %vec0 = call <4 x i16> asm "; def $0", "=s"()7415 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7416 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>7417 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7418 ret void7419}7420 7421define void @s_shuffle_v4i16_v3i16__3_u_u_u() {7422; GFX9-LABEL: s_shuffle_v4i16_v3i16__3_u_u_u:7423; GFX9: ; %bb.0:7424; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7425; GFX9-NEXT: ;;#ASMSTART7426; GFX9-NEXT: ; use s[8:9]7427; GFX9-NEXT: ;;#ASMEND7428; GFX9-NEXT: s_setpc_b64 s[30:31]7429 %vec0 = call <4 x i16> asm "; def $0", "=s"()7430 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7431 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>7432 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7433 ret void7434}7435 7436define void @s_shuffle_v4i16_v3i16__4_u_u_u() {7437; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_u_u_u:7438; GFX900: ; %bb.0:7439; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7440; GFX900-NEXT: ;;#ASMSTART7441; GFX900-NEXT: ; def s[4:5]7442; GFX900-NEXT: ;;#ASMEND7443; GFX900-NEXT: s_lshr_b32 s8, s4, 167444; GFX900-NEXT: ;;#ASMSTART7445; GFX900-NEXT: ; use s[8:9]7446; GFX900-NEXT: ;;#ASMEND7447; GFX900-NEXT: s_setpc_b64 s[30:31]7448;7449; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_u_u_u:7450; GFX90A: ; %bb.0:7451; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7452; GFX90A-NEXT: ;;#ASMSTART7453; GFX90A-NEXT: ; def s[4:5]7454; GFX90A-NEXT: ;;#ASMEND7455; GFX90A-NEXT: s_lshr_b32 s8, s4, 167456; GFX90A-NEXT: ;;#ASMSTART7457; GFX90A-NEXT: ; use s[8:9]7458; GFX90A-NEXT: ;;#ASMEND7459; GFX90A-NEXT: s_setpc_b64 s[30:31]7460;7461; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_u_u_u:7462; GFX942: ; %bb.0:7463; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7464; GFX942-NEXT: ;;#ASMSTART7465; GFX942-NEXT: ; def s[0:1]7466; GFX942-NEXT: ;;#ASMEND7467; GFX942-NEXT: s_lshr_b32 s8, s0, 167468; GFX942-NEXT: ;;#ASMSTART7469; GFX942-NEXT: ; use s[8:9]7470; GFX942-NEXT: ;;#ASMEND7471; GFX942-NEXT: s_setpc_b64 s[30:31]7472 %vec0 = call <4 x i16> asm "; def $0", "=s"()7473 %vec1 = call <4 x i16> asm "; def $0", "=s"()7474 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7475 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7476 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 poison, i32 poison, i32 poison>7477 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7478 ret void7479}7480 7481define void @s_shuffle_v4i16_v3i16__5_u_u_u() {7482; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_u_u:7483; GFX900: ; %bb.0:7484; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7485; GFX900-NEXT: ;;#ASMSTART7486; GFX900-NEXT: ; def s[4:5]7487; GFX900-NEXT: ;;#ASMEND7488; GFX900-NEXT: s_mov_b32 s8, s57489; GFX900-NEXT: ;;#ASMSTART7490; GFX900-NEXT: ; use s[8:9]7491; GFX900-NEXT: ;;#ASMEND7492; GFX900-NEXT: s_setpc_b64 s[30:31]7493;7494; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_u_u:7495; GFX90A: ; %bb.0:7496; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7497; GFX90A-NEXT: ;;#ASMSTART7498; GFX90A-NEXT: ; def s[4:5]7499; GFX90A-NEXT: ;;#ASMEND7500; GFX90A-NEXT: s_mov_b32 s8, s57501; GFX90A-NEXT: ;;#ASMSTART7502; GFX90A-NEXT: ; use s[8:9]7503; GFX90A-NEXT: ;;#ASMEND7504; GFX90A-NEXT: s_setpc_b64 s[30:31]7505;7506; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_u_u:7507; GFX942: ; %bb.0:7508; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7509; GFX942-NEXT: ;;#ASMSTART7510; GFX942-NEXT: ; def s[0:1]7511; GFX942-NEXT: ;;#ASMEND7512; GFX942-NEXT: s_mov_b32 s8, s17513; GFX942-NEXT: ;;#ASMSTART7514; GFX942-NEXT: ; use s[8:9]7515; GFX942-NEXT: ;;#ASMEND7516; GFX942-NEXT: s_setpc_b64 s[30:31]7517 %vec0 = call <4 x i16> asm "; def $0", "=s"()7518 %vec1 = call <4 x i16> asm "; def $0", "=s"()7519 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7520 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7521 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 poison, i32 poison>7522 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7523 ret void7524}7525 7526define void @s_shuffle_v4i16_v3i16__5_0_u_u() {7527; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_u_u:7528; GFX900: ; %bb.0:7529; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7530; GFX900-NEXT: ;;#ASMSTART7531; GFX900-NEXT: ; def s[4:5]7532; GFX900-NEXT: ;;#ASMEND7533; GFX900-NEXT: ;;#ASMSTART7534; GFX900-NEXT: ; def s[6:7]7535; GFX900-NEXT: ;;#ASMEND7536; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s47537; GFX900-NEXT: ;;#ASMSTART7538; GFX900-NEXT: ; use s[8:9]7539; GFX900-NEXT: ;;#ASMEND7540; GFX900-NEXT: s_setpc_b64 s[30:31]7541;7542; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_u_u:7543; GFX90A: ; %bb.0:7544; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7545; GFX90A-NEXT: ;;#ASMSTART7546; GFX90A-NEXT: ; def s[4:5]7547; GFX90A-NEXT: ;;#ASMEND7548; GFX90A-NEXT: ;;#ASMSTART7549; GFX90A-NEXT: ; def s[6:7]7550; GFX90A-NEXT: ;;#ASMEND7551; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s47552; GFX90A-NEXT: ;;#ASMSTART7553; GFX90A-NEXT: ; use s[8:9]7554; GFX90A-NEXT: ;;#ASMEND7555; GFX90A-NEXT: s_setpc_b64 s[30:31]7556;7557; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_u_u:7558; GFX942: ; %bb.0:7559; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7560; GFX942-NEXT: ;;#ASMSTART7561; GFX942-NEXT: ; def s[0:1]7562; GFX942-NEXT: ;;#ASMEND7563; GFX942-NEXT: ;;#ASMSTART7564; GFX942-NEXT: ; def s[2:3]7565; GFX942-NEXT: ;;#ASMEND7566; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s07567; GFX942-NEXT: ;;#ASMSTART7568; GFX942-NEXT: ; use s[8:9]7569; GFX942-NEXT: ;;#ASMEND7570; GFX942-NEXT: s_setpc_b64 s[30:31]7571 %vec0 = call <4 x i16> asm "; def $0", "=s"()7572 %vec1 = call <4 x i16> asm "; def $0", "=s"()7573 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7574 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7575 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 poison, i32 poison>7576 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7577 ret void7578}7579 7580define void @s_shuffle_v4i16_v3i16__5_1_u_u() {7581; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_u_u:7582; GFX900: ; %bb.0:7583; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7584; GFX900-NEXT: ;;#ASMSTART7585; GFX900-NEXT: ; def s[4:5]7586; GFX900-NEXT: ;;#ASMEND7587; GFX900-NEXT: ;;#ASMSTART7588; GFX900-NEXT: ; def s[6:7]7589; GFX900-NEXT: ;;#ASMEND7590; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s47591; GFX900-NEXT: ;;#ASMSTART7592; GFX900-NEXT: ; use s[8:9]7593; GFX900-NEXT: ;;#ASMEND7594; GFX900-NEXT: s_setpc_b64 s[30:31]7595;7596; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_u_u:7597; GFX90A: ; %bb.0:7598; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7599; GFX90A-NEXT: ;;#ASMSTART7600; GFX90A-NEXT: ; def s[4:5]7601; GFX90A-NEXT: ;;#ASMEND7602; GFX90A-NEXT: ;;#ASMSTART7603; GFX90A-NEXT: ; def s[6:7]7604; GFX90A-NEXT: ;;#ASMEND7605; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s47606; GFX90A-NEXT: ;;#ASMSTART7607; GFX90A-NEXT: ; use s[8:9]7608; GFX90A-NEXT: ;;#ASMEND7609; GFX90A-NEXT: s_setpc_b64 s[30:31]7610;7611; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_u_u:7612; GFX942: ; %bb.0:7613; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7614; GFX942-NEXT: ;;#ASMSTART7615; GFX942-NEXT: ; def s[0:1]7616; GFX942-NEXT: ;;#ASMEND7617; GFX942-NEXT: ;;#ASMSTART7618; GFX942-NEXT: ; def s[2:3]7619; GFX942-NEXT: ;;#ASMEND7620; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s07621; GFX942-NEXT: ;;#ASMSTART7622; GFX942-NEXT: ; use s[8:9]7623; GFX942-NEXT: ;;#ASMEND7624; GFX942-NEXT: s_setpc_b64 s[30:31]7625 %vec0 = call <4 x i16> asm "; def $0", "=s"()7626 %vec1 = call <4 x i16> asm "; def $0", "=s"()7627 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7628 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7629 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 poison, i32 poison>7630 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7631 ret void7632}7633 7634define void @s_shuffle_v4i16_v3i16__5_2_u_u() {7635; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_u_u:7636; GFX900: ; %bb.0:7637; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7638; GFX900-NEXT: ;;#ASMSTART7639; GFX900-NEXT: ; def s[4:5]7640; GFX900-NEXT: ;;#ASMEND7641; GFX900-NEXT: ;;#ASMSTART7642; GFX900-NEXT: ; def s[6:7]7643; GFX900-NEXT: ;;#ASMEND7644; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s57645; GFX900-NEXT: ;;#ASMSTART7646; GFX900-NEXT: ; use s[8:9]7647; GFX900-NEXT: ;;#ASMEND7648; GFX900-NEXT: s_setpc_b64 s[30:31]7649;7650; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_u_u:7651; GFX90A: ; %bb.0:7652; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7653; GFX90A-NEXT: ;;#ASMSTART7654; GFX90A-NEXT: ; def s[4:5]7655; GFX90A-NEXT: ;;#ASMEND7656; GFX90A-NEXT: ;;#ASMSTART7657; GFX90A-NEXT: ; def s[6:7]7658; GFX90A-NEXT: ;;#ASMEND7659; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s57660; GFX90A-NEXT: ;;#ASMSTART7661; GFX90A-NEXT: ; use s[8:9]7662; GFX90A-NEXT: ;;#ASMEND7663; GFX90A-NEXT: s_setpc_b64 s[30:31]7664;7665; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_u_u:7666; GFX942: ; %bb.0:7667; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7668; GFX942-NEXT: ;;#ASMSTART7669; GFX942-NEXT: ; def s[0:1]7670; GFX942-NEXT: ;;#ASMEND7671; GFX942-NEXT: ;;#ASMSTART7672; GFX942-NEXT: ; def s[2:3]7673; GFX942-NEXT: ;;#ASMEND7674; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s17675; GFX942-NEXT: ;;#ASMSTART7676; GFX942-NEXT: ; use s[8:9]7677; GFX942-NEXT: ;;#ASMEND7678; GFX942-NEXT: s_setpc_b64 s[30:31]7679 %vec0 = call <4 x i16> asm "; def $0", "=s"()7680 %vec1 = call <4 x i16> asm "; def $0", "=s"()7681 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7682 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7683 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 poison, i32 poison>7684 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7685 ret void7686}7687 7688define void @s_shuffle_v4i16_v3i16__5_3_u_u() {7689; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_u_u:7690; GFX900: ; %bb.0:7691; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7692; GFX900-NEXT: ;;#ASMSTART7693; GFX900-NEXT: ; def s[4:5]7694; GFX900-NEXT: ;;#ASMEND7695; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47696; GFX900-NEXT: ;;#ASMSTART7697; GFX900-NEXT: ; use s[8:9]7698; GFX900-NEXT: ;;#ASMEND7699; GFX900-NEXT: s_setpc_b64 s[30:31]7700;7701; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_u_u:7702; GFX90A: ; %bb.0:7703; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7704; GFX90A-NEXT: ;;#ASMSTART7705; GFX90A-NEXT: ; def s[4:5]7706; GFX90A-NEXT: ;;#ASMEND7707; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47708; GFX90A-NEXT: ;;#ASMSTART7709; GFX90A-NEXT: ; use s[8:9]7710; GFX90A-NEXT: ;;#ASMEND7711; GFX90A-NEXT: s_setpc_b64 s[30:31]7712;7713; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_u_u:7714; GFX942: ; %bb.0:7715; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7716; GFX942-NEXT: ;;#ASMSTART7717; GFX942-NEXT: ; def s[0:1]7718; GFX942-NEXT: ;;#ASMEND7719; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07720; GFX942-NEXT: ;;#ASMSTART7721; GFX942-NEXT: ; use s[8:9]7722; GFX942-NEXT: ;;#ASMEND7723; GFX942-NEXT: s_setpc_b64 s[30:31]7724 %vec0 = call <4 x i16> asm "; def $0", "=s"()7725 %vec1 = call <4 x i16> asm "; def $0", "=s"()7726 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7727 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7728 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 poison, i32 poison>7729 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7730 ret void7731}7732 7733define void @s_shuffle_v4i16_v3i16__5_4_u_u() {7734; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_u_u:7735; GFX900: ; %bb.0:7736; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7737; GFX900-NEXT: ;;#ASMSTART7738; GFX900-NEXT: ; def s[4:5]7739; GFX900-NEXT: ;;#ASMEND7740; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s47741; GFX900-NEXT: ;;#ASMSTART7742; GFX900-NEXT: ; use s[8:9]7743; GFX900-NEXT: ;;#ASMEND7744; GFX900-NEXT: s_setpc_b64 s[30:31]7745;7746; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_u_u:7747; GFX90A: ; %bb.0:7748; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7749; GFX90A-NEXT: ;;#ASMSTART7750; GFX90A-NEXT: ; def s[4:5]7751; GFX90A-NEXT: ;;#ASMEND7752; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s47753; GFX90A-NEXT: ;;#ASMSTART7754; GFX90A-NEXT: ; use s[8:9]7755; GFX90A-NEXT: ;;#ASMEND7756; GFX90A-NEXT: s_setpc_b64 s[30:31]7757;7758; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_u_u:7759; GFX942: ; %bb.0:7760; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7761; GFX942-NEXT: ;;#ASMSTART7762; GFX942-NEXT: ; def s[0:1]7763; GFX942-NEXT: ;;#ASMEND7764; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s07765; GFX942-NEXT: ;;#ASMSTART7766; GFX942-NEXT: ; use s[8:9]7767; GFX942-NEXT: ;;#ASMEND7768; GFX942-NEXT: s_setpc_b64 s[30:31]7769 %vec0 = call <4 x i16> asm "; def $0", "=s"()7770 %vec1 = call <4 x i16> asm "; def $0", "=s"()7771 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7772 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7773 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 poison, i32 poison>7774 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7775 ret void7776}7777 7778define void @s_shuffle_v4i16_v3i16__5_5_u_u() {7779; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_u:7780; GFX900: ; %bb.0:7781; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7782; GFX900-NEXT: ;;#ASMSTART7783; GFX900-NEXT: ; def s[4:5]7784; GFX900-NEXT: ;;#ASMEND7785; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s57786; GFX900-NEXT: ;;#ASMSTART7787; GFX900-NEXT: ; use s[8:9]7788; GFX900-NEXT: ;;#ASMEND7789; GFX900-NEXT: s_setpc_b64 s[30:31]7790;7791; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_u:7792; GFX90A: ; %bb.0:7793; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7794; GFX90A-NEXT: ;;#ASMSTART7795; GFX90A-NEXT: ; def s[4:5]7796; GFX90A-NEXT: ;;#ASMEND7797; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s57798; GFX90A-NEXT: ;;#ASMSTART7799; GFX90A-NEXT: ; use s[8:9]7800; GFX90A-NEXT: ;;#ASMEND7801; GFX90A-NEXT: s_setpc_b64 s[30:31]7802;7803; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_u:7804; GFX942: ; %bb.0:7805; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7806; GFX942-NEXT: ;;#ASMSTART7807; GFX942-NEXT: ; def s[0:1]7808; GFX942-NEXT: ;;#ASMEND7809; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s17810; GFX942-NEXT: ;;#ASMSTART7811; GFX942-NEXT: ; use s[8:9]7812; GFX942-NEXT: ;;#ASMEND7813; GFX942-NEXT: s_setpc_b64 s[30:31]7814 %vec0 = call <4 x i16> asm "; def $0", "=s"()7815 %vec1 = call <4 x i16> asm "; def $0", "=s"()7816 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7817 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7818 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 poison>7819 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7820 ret void7821}7822 7823define void @s_shuffle_v4i16_v3i16__5_5_0_u() {7824; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_u:7825; GFX900: ; %bb.0:7826; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7827; GFX900-NEXT: ;;#ASMSTART7828; GFX900-NEXT: ; def s[4:5]7829; GFX900-NEXT: ;;#ASMEND7830; GFX900-NEXT: ;;#ASMSTART7831; GFX900-NEXT: ; def s[6:7]7832; GFX900-NEXT: ;;#ASMEND7833; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s77834; GFX900-NEXT: s_mov_b32 s9, s47835; GFX900-NEXT: ;;#ASMSTART7836; GFX900-NEXT: ; use s[8:9]7837; GFX900-NEXT: ;;#ASMEND7838; GFX900-NEXT: s_setpc_b64 s[30:31]7839;7840; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_u:7841; GFX90A: ; %bb.0:7842; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7843; GFX90A-NEXT: ;;#ASMSTART7844; GFX90A-NEXT: ; def s[4:5]7845; GFX90A-NEXT: ;;#ASMEND7846; GFX90A-NEXT: ;;#ASMSTART7847; GFX90A-NEXT: ; def s[6:7]7848; GFX90A-NEXT: ;;#ASMEND7849; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s77850; GFX90A-NEXT: s_mov_b32 s9, s47851; GFX90A-NEXT: ;;#ASMSTART7852; GFX90A-NEXT: ; use s[8:9]7853; GFX90A-NEXT: ;;#ASMEND7854; GFX90A-NEXT: s_setpc_b64 s[30:31]7855;7856; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_u:7857; GFX942: ; %bb.0:7858; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7859; GFX942-NEXT: ;;#ASMSTART7860; GFX942-NEXT: ; def s[0:1]7861; GFX942-NEXT: ;;#ASMEND7862; GFX942-NEXT: ;;#ASMSTART7863; GFX942-NEXT: ; def s[2:3]7864; GFX942-NEXT: ;;#ASMEND7865; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s37866; GFX942-NEXT: s_mov_b32 s9, s07867; GFX942-NEXT: ;;#ASMSTART7868; GFX942-NEXT: ; use s[8:9]7869; GFX942-NEXT: ;;#ASMEND7870; GFX942-NEXT: s_setpc_b64 s[30:31]7871 %vec0 = call <4 x i16> asm "; def $0", "=s"()7872 %vec1 = call <4 x i16> asm "; def $0", "=s"()7873 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7874 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7875 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 poison>7876 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7877 ret void7878}7879 7880define void @s_shuffle_v4i16_v3i16__5_5_1_u() {7881; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_u:7882; GFX900: ; %bb.0:7883; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7884; GFX900-NEXT: ;;#ASMSTART7885; GFX900-NEXT: ; def s[4:5]7886; GFX900-NEXT: ;;#ASMEND7887; GFX900-NEXT: ;;#ASMSTART7888; GFX900-NEXT: ; def s[6:7]7889; GFX900-NEXT: ;;#ASMEND7890; GFX900-NEXT: s_lshr_b32 s9, s4, 167891; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s77892; GFX900-NEXT: ;;#ASMSTART7893; GFX900-NEXT: ; use s[8:9]7894; GFX900-NEXT: ;;#ASMEND7895; GFX900-NEXT: s_setpc_b64 s[30:31]7896;7897; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_u:7898; GFX90A: ; %bb.0:7899; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7900; GFX90A-NEXT: ;;#ASMSTART7901; GFX90A-NEXT: ; def s[4:5]7902; GFX90A-NEXT: ;;#ASMEND7903; GFX90A-NEXT: ;;#ASMSTART7904; GFX90A-NEXT: ; def s[6:7]7905; GFX90A-NEXT: ;;#ASMEND7906; GFX90A-NEXT: s_lshr_b32 s9, s4, 167907; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s77908; GFX90A-NEXT: ;;#ASMSTART7909; GFX90A-NEXT: ; use s[8:9]7910; GFX90A-NEXT: ;;#ASMEND7911; GFX90A-NEXT: s_setpc_b64 s[30:31]7912;7913; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_u:7914; GFX942: ; %bb.0:7915; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7916; GFX942-NEXT: ;;#ASMSTART7917; GFX942-NEXT: ; def s[0:1]7918; GFX942-NEXT: ;;#ASMEND7919; GFX942-NEXT: ;;#ASMSTART7920; GFX942-NEXT: ; def s[2:3]7921; GFX942-NEXT: ;;#ASMEND7922; GFX942-NEXT: s_lshr_b32 s9, s0, 167923; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s37924; GFX942-NEXT: ;;#ASMSTART7925; GFX942-NEXT: ; use s[8:9]7926; GFX942-NEXT: ;;#ASMEND7927; GFX942-NEXT: s_setpc_b64 s[30:31]7928 %vec0 = call <4 x i16> asm "; def $0", "=s"()7929 %vec1 = call <4 x i16> asm "; def $0", "=s"()7930 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7931 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7932 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 poison>7933 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7934 ret void7935}7936 7937define void @s_shuffle_v4i16_v3i16__5_5_2_u() {7938; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_u:7939; GFX900: ; %bb.0:7940; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7941; GFX900-NEXT: ;;#ASMSTART7942; GFX900-NEXT: ; def s[8:9]7943; GFX900-NEXT: ;;#ASMEND7944; GFX900-NEXT: ;;#ASMSTART7945; GFX900-NEXT: ; def s[4:5]7946; GFX900-NEXT: ;;#ASMEND7947; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s57948; GFX900-NEXT: ;;#ASMSTART7949; GFX900-NEXT: ; use s[8:9]7950; GFX900-NEXT: ;;#ASMEND7951; GFX900-NEXT: s_setpc_b64 s[30:31]7952;7953; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_u:7954; GFX90A: ; %bb.0:7955; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7956; GFX90A-NEXT: ;;#ASMSTART7957; GFX90A-NEXT: ; def s[8:9]7958; GFX90A-NEXT: ;;#ASMEND7959; GFX90A-NEXT: ;;#ASMSTART7960; GFX90A-NEXT: ; def s[4:5]7961; GFX90A-NEXT: ;;#ASMEND7962; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s57963; GFX90A-NEXT: ;;#ASMSTART7964; GFX90A-NEXT: ; use s[8:9]7965; GFX90A-NEXT: ;;#ASMEND7966; GFX90A-NEXT: s_setpc_b64 s[30:31]7967;7968; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_u:7969; GFX942: ; %bb.0:7970; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7971; GFX942-NEXT: ;;#ASMSTART7972; GFX942-NEXT: ; def s[8:9]7973; GFX942-NEXT: ;;#ASMEND7974; GFX942-NEXT: ;;#ASMSTART7975; GFX942-NEXT: ; def s[0:1]7976; GFX942-NEXT: ;;#ASMEND7977; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s17978; GFX942-NEXT: ;;#ASMSTART7979; GFX942-NEXT: ; use s[8:9]7980; GFX942-NEXT: ;;#ASMEND7981; GFX942-NEXT: s_setpc_b64 s[30:31]7982 %vec0 = call <4 x i16> asm "; def $0", "=s"()7983 %vec1 = call <4 x i16> asm "; def $0", "=s"()7984 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7985 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>7986 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 poison>7987 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)7988 ret void7989}7990 7991define void @s_shuffle_v4i16_v3i16__5_5_3_u() {7992; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_u:7993; GFX900: ; %bb.0:7994; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7995; GFX900-NEXT: ;;#ASMSTART7996; GFX900-NEXT: ; def s[4:5]7997; GFX900-NEXT: ;;#ASMEND7998; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s57999; GFX900-NEXT: s_mov_b32 s9, s48000; GFX900-NEXT: ;;#ASMSTART8001; GFX900-NEXT: ; use s[8:9]8002; GFX900-NEXT: ;;#ASMEND8003; GFX900-NEXT: s_setpc_b64 s[30:31]8004;8005; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_u:8006; GFX90A: ; %bb.0:8007; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8008; GFX90A-NEXT: ;;#ASMSTART8009; GFX90A-NEXT: ; def s[4:5]8010; GFX90A-NEXT: ;;#ASMEND8011; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58012; GFX90A-NEXT: s_mov_b32 s9, s48013; GFX90A-NEXT: ;;#ASMSTART8014; GFX90A-NEXT: ; use s[8:9]8015; GFX90A-NEXT: ;;#ASMEND8016; GFX90A-NEXT: s_setpc_b64 s[30:31]8017;8018; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_u:8019; GFX942: ; %bb.0:8020; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8021; GFX942-NEXT: ;;#ASMSTART8022; GFX942-NEXT: ; def s[0:1]8023; GFX942-NEXT: ;;#ASMEND8024; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18025; GFX942-NEXT: s_mov_b32 s9, s08026; GFX942-NEXT: ;;#ASMSTART8027; GFX942-NEXT: ; use s[8:9]8028; GFX942-NEXT: ;;#ASMEND8029; GFX942-NEXT: s_setpc_b64 s[30:31]8030 %vec0 = call <4 x i16> asm "; def $0", "=s"()8031 %vec1 = call <4 x i16> asm "; def $0", "=s"()8032 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8033 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8034 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>8035 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8036 ret void8037}8038 8039define void @s_shuffle_v4i16_v3i16__5_5_4_u() {8040; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_u:8041; GFX900: ; %bb.0:8042; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8043; GFX900-NEXT: ;;#ASMSTART8044; GFX900-NEXT: ; def s[4:5]8045; GFX900-NEXT: ;;#ASMEND8046; GFX900-NEXT: s_lshr_b32 s9, s4, 168047; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58048; GFX900-NEXT: ;;#ASMSTART8049; GFX900-NEXT: ; use s[8:9]8050; GFX900-NEXT: ;;#ASMEND8051; GFX900-NEXT: s_setpc_b64 s[30:31]8052;8053; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_u:8054; GFX90A: ; %bb.0:8055; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8056; GFX90A-NEXT: ;;#ASMSTART8057; GFX90A-NEXT: ; def s[4:5]8058; GFX90A-NEXT: ;;#ASMEND8059; GFX90A-NEXT: s_lshr_b32 s9, s4, 168060; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58061; GFX90A-NEXT: ;;#ASMSTART8062; GFX90A-NEXT: ; use s[8:9]8063; GFX90A-NEXT: ;;#ASMEND8064; GFX90A-NEXT: s_setpc_b64 s[30:31]8065;8066; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_u:8067; GFX942: ; %bb.0:8068; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8069; GFX942-NEXT: ;;#ASMSTART8070; GFX942-NEXT: ; def s[0:1]8071; GFX942-NEXT: ;;#ASMEND8072; GFX942-NEXT: s_lshr_b32 s9, s0, 168073; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18074; GFX942-NEXT: ;;#ASMSTART8075; GFX942-NEXT: ; use s[8:9]8076; GFX942-NEXT: ;;#ASMEND8077; GFX942-NEXT: s_setpc_b64 s[30:31]8078 %vec0 = call <4 x i16> asm "; def $0", "=s"()8079 %vec1 = call <4 x i16> asm "; def $0", "=s"()8080 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8081 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8082 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>8083 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8084 ret void8085}8086 8087define void @s_shuffle_v4i16_v3i16__5_5_5_u() {8088; GFX9-LABEL: s_shuffle_v4i16_v3i16__5_5_5_u:8089; GFX9: ; %bb.0:8090; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8091; GFX9-NEXT: ;;#ASMSTART8092; GFX9-NEXT: ; def s[8:9]8093; GFX9-NEXT: ;;#ASMEND8094; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s98095; GFX9-NEXT: ;;#ASMSTART8096; GFX9-NEXT: ; use s[8:9]8097; GFX9-NEXT: ;;#ASMEND8098; GFX9-NEXT: s_setpc_b64 s[30:31]8099 %vec0 = call <4 x i16> asm "; def $0", "=s"()8100 %vec1 = call <4 x i16> asm "; def $0", "=s"()8101 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8102 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8103 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>8104 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8105 ret void8106}8107 8108define void @s_shuffle_v4i16_v3i16__5_5_5_0() {8109; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_5_0:8110; GFX900: ; %bb.0:8111; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8112; GFX900-NEXT: ;;#ASMSTART8113; GFX900-NEXT: ; def s[4:5]8114; GFX900-NEXT: ;;#ASMEND8115; GFX900-NEXT: ;;#ASMSTART8116; GFX900-NEXT: ; def s[6:7]8117; GFX900-NEXT: ;;#ASMEND8118; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s48119; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s78120; GFX900-NEXT: ;;#ASMSTART8121; GFX900-NEXT: ; use s[8:9]8122; GFX900-NEXT: ;;#ASMEND8123; GFX900-NEXT: s_setpc_b64 s[30:31]8124;8125; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_5_0:8126; GFX90A: ; %bb.0:8127; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8128; GFX90A-NEXT: ;;#ASMSTART8129; GFX90A-NEXT: ; def s[4:5]8130; GFX90A-NEXT: ;;#ASMEND8131; GFX90A-NEXT: ;;#ASMSTART8132; GFX90A-NEXT: ; def s[6:7]8133; GFX90A-NEXT: ;;#ASMEND8134; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s48135; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s78136; GFX90A-NEXT: ;;#ASMSTART8137; GFX90A-NEXT: ; use s[8:9]8138; GFX90A-NEXT: ;;#ASMEND8139; GFX90A-NEXT: s_setpc_b64 s[30:31]8140;8141; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_5_0:8142; GFX942: ; %bb.0:8143; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8144; GFX942-NEXT: ;;#ASMSTART8145; GFX942-NEXT: ; def s[0:1]8146; GFX942-NEXT: ;;#ASMEND8147; GFX942-NEXT: ;;#ASMSTART8148; GFX942-NEXT: ; def s[2:3]8149; GFX942-NEXT: ;;#ASMEND8150; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s08151; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s38152; GFX942-NEXT: ;;#ASMSTART8153; GFX942-NEXT: ; use s[8:9]8154; GFX942-NEXT: ;;#ASMEND8155; GFX942-NEXT: s_setpc_b64 s[30:31]8156 %vec0 = call <4 x i16> asm "; def $0", "=s"()8157 %vec1 = call <4 x i16> asm "; def $0", "=s"()8158 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8159 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8160 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 0>8161 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8162 ret void8163}8164 8165define void @s_shuffle_v4i16_v3i16__5_5_5_1() {8166; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_5_1:8167; GFX900: ; %bb.0:8168; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8169; GFX900-NEXT: ;;#ASMSTART8170; GFX900-NEXT: ; def s[4:5]8171; GFX900-NEXT: ;;#ASMEND8172; GFX900-NEXT: ;;#ASMSTART8173; GFX900-NEXT: ; def s[6:7]8174; GFX900-NEXT: ;;#ASMEND8175; GFX900-NEXT: s_pack_lh_b32_b16 s9, s7, s48176; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s78177; GFX900-NEXT: ;;#ASMSTART8178; GFX900-NEXT: ; use s[8:9]8179; GFX900-NEXT: ;;#ASMEND8180; GFX900-NEXT: s_setpc_b64 s[30:31]8181;8182; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_5_1:8183; GFX90A: ; %bb.0:8184; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8185; GFX90A-NEXT: ;;#ASMSTART8186; GFX90A-NEXT: ; def s[4:5]8187; GFX90A-NEXT: ;;#ASMEND8188; GFX90A-NEXT: ;;#ASMSTART8189; GFX90A-NEXT: ; def s[6:7]8190; GFX90A-NEXT: ;;#ASMEND8191; GFX90A-NEXT: s_pack_lh_b32_b16 s9, s7, s48192; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s78193; GFX90A-NEXT: ;;#ASMSTART8194; GFX90A-NEXT: ; use s[8:9]8195; GFX90A-NEXT: ;;#ASMEND8196; GFX90A-NEXT: s_setpc_b64 s[30:31]8197;8198; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_5_1:8199; GFX942: ; %bb.0:8200; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8201; GFX942-NEXT: ;;#ASMSTART8202; GFX942-NEXT: ; def s[0:1]8203; GFX942-NEXT: ;;#ASMEND8204; GFX942-NEXT: ;;#ASMSTART8205; GFX942-NEXT: ; def s[2:3]8206; GFX942-NEXT: ;;#ASMEND8207; GFX942-NEXT: s_pack_lh_b32_b16 s9, s3, s08208; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s38209; GFX942-NEXT: ;;#ASMSTART8210; GFX942-NEXT: ; use s[8:9]8211; GFX942-NEXT: ;;#ASMEND8212; GFX942-NEXT: s_setpc_b64 s[30:31]8213 %vec0 = call <4 x i16> asm "; def $0", "=s"()8214 %vec1 = call <4 x i16> asm "; def $0", "=s"()8215 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8216 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8217 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 1>8218 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8219 ret void8220}8221 8222define void @s_shuffle_v4i16_v3i16__5_5_5_2() {8223; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_5_2:8224; GFX900: ; %bb.0:8225; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8226; GFX900-NEXT: ;;#ASMSTART8227; GFX900-NEXT: ; def s[4:5]8228; GFX900-NEXT: ;;#ASMEND8229; GFX900-NEXT: ;;#ASMSTART8230; GFX900-NEXT: ; def s[6:7]8231; GFX900-NEXT: ;;#ASMEND8232; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s58233; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s78234; GFX900-NEXT: ;;#ASMSTART8235; GFX900-NEXT: ; use s[8:9]8236; GFX900-NEXT: ;;#ASMEND8237; GFX900-NEXT: s_setpc_b64 s[30:31]8238;8239; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_5_2:8240; GFX90A: ; %bb.0:8241; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8242; GFX90A-NEXT: ;;#ASMSTART8243; GFX90A-NEXT: ; def s[4:5]8244; GFX90A-NEXT: ;;#ASMEND8245; GFX90A-NEXT: ;;#ASMSTART8246; GFX90A-NEXT: ; def s[6:7]8247; GFX90A-NEXT: ;;#ASMEND8248; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s58249; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s78250; GFX90A-NEXT: ;;#ASMSTART8251; GFX90A-NEXT: ; use s[8:9]8252; GFX90A-NEXT: ;;#ASMEND8253; GFX90A-NEXT: s_setpc_b64 s[30:31]8254;8255; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_5_2:8256; GFX942: ; %bb.0:8257; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8258; GFX942-NEXT: ;;#ASMSTART8259; GFX942-NEXT: ; def s[0:1]8260; GFX942-NEXT: ;;#ASMEND8261; GFX942-NEXT: ;;#ASMSTART8262; GFX942-NEXT: ; def s[2:3]8263; GFX942-NEXT: ;;#ASMEND8264; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s18265; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s38266; GFX942-NEXT: ;;#ASMSTART8267; GFX942-NEXT: ; use s[8:9]8268; GFX942-NEXT: ;;#ASMEND8269; GFX942-NEXT: s_setpc_b64 s[30:31]8270 %vec0 = call <4 x i16> asm "; def $0", "=s"()8271 %vec1 = call <4 x i16> asm "; def $0", "=s"()8272 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8273 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8274 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 2>8275 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8276 ret void8277}8278 8279define void @s_shuffle_v4i16_v3i16__5_5_5_3() {8280; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_5_3:8281; GFX900: ; %bb.0:8282; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8283; GFX900-NEXT: ;;#ASMSTART8284; GFX900-NEXT: ; def s[4:5]8285; GFX900-NEXT: ;;#ASMEND8286; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s48287; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58288; GFX900-NEXT: ;;#ASMSTART8289; GFX900-NEXT: ; use s[8:9]8290; GFX900-NEXT: ;;#ASMEND8291; GFX900-NEXT: s_setpc_b64 s[30:31]8292;8293; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_5_3:8294; GFX90A: ; %bb.0:8295; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8296; GFX90A-NEXT: ;;#ASMSTART8297; GFX90A-NEXT: ; def s[4:5]8298; GFX90A-NEXT: ;;#ASMEND8299; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s48300; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58301; GFX90A-NEXT: ;;#ASMSTART8302; GFX90A-NEXT: ; use s[8:9]8303; GFX90A-NEXT: ;;#ASMEND8304; GFX90A-NEXT: s_setpc_b64 s[30:31]8305;8306; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_5_3:8307; GFX942: ; %bb.0:8308; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8309; GFX942-NEXT: ;;#ASMSTART8310; GFX942-NEXT: ; def s[0:1]8311; GFX942-NEXT: ;;#ASMEND8312; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s08313; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18314; GFX942-NEXT: ;;#ASMSTART8315; GFX942-NEXT: ; use s[8:9]8316; GFX942-NEXT: ;;#ASMEND8317; GFX942-NEXT: s_setpc_b64 s[30:31]8318 %vec0 = call <4 x i16> asm "; def $0", "=s"()8319 %vec1 = call <4 x i16> asm "; def $0", "=s"()8320 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8321 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8322 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 3>8323 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8324 ret void8325}8326 8327define void @s_shuffle_v4i16_v3i16__5_5_5_4() {8328; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_5_4:8329; GFX900: ; %bb.0:8330; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8331; GFX900-NEXT: ;;#ASMSTART8332; GFX900-NEXT: ; def s[4:5]8333; GFX900-NEXT: ;;#ASMEND8334; GFX900-NEXT: s_pack_lh_b32_b16 s9, s5, s48335; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58336; GFX900-NEXT: ;;#ASMSTART8337; GFX900-NEXT: ; use s[8:9]8338; GFX900-NEXT: ;;#ASMEND8339; GFX900-NEXT: s_setpc_b64 s[30:31]8340;8341; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_5_4:8342; GFX90A: ; %bb.0:8343; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8344; GFX90A-NEXT: ;;#ASMSTART8345; GFX90A-NEXT: ; def s[4:5]8346; GFX90A-NEXT: ;;#ASMEND8347; GFX90A-NEXT: s_pack_lh_b32_b16 s9, s5, s48348; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58349; GFX90A-NEXT: ;;#ASMSTART8350; GFX90A-NEXT: ; use s[8:9]8351; GFX90A-NEXT: ;;#ASMEND8352; GFX90A-NEXT: s_setpc_b64 s[30:31]8353;8354; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_5_4:8355; GFX942: ; %bb.0:8356; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8357; GFX942-NEXT: ;;#ASMSTART8358; GFX942-NEXT: ; def s[0:1]8359; GFX942-NEXT: ;;#ASMEND8360; GFX942-NEXT: s_pack_lh_b32_b16 s9, s1, s08361; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18362; GFX942-NEXT: ;;#ASMSTART8363; GFX942-NEXT: ; use s[8:9]8364; GFX942-NEXT: ;;#ASMEND8365; GFX942-NEXT: s_setpc_b64 s[30:31]8366 %vec0 = call <4 x i16> asm "; def $0", "=s"()8367 %vec1 = call <4 x i16> asm "; def $0", "=s"()8368 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8369 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8370 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 4>8371 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8372 ret void8373}8374 8375define void @s_shuffle_v4i16_v3i16__5_5_5_5() {8376; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_5_5:8377; GFX900: ; %bb.0:8378; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8379; GFX900-NEXT: ;;#ASMSTART8380; GFX900-NEXT: ; def s[4:5]8381; GFX900-NEXT: ;;#ASMEND8382; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58383; GFX900-NEXT: s_mov_b32 s9, s88384; GFX900-NEXT: ;;#ASMSTART8385; GFX900-NEXT: ; use s[8:9]8386; GFX900-NEXT: ;;#ASMEND8387; GFX900-NEXT: s_setpc_b64 s[30:31]8388;8389; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_5_5:8390; GFX90A: ; %bb.0:8391; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8392; GFX90A-NEXT: ;;#ASMSTART8393; GFX90A-NEXT: ; def s[4:5]8394; GFX90A-NEXT: ;;#ASMEND8395; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58396; GFX90A-NEXT: s_mov_b32 s9, s88397; GFX90A-NEXT: ;;#ASMSTART8398; GFX90A-NEXT: ; use s[8:9]8399; GFX90A-NEXT: ;;#ASMEND8400; GFX90A-NEXT: s_setpc_b64 s[30:31]8401;8402; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_5_5:8403; GFX942: ; %bb.0:8404; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8405; GFX942-NEXT: ;;#ASMSTART8406; GFX942-NEXT: ; def s[0:1]8407; GFX942-NEXT: ;;#ASMEND8408; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18409; GFX942-NEXT: s_mov_b32 s9, s88410; GFX942-NEXT: ;;#ASMSTART8411; GFX942-NEXT: ; use s[8:9]8412; GFX942-NEXT: ;;#ASMEND8413; GFX942-NEXT: s_setpc_b64 s[30:31]8414 %vec0 = call <4 x i16> asm "; def $0", "=s"()8415 %vec1 = call <4 x i16> asm "; def $0", "=s"()8416 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8417 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8418 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 5>8419 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8420 ret void8421}8422 8423define void @s_shuffle_v4i16_v3i16__u_0_0_0() {8424; GFX900-LABEL: s_shuffle_v4i16_v3i16__u_0_0_0:8425; GFX900: ; %bb.0:8426; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8427; GFX900-NEXT: ;;#ASMSTART8428; GFX900-NEXT: ; def s[4:5]8429; GFX900-NEXT: ;;#ASMEND8430; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48431; GFX900-NEXT: s_lshl_b32 s8, s4, 168432; GFX900-NEXT: ;;#ASMSTART8433; GFX900-NEXT: ; use s[8:9]8434; GFX900-NEXT: ;;#ASMEND8435; GFX900-NEXT: s_setpc_b64 s[30:31]8436;8437; GFX90A-LABEL: s_shuffle_v4i16_v3i16__u_0_0_0:8438; GFX90A: ; %bb.0:8439; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8440; GFX90A-NEXT: ;;#ASMSTART8441; GFX90A-NEXT: ; def s[4:5]8442; GFX90A-NEXT: ;;#ASMEND8443; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48444; GFX90A-NEXT: s_lshl_b32 s8, s4, 168445; GFX90A-NEXT: ;;#ASMSTART8446; GFX90A-NEXT: ; use s[8:9]8447; GFX90A-NEXT: ;;#ASMEND8448; GFX90A-NEXT: s_setpc_b64 s[30:31]8449;8450; GFX942-LABEL: s_shuffle_v4i16_v3i16__u_0_0_0:8451; GFX942: ; %bb.0:8452; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8453; GFX942-NEXT: ;;#ASMSTART8454; GFX942-NEXT: ; def s[0:1]8455; GFX942-NEXT: ;;#ASMEND8456; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08457; GFX942-NEXT: s_lshl_b32 s8, s0, 168458; GFX942-NEXT: ;;#ASMSTART8459; GFX942-NEXT: ; use s[8:9]8460; GFX942-NEXT: ;;#ASMEND8461; GFX942-NEXT: s_setpc_b64 s[30:31]8462 %vec0 = call <4 x i16> asm "; def $0", "=s"()8463 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8464 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>8465 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8466 ret void8467}8468 8469define void @s_shuffle_v4i16_v3i16__0_0_0_0() {8470; GFX900-LABEL: s_shuffle_v4i16_v3i16__0_0_0_0:8471; GFX900: ; %bb.0:8472; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8473; GFX900-NEXT: ;;#ASMSTART8474; GFX900-NEXT: ; def s[4:5]8475; GFX900-NEXT: ;;#ASMEND8476; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s48477; GFX900-NEXT: s_mov_b32 s9, s88478; GFX900-NEXT: ;;#ASMSTART8479; GFX900-NEXT: ; use s[8:9]8480; GFX900-NEXT: ;;#ASMEND8481; GFX900-NEXT: s_setpc_b64 s[30:31]8482;8483; GFX90A-LABEL: s_shuffle_v4i16_v3i16__0_0_0_0:8484; GFX90A: ; %bb.0:8485; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8486; GFX90A-NEXT: ;;#ASMSTART8487; GFX90A-NEXT: ; def s[4:5]8488; GFX90A-NEXT: ;;#ASMEND8489; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s48490; GFX90A-NEXT: s_mov_b32 s9, s88491; GFX90A-NEXT: ;;#ASMSTART8492; GFX90A-NEXT: ; use s[8:9]8493; GFX90A-NEXT: ;;#ASMEND8494; GFX90A-NEXT: s_setpc_b64 s[30:31]8495;8496; GFX942-LABEL: s_shuffle_v4i16_v3i16__0_0_0_0:8497; GFX942: ; %bb.0:8498; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8499; GFX942-NEXT: ;;#ASMSTART8500; GFX942-NEXT: ; def s[0:1]8501; GFX942-NEXT: ;;#ASMEND8502; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s08503; GFX942-NEXT: s_mov_b32 s9, s88504; GFX942-NEXT: ;;#ASMSTART8505; GFX942-NEXT: ; use s[8:9]8506; GFX942-NEXT: ;;#ASMEND8507; GFX942-NEXT: s_setpc_b64 s[30:31]8508 %vec0 = call <4 x i16> asm "; def $0", "=s"()8509 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8510 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> zeroinitializer8511 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8512 ret void8513}8514 8515define void @s_shuffle_v4i16_v3i16__1_0_0_0() {8516; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_0_0_0:8517; GFX900: ; %bb.0:8518; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8519; GFX900-NEXT: ;;#ASMSTART8520; GFX900-NEXT: ; def s[4:5]8521; GFX900-NEXT: ;;#ASMEND8522; GFX900-NEXT: s_lshr_b32 s5, s4, 168523; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48524; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48525; GFX900-NEXT: ;;#ASMSTART8526; GFX900-NEXT: ; use s[8:9]8527; GFX900-NEXT: ;;#ASMEND8528; GFX900-NEXT: s_setpc_b64 s[30:31]8529;8530; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_0_0_0:8531; GFX90A: ; %bb.0:8532; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8533; GFX90A-NEXT: ;;#ASMSTART8534; GFX90A-NEXT: ; def s[4:5]8535; GFX90A-NEXT: ;;#ASMEND8536; GFX90A-NEXT: s_lshr_b32 s5, s4, 168537; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48538; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48539; GFX90A-NEXT: ;;#ASMSTART8540; GFX90A-NEXT: ; use s[8:9]8541; GFX90A-NEXT: ;;#ASMEND8542; GFX90A-NEXT: s_setpc_b64 s[30:31]8543;8544; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_0_0_0:8545; GFX942: ; %bb.0:8546; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8547; GFX942-NEXT: ;;#ASMSTART8548; GFX942-NEXT: ; def s[0:1]8549; GFX942-NEXT: ;;#ASMEND8550; GFX942-NEXT: s_lshr_b32 s1, s0, 168551; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08552; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08553; GFX942-NEXT: ;;#ASMSTART8554; GFX942-NEXT: ; use s[8:9]8555; GFX942-NEXT: ;;#ASMEND8556; GFX942-NEXT: s_setpc_b64 s[30:31]8557 %vec0 = call <4 x i16> asm "; def $0", "=s"()8558 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8559 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>8560 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8561 ret void8562}8563 8564define void @s_shuffle_v4i16_v3i16__2_0_0_0() {8565; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_0_0_0:8566; GFX900: ; %bb.0:8567; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8568; GFX900-NEXT: ;;#ASMSTART8569; GFX900-NEXT: ; def s[4:5]8570; GFX900-NEXT: ;;#ASMEND8571; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48572; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48573; GFX900-NEXT: ;;#ASMSTART8574; GFX900-NEXT: ; use s[8:9]8575; GFX900-NEXT: ;;#ASMEND8576; GFX900-NEXT: s_setpc_b64 s[30:31]8577;8578; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_0_0_0:8579; GFX90A: ; %bb.0:8580; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8581; GFX90A-NEXT: ;;#ASMSTART8582; GFX90A-NEXT: ; def s[4:5]8583; GFX90A-NEXT: ;;#ASMEND8584; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48585; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48586; GFX90A-NEXT: ;;#ASMSTART8587; GFX90A-NEXT: ; use s[8:9]8588; GFX90A-NEXT: ;;#ASMEND8589; GFX90A-NEXT: s_setpc_b64 s[30:31]8590;8591; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_0_0_0:8592; GFX942: ; %bb.0:8593; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8594; GFX942-NEXT: ;;#ASMSTART8595; GFX942-NEXT: ; def s[0:1]8596; GFX942-NEXT: ;;#ASMEND8597; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08598; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08599; GFX942-NEXT: ;;#ASMSTART8600; GFX942-NEXT: ; use s[8:9]8601; GFX942-NEXT: ;;#ASMEND8602; GFX942-NEXT: s_setpc_b64 s[30:31]8603 %vec0 = call <4 x i16> asm "; def $0", "=s"()8604 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8605 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>8606 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8607 ret void8608}8609 8610define void @s_shuffle_v4i16_v3i16__3_0_0_0() {8611; GFX900-LABEL: s_shuffle_v4i16_v3i16__3_0_0_0:8612; GFX900: ; %bb.0:8613; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8614; GFX900-NEXT: ;;#ASMSTART8615; GFX900-NEXT: ; def s[4:5]8616; GFX900-NEXT: ;;#ASMEND8617; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48618; GFX900-NEXT: s_lshl_b32 s8, s4, 168619; GFX900-NEXT: ;;#ASMSTART8620; GFX900-NEXT: ; use s[8:9]8621; GFX900-NEXT: ;;#ASMEND8622; GFX900-NEXT: s_setpc_b64 s[30:31]8623;8624; GFX90A-LABEL: s_shuffle_v4i16_v3i16__3_0_0_0:8625; GFX90A: ; %bb.0:8626; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8627; GFX90A-NEXT: ;;#ASMSTART8628; GFX90A-NEXT: ; def s[4:5]8629; GFX90A-NEXT: ;;#ASMEND8630; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48631; GFX90A-NEXT: s_lshl_b32 s8, s4, 168632; GFX90A-NEXT: ;;#ASMSTART8633; GFX90A-NEXT: ; use s[8:9]8634; GFX90A-NEXT: ;;#ASMEND8635; GFX90A-NEXT: s_setpc_b64 s[30:31]8636;8637; GFX942-LABEL: s_shuffle_v4i16_v3i16__3_0_0_0:8638; GFX942: ; %bb.0:8639; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8640; GFX942-NEXT: ;;#ASMSTART8641; GFX942-NEXT: ; def s[0:1]8642; GFX942-NEXT: ;;#ASMEND8643; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08644; GFX942-NEXT: s_lshl_b32 s8, s0, 168645; GFX942-NEXT: ;;#ASMSTART8646; GFX942-NEXT: ; use s[8:9]8647; GFX942-NEXT: ;;#ASMEND8648; GFX942-NEXT: s_setpc_b64 s[30:31]8649 %vec0 = call <4 x i16> asm "; def $0", "=s"()8650 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8651 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>8652 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8653 ret void8654}8655 8656define void @s_shuffle_v4i16_v3i16__4_0_0_0() {8657; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_0_0_0:8658; GFX900: ; %bb.0:8659; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8660; GFX900-NEXT: ;;#ASMSTART8661; GFX900-NEXT: ; def s[4:5]8662; GFX900-NEXT: ;;#ASMEND8663; GFX900-NEXT: ;;#ASMSTART8664; GFX900-NEXT: ; def s[6:7]8665; GFX900-NEXT: ;;#ASMEND8666; GFX900-NEXT: s_lshr_b32 s5, s6, 168667; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48668; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48669; GFX900-NEXT: ;;#ASMSTART8670; GFX900-NEXT: ; use s[8:9]8671; GFX900-NEXT: ;;#ASMEND8672; GFX900-NEXT: s_setpc_b64 s[30:31]8673;8674; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_0_0_0:8675; GFX90A: ; %bb.0:8676; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8677; GFX90A-NEXT: ;;#ASMSTART8678; GFX90A-NEXT: ; def s[4:5]8679; GFX90A-NEXT: ;;#ASMEND8680; GFX90A-NEXT: ;;#ASMSTART8681; GFX90A-NEXT: ; def s[6:7]8682; GFX90A-NEXT: ;;#ASMEND8683; GFX90A-NEXT: s_lshr_b32 s5, s6, 168684; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48685; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48686; GFX90A-NEXT: ;;#ASMSTART8687; GFX90A-NEXT: ; use s[8:9]8688; GFX90A-NEXT: ;;#ASMEND8689; GFX90A-NEXT: s_setpc_b64 s[30:31]8690;8691; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_0_0_0:8692; GFX942: ; %bb.0:8693; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8694; GFX942-NEXT: ;;#ASMSTART8695; GFX942-NEXT: ; def s[0:1]8696; GFX942-NEXT: ;;#ASMEND8697; GFX942-NEXT: ;;#ASMSTART8698; GFX942-NEXT: ; def s[2:3]8699; GFX942-NEXT: ;;#ASMEND8700; GFX942-NEXT: s_lshr_b32 s1, s2, 168701; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08702; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08703; GFX942-NEXT: ;;#ASMSTART8704; GFX942-NEXT: ; use s[8:9]8705; GFX942-NEXT: ;;#ASMEND8706; GFX942-NEXT: s_setpc_b64 s[30:31]8707 %vec0 = call <4 x i16> asm "; def $0", "=s"()8708 %vec1 = call <4 x i16> asm "; def $0", "=s"()8709 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8710 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8711 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 0, i32 0, i32 0>8712 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8713 ret void8714}8715 8716define void @s_shuffle_v4i16_v3i16__5_0_0_0() {8717; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_0_0:8718; GFX900: ; %bb.0:8719; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8720; GFX900-NEXT: ;;#ASMSTART8721; GFX900-NEXT: ; def s[4:5]8722; GFX900-NEXT: ;;#ASMEND8723; GFX900-NEXT: ;;#ASMSTART8724; GFX900-NEXT: ; def s[6:7]8725; GFX900-NEXT: ;;#ASMEND8726; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s48727; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48728; GFX900-NEXT: ;;#ASMSTART8729; GFX900-NEXT: ; use s[8:9]8730; GFX900-NEXT: ;;#ASMEND8731; GFX900-NEXT: s_setpc_b64 s[30:31]8732;8733; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_0_0:8734; GFX90A: ; %bb.0:8735; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8736; GFX90A-NEXT: ;;#ASMSTART8737; GFX90A-NEXT: ; def s[4:5]8738; GFX90A-NEXT: ;;#ASMEND8739; GFX90A-NEXT: ;;#ASMSTART8740; GFX90A-NEXT: ; def s[6:7]8741; GFX90A-NEXT: ;;#ASMEND8742; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s48743; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48744; GFX90A-NEXT: ;;#ASMSTART8745; GFX90A-NEXT: ; use s[8:9]8746; GFX90A-NEXT: ;;#ASMEND8747; GFX90A-NEXT: s_setpc_b64 s[30:31]8748;8749; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_0_0:8750; GFX942: ; %bb.0:8751; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8752; GFX942-NEXT: ;;#ASMSTART8753; GFX942-NEXT: ; def s[0:1]8754; GFX942-NEXT: ;;#ASMEND8755; GFX942-NEXT: ;;#ASMSTART8756; GFX942-NEXT: ; def s[2:3]8757; GFX942-NEXT: ;;#ASMEND8758; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s08759; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08760; GFX942-NEXT: ;;#ASMSTART8761; GFX942-NEXT: ; use s[8:9]8762; GFX942-NEXT: ;;#ASMEND8763; GFX942-NEXT: s_setpc_b64 s[30:31]8764 %vec0 = call <4 x i16> asm "; def $0", "=s"()8765 %vec1 = call <4 x i16> asm "; def $0", "=s"()8766 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8767 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8768 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 0, i32 0>8769 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8770 ret void8771}8772 8773define void @s_shuffle_v4i16_v3i16__5_u_0_0() {8774; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_0_0:8775; GFX900: ; %bb.0:8776; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8777; GFX900-NEXT: ;;#ASMSTART8778; GFX900-NEXT: ; def s[4:5]8779; GFX900-NEXT: ;;#ASMEND8780; GFX900-NEXT: ;;#ASMSTART8781; GFX900-NEXT: ; def s[6:7]8782; GFX900-NEXT: ;;#ASMEND8783; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48784; GFX900-NEXT: s_mov_b32 s8, s78785; GFX900-NEXT: ;;#ASMSTART8786; GFX900-NEXT: ; use s[8:9]8787; GFX900-NEXT: ;;#ASMEND8788; GFX900-NEXT: s_setpc_b64 s[30:31]8789;8790; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_0_0:8791; GFX90A: ; %bb.0:8792; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8793; GFX90A-NEXT: ;;#ASMSTART8794; GFX90A-NEXT: ; def s[4:5]8795; GFX90A-NEXT: ;;#ASMEND8796; GFX90A-NEXT: ;;#ASMSTART8797; GFX90A-NEXT: ; def s[6:7]8798; GFX90A-NEXT: ;;#ASMEND8799; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48800; GFX90A-NEXT: s_mov_b32 s8, s78801; GFX90A-NEXT: ;;#ASMSTART8802; GFX90A-NEXT: ; use s[8:9]8803; GFX90A-NEXT: ;;#ASMEND8804; GFX90A-NEXT: s_setpc_b64 s[30:31]8805;8806; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_0_0:8807; GFX942: ; %bb.0:8808; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8809; GFX942-NEXT: ;;#ASMSTART8810; GFX942-NEXT: ; def s[0:1]8811; GFX942-NEXT: ;;#ASMEND8812; GFX942-NEXT: ;;#ASMSTART8813; GFX942-NEXT: ; def s[2:3]8814; GFX942-NEXT: ;;#ASMEND8815; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08816; GFX942-NEXT: s_mov_b32 s8, s38817; GFX942-NEXT: ;;#ASMSTART8818; GFX942-NEXT: ; use s[8:9]8819; GFX942-NEXT: ;;#ASMEND8820; GFX942-NEXT: s_setpc_b64 s[30:31]8821 %vec0 = call <4 x i16> asm "; def $0", "=s"()8822 %vec1 = call <4 x i16> asm "; def $0", "=s"()8823 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8824 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8825 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>8826 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8827 ret void8828}8829 8830define void @s_shuffle_v4i16_v3i16__5_1_0_0() {8831; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_0_0:8832; GFX900: ; %bb.0:8833; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8834; GFX900-NEXT: ;;#ASMSTART8835; GFX900-NEXT: ; def s[4:5]8836; GFX900-NEXT: ;;#ASMEND8837; GFX900-NEXT: ;;#ASMSTART8838; GFX900-NEXT: ; def s[6:7]8839; GFX900-NEXT: ;;#ASMEND8840; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s48841; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48842; GFX900-NEXT: ;;#ASMSTART8843; GFX900-NEXT: ; use s[8:9]8844; GFX900-NEXT: ;;#ASMEND8845; GFX900-NEXT: s_setpc_b64 s[30:31]8846;8847; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_0_0:8848; GFX90A: ; %bb.0:8849; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8850; GFX90A-NEXT: ;;#ASMSTART8851; GFX90A-NEXT: ; def s[4:5]8852; GFX90A-NEXT: ;;#ASMEND8853; GFX90A-NEXT: ;;#ASMSTART8854; GFX90A-NEXT: ; def s[6:7]8855; GFX90A-NEXT: ;;#ASMEND8856; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s48857; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48858; GFX90A-NEXT: ;;#ASMSTART8859; GFX90A-NEXT: ; use s[8:9]8860; GFX90A-NEXT: ;;#ASMEND8861; GFX90A-NEXT: s_setpc_b64 s[30:31]8862;8863; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_0_0:8864; GFX942: ; %bb.0:8865; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8866; GFX942-NEXT: ;;#ASMSTART8867; GFX942-NEXT: ; def s[0:1]8868; GFX942-NEXT: ;;#ASMEND8869; GFX942-NEXT: ;;#ASMSTART8870; GFX942-NEXT: ; def s[2:3]8871; GFX942-NEXT: ;;#ASMEND8872; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s08873; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08874; GFX942-NEXT: ;;#ASMSTART8875; GFX942-NEXT: ; use s[8:9]8876; GFX942-NEXT: ;;#ASMEND8877; GFX942-NEXT: s_setpc_b64 s[30:31]8878 %vec0 = call <4 x i16> asm "; def $0", "=s"()8879 %vec1 = call <4 x i16> asm "; def $0", "=s"()8880 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8881 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8882 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 0, i32 0>8883 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8884 ret void8885}8886 8887define void @s_shuffle_v4i16_v3i16__5_2_0_0() {8888; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_0_0:8889; GFX900: ; %bb.0:8890; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8891; GFX900-NEXT: ;;#ASMSTART8892; GFX900-NEXT: ; def s[4:5]8893; GFX900-NEXT: ;;#ASMEND8894; GFX900-NEXT: ;;#ASMSTART8895; GFX900-NEXT: ; def s[6:7]8896; GFX900-NEXT: ;;#ASMEND8897; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s58898; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48899; GFX900-NEXT: ;;#ASMSTART8900; GFX900-NEXT: ; use s[8:9]8901; GFX900-NEXT: ;;#ASMEND8902; GFX900-NEXT: s_setpc_b64 s[30:31]8903;8904; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_0_0:8905; GFX90A: ; %bb.0:8906; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8907; GFX90A-NEXT: ;;#ASMSTART8908; GFX90A-NEXT: ; def s[4:5]8909; GFX90A-NEXT: ;;#ASMEND8910; GFX90A-NEXT: ;;#ASMSTART8911; GFX90A-NEXT: ; def s[6:7]8912; GFX90A-NEXT: ;;#ASMEND8913; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s58914; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48915; GFX90A-NEXT: ;;#ASMSTART8916; GFX90A-NEXT: ; use s[8:9]8917; GFX90A-NEXT: ;;#ASMEND8918; GFX90A-NEXT: s_setpc_b64 s[30:31]8919;8920; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_0_0:8921; GFX942: ; %bb.0:8922; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8923; GFX942-NEXT: ;;#ASMSTART8924; GFX942-NEXT: ; def s[0:1]8925; GFX942-NEXT: ;;#ASMEND8926; GFX942-NEXT: ;;#ASMSTART8927; GFX942-NEXT: ; def s[2:3]8928; GFX942-NEXT: ;;#ASMEND8929; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s18930; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08931; GFX942-NEXT: ;;#ASMSTART8932; GFX942-NEXT: ; use s[8:9]8933; GFX942-NEXT: ;;#ASMEND8934; GFX942-NEXT: s_setpc_b64 s[30:31]8935 %vec0 = call <4 x i16> asm "; def $0", "=s"()8936 %vec1 = call <4 x i16> asm "; def $0", "=s"()8937 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8938 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8939 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 0, i32 0>8940 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8941 ret void8942}8943 8944define void @s_shuffle_v4i16_v3i16__5_3_0_0() {8945; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_0_0:8946; GFX900: ; %bb.0:8947; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8948; GFX900-NEXT: ;;#ASMSTART8949; GFX900-NEXT: ; def s[4:5]8950; GFX900-NEXT: ;;#ASMEND8951; GFX900-NEXT: ;;#ASMSTART8952; GFX900-NEXT: ; def s[6:7]8953; GFX900-NEXT: ;;#ASMEND8954; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s68955; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48956; GFX900-NEXT: ;;#ASMSTART8957; GFX900-NEXT: ; use s[8:9]8958; GFX900-NEXT: ;;#ASMEND8959; GFX900-NEXT: s_setpc_b64 s[30:31]8960;8961; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_0_0:8962; GFX90A: ; %bb.0:8963; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8964; GFX90A-NEXT: ;;#ASMSTART8965; GFX90A-NEXT: ; def s[4:5]8966; GFX90A-NEXT: ;;#ASMEND8967; GFX90A-NEXT: ;;#ASMSTART8968; GFX90A-NEXT: ; def s[6:7]8969; GFX90A-NEXT: ;;#ASMEND8970; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s68971; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48972; GFX90A-NEXT: ;;#ASMSTART8973; GFX90A-NEXT: ; use s[8:9]8974; GFX90A-NEXT: ;;#ASMEND8975; GFX90A-NEXT: s_setpc_b64 s[30:31]8976;8977; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_0_0:8978; GFX942: ; %bb.0:8979; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8980; GFX942-NEXT: ;;#ASMSTART8981; GFX942-NEXT: ; def s[0:1]8982; GFX942-NEXT: ;;#ASMEND8983; GFX942-NEXT: ;;#ASMSTART8984; GFX942-NEXT: ; def s[2:3]8985; GFX942-NEXT: ;;#ASMEND8986; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s28987; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08988; GFX942-NEXT: ;;#ASMSTART8989; GFX942-NEXT: ; use s[8:9]8990; GFX942-NEXT: ;;#ASMEND8991; GFX942-NEXT: s_setpc_b64 s[30:31]8992 %vec0 = call <4 x i16> asm "; def $0", "=s"()8993 %vec1 = call <4 x i16> asm "; def $0", "=s"()8994 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8995 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>8996 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 0, i32 0>8997 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)8998 ret void8999}9000 9001define void @s_shuffle_v4i16_v3i16__5_4_0_0() {9002; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_0_0:9003; GFX900: ; %bb.0:9004; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9005; GFX900-NEXT: ;;#ASMSTART9006; GFX900-NEXT: ; def s[4:5]9007; GFX900-NEXT: ;;#ASMEND9008; GFX900-NEXT: ;;#ASMSTART9009; GFX900-NEXT: ; def s[6:7]9010; GFX900-NEXT: ;;#ASMEND9011; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s69012; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49013; GFX900-NEXT: ;;#ASMSTART9014; GFX900-NEXT: ; use s[8:9]9015; GFX900-NEXT: ;;#ASMEND9016; GFX900-NEXT: s_setpc_b64 s[30:31]9017;9018; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_0_0:9019; GFX90A: ; %bb.0:9020; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9021; GFX90A-NEXT: ;;#ASMSTART9022; GFX90A-NEXT: ; def s[4:5]9023; GFX90A-NEXT: ;;#ASMEND9024; GFX90A-NEXT: ;;#ASMSTART9025; GFX90A-NEXT: ; def s[6:7]9026; GFX90A-NEXT: ;;#ASMEND9027; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s69028; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49029; GFX90A-NEXT: ;;#ASMSTART9030; GFX90A-NEXT: ; use s[8:9]9031; GFX90A-NEXT: ;;#ASMEND9032; GFX90A-NEXT: s_setpc_b64 s[30:31]9033;9034; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_0_0:9035; GFX942: ; %bb.0:9036; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9037; GFX942-NEXT: ;;#ASMSTART9038; GFX942-NEXT: ; def s[0:1]9039; GFX942-NEXT: ;;#ASMEND9040; GFX942-NEXT: ;;#ASMSTART9041; GFX942-NEXT: ; def s[2:3]9042; GFX942-NEXT: ;;#ASMEND9043; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s29044; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09045; GFX942-NEXT: ;;#ASMSTART9046; GFX942-NEXT: ; use s[8:9]9047; GFX942-NEXT: ;;#ASMEND9048; GFX942-NEXT: s_setpc_b64 s[30:31]9049 %vec0 = call <4 x i16> asm "; def $0", "=s"()9050 %vec1 = call <4 x i16> asm "; def $0", "=s"()9051 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9052 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9053 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 0, i32 0>9054 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9055 ret void9056}9057 9058define void @s_shuffle_v4i16_v3i16__5_5_0_0() {9059; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_0:9060; GFX900: ; %bb.0:9061; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9062; GFX900-NEXT: ;;#ASMSTART9063; GFX900-NEXT: ; def s[4:5]9064; GFX900-NEXT: ;;#ASMEND9065; GFX900-NEXT: ;;#ASMSTART9066; GFX900-NEXT: ; def s[6:7]9067; GFX900-NEXT: ;;#ASMEND9068; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49069; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79070; GFX900-NEXT: ;;#ASMSTART9071; GFX900-NEXT: ; use s[8:9]9072; GFX900-NEXT: ;;#ASMEND9073; GFX900-NEXT: s_setpc_b64 s[30:31]9074;9075; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_0:9076; GFX90A: ; %bb.0:9077; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9078; GFX90A-NEXT: ;;#ASMSTART9079; GFX90A-NEXT: ; def s[4:5]9080; GFX90A-NEXT: ;;#ASMEND9081; GFX90A-NEXT: ;;#ASMSTART9082; GFX90A-NEXT: ; def s[6:7]9083; GFX90A-NEXT: ;;#ASMEND9084; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49085; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79086; GFX90A-NEXT: ;;#ASMSTART9087; GFX90A-NEXT: ; use s[8:9]9088; GFX90A-NEXT: ;;#ASMEND9089; GFX90A-NEXT: s_setpc_b64 s[30:31]9090;9091; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_0:9092; GFX942: ; %bb.0:9093; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9094; GFX942-NEXT: ;;#ASMSTART9095; GFX942-NEXT: ; def s[0:1]9096; GFX942-NEXT: ;;#ASMEND9097; GFX942-NEXT: ;;#ASMSTART9098; GFX942-NEXT: ; def s[2:3]9099; GFX942-NEXT: ;;#ASMEND9100; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09101; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39102; GFX942-NEXT: ;;#ASMSTART9103; GFX942-NEXT: ; use s[8:9]9104; GFX942-NEXT: ;;#ASMEND9105; GFX942-NEXT: s_setpc_b64 s[30:31]9106 %vec0 = call <4 x i16> asm "; def $0", "=s"()9107 %vec1 = call <4 x i16> asm "; def $0", "=s"()9108 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9109 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9110 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 0>9111 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9112 ret void9113}9114 9115define void @s_shuffle_v4i16_v3i16__5_5_u_0() {9116; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_0:9117; GFX900: ; %bb.0:9118; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9119; GFX900-NEXT: ;;#ASMSTART9120; GFX900-NEXT: ; def s[4:5]9121; GFX900-NEXT: ;;#ASMEND9122; GFX900-NEXT: ;;#ASMSTART9123; GFX900-NEXT: ; def s[6:7]9124; GFX900-NEXT: ;;#ASMEND9125; GFX900-NEXT: s_lshl_b32 s9, s4, 169126; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79127; GFX900-NEXT: ;;#ASMSTART9128; GFX900-NEXT: ; use s[8:9]9129; GFX900-NEXT: ;;#ASMEND9130; GFX900-NEXT: s_setpc_b64 s[30:31]9131;9132; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_0:9133; GFX90A: ; %bb.0:9134; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9135; GFX90A-NEXT: ;;#ASMSTART9136; GFX90A-NEXT: ; def s[4:5]9137; GFX90A-NEXT: ;;#ASMEND9138; GFX90A-NEXT: ;;#ASMSTART9139; GFX90A-NEXT: ; def s[6:7]9140; GFX90A-NEXT: ;;#ASMEND9141; GFX90A-NEXT: s_lshl_b32 s9, s4, 169142; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79143; GFX90A-NEXT: ;;#ASMSTART9144; GFX90A-NEXT: ; use s[8:9]9145; GFX90A-NEXT: ;;#ASMEND9146; GFX90A-NEXT: s_setpc_b64 s[30:31]9147;9148; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_0:9149; GFX942: ; %bb.0:9150; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9151; GFX942-NEXT: ;;#ASMSTART9152; GFX942-NEXT: ; def s[0:1]9153; GFX942-NEXT: ;;#ASMEND9154; GFX942-NEXT: ;;#ASMSTART9155; GFX942-NEXT: ; def s[2:3]9156; GFX942-NEXT: ;;#ASMEND9157; GFX942-NEXT: s_lshl_b32 s9, s0, 169158; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39159; GFX942-NEXT: ;;#ASMSTART9160; GFX942-NEXT: ; use s[8:9]9161; GFX942-NEXT: ;;#ASMEND9162; GFX942-NEXT: s_setpc_b64 s[30:31]9163 %vec0 = call <4 x i16> asm "; def $0", "=s"()9164 %vec1 = call <4 x i16> asm "; def $0", "=s"()9165 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9166 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9167 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>9168 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9169 ret void9170}9171 9172define void @s_shuffle_v4i16_v3i16__5_5_1_0() {9173; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_0:9174; GFX900: ; %bb.0:9175; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9176; GFX900-NEXT: ;;#ASMSTART9177; GFX900-NEXT: ; def s[4:5]9178; GFX900-NEXT: ;;#ASMEND9179; GFX900-NEXT: s_lshr_b32 s5, s4, 169180; GFX900-NEXT: ;;#ASMSTART9181; GFX900-NEXT: ; def s[6:7]9182; GFX900-NEXT: ;;#ASMEND9183; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s49184; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79185; GFX900-NEXT: ;;#ASMSTART9186; GFX900-NEXT: ; use s[8:9]9187; GFX900-NEXT: ;;#ASMEND9188; GFX900-NEXT: s_setpc_b64 s[30:31]9189;9190; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_0:9191; GFX90A: ; %bb.0:9192; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9193; GFX90A-NEXT: ;;#ASMSTART9194; GFX90A-NEXT: ; def s[4:5]9195; GFX90A-NEXT: ;;#ASMEND9196; GFX90A-NEXT: s_lshr_b32 s5, s4, 169197; GFX90A-NEXT: ;;#ASMSTART9198; GFX90A-NEXT: ; def s[6:7]9199; GFX90A-NEXT: ;;#ASMEND9200; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s49201; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79202; GFX90A-NEXT: ;;#ASMSTART9203; GFX90A-NEXT: ; use s[8:9]9204; GFX90A-NEXT: ;;#ASMEND9205; GFX90A-NEXT: s_setpc_b64 s[30:31]9206;9207; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_0:9208; GFX942: ; %bb.0:9209; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9210; GFX942-NEXT: ;;#ASMSTART9211; GFX942-NEXT: ; def s[0:1]9212; GFX942-NEXT: ;;#ASMEND9213; GFX942-NEXT: s_lshr_b32 s1, s0, 169214; GFX942-NEXT: ;;#ASMSTART9215; GFX942-NEXT: ; def s[2:3]9216; GFX942-NEXT: ;;#ASMEND9217; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s09218; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39219; GFX942-NEXT: ;;#ASMSTART9220; GFX942-NEXT: ; use s[8:9]9221; GFX942-NEXT: ;;#ASMEND9222; GFX942-NEXT: s_setpc_b64 s[30:31]9223 %vec0 = call <4 x i16> asm "; def $0", "=s"()9224 %vec1 = call <4 x i16> asm "; def $0", "=s"()9225 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9226 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9227 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 0>9228 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9229 ret void9230}9231 9232define void @s_shuffle_v4i16_v3i16__5_5_2_0() {9233; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_0:9234; GFX900: ; %bb.0:9235; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9236; GFX900-NEXT: ;;#ASMSTART9237; GFX900-NEXT: ; def s[4:5]9238; GFX900-NEXT: ;;#ASMEND9239; GFX900-NEXT: ;;#ASMSTART9240; GFX900-NEXT: ; def s[6:7]9241; GFX900-NEXT: ;;#ASMEND9242; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s49243; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79244; GFX900-NEXT: ;;#ASMSTART9245; GFX900-NEXT: ; use s[8:9]9246; GFX900-NEXT: ;;#ASMEND9247; GFX900-NEXT: s_setpc_b64 s[30:31]9248;9249; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_0:9250; GFX90A: ; %bb.0:9251; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9252; GFX90A-NEXT: ;;#ASMSTART9253; GFX90A-NEXT: ; def s[4:5]9254; GFX90A-NEXT: ;;#ASMEND9255; GFX90A-NEXT: ;;#ASMSTART9256; GFX90A-NEXT: ; def s[6:7]9257; GFX90A-NEXT: ;;#ASMEND9258; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s49259; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79260; GFX90A-NEXT: ;;#ASMSTART9261; GFX90A-NEXT: ; use s[8:9]9262; GFX90A-NEXT: ;;#ASMEND9263; GFX90A-NEXT: s_setpc_b64 s[30:31]9264;9265; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_0:9266; GFX942: ; %bb.0:9267; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9268; GFX942-NEXT: ;;#ASMSTART9269; GFX942-NEXT: ; def s[0:1]9270; GFX942-NEXT: ;;#ASMEND9271; GFX942-NEXT: ;;#ASMSTART9272; GFX942-NEXT: ; def s[2:3]9273; GFX942-NEXT: ;;#ASMEND9274; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s09275; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39276; GFX942-NEXT: ;;#ASMSTART9277; GFX942-NEXT: ; use s[8:9]9278; GFX942-NEXT: ;;#ASMEND9279; GFX942-NEXT: s_setpc_b64 s[30:31]9280 %vec0 = call <4 x i16> asm "; def $0", "=s"()9281 %vec1 = call <4 x i16> asm "; def $0", "=s"()9282 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9283 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9284 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 0>9285 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9286 ret void9287}9288 9289define void @s_shuffle_v4i16_v3i16__5_5_3_0() {9290; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_0:9291; GFX900: ; %bb.0:9292; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9293; GFX900-NEXT: ;;#ASMSTART9294; GFX900-NEXT: ; def s[4:5]9295; GFX900-NEXT: ;;#ASMEND9296; GFX900-NEXT: ;;#ASMSTART9297; GFX900-NEXT: ; def s[6:7]9298; GFX900-NEXT: ;;#ASMEND9299; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s49300; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79301; GFX900-NEXT: ;;#ASMSTART9302; GFX900-NEXT: ; use s[8:9]9303; GFX900-NEXT: ;;#ASMEND9304; GFX900-NEXT: s_setpc_b64 s[30:31]9305;9306; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_0:9307; GFX90A: ; %bb.0:9308; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9309; GFX90A-NEXT: ;;#ASMSTART9310; GFX90A-NEXT: ; def s[4:5]9311; GFX90A-NEXT: ;;#ASMEND9312; GFX90A-NEXT: ;;#ASMSTART9313; GFX90A-NEXT: ; def s[6:7]9314; GFX90A-NEXT: ;;#ASMEND9315; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s49316; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79317; GFX90A-NEXT: ;;#ASMSTART9318; GFX90A-NEXT: ; use s[8:9]9319; GFX90A-NEXT: ;;#ASMEND9320; GFX90A-NEXT: s_setpc_b64 s[30:31]9321;9322; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_0:9323; GFX942: ; %bb.0:9324; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9325; GFX942-NEXT: ;;#ASMSTART9326; GFX942-NEXT: ; def s[0:1]9327; GFX942-NEXT: ;;#ASMEND9328; GFX942-NEXT: ;;#ASMSTART9329; GFX942-NEXT: ; def s[2:3]9330; GFX942-NEXT: ;;#ASMEND9331; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s09332; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39333; GFX942-NEXT: ;;#ASMSTART9334; GFX942-NEXT: ; use s[8:9]9335; GFX942-NEXT: ;;#ASMEND9336; GFX942-NEXT: s_setpc_b64 s[30:31]9337 %vec0 = call <4 x i16> asm "; def $0", "=s"()9338 %vec1 = call <4 x i16> asm "; def $0", "=s"()9339 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9340 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9341 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 0>9342 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9343 ret void9344}9345 9346define void @s_shuffle_v4i16_v3i16__5_5_4_0() {9347; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_0:9348; GFX900: ; %bb.0:9349; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9350; GFX900-NEXT: ;;#ASMSTART9351; GFX900-NEXT: ; def s[4:5]9352; GFX900-NEXT: ;;#ASMEND9353; GFX900-NEXT: ;;#ASMSTART9354; GFX900-NEXT: ; def s[6:7]9355; GFX900-NEXT: ;;#ASMEND9356; GFX900-NEXT: s_lshr_b32 s5, s6, 169357; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s49358; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79359; GFX900-NEXT: ;;#ASMSTART9360; GFX900-NEXT: ; use s[8:9]9361; GFX900-NEXT: ;;#ASMEND9362; GFX900-NEXT: s_setpc_b64 s[30:31]9363;9364; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_0:9365; GFX90A: ; %bb.0:9366; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9367; GFX90A-NEXT: ;;#ASMSTART9368; GFX90A-NEXT: ; def s[4:5]9369; GFX90A-NEXT: ;;#ASMEND9370; GFX90A-NEXT: ;;#ASMSTART9371; GFX90A-NEXT: ; def s[6:7]9372; GFX90A-NEXT: ;;#ASMEND9373; GFX90A-NEXT: s_lshr_b32 s5, s6, 169374; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s49375; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79376; GFX90A-NEXT: ;;#ASMSTART9377; GFX90A-NEXT: ; use s[8:9]9378; GFX90A-NEXT: ;;#ASMEND9379; GFX90A-NEXT: s_setpc_b64 s[30:31]9380;9381; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_0:9382; GFX942: ; %bb.0:9383; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9384; GFX942-NEXT: ;;#ASMSTART9385; GFX942-NEXT: ; def s[0:1]9386; GFX942-NEXT: ;;#ASMEND9387; GFX942-NEXT: ;;#ASMSTART9388; GFX942-NEXT: ; def s[2:3]9389; GFX942-NEXT: ;;#ASMEND9390; GFX942-NEXT: s_lshr_b32 s1, s2, 169391; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s09392; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39393; GFX942-NEXT: ;;#ASMSTART9394; GFX942-NEXT: ; use s[8:9]9395; GFX942-NEXT: ;;#ASMEND9396; GFX942-NEXT: s_setpc_b64 s[30:31]9397 %vec0 = call <4 x i16> asm "; def $0", "=s"()9398 %vec1 = call <4 x i16> asm "; def $0", "=s"()9399 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9400 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9401 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 0>9402 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9403 ret void9404}9405 9406define void @s_shuffle_v4i16_v3i16__u_1_1_1() {9407; GFX9-LABEL: s_shuffle_v4i16_v3i16__u_1_1_1:9408; GFX9: ; %bb.0:9409; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9410; GFX9-NEXT: ;;#ASMSTART9411; GFX9-NEXT: ; def s[8:9]9412; GFX9-NEXT: ;;#ASMEND9413; GFX9-NEXT: s_pack_hh_b32_b16 s9, s8, s89414; GFX9-NEXT: ;;#ASMSTART9415; GFX9-NEXT: ; use s[8:9]9416; GFX9-NEXT: ;;#ASMEND9417; GFX9-NEXT: s_setpc_b64 s[30:31]9418 %vec0 = call <4 x i16> asm "; def $0", "=s"()9419 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9420 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>9421 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9422 ret void9423}9424 9425define void @s_shuffle_v4i16_v3i16__0_1_1_1() {9426; GFX9-LABEL: s_shuffle_v4i16_v3i16__0_1_1_1:9427; GFX9: ; %bb.0:9428; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9429; GFX9-NEXT: ;;#ASMSTART9430; GFX9-NEXT: ; def s[8:9]9431; GFX9-NEXT: ;;#ASMEND9432; GFX9-NEXT: s_pack_hh_b32_b16 s9, s8, s89433; GFX9-NEXT: ;;#ASMSTART9434; GFX9-NEXT: ; use s[8:9]9435; GFX9-NEXT: ;;#ASMEND9436; GFX9-NEXT: s_setpc_b64 s[30:31]9437 %vec0 = call <4 x i16> asm "; def $0", "=s"()9438 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9439 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>9440 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9441 ret void9442}9443 9444define void @s_shuffle_v4i16_v3i16__1_1_1_1() {9445; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_1_1_1:9446; GFX900: ; %bb.0:9447; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9448; GFX900-NEXT: ;;#ASMSTART9449; GFX900-NEXT: ; def s[4:5]9450; GFX900-NEXT: ;;#ASMEND9451; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s49452; GFX900-NEXT: s_mov_b32 s9, s89453; GFX900-NEXT: ;;#ASMSTART9454; GFX900-NEXT: ; use s[8:9]9455; GFX900-NEXT: ;;#ASMEND9456; GFX900-NEXT: s_setpc_b64 s[30:31]9457;9458; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_1_1_1:9459; GFX90A: ; %bb.0:9460; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9461; GFX90A-NEXT: ;;#ASMSTART9462; GFX90A-NEXT: ; def s[4:5]9463; GFX90A-NEXT: ;;#ASMEND9464; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s49465; GFX90A-NEXT: s_mov_b32 s9, s89466; GFX90A-NEXT: ;;#ASMSTART9467; GFX90A-NEXT: ; use s[8:9]9468; GFX90A-NEXT: ;;#ASMEND9469; GFX90A-NEXT: s_setpc_b64 s[30:31]9470;9471; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_1_1_1:9472; GFX942: ; %bb.0:9473; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9474; GFX942-NEXT: ;;#ASMSTART9475; GFX942-NEXT: ; def s[0:1]9476; GFX942-NEXT: ;;#ASMEND9477; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s09478; GFX942-NEXT: s_mov_b32 s9, s89479; GFX942-NEXT: ;;#ASMSTART9480; GFX942-NEXT: ; use s[8:9]9481; GFX942-NEXT: ;;#ASMEND9482; GFX942-NEXT: s_setpc_b64 s[30:31]9483 %vec0 = call <4 x i16> asm "; def $0", "=s"()9484 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9485 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>9486 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9487 ret void9488}9489 9490define void @s_shuffle_v4i16_v3i16__2_1_1_1() {9491; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_1_1_1:9492; GFX900: ; %bb.0:9493; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9494; GFX900-NEXT: ;;#ASMSTART9495; GFX900-NEXT: ; def s[4:5]9496; GFX900-NEXT: ;;#ASMEND9497; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s49498; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49499; GFX900-NEXT: ;;#ASMSTART9500; GFX900-NEXT: ; use s[8:9]9501; GFX900-NEXT: ;;#ASMEND9502; GFX900-NEXT: s_setpc_b64 s[30:31]9503;9504; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_1_1_1:9505; GFX90A: ; %bb.0:9506; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9507; GFX90A-NEXT: ;;#ASMSTART9508; GFX90A-NEXT: ; def s[4:5]9509; GFX90A-NEXT: ;;#ASMEND9510; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s49511; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49512; GFX90A-NEXT: ;;#ASMSTART9513; GFX90A-NEXT: ; use s[8:9]9514; GFX90A-NEXT: ;;#ASMEND9515; GFX90A-NEXT: s_setpc_b64 s[30:31]9516;9517; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_1_1_1:9518; GFX942: ; %bb.0:9519; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9520; GFX942-NEXT: ;;#ASMSTART9521; GFX942-NEXT: ; def s[0:1]9522; GFX942-NEXT: ;;#ASMEND9523; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s09524; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09525; GFX942-NEXT: ;;#ASMSTART9526; GFX942-NEXT: ; use s[8:9]9527; GFX942-NEXT: ;;#ASMEND9528; GFX942-NEXT: s_setpc_b64 s[30:31]9529 %vec0 = call <4 x i16> asm "; def $0", "=s"()9530 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9531 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>9532 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9533 ret void9534}9535 9536define void @s_shuffle_v4i16_v3i16__3_1_1_1() {9537; GFX9-LABEL: s_shuffle_v4i16_v3i16__3_1_1_1:9538; GFX9: ; %bb.0:9539; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9540; GFX9-NEXT: ;;#ASMSTART9541; GFX9-NEXT: ; def s[8:9]9542; GFX9-NEXT: ;;#ASMEND9543; GFX9-NEXT: s_pack_hh_b32_b16 s9, s8, s89544; GFX9-NEXT: ;;#ASMSTART9545; GFX9-NEXT: ; use s[8:9]9546; GFX9-NEXT: ;;#ASMEND9547; GFX9-NEXT: s_setpc_b64 s[30:31]9548 %vec0 = call <4 x i16> asm "; def $0", "=s"()9549 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9550 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>9551 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9552 ret void9553}9554 9555define void @s_shuffle_v4i16_v3i16__4_1_1_1() {9556; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_1_1_1:9557; GFX900: ; %bb.0:9558; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9559; GFX900-NEXT: ;;#ASMSTART9560; GFX900-NEXT: ; def s[4:5]9561; GFX900-NEXT: ;;#ASMEND9562; GFX900-NEXT: ;;#ASMSTART9563; GFX900-NEXT: ; def s[6:7]9564; GFX900-NEXT: ;;#ASMEND9565; GFX900-NEXT: s_pack_hh_b32_b16 s8, s6, s49566; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49567; GFX900-NEXT: ;;#ASMSTART9568; GFX900-NEXT: ; use s[8:9]9569; GFX900-NEXT: ;;#ASMEND9570; GFX900-NEXT: s_setpc_b64 s[30:31]9571;9572; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_1_1_1:9573; GFX90A: ; %bb.0:9574; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9575; GFX90A-NEXT: ;;#ASMSTART9576; GFX90A-NEXT: ; def s[4:5]9577; GFX90A-NEXT: ;;#ASMEND9578; GFX90A-NEXT: ;;#ASMSTART9579; GFX90A-NEXT: ; def s[6:7]9580; GFX90A-NEXT: ;;#ASMEND9581; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s6, s49582; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49583; GFX90A-NEXT: ;;#ASMSTART9584; GFX90A-NEXT: ; use s[8:9]9585; GFX90A-NEXT: ;;#ASMEND9586; GFX90A-NEXT: s_setpc_b64 s[30:31]9587;9588; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_1_1_1:9589; GFX942: ; %bb.0:9590; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9591; GFX942-NEXT: ;;#ASMSTART9592; GFX942-NEXT: ; def s[0:1]9593; GFX942-NEXT: ;;#ASMEND9594; GFX942-NEXT: ;;#ASMSTART9595; GFX942-NEXT: ; def s[2:3]9596; GFX942-NEXT: ;;#ASMEND9597; GFX942-NEXT: s_pack_hh_b32_b16 s8, s2, s09598; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09599; GFX942-NEXT: ;;#ASMSTART9600; GFX942-NEXT: ; use s[8:9]9601; GFX942-NEXT: ;;#ASMEND9602; GFX942-NEXT: s_setpc_b64 s[30:31]9603 %vec0 = call <4 x i16> asm "; def $0", "=s"()9604 %vec1 = call <4 x i16> asm "; def $0", "=s"()9605 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9606 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9607 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 1, i32 1, i32 1>9608 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9609 ret void9610}9611 9612define void @s_shuffle_v4i16_v3i16__5_1_1_1() {9613; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_1_1:9614; GFX900: ; %bb.0:9615; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9616; GFX900-NEXT: ;;#ASMSTART9617; GFX900-NEXT: ; def s[4:5]9618; GFX900-NEXT: ;;#ASMEND9619; GFX900-NEXT: ;;#ASMSTART9620; GFX900-NEXT: ; def s[6:7]9621; GFX900-NEXT: ;;#ASMEND9622; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s49623; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49624; GFX900-NEXT: ;;#ASMSTART9625; GFX900-NEXT: ; use s[8:9]9626; GFX900-NEXT: ;;#ASMEND9627; GFX900-NEXT: s_setpc_b64 s[30:31]9628;9629; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_1_1:9630; GFX90A: ; %bb.0:9631; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9632; GFX90A-NEXT: ;;#ASMSTART9633; GFX90A-NEXT: ; def s[4:5]9634; GFX90A-NEXT: ;;#ASMEND9635; GFX90A-NEXT: ;;#ASMSTART9636; GFX90A-NEXT: ; def s[6:7]9637; GFX90A-NEXT: ;;#ASMEND9638; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s49639; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49640; GFX90A-NEXT: ;;#ASMSTART9641; GFX90A-NEXT: ; use s[8:9]9642; GFX90A-NEXT: ;;#ASMEND9643; GFX90A-NEXT: s_setpc_b64 s[30:31]9644;9645; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_1_1:9646; GFX942: ; %bb.0:9647; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9648; GFX942-NEXT: ;;#ASMSTART9649; GFX942-NEXT: ; def s[0:1]9650; GFX942-NEXT: ;;#ASMEND9651; GFX942-NEXT: ;;#ASMSTART9652; GFX942-NEXT: ; def s[2:3]9653; GFX942-NEXT: ;;#ASMEND9654; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s09655; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09656; GFX942-NEXT: ;;#ASMSTART9657; GFX942-NEXT: ; use s[8:9]9658; GFX942-NEXT: ;;#ASMEND9659; GFX942-NEXT: s_setpc_b64 s[30:31]9660 %vec0 = call <4 x i16> asm "; def $0", "=s"()9661 %vec1 = call <4 x i16> asm "; def $0", "=s"()9662 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9663 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9664 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 1, i32 1>9665 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9666 ret void9667}9668 9669define void @s_shuffle_v4i16_v3i16__5_u_1_1() {9670; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_1_1:9671; GFX900: ; %bb.0:9672; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9673; GFX900-NEXT: ;;#ASMSTART9674; GFX900-NEXT: ; def s[4:5]9675; GFX900-NEXT: ;;#ASMEND9676; GFX900-NEXT: ;;#ASMSTART9677; GFX900-NEXT: ; def s[6:7]9678; GFX900-NEXT: ;;#ASMEND9679; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49680; GFX900-NEXT: s_mov_b32 s8, s79681; GFX900-NEXT: ;;#ASMSTART9682; GFX900-NEXT: ; use s[8:9]9683; GFX900-NEXT: ;;#ASMEND9684; GFX900-NEXT: s_setpc_b64 s[30:31]9685;9686; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_1_1:9687; GFX90A: ; %bb.0:9688; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9689; GFX90A-NEXT: ;;#ASMSTART9690; GFX90A-NEXT: ; def s[4:5]9691; GFX90A-NEXT: ;;#ASMEND9692; GFX90A-NEXT: ;;#ASMSTART9693; GFX90A-NEXT: ; def s[6:7]9694; GFX90A-NEXT: ;;#ASMEND9695; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49696; GFX90A-NEXT: s_mov_b32 s8, s79697; GFX90A-NEXT: ;;#ASMSTART9698; GFX90A-NEXT: ; use s[8:9]9699; GFX90A-NEXT: ;;#ASMEND9700; GFX90A-NEXT: s_setpc_b64 s[30:31]9701;9702; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_1_1:9703; GFX942: ; %bb.0:9704; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9705; GFX942-NEXT: ;;#ASMSTART9706; GFX942-NEXT: ; def s[0:1]9707; GFX942-NEXT: ;;#ASMEND9708; GFX942-NEXT: ;;#ASMSTART9709; GFX942-NEXT: ; def s[2:3]9710; GFX942-NEXT: ;;#ASMEND9711; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09712; GFX942-NEXT: s_mov_b32 s8, s39713; GFX942-NEXT: ;;#ASMSTART9714; GFX942-NEXT: ; use s[8:9]9715; GFX942-NEXT: ;;#ASMEND9716; GFX942-NEXT: s_setpc_b64 s[30:31]9717 %vec0 = call <4 x i16> asm "; def $0", "=s"()9718 %vec1 = call <4 x i16> asm "; def $0", "=s"()9719 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9720 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9721 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>9722 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9723 ret void9724}9725 9726define void @s_shuffle_v4i16_v3i16__5_0_1_1() {9727; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_1_1:9728; GFX900: ; %bb.0:9729; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9730; GFX900-NEXT: ;;#ASMSTART9731; GFX900-NEXT: ; def s[4:5]9732; GFX900-NEXT: ;;#ASMEND9733; GFX900-NEXT: ;;#ASMSTART9734; GFX900-NEXT: ; def s[6:7]9735; GFX900-NEXT: ;;#ASMEND9736; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s49737; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49738; GFX900-NEXT: ;;#ASMSTART9739; GFX900-NEXT: ; use s[8:9]9740; GFX900-NEXT: ;;#ASMEND9741; GFX900-NEXT: s_setpc_b64 s[30:31]9742;9743; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_1_1:9744; GFX90A: ; %bb.0:9745; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9746; GFX90A-NEXT: ;;#ASMSTART9747; GFX90A-NEXT: ; def s[4:5]9748; GFX90A-NEXT: ;;#ASMEND9749; GFX90A-NEXT: ;;#ASMSTART9750; GFX90A-NEXT: ; def s[6:7]9751; GFX90A-NEXT: ;;#ASMEND9752; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s49753; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49754; GFX90A-NEXT: ;;#ASMSTART9755; GFX90A-NEXT: ; use s[8:9]9756; GFX90A-NEXT: ;;#ASMEND9757; GFX90A-NEXT: s_setpc_b64 s[30:31]9758;9759; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_1_1:9760; GFX942: ; %bb.0:9761; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9762; GFX942-NEXT: ;;#ASMSTART9763; GFX942-NEXT: ; def s[0:1]9764; GFX942-NEXT: ;;#ASMEND9765; GFX942-NEXT: ;;#ASMSTART9766; GFX942-NEXT: ; def s[2:3]9767; GFX942-NEXT: ;;#ASMEND9768; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s09769; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09770; GFX942-NEXT: ;;#ASMSTART9771; GFX942-NEXT: ; use s[8:9]9772; GFX942-NEXT: ;;#ASMEND9773; GFX942-NEXT: s_setpc_b64 s[30:31]9774 %vec0 = call <4 x i16> asm "; def $0", "=s"()9775 %vec1 = call <4 x i16> asm "; def $0", "=s"()9776 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9777 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9778 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 1, i32 1>9779 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9780 ret void9781}9782 9783define void @s_shuffle_v4i16_v3i16__5_2_1_1() {9784; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_1_1:9785; GFX900: ; %bb.0:9786; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9787; GFX900-NEXT: ;;#ASMSTART9788; GFX900-NEXT: ; def s[4:5]9789; GFX900-NEXT: ;;#ASMEND9790; GFX900-NEXT: ;;#ASMSTART9791; GFX900-NEXT: ; def s[6:7]9792; GFX900-NEXT: ;;#ASMEND9793; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s59794; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49795; GFX900-NEXT: ;;#ASMSTART9796; GFX900-NEXT: ; use s[8:9]9797; GFX900-NEXT: ;;#ASMEND9798; GFX900-NEXT: s_setpc_b64 s[30:31]9799;9800; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_1_1:9801; GFX90A: ; %bb.0:9802; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9803; GFX90A-NEXT: ;;#ASMSTART9804; GFX90A-NEXT: ; def s[4:5]9805; GFX90A-NEXT: ;;#ASMEND9806; GFX90A-NEXT: ;;#ASMSTART9807; GFX90A-NEXT: ; def s[6:7]9808; GFX90A-NEXT: ;;#ASMEND9809; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s59810; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49811; GFX90A-NEXT: ;;#ASMSTART9812; GFX90A-NEXT: ; use s[8:9]9813; GFX90A-NEXT: ;;#ASMEND9814; GFX90A-NEXT: s_setpc_b64 s[30:31]9815;9816; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_1_1:9817; GFX942: ; %bb.0:9818; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9819; GFX942-NEXT: ;;#ASMSTART9820; GFX942-NEXT: ; def s[0:1]9821; GFX942-NEXT: ;;#ASMEND9822; GFX942-NEXT: ;;#ASMSTART9823; GFX942-NEXT: ; def s[2:3]9824; GFX942-NEXT: ;;#ASMEND9825; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s19826; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09827; GFX942-NEXT: ;;#ASMSTART9828; GFX942-NEXT: ; use s[8:9]9829; GFX942-NEXT: ;;#ASMEND9830; GFX942-NEXT: s_setpc_b64 s[30:31]9831 %vec0 = call <4 x i16> asm "; def $0", "=s"()9832 %vec1 = call <4 x i16> asm "; def $0", "=s"()9833 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9834 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9835 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 1, i32 1>9836 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9837 ret void9838}9839 9840define void @s_shuffle_v4i16_v3i16__5_3_1_1() {9841; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_1_1:9842; GFX900: ; %bb.0:9843; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9844; GFX900-NEXT: ;;#ASMSTART9845; GFX900-NEXT: ; def s[4:5]9846; GFX900-NEXT: ;;#ASMEND9847; GFX900-NEXT: ;;#ASMSTART9848; GFX900-NEXT: ; def s[6:7]9849; GFX900-NEXT: ;;#ASMEND9850; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s69851; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49852; GFX900-NEXT: ;;#ASMSTART9853; GFX900-NEXT: ; use s[8:9]9854; GFX900-NEXT: ;;#ASMEND9855; GFX900-NEXT: s_setpc_b64 s[30:31]9856;9857; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_1_1:9858; GFX90A: ; %bb.0:9859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9860; GFX90A-NEXT: ;;#ASMSTART9861; GFX90A-NEXT: ; def s[4:5]9862; GFX90A-NEXT: ;;#ASMEND9863; GFX90A-NEXT: ;;#ASMSTART9864; GFX90A-NEXT: ; def s[6:7]9865; GFX90A-NEXT: ;;#ASMEND9866; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s69867; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49868; GFX90A-NEXT: ;;#ASMSTART9869; GFX90A-NEXT: ; use s[8:9]9870; GFX90A-NEXT: ;;#ASMEND9871; GFX90A-NEXT: s_setpc_b64 s[30:31]9872;9873; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_1_1:9874; GFX942: ; %bb.0:9875; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9876; GFX942-NEXT: ;;#ASMSTART9877; GFX942-NEXT: ; def s[0:1]9878; GFX942-NEXT: ;;#ASMEND9879; GFX942-NEXT: ;;#ASMSTART9880; GFX942-NEXT: ; def s[2:3]9881; GFX942-NEXT: ;;#ASMEND9882; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s29883; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09884; GFX942-NEXT: ;;#ASMSTART9885; GFX942-NEXT: ; use s[8:9]9886; GFX942-NEXT: ;;#ASMEND9887; GFX942-NEXT: s_setpc_b64 s[30:31]9888 %vec0 = call <4 x i16> asm "; def $0", "=s"()9889 %vec1 = call <4 x i16> asm "; def $0", "=s"()9890 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9891 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9892 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 1, i32 1>9893 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9894 ret void9895}9896 9897define void @s_shuffle_v4i16_v3i16__5_4_1_1() {9898; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_1_1:9899; GFX900: ; %bb.0:9900; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9901; GFX900-NEXT: ;;#ASMSTART9902; GFX900-NEXT: ; def s[4:5]9903; GFX900-NEXT: ;;#ASMEND9904; GFX900-NEXT: ;;#ASMSTART9905; GFX900-NEXT: ; def s[6:7]9906; GFX900-NEXT: ;;#ASMEND9907; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s69908; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49909; GFX900-NEXT: ;;#ASMSTART9910; GFX900-NEXT: ; use s[8:9]9911; GFX900-NEXT: ;;#ASMEND9912; GFX900-NEXT: s_setpc_b64 s[30:31]9913;9914; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_1_1:9915; GFX90A: ; %bb.0:9916; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9917; GFX90A-NEXT: ;;#ASMSTART9918; GFX90A-NEXT: ; def s[4:5]9919; GFX90A-NEXT: ;;#ASMEND9920; GFX90A-NEXT: ;;#ASMSTART9921; GFX90A-NEXT: ; def s[6:7]9922; GFX90A-NEXT: ;;#ASMEND9923; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s69924; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49925; GFX90A-NEXT: ;;#ASMSTART9926; GFX90A-NEXT: ; use s[8:9]9927; GFX90A-NEXT: ;;#ASMEND9928; GFX90A-NEXT: s_setpc_b64 s[30:31]9929;9930; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_1_1:9931; GFX942: ; %bb.0:9932; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9933; GFX942-NEXT: ;;#ASMSTART9934; GFX942-NEXT: ; def s[0:1]9935; GFX942-NEXT: ;;#ASMEND9936; GFX942-NEXT: ;;#ASMSTART9937; GFX942-NEXT: ; def s[2:3]9938; GFX942-NEXT: ;;#ASMEND9939; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s29940; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09941; GFX942-NEXT: ;;#ASMSTART9942; GFX942-NEXT: ; use s[8:9]9943; GFX942-NEXT: ;;#ASMEND9944; GFX942-NEXT: s_setpc_b64 s[30:31]9945 %vec0 = call <4 x i16> asm "; def $0", "=s"()9946 %vec1 = call <4 x i16> asm "; def $0", "=s"()9947 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9948 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>9949 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 1, i32 1>9950 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)9951 ret void9952}9953 9954define void @s_shuffle_v4i16_v3i16__5_5_1_1() {9955; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_1:9956; GFX900: ; %bb.0:9957; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9958; GFX900-NEXT: ;;#ASMSTART9959; GFX900-NEXT: ; def s[4:5]9960; GFX900-NEXT: ;;#ASMEND9961; GFX900-NEXT: ;;#ASMSTART9962; GFX900-NEXT: ; def s[6:7]9963; GFX900-NEXT: ;;#ASMEND9964; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s49965; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79966; GFX900-NEXT: ;;#ASMSTART9967; GFX900-NEXT: ; use s[8:9]9968; GFX900-NEXT: ;;#ASMEND9969; GFX900-NEXT: s_setpc_b64 s[30:31]9970;9971; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_1:9972; GFX90A: ; %bb.0:9973; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9974; GFX90A-NEXT: ;;#ASMSTART9975; GFX90A-NEXT: ; def s[4:5]9976; GFX90A-NEXT: ;;#ASMEND9977; GFX90A-NEXT: ;;#ASMSTART9978; GFX90A-NEXT: ; def s[6:7]9979; GFX90A-NEXT: ;;#ASMEND9980; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s49981; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79982; GFX90A-NEXT: ;;#ASMSTART9983; GFX90A-NEXT: ; use s[8:9]9984; GFX90A-NEXT: ;;#ASMEND9985; GFX90A-NEXT: s_setpc_b64 s[30:31]9986;9987; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_1:9988; GFX942: ; %bb.0:9989; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9990; GFX942-NEXT: ;;#ASMSTART9991; GFX942-NEXT: ; def s[0:1]9992; GFX942-NEXT: ;;#ASMEND9993; GFX942-NEXT: ;;#ASMSTART9994; GFX942-NEXT: ; def s[2:3]9995; GFX942-NEXT: ;;#ASMEND9996; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s09997; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39998; GFX942-NEXT: ;;#ASMSTART9999; GFX942-NEXT: ; use s[8:9]10000; GFX942-NEXT: ;;#ASMEND10001; GFX942-NEXT: s_setpc_b64 s[30:31]10002 %vec0 = call <4 x i16> asm "; def $0", "=s"()10003 %vec1 = call <4 x i16> asm "; def $0", "=s"()10004 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10005 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10006 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 1>10007 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10008 ret void10009}10010 10011define void @s_shuffle_v4i16_v3i16__5_5_u_1() {10012; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_1:10013; GFX900: ; %bb.0:10014; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10015; GFX900-NEXT: ;;#ASMSTART10016; GFX900-NEXT: ; def s[4:5]10017; GFX900-NEXT: ;;#ASMEND10018; GFX900-NEXT: ;;#ASMSTART10019; GFX900-NEXT: ; def s[6:7]10020; GFX900-NEXT: ;;#ASMEND10021; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710022; GFX900-NEXT: s_mov_b32 s9, s410023; GFX900-NEXT: ;;#ASMSTART10024; GFX900-NEXT: ; use s[8:9]10025; GFX900-NEXT: ;;#ASMEND10026; GFX900-NEXT: s_setpc_b64 s[30:31]10027;10028; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_1:10029; GFX90A: ; %bb.0:10030; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10031; GFX90A-NEXT: ;;#ASMSTART10032; GFX90A-NEXT: ; def s[4:5]10033; GFX90A-NEXT: ;;#ASMEND10034; GFX90A-NEXT: ;;#ASMSTART10035; GFX90A-NEXT: ; def s[6:7]10036; GFX90A-NEXT: ;;#ASMEND10037; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710038; GFX90A-NEXT: s_mov_b32 s9, s410039; GFX90A-NEXT: ;;#ASMSTART10040; GFX90A-NEXT: ; use s[8:9]10041; GFX90A-NEXT: ;;#ASMEND10042; GFX90A-NEXT: s_setpc_b64 s[30:31]10043;10044; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_1:10045; GFX942: ; %bb.0:10046; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10047; GFX942-NEXT: ;;#ASMSTART10048; GFX942-NEXT: ; def s[0:1]10049; GFX942-NEXT: ;;#ASMEND10050; GFX942-NEXT: ;;#ASMSTART10051; GFX942-NEXT: ; def s[2:3]10052; GFX942-NEXT: ;;#ASMEND10053; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310054; GFX942-NEXT: s_mov_b32 s9, s010055; GFX942-NEXT: ;;#ASMSTART10056; GFX942-NEXT: ; use s[8:9]10057; GFX942-NEXT: ;;#ASMEND10058; GFX942-NEXT: s_setpc_b64 s[30:31]10059 %vec0 = call <4 x i16> asm "; def $0", "=s"()10060 %vec1 = call <4 x i16> asm "; def $0", "=s"()10061 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10062 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10063 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>10064 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10065 ret void10066}10067 10068define void @s_shuffle_v4i16_v3i16__5_5_0_1() {10069; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_1:10070; GFX900: ; %bb.0:10071; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10072; GFX900-NEXT: ;;#ASMSTART10073; GFX900-NEXT: ; def s[4:5]10074; GFX900-NEXT: ;;#ASMEND10075; GFX900-NEXT: ;;#ASMSTART10076; GFX900-NEXT: ; def s[6:7]10077; GFX900-NEXT: ;;#ASMEND10078; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710079; GFX900-NEXT: s_mov_b32 s9, s410080; GFX900-NEXT: ;;#ASMSTART10081; GFX900-NEXT: ; use s[8:9]10082; GFX900-NEXT: ;;#ASMEND10083; GFX900-NEXT: s_setpc_b64 s[30:31]10084;10085; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_1:10086; GFX90A: ; %bb.0:10087; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10088; GFX90A-NEXT: ;;#ASMSTART10089; GFX90A-NEXT: ; def s[4:5]10090; GFX90A-NEXT: ;;#ASMEND10091; GFX90A-NEXT: ;;#ASMSTART10092; GFX90A-NEXT: ; def s[6:7]10093; GFX90A-NEXT: ;;#ASMEND10094; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710095; GFX90A-NEXT: s_mov_b32 s9, s410096; GFX90A-NEXT: ;;#ASMSTART10097; GFX90A-NEXT: ; use s[8:9]10098; GFX90A-NEXT: ;;#ASMEND10099; GFX90A-NEXT: s_setpc_b64 s[30:31]10100;10101; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_1:10102; GFX942: ; %bb.0:10103; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10104; GFX942-NEXT: ;;#ASMSTART10105; GFX942-NEXT: ; def s[0:1]10106; GFX942-NEXT: ;;#ASMEND10107; GFX942-NEXT: ;;#ASMSTART10108; GFX942-NEXT: ; def s[2:3]10109; GFX942-NEXT: ;;#ASMEND10110; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310111; GFX942-NEXT: s_mov_b32 s9, s010112; GFX942-NEXT: ;;#ASMSTART10113; GFX942-NEXT: ; use s[8:9]10114; GFX942-NEXT: ;;#ASMEND10115; GFX942-NEXT: s_setpc_b64 s[30:31]10116 %vec0 = call <4 x i16> asm "; def $0", "=s"()10117 %vec1 = call <4 x i16> asm "; def $0", "=s"()10118 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10119 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10120 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 1>10121 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10122 ret void10123}10124 10125define void @s_shuffle_v4i16_v3i16__5_5_2_1() {10126; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_1:10127; GFX900: ; %bb.0:10128; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10129; GFX900-NEXT: ;;#ASMSTART10130; GFX900-NEXT: ; def s[4:5]10131; GFX900-NEXT: ;;#ASMEND10132; GFX900-NEXT: ;;#ASMSTART10133; GFX900-NEXT: ; def s[6:7]10134; GFX900-NEXT: ;;#ASMEND10135; GFX900-NEXT: s_pack_lh_b32_b16 s9, s5, s410136; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710137; GFX900-NEXT: ;;#ASMSTART10138; GFX900-NEXT: ; use s[8:9]10139; GFX900-NEXT: ;;#ASMEND10140; GFX900-NEXT: s_setpc_b64 s[30:31]10141;10142; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_1:10143; GFX90A: ; %bb.0:10144; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10145; GFX90A-NEXT: ;;#ASMSTART10146; GFX90A-NEXT: ; def s[4:5]10147; GFX90A-NEXT: ;;#ASMEND10148; GFX90A-NEXT: ;;#ASMSTART10149; GFX90A-NEXT: ; def s[6:7]10150; GFX90A-NEXT: ;;#ASMEND10151; GFX90A-NEXT: s_pack_lh_b32_b16 s9, s5, s410152; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710153; GFX90A-NEXT: ;;#ASMSTART10154; GFX90A-NEXT: ; use s[8:9]10155; GFX90A-NEXT: ;;#ASMEND10156; GFX90A-NEXT: s_setpc_b64 s[30:31]10157;10158; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_1:10159; GFX942: ; %bb.0:10160; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10161; GFX942-NEXT: ;;#ASMSTART10162; GFX942-NEXT: ; def s[0:1]10163; GFX942-NEXT: ;;#ASMEND10164; GFX942-NEXT: ;;#ASMSTART10165; GFX942-NEXT: ; def s[2:3]10166; GFX942-NEXT: ;;#ASMEND10167; GFX942-NEXT: s_pack_lh_b32_b16 s9, s1, s010168; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310169; GFX942-NEXT: ;;#ASMSTART10170; GFX942-NEXT: ; use s[8:9]10171; GFX942-NEXT: ;;#ASMEND10172; GFX942-NEXT: s_setpc_b64 s[30:31]10173 %vec0 = call <4 x i16> asm "; def $0", "=s"()10174 %vec1 = call <4 x i16> asm "; def $0", "=s"()10175 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10176 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10177 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 1>10178 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10179 ret void10180}10181 10182define void @s_shuffle_v4i16_v3i16__5_5_3_1() {10183; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_1:10184; GFX900: ; %bb.0:10185; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10186; GFX900-NEXT: ;;#ASMSTART10187; GFX900-NEXT: ; def s[4:5]10188; GFX900-NEXT: ;;#ASMEND10189; GFX900-NEXT: ;;#ASMSTART10190; GFX900-NEXT: ; def s[6:7]10191; GFX900-NEXT: ;;#ASMEND10192; GFX900-NEXT: s_pack_lh_b32_b16 s9, s6, s410193; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710194; GFX900-NEXT: ;;#ASMSTART10195; GFX900-NEXT: ; use s[8:9]10196; GFX900-NEXT: ;;#ASMEND10197; GFX900-NEXT: s_setpc_b64 s[30:31]10198;10199; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_1:10200; GFX90A: ; %bb.0:10201; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10202; GFX90A-NEXT: ;;#ASMSTART10203; GFX90A-NEXT: ; def s[4:5]10204; GFX90A-NEXT: ;;#ASMEND10205; GFX90A-NEXT: ;;#ASMSTART10206; GFX90A-NEXT: ; def s[6:7]10207; GFX90A-NEXT: ;;#ASMEND10208; GFX90A-NEXT: s_pack_lh_b32_b16 s9, s6, s410209; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710210; GFX90A-NEXT: ;;#ASMSTART10211; GFX90A-NEXT: ; use s[8:9]10212; GFX90A-NEXT: ;;#ASMEND10213; GFX90A-NEXT: s_setpc_b64 s[30:31]10214;10215; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_1:10216; GFX942: ; %bb.0:10217; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10218; GFX942-NEXT: ;;#ASMSTART10219; GFX942-NEXT: ; def s[0:1]10220; GFX942-NEXT: ;;#ASMEND10221; GFX942-NEXT: ;;#ASMSTART10222; GFX942-NEXT: ; def s[2:3]10223; GFX942-NEXT: ;;#ASMEND10224; GFX942-NEXT: s_pack_lh_b32_b16 s9, s2, s010225; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310226; GFX942-NEXT: ;;#ASMSTART10227; GFX942-NEXT: ; use s[8:9]10228; GFX942-NEXT: ;;#ASMEND10229; GFX942-NEXT: s_setpc_b64 s[30:31]10230 %vec0 = call <4 x i16> asm "; def $0", "=s"()10231 %vec1 = call <4 x i16> asm "; def $0", "=s"()10232 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10233 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10234 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 1>10235 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10236 ret void10237}10238 10239define void @s_shuffle_v4i16_v3i16__5_5_4_1() {10240; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_1:10241; GFX900: ; %bb.0:10242; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10243; GFX900-NEXT: ;;#ASMSTART10244; GFX900-NEXT: ; def s[4:5]10245; GFX900-NEXT: ;;#ASMEND10246; GFX900-NEXT: ;;#ASMSTART10247; GFX900-NEXT: ; def s[6:7]10248; GFX900-NEXT: ;;#ASMEND10249; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s410250; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710251; GFX900-NEXT: ;;#ASMSTART10252; GFX900-NEXT: ; use s[8:9]10253; GFX900-NEXT: ;;#ASMEND10254; GFX900-NEXT: s_setpc_b64 s[30:31]10255;10256; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_1:10257; GFX90A: ; %bb.0:10258; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10259; GFX90A-NEXT: ;;#ASMSTART10260; GFX90A-NEXT: ; def s[4:5]10261; GFX90A-NEXT: ;;#ASMEND10262; GFX90A-NEXT: ;;#ASMSTART10263; GFX90A-NEXT: ; def s[6:7]10264; GFX90A-NEXT: ;;#ASMEND10265; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s410266; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710267; GFX90A-NEXT: ;;#ASMSTART10268; GFX90A-NEXT: ; use s[8:9]10269; GFX90A-NEXT: ;;#ASMEND10270; GFX90A-NEXT: s_setpc_b64 s[30:31]10271;10272; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_1:10273; GFX942: ; %bb.0:10274; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10275; GFX942-NEXT: ;;#ASMSTART10276; GFX942-NEXT: ; def s[0:1]10277; GFX942-NEXT: ;;#ASMEND10278; GFX942-NEXT: ;;#ASMSTART10279; GFX942-NEXT: ; def s[2:3]10280; GFX942-NEXT: ;;#ASMEND10281; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s010282; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310283; GFX942-NEXT: ;;#ASMSTART10284; GFX942-NEXT: ; use s[8:9]10285; GFX942-NEXT: ;;#ASMEND10286; GFX942-NEXT: s_setpc_b64 s[30:31]10287 %vec0 = call <4 x i16> asm "; def $0", "=s"()10288 %vec1 = call <4 x i16> asm "; def $0", "=s"()10289 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10290 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10291 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 1>10292 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10293 ret void10294}10295 10296define void @s_shuffle_v4i16_v3i16__u_2_2_2() {10297; GFX900-LABEL: s_shuffle_v4i16_v3i16__u_2_2_2:10298; GFX900: ; %bb.0:10299; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10300; GFX900-NEXT: ;;#ASMSTART10301; GFX900-NEXT: ; def s[4:5]10302; GFX900-NEXT: ;;#ASMEND10303; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510304; GFX900-NEXT: s_lshl_b32 s8, s5, 1610305; GFX900-NEXT: ;;#ASMSTART10306; GFX900-NEXT: ; use s[8:9]10307; GFX900-NEXT: ;;#ASMEND10308; GFX900-NEXT: s_setpc_b64 s[30:31]10309;10310; GFX90A-LABEL: s_shuffle_v4i16_v3i16__u_2_2_2:10311; GFX90A: ; %bb.0:10312; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10313; GFX90A-NEXT: ;;#ASMSTART10314; GFX90A-NEXT: ; def s[4:5]10315; GFX90A-NEXT: ;;#ASMEND10316; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510317; GFX90A-NEXT: s_lshl_b32 s8, s5, 1610318; GFX90A-NEXT: ;;#ASMSTART10319; GFX90A-NEXT: ; use s[8:9]10320; GFX90A-NEXT: ;;#ASMEND10321; GFX90A-NEXT: s_setpc_b64 s[30:31]10322;10323; GFX942-LABEL: s_shuffle_v4i16_v3i16__u_2_2_2:10324; GFX942: ; %bb.0:10325; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10326; GFX942-NEXT: ;;#ASMSTART10327; GFX942-NEXT: ; def s[0:1]10328; GFX942-NEXT: ;;#ASMEND10329; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110330; GFX942-NEXT: s_lshl_b32 s8, s1, 1610331; GFX942-NEXT: ;;#ASMSTART10332; GFX942-NEXT: ; use s[8:9]10333; GFX942-NEXT: ;;#ASMEND10334; GFX942-NEXT: s_setpc_b64 s[30:31]10335 %vec0 = call <4 x i16> asm "; def $0", "=s"()10336 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10337 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>10338 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10339 ret void10340}10341 10342define void @s_shuffle_v4i16_v3i16__0_2_2_2() {10343; GFX900-LABEL: s_shuffle_v4i16_v3i16__0_2_2_2:10344; GFX900: ; %bb.0:10345; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10346; GFX900-NEXT: ;;#ASMSTART10347; GFX900-NEXT: ; def s[4:5]10348; GFX900-NEXT: ;;#ASMEND10349; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s510350; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510351; GFX900-NEXT: ;;#ASMSTART10352; GFX900-NEXT: ; use s[8:9]10353; GFX900-NEXT: ;;#ASMEND10354; GFX900-NEXT: s_setpc_b64 s[30:31]10355;10356; GFX90A-LABEL: s_shuffle_v4i16_v3i16__0_2_2_2:10357; GFX90A: ; %bb.0:10358; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10359; GFX90A-NEXT: ;;#ASMSTART10360; GFX90A-NEXT: ; def s[4:5]10361; GFX90A-NEXT: ;;#ASMEND10362; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s510363; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510364; GFX90A-NEXT: ;;#ASMSTART10365; GFX90A-NEXT: ; use s[8:9]10366; GFX90A-NEXT: ;;#ASMEND10367; GFX90A-NEXT: s_setpc_b64 s[30:31]10368;10369; GFX942-LABEL: s_shuffle_v4i16_v3i16__0_2_2_2:10370; GFX942: ; %bb.0:10371; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10372; GFX942-NEXT: ;;#ASMSTART10373; GFX942-NEXT: ; def s[0:1]10374; GFX942-NEXT: ;;#ASMEND10375; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s110376; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110377; GFX942-NEXT: ;;#ASMSTART10378; GFX942-NEXT: ; use s[8:9]10379; GFX942-NEXT: ;;#ASMEND10380; GFX942-NEXT: s_setpc_b64 s[30:31]10381 %vec0 = call <4 x i16> asm "; def $0", "=s"()10382 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10383 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>10384 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10385 ret void10386}10387 10388define void @s_shuffle_v4i16_v3i16__1_2_2_2() {10389; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_2_2_2:10390; GFX900: ; %bb.0:10391; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10392; GFX900-NEXT: ;;#ASMSTART10393; GFX900-NEXT: ; def s[4:5]10394; GFX900-NEXT: ;;#ASMEND10395; GFX900-NEXT: s_lshr_b32 s4, s4, 1610396; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s510397; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510398; GFX900-NEXT: ;;#ASMSTART10399; GFX900-NEXT: ; use s[8:9]10400; GFX900-NEXT: ;;#ASMEND10401; GFX900-NEXT: s_setpc_b64 s[30:31]10402;10403; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_2_2_2:10404; GFX90A: ; %bb.0:10405; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10406; GFX90A-NEXT: ;;#ASMSTART10407; GFX90A-NEXT: ; def s[4:5]10408; GFX90A-NEXT: ;;#ASMEND10409; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610410; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s510411; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510412; GFX90A-NEXT: ;;#ASMSTART10413; GFX90A-NEXT: ; use s[8:9]10414; GFX90A-NEXT: ;;#ASMEND10415; GFX90A-NEXT: s_setpc_b64 s[30:31]10416;10417; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_2_2_2:10418; GFX942: ; %bb.0:10419; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10420; GFX942-NEXT: ;;#ASMSTART10421; GFX942-NEXT: ; def s[0:1]10422; GFX942-NEXT: ;;#ASMEND10423; GFX942-NEXT: s_lshr_b32 s0, s0, 1610424; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s110425; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110426; GFX942-NEXT: ;;#ASMSTART10427; GFX942-NEXT: ; use s[8:9]10428; GFX942-NEXT: ;;#ASMEND10429; GFX942-NEXT: s_setpc_b64 s[30:31]10430 %vec0 = call <4 x i16> asm "; def $0", "=s"()10431 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10432 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>10433 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10434 ret void10435}10436 10437define void @s_shuffle_v4i16_v3i16__2_2_2_2() {10438; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_2_2_2:10439; GFX900: ; %bb.0:10440; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10441; GFX900-NEXT: ;;#ASMSTART10442; GFX900-NEXT: ; def s[4:5]10443; GFX900-NEXT: ;;#ASMEND10444; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s510445; GFX900-NEXT: s_mov_b32 s9, s810446; GFX900-NEXT: ;;#ASMSTART10447; GFX900-NEXT: ; use s[8:9]10448; GFX900-NEXT: ;;#ASMEND10449; GFX900-NEXT: s_setpc_b64 s[30:31]10450;10451; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_2_2_2:10452; GFX90A: ; %bb.0:10453; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10454; GFX90A-NEXT: ;;#ASMSTART10455; GFX90A-NEXT: ; def s[4:5]10456; GFX90A-NEXT: ;;#ASMEND10457; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s510458; GFX90A-NEXT: s_mov_b32 s9, s810459; GFX90A-NEXT: ;;#ASMSTART10460; GFX90A-NEXT: ; use s[8:9]10461; GFX90A-NEXT: ;;#ASMEND10462; GFX90A-NEXT: s_setpc_b64 s[30:31]10463;10464; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_2_2_2:10465; GFX942: ; %bb.0:10466; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10467; GFX942-NEXT: ;;#ASMSTART10468; GFX942-NEXT: ; def s[0:1]10469; GFX942-NEXT: ;;#ASMEND10470; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s110471; GFX942-NEXT: s_mov_b32 s9, s810472; GFX942-NEXT: ;;#ASMSTART10473; GFX942-NEXT: ; use s[8:9]10474; GFX942-NEXT: ;;#ASMEND10475; GFX942-NEXT: s_setpc_b64 s[30:31]10476 %vec0 = call <4 x i16> asm "; def $0", "=s"()10477 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10478 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>10479 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10480 ret void10481}10482 10483define void @s_shuffle_v4i16_v3i16__3_2_2_2() {10484; GFX900-LABEL: s_shuffle_v4i16_v3i16__3_2_2_2:10485; GFX900: ; %bb.0:10486; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10487; GFX900-NEXT: ;;#ASMSTART10488; GFX900-NEXT: ; def s[4:5]10489; GFX900-NEXT: ;;#ASMEND10490; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510491; GFX900-NEXT: s_lshl_b32 s8, s5, 1610492; GFX900-NEXT: ;;#ASMSTART10493; GFX900-NEXT: ; use s[8:9]10494; GFX900-NEXT: ;;#ASMEND10495; GFX900-NEXT: s_setpc_b64 s[30:31]10496;10497; GFX90A-LABEL: s_shuffle_v4i16_v3i16__3_2_2_2:10498; GFX90A: ; %bb.0:10499; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10500; GFX90A-NEXT: ;;#ASMSTART10501; GFX90A-NEXT: ; def s[4:5]10502; GFX90A-NEXT: ;;#ASMEND10503; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510504; GFX90A-NEXT: s_lshl_b32 s8, s5, 1610505; GFX90A-NEXT: ;;#ASMSTART10506; GFX90A-NEXT: ; use s[8:9]10507; GFX90A-NEXT: ;;#ASMEND10508; GFX90A-NEXT: s_setpc_b64 s[30:31]10509;10510; GFX942-LABEL: s_shuffle_v4i16_v3i16__3_2_2_2:10511; GFX942: ; %bb.0:10512; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10513; GFX942-NEXT: ;;#ASMSTART10514; GFX942-NEXT: ; def s[0:1]10515; GFX942-NEXT: ;;#ASMEND10516; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110517; GFX942-NEXT: s_lshl_b32 s8, s1, 1610518; GFX942-NEXT: ;;#ASMSTART10519; GFX942-NEXT: ; use s[8:9]10520; GFX942-NEXT: ;;#ASMEND10521; GFX942-NEXT: s_setpc_b64 s[30:31]10522 %vec0 = call <4 x i16> asm "; def $0", "=s"()10523 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10524 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>10525 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10526 ret void10527}10528 10529define void @s_shuffle_v4i16_v3i16__4_2_2_2() {10530; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_2_2_2:10531; GFX900: ; %bb.0:10532; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10533; GFX900-NEXT: ;;#ASMSTART10534; GFX900-NEXT: ; def s[4:5]10535; GFX900-NEXT: ;;#ASMEND10536; GFX900-NEXT: ;;#ASMSTART10537; GFX900-NEXT: ; def s[6:7]10538; GFX900-NEXT: ;;#ASMEND10539; GFX900-NEXT: s_lshr_b32 s4, s6, 1610540; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s510541; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510542; GFX900-NEXT: ;;#ASMSTART10543; GFX900-NEXT: ; use s[8:9]10544; GFX900-NEXT: ;;#ASMEND10545; GFX900-NEXT: s_setpc_b64 s[30:31]10546;10547; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_2_2_2:10548; GFX90A: ; %bb.0:10549; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10550; GFX90A-NEXT: ;;#ASMSTART10551; GFX90A-NEXT: ; def s[4:5]10552; GFX90A-NEXT: ;;#ASMEND10553; GFX90A-NEXT: ;;#ASMSTART10554; GFX90A-NEXT: ; def s[6:7]10555; GFX90A-NEXT: ;;#ASMEND10556; GFX90A-NEXT: s_lshr_b32 s4, s6, 1610557; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s510558; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510559; GFX90A-NEXT: ;;#ASMSTART10560; GFX90A-NEXT: ; use s[8:9]10561; GFX90A-NEXT: ;;#ASMEND10562; GFX90A-NEXT: s_setpc_b64 s[30:31]10563;10564; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_2_2_2:10565; GFX942: ; %bb.0:10566; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10567; GFX942-NEXT: ;;#ASMSTART10568; GFX942-NEXT: ; def s[0:1]10569; GFX942-NEXT: ;;#ASMEND10570; GFX942-NEXT: ;;#ASMSTART10571; GFX942-NEXT: ; def s[2:3]10572; GFX942-NEXT: ;;#ASMEND10573; GFX942-NEXT: s_lshr_b32 s0, s2, 1610574; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s110575; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110576; GFX942-NEXT: ;;#ASMSTART10577; GFX942-NEXT: ; use s[8:9]10578; GFX942-NEXT: ;;#ASMEND10579; GFX942-NEXT: s_setpc_b64 s[30:31]10580 %vec0 = call <4 x i16> asm "; def $0", "=s"()10581 %vec1 = call <4 x i16> asm "; def $0", "=s"()10582 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10583 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10584 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 2, i32 2, i32 2>10585 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10586 ret void10587}10588 10589define void @s_shuffle_v4i16_v3i16__5_2_2_2() {10590; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_2_2:10591; GFX900: ; %bb.0:10592; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10593; GFX900-NEXT: ;;#ASMSTART10594; GFX900-NEXT: ; def s[4:5]10595; GFX900-NEXT: ;;#ASMEND10596; GFX900-NEXT: ;;#ASMSTART10597; GFX900-NEXT: ; def s[6:7]10598; GFX900-NEXT: ;;#ASMEND10599; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s510600; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510601; GFX900-NEXT: ;;#ASMSTART10602; GFX900-NEXT: ; use s[8:9]10603; GFX900-NEXT: ;;#ASMEND10604; GFX900-NEXT: s_setpc_b64 s[30:31]10605;10606; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_2_2:10607; GFX90A: ; %bb.0:10608; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10609; GFX90A-NEXT: ;;#ASMSTART10610; GFX90A-NEXT: ; def s[4:5]10611; GFX90A-NEXT: ;;#ASMEND10612; GFX90A-NEXT: ;;#ASMSTART10613; GFX90A-NEXT: ; def s[6:7]10614; GFX90A-NEXT: ;;#ASMEND10615; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s510616; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510617; GFX90A-NEXT: ;;#ASMSTART10618; GFX90A-NEXT: ; use s[8:9]10619; GFX90A-NEXT: ;;#ASMEND10620; GFX90A-NEXT: s_setpc_b64 s[30:31]10621;10622; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_2_2:10623; GFX942: ; %bb.0:10624; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10625; GFX942-NEXT: ;;#ASMSTART10626; GFX942-NEXT: ; def s[0:1]10627; GFX942-NEXT: ;;#ASMEND10628; GFX942-NEXT: ;;#ASMSTART10629; GFX942-NEXT: ; def s[2:3]10630; GFX942-NEXT: ;;#ASMEND10631; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s110632; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110633; GFX942-NEXT: ;;#ASMSTART10634; GFX942-NEXT: ; use s[8:9]10635; GFX942-NEXT: ;;#ASMEND10636; GFX942-NEXT: s_setpc_b64 s[30:31]10637 %vec0 = call <4 x i16> asm "; def $0", "=s"()10638 %vec1 = call <4 x i16> asm "; def $0", "=s"()10639 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10640 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10641 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 2, i32 2>10642 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10643 ret void10644}10645 10646define void @s_shuffle_v4i16_v3i16__5_u_2_2() {10647; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_2_2:10648; GFX900: ; %bb.0:10649; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10650; GFX900-NEXT: ;;#ASMSTART10651; GFX900-NEXT: ; def s[4:5]10652; GFX900-NEXT: ;;#ASMEND10653; GFX900-NEXT: ;;#ASMSTART10654; GFX900-NEXT: ; def s[6:7]10655; GFX900-NEXT: ;;#ASMEND10656; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510657; GFX900-NEXT: s_mov_b32 s8, s710658; GFX900-NEXT: ;;#ASMSTART10659; GFX900-NEXT: ; use s[8:9]10660; GFX900-NEXT: ;;#ASMEND10661; GFX900-NEXT: s_setpc_b64 s[30:31]10662;10663; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_2_2:10664; GFX90A: ; %bb.0:10665; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10666; GFX90A-NEXT: ;;#ASMSTART10667; GFX90A-NEXT: ; def s[4:5]10668; GFX90A-NEXT: ;;#ASMEND10669; GFX90A-NEXT: ;;#ASMSTART10670; GFX90A-NEXT: ; def s[6:7]10671; GFX90A-NEXT: ;;#ASMEND10672; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510673; GFX90A-NEXT: s_mov_b32 s8, s710674; GFX90A-NEXT: ;;#ASMSTART10675; GFX90A-NEXT: ; use s[8:9]10676; GFX90A-NEXT: ;;#ASMEND10677; GFX90A-NEXT: s_setpc_b64 s[30:31]10678;10679; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_2_2:10680; GFX942: ; %bb.0:10681; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10682; GFX942-NEXT: ;;#ASMSTART10683; GFX942-NEXT: ; def s[0:1]10684; GFX942-NEXT: ;;#ASMEND10685; GFX942-NEXT: ;;#ASMSTART10686; GFX942-NEXT: ; def s[2:3]10687; GFX942-NEXT: ;;#ASMEND10688; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110689; GFX942-NEXT: s_mov_b32 s8, s310690; GFX942-NEXT: ;;#ASMSTART10691; GFX942-NEXT: ; use s[8:9]10692; GFX942-NEXT: ;;#ASMEND10693; GFX942-NEXT: s_setpc_b64 s[30:31]10694 %vec0 = call <4 x i16> asm "; def $0", "=s"()10695 %vec1 = call <4 x i16> asm "; def $0", "=s"()10696 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10697 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10698 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>10699 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10700 ret void10701}10702 10703define void @s_shuffle_v4i16_v3i16__5_0_2_2() {10704; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_2_2:10705; GFX900: ; %bb.0:10706; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10707; GFX900-NEXT: ;;#ASMSTART10708; GFX900-NEXT: ; def s[4:5]10709; GFX900-NEXT: ;;#ASMEND10710; GFX900-NEXT: ;;#ASMSTART10711; GFX900-NEXT: ; def s[6:7]10712; GFX900-NEXT: ;;#ASMEND10713; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s410714; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510715; GFX900-NEXT: ;;#ASMSTART10716; GFX900-NEXT: ; use s[8:9]10717; GFX900-NEXT: ;;#ASMEND10718; GFX900-NEXT: s_setpc_b64 s[30:31]10719;10720; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_2_2:10721; GFX90A: ; %bb.0:10722; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10723; GFX90A-NEXT: ;;#ASMSTART10724; GFX90A-NEXT: ; def s[4:5]10725; GFX90A-NEXT: ;;#ASMEND10726; GFX90A-NEXT: ;;#ASMSTART10727; GFX90A-NEXT: ; def s[6:7]10728; GFX90A-NEXT: ;;#ASMEND10729; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s410730; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510731; GFX90A-NEXT: ;;#ASMSTART10732; GFX90A-NEXT: ; use s[8:9]10733; GFX90A-NEXT: ;;#ASMEND10734; GFX90A-NEXT: s_setpc_b64 s[30:31]10735;10736; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_2_2:10737; GFX942: ; %bb.0:10738; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10739; GFX942-NEXT: ;;#ASMSTART10740; GFX942-NEXT: ; def s[0:1]10741; GFX942-NEXT: ;;#ASMEND10742; GFX942-NEXT: ;;#ASMSTART10743; GFX942-NEXT: ; def s[2:3]10744; GFX942-NEXT: ;;#ASMEND10745; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s010746; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110747; GFX942-NEXT: ;;#ASMSTART10748; GFX942-NEXT: ; use s[8:9]10749; GFX942-NEXT: ;;#ASMEND10750; GFX942-NEXT: s_setpc_b64 s[30:31]10751 %vec0 = call <4 x i16> asm "; def $0", "=s"()10752 %vec1 = call <4 x i16> asm "; def $0", "=s"()10753 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10754 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10755 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 2, i32 2>10756 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10757 ret void10758}10759 10760define void @s_shuffle_v4i16_v3i16__5_1_2_2() {10761; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_2_2:10762; GFX900: ; %bb.0:10763; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10764; GFX900-NEXT: ;;#ASMSTART10765; GFX900-NEXT: ; def s[4:5]10766; GFX900-NEXT: ;;#ASMEND10767; GFX900-NEXT: ;;#ASMSTART10768; GFX900-NEXT: ; def s[6:7]10769; GFX900-NEXT: ;;#ASMEND10770; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s410771; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510772; GFX900-NEXT: ;;#ASMSTART10773; GFX900-NEXT: ; use s[8:9]10774; GFX900-NEXT: ;;#ASMEND10775; GFX900-NEXT: s_setpc_b64 s[30:31]10776;10777; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_2_2:10778; GFX90A: ; %bb.0:10779; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10780; GFX90A-NEXT: ;;#ASMSTART10781; GFX90A-NEXT: ; def s[4:5]10782; GFX90A-NEXT: ;;#ASMEND10783; GFX90A-NEXT: ;;#ASMSTART10784; GFX90A-NEXT: ; def s[6:7]10785; GFX90A-NEXT: ;;#ASMEND10786; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s410787; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510788; GFX90A-NEXT: ;;#ASMSTART10789; GFX90A-NEXT: ; use s[8:9]10790; GFX90A-NEXT: ;;#ASMEND10791; GFX90A-NEXT: s_setpc_b64 s[30:31]10792;10793; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_2_2:10794; GFX942: ; %bb.0:10795; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10796; GFX942-NEXT: ;;#ASMSTART10797; GFX942-NEXT: ; def s[0:1]10798; GFX942-NEXT: ;;#ASMEND10799; GFX942-NEXT: ;;#ASMSTART10800; GFX942-NEXT: ; def s[2:3]10801; GFX942-NEXT: ;;#ASMEND10802; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s010803; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110804; GFX942-NEXT: ;;#ASMSTART10805; GFX942-NEXT: ; use s[8:9]10806; GFX942-NEXT: ;;#ASMEND10807; GFX942-NEXT: s_setpc_b64 s[30:31]10808 %vec0 = call <4 x i16> asm "; def $0", "=s"()10809 %vec1 = call <4 x i16> asm "; def $0", "=s"()10810 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10811 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10812 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 2, i32 2>10813 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10814 ret void10815}10816 10817define void @s_shuffle_v4i16_v3i16__5_3_2_2() {10818; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_2_2:10819; GFX900: ; %bb.0:10820; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10821; GFX900-NEXT: ;;#ASMSTART10822; GFX900-NEXT: ; def s[4:5]10823; GFX900-NEXT: ;;#ASMEND10824; GFX900-NEXT: ;;#ASMSTART10825; GFX900-NEXT: ; def s[6:7]10826; GFX900-NEXT: ;;#ASMEND10827; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s610828; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510829; GFX900-NEXT: ;;#ASMSTART10830; GFX900-NEXT: ; use s[8:9]10831; GFX900-NEXT: ;;#ASMEND10832; GFX900-NEXT: s_setpc_b64 s[30:31]10833;10834; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_2_2:10835; GFX90A: ; %bb.0:10836; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10837; GFX90A-NEXT: ;;#ASMSTART10838; GFX90A-NEXT: ; def s[4:5]10839; GFX90A-NEXT: ;;#ASMEND10840; GFX90A-NEXT: ;;#ASMSTART10841; GFX90A-NEXT: ; def s[6:7]10842; GFX90A-NEXT: ;;#ASMEND10843; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s610844; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510845; GFX90A-NEXT: ;;#ASMSTART10846; GFX90A-NEXT: ; use s[8:9]10847; GFX90A-NEXT: ;;#ASMEND10848; GFX90A-NEXT: s_setpc_b64 s[30:31]10849;10850; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_2_2:10851; GFX942: ; %bb.0:10852; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10853; GFX942-NEXT: ;;#ASMSTART10854; GFX942-NEXT: ; def s[0:1]10855; GFX942-NEXT: ;;#ASMEND10856; GFX942-NEXT: ;;#ASMSTART10857; GFX942-NEXT: ; def s[2:3]10858; GFX942-NEXT: ;;#ASMEND10859; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s210860; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110861; GFX942-NEXT: ;;#ASMSTART10862; GFX942-NEXT: ; use s[8:9]10863; GFX942-NEXT: ;;#ASMEND10864; GFX942-NEXT: s_setpc_b64 s[30:31]10865 %vec0 = call <4 x i16> asm "; def $0", "=s"()10866 %vec1 = call <4 x i16> asm "; def $0", "=s"()10867 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10868 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10869 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 2, i32 2>10870 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10871 ret void10872}10873 10874define void @s_shuffle_v4i16_v3i16__5_4_2_2() {10875; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_2_2:10876; GFX900: ; %bb.0:10877; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10878; GFX900-NEXT: ;;#ASMSTART10879; GFX900-NEXT: ; def s[4:5]10880; GFX900-NEXT: ;;#ASMEND10881; GFX900-NEXT: ;;#ASMSTART10882; GFX900-NEXT: ; def s[6:7]10883; GFX900-NEXT: ;;#ASMEND10884; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s610885; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510886; GFX900-NEXT: ;;#ASMSTART10887; GFX900-NEXT: ; use s[8:9]10888; GFX900-NEXT: ;;#ASMEND10889; GFX900-NEXT: s_setpc_b64 s[30:31]10890;10891; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_2_2:10892; GFX90A: ; %bb.0:10893; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10894; GFX90A-NEXT: ;;#ASMSTART10895; GFX90A-NEXT: ; def s[4:5]10896; GFX90A-NEXT: ;;#ASMEND10897; GFX90A-NEXT: ;;#ASMSTART10898; GFX90A-NEXT: ; def s[6:7]10899; GFX90A-NEXT: ;;#ASMEND10900; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s610901; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510902; GFX90A-NEXT: ;;#ASMSTART10903; GFX90A-NEXT: ; use s[8:9]10904; GFX90A-NEXT: ;;#ASMEND10905; GFX90A-NEXT: s_setpc_b64 s[30:31]10906;10907; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_2_2:10908; GFX942: ; %bb.0:10909; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10910; GFX942-NEXT: ;;#ASMSTART10911; GFX942-NEXT: ; def s[0:1]10912; GFX942-NEXT: ;;#ASMEND10913; GFX942-NEXT: ;;#ASMSTART10914; GFX942-NEXT: ; def s[2:3]10915; GFX942-NEXT: ;;#ASMEND10916; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s210917; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110918; GFX942-NEXT: ;;#ASMSTART10919; GFX942-NEXT: ; use s[8:9]10920; GFX942-NEXT: ;;#ASMEND10921; GFX942-NEXT: s_setpc_b64 s[30:31]10922 %vec0 = call <4 x i16> asm "; def $0", "=s"()10923 %vec1 = call <4 x i16> asm "; def $0", "=s"()10924 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10925 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10926 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 2, i32 2>10927 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10928 ret void10929}10930 10931define void @s_shuffle_v4i16_v3i16__5_5_2_2() {10932; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_2:10933; GFX900: ; %bb.0:10934; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10935; GFX900-NEXT: ;;#ASMSTART10936; GFX900-NEXT: ; def s[4:5]10937; GFX900-NEXT: ;;#ASMEND10938; GFX900-NEXT: ;;#ASMSTART10939; GFX900-NEXT: ; def s[6:7]10940; GFX900-NEXT: ;;#ASMEND10941; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510942; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710943; GFX900-NEXT: ;;#ASMSTART10944; GFX900-NEXT: ; use s[8:9]10945; GFX900-NEXT: ;;#ASMEND10946; GFX900-NEXT: s_setpc_b64 s[30:31]10947;10948; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_2:10949; GFX90A: ; %bb.0:10950; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10951; GFX90A-NEXT: ;;#ASMSTART10952; GFX90A-NEXT: ; def s[4:5]10953; GFX90A-NEXT: ;;#ASMEND10954; GFX90A-NEXT: ;;#ASMSTART10955; GFX90A-NEXT: ; def s[6:7]10956; GFX90A-NEXT: ;;#ASMEND10957; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510958; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710959; GFX90A-NEXT: ;;#ASMSTART10960; GFX90A-NEXT: ; use s[8:9]10961; GFX90A-NEXT: ;;#ASMEND10962; GFX90A-NEXT: s_setpc_b64 s[30:31]10963;10964; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_2:10965; GFX942: ; %bb.0:10966; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10967; GFX942-NEXT: ;;#ASMSTART10968; GFX942-NEXT: ; def s[0:1]10969; GFX942-NEXT: ;;#ASMEND10970; GFX942-NEXT: ;;#ASMSTART10971; GFX942-NEXT: ; def s[2:3]10972; GFX942-NEXT: ;;#ASMEND10973; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110974; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310975; GFX942-NEXT: ;;#ASMSTART10976; GFX942-NEXT: ; use s[8:9]10977; GFX942-NEXT: ;;#ASMEND10978; GFX942-NEXT: s_setpc_b64 s[30:31]10979 %vec0 = call <4 x i16> asm "; def $0", "=s"()10980 %vec1 = call <4 x i16> asm "; def $0", "=s"()10981 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10982 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>10983 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 2>10984 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)10985 ret void10986}10987 10988define void @s_shuffle_v4i16_v3i16__5_5_u_2() {10989; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_2:10990; GFX900: ; %bb.0:10991; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10992; GFX900-NEXT: ;;#ASMSTART10993; GFX900-NEXT: ; def s[4:5]10994; GFX900-NEXT: ;;#ASMEND10995; GFX900-NEXT: ;;#ASMSTART10996; GFX900-NEXT: ; def s[6:7]10997; GFX900-NEXT: ;;#ASMEND10998; GFX900-NEXT: s_lshl_b32 s9, s5, 1610999; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711000; GFX900-NEXT: ;;#ASMSTART11001; GFX900-NEXT: ; use s[8:9]11002; GFX900-NEXT: ;;#ASMEND11003; GFX900-NEXT: s_setpc_b64 s[30:31]11004;11005; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_2:11006; GFX90A: ; %bb.0:11007; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11008; GFX90A-NEXT: ;;#ASMSTART11009; GFX90A-NEXT: ; def s[4:5]11010; GFX90A-NEXT: ;;#ASMEND11011; GFX90A-NEXT: ;;#ASMSTART11012; GFX90A-NEXT: ; def s[6:7]11013; GFX90A-NEXT: ;;#ASMEND11014; GFX90A-NEXT: s_lshl_b32 s9, s5, 1611015; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711016; GFX90A-NEXT: ;;#ASMSTART11017; GFX90A-NEXT: ; use s[8:9]11018; GFX90A-NEXT: ;;#ASMEND11019; GFX90A-NEXT: s_setpc_b64 s[30:31]11020;11021; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_2:11022; GFX942: ; %bb.0:11023; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11024; GFX942-NEXT: ;;#ASMSTART11025; GFX942-NEXT: ; def s[0:1]11026; GFX942-NEXT: ;;#ASMEND11027; GFX942-NEXT: ;;#ASMSTART11028; GFX942-NEXT: ; def s[2:3]11029; GFX942-NEXT: ;;#ASMEND11030; GFX942-NEXT: s_lshl_b32 s9, s1, 1611031; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311032; GFX942-NEXT: ;;#ASMSTART11033; GFX942-NEXT: ; use s[8:9]11034; GFX942-NEXT: ;;#ASMEND11035; GFX942-NEXT: s_setpc_b64 s[30:31]11036 %vec0 = call <4 x i16> asm "; def $0", "=s"()11037 %vec1 = call <4 x i16> asm "; def $0", "=s"()11038 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11039 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11040 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>11041 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11042 ret void11043}11044 11045define void @s_shuffle_v4i16_v3i16__5_5_0_2() {11046; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_2:11047; GFX900: ; %bb.0:11048; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11049; GFX900-NEXT: ;;#ASMSTART11050; GFX900-NEXT: ; def s[4:5]11051; GFX900-NEXT: ;;#ASMEND11052; GFX900-NEXT: ;;#ASMSTART11053; GFX900-NEXT: ; def s[6:7]11054; GFX900-NEXT: ;;#ASMEND11055; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s511056; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711057; GFX900-NEXT: ;;#ASMSTART11058; GFX900-NEXT: ; use s[8:9]11059; GFX900-NEXT: ;;#ASMEND11060; GFX900-NEXT: s_setpc_b64 s[30:31]11061;11062; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_2:11063; GFX90A: ; %bb.0:11064; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11065; GFX90A-NEXT: ;;#ASMSTART11066; GFX90A-NEXT: ; def s[4:5]11067; GFX90A-NEXT: ;;#ASMEND11068; GFX90A-NEXT: ;;#ASMSTART11069; GFX90A-NEXT: ; def s[6:7]11070; GFX90A-NEXT: ;;#ASMEND11071; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s511072; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711073; GFX90A-NEXT: ;;#ASMSTART11074; GFX90A-NEXT: ; use s[8:9]11075; GFX90A-NEXT: ;;#ASMEND11076; GFX90A-NEXT: s_setpc_b64 s[30:31]11077;11078; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_2:11079; GFX942: ; %bb.0:11080; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11081; GFX942-NEXT: ;;#ASMSTART11082; GFX942-NEXT: ; def s[0:1]11083; GFX942-NEXT: ;;#ASMEND11084; GFX942-NEXT: ;;#ASMSTART11085; GFX942-NEXT: ; def s[2:3]11086; GFX942-NEXT: ;;#ASMEND11087; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s111088; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311089; GFX942-NEXT: ;;#ASMSTART11090; GFX942-NEXT: ; use s[8:9]11091; GFX942-NEXT: ;;#ASMEND11092; GFX942-NEXT: s_setpc_b64 s[30:31]11093 %vec0 = call <4 x i16> asm "; def $0", "=s"()11094 %vec1 = call <4 x i16> asm "; def $0", "=s"()11095 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11096 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11097 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 2>11098 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11099 ret void11100}11101 11102define void @s_shuffle_v4i16_v3i16__5_5_1_2() {11103; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_2:11104; GFX900: ; %bb.0:11105; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11106; GFX900-NEXT: ;;#ASMSTART11107; GFX900-NEXT: ; def s[4:5]11108; GFX900-NEXT: ;;#ASMEND11109; GFX900-NEXT: s_lshr_b32 s4, s4, 1611110; GFX900-NEXT: ;;#ASMSTART11111; GFX900-NEXT: ; def s[6:7]11112; GFX900-NEXT: ;;#ASMEND11113; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s511114; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711115; GFX900-NEXT: ;;#ASMSTART11116; GFX900-NEXT: ; use s[8:9]11117; GFX900-NEXT: ;;#ASMEND11118; GFX900-NEXT: s_setpc_b64 s[30:31]11119;11120; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_2:11121; GFX90A: ; %bb.0:11122; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11123; GFX90A-NEXT: ;;#ASMSTART11124; GFX90A-NEXT: ; def s[4:5]11125; GFX90A-NEXT: ;;#ASMEND11126; GFX90A-NEXT: s_lshr_b32 s4, s4, 1611127; GFX90A-NEXT: ;;#ASMSTART11128; GFX90A-NEXT: ; def s[6:7]11129; GFX90A-NEXT: ;;#ASMEND11130; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s511131; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711132; GFX90A-NEXT: ;;#ASMSTART11133; GFX90A-NEXT: ; use s[8:9]11134; GFX90A-NEXT: ;;#ASMEND11135; GFX90A-NEXT: s_setpc_b64 s[30:31]11136;11137; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_2:11138; GFX942: ; %bb.0:11139; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11140; GFX942-NEXT: ;;#ASMSTART11141; GFX942-NEXT: ; def s[0:1]11142; GFX942-NEXT: ;;#ASMEND11143; GFX942-NEXT: s_lshr_b32 s0, s0, 1611144; GFX942-NEXT: ;;#ASMSTART11145; GFX942-NEXT: ; def s[2:3]11146; GFX942-NEXT: ;;#ASMEND11147; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s111148; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311149; GFX942-NEXT: ;;#ASMSTART11150; GFX942-NEXT: ; use s[8:9]11151; GFX942-NEXT: ;;#ASMEND11152; GFX942-NEXT: s_setpc_b64 s[30:31]11153 %vec0 = call <4 x i16> asm "; def $0", "=s"()11154 %vec1 = call <4 x i16> asm "; def $0", "=s"()11155 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11156 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11157 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 2>11158 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11159 ret void11160}11161 11162define void @s_shuffle_v4i16_v3i16__5_5_3_2() {11163; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_2:11164; GFX900: ; %bb.0:11165; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11166; GFX900-NEXT: ;;#ASMSTART11167; GFX900-NEXT: ; def s[4:5]11168; GFX900-NEXT: ;;#ASMEND11169; GFX900-NEXT: ;;#ASMSTART11170; GFX900-NEXT: ; def s[6:7]11171; GFX900-NEXT: ;;#ASMEND11172; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s511173; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711174; GFX900-NEXT: ;;#ASMSTART11175; GFX900-NEXT: ; use s[8:9]11176; GFX900-NEXT: ;;#ASMEND11177; GFX900-NEXT: s_setpc_b64 s[30:31]11178;11179; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_2:11180; GFX90A: ; %bb.0:11181; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11182; GFX90A-NEXT: ;;#ASMSTART11183; GFX90A-NEXT: ; def s[4:5]11184; GFX90A-NEXT: ;;#ASMEND11185; GFX90A-NEXT: ;;#ASMSTART11186; GFX90A-NEXT: ; def s[6:7]11187; GFX90A-NEXT: ;;#ASMEND11188; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s511189; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711190; GFX90A-NEXT: ;;#ASMSTART11191; GFX90A-NEXT: ; use s[8:9]11192; GFX90A-NEXT: ;;#ASMEND11193; GFX90A-NEXT: s_setpc_b64 s[30:31]11194;11195; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_2:11196; GFX942: ; %bb.0:11197; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11198; GFX942-NEXT: ;;#ASMSTART11199; GFX942-NEXT: ; def s[0:1]11200; GFX942-NEXT: ;;#ASMEND11201; GFX942-NEXT: ;;#ASMSTART11202; GFX942-NEXT: ; def s[2:3]11203; GFX942-NEXT: ;;#ASMEND11204; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s111205; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311206; GFX942-NEXT: ;;#ASMSTART11207; GFX942-NEXT: ; use s[8:9]11208; GFX942-NEXT: ;;#ASMEND11209; GFX942-NEXT: s_setpc_b64 s[30:31]11210 %vec0 = call <4 x i16> asm "; def $0", "=s"()11211 %vec1 = call <4 x i16> asm "; def $0", "=s"()11212 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11213 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11214 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 2>11215 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11216 ret void11217}11218 11219define void @s_shuffle_v4i16_v3i16__5_5_4_2() {11220; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_2:11221; GFX900: ; %bb.0:11222; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11223; GFX900-NEXT: ;;#ASMSTART11224; GFX900-NEXT: ; def s[4:5]11225; GFX900-NEXT: ;;#ASMEND11226; GFX900-NEXT: ;;#ASMSTART11227; GFX900-NEXT: ; def s[6:7]11228; GFX900-NEXT: ;;#ASMEND11229; GFX900-NEXT: s_lshr_b32 s4, s6, 1611230; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s511231; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711232; GFX900-NEXT: ;;#ASMSTART11233; GFX900-NEXT: ; use s[8:9]11234; GFX900-NEXT: ;;#ASMEND11235; GFX900-NEXT: s_setpc_b64 s[30:31]11236;11237; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_2:11238; GFX90A: ; %bb.0:11239; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11240; GFX90A-NEXT: ;;#ASMSTART11241; GFX90A-NEXT: ; def s[4:5]11242; GFX90A-NEXT: ;;#ASMEND11243; GFX90A-NEXT: ;;#ASMSTART11244; GFX90A-NEXT: ; def s[6:7]11245; GFX90A-NEXT: ;;#ASMEND11246; GFX90A-NEXT: s_lshr_b32 s4, s6, 1611247; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s511248; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711249; GFX90A-NEXT: ;;#ASMSTART11250; GFX90A-NEXT: ; use s[8:9]11251; GFX90A-NEXT: ;;#ASMEND11252; GFX90A-NEXT: s_setpc_b64 s[30:31]11253;11254; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_2:11255; GFX942: ; %bb.0:11256; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11257; GFX942-NEXT: ;;#ASMSTART11258; GFX942-NEXT: ; def s[0:1]11259; GFX942-NEXT: ;;#ASMEND11260; GFX942-NEXT: ;;#ASMSTART11261; GFX942-NEXT: ; def s[2:3]11262; GFX942-NEXT: ;;#ASMEND11263; GFX942-NEXT: s_lshr_b32 s0, s2, 1611264; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s111265; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311266; GFX942-NEXT: ;;#ASMSTART11267; GFX942-NEXT: ; use s[8:9]11268; GFX942-NEXT: ;;#ASMEND11269; GFX942-NEXT: s_setpc_b64 s[30:31]11270 %vec0 = call <4 x i16> asm "; def $0", "=s"()11271 %vec1 = call <4 x i16> asm "; def $0", "=s"()11272 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11273 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11274 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 2>11275 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11276 ret void11277}11278 11279define void @s_shuffle_v4i16_v3i16__u_3_3_3() {11280; GFX9-LABEL: s_shuffle_v4i16_v3i16__u_3_3_3:11281; GFX9: ; %bb.0:11282; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11283; GFX9-NEXT: ;;#ASMSTART11284; GFX9-NEXT: ; use s[8:9]11285; GFX9-NEXT: ;;#ASMEND11286; GFX9-NEXT: s_setpc_b64 s[30:31]11287 %vec0 = call <4 x i16> asm "; def $0", "=s"()11288 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11289 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>11290 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11291 ret void11292}11293 11294define void @s_shuffle_v4i16_v3i16__0_3_3_3() {11295; GFX900-LABEL: s_shuffle_v4i16_v3i16__0_3_3_3:11296; GFX900: ; %bb.0:11297; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11298; GFX900-NEXT: ;;#ASMSTART11299; GFX900-NEXT: ; def s[8:9]11300; GFX900-NEXT: ;;#ASMEND11301; GFX900-NEXT: ;;#ASMSTART11302; GFX900-NEXT: ; use s[8:9]11303; GFX900-NEXT: ;;#ASMEND11304; GFX900-NEXT: s_setpc_b64 s[30:31]11305;11306; GFX90A-LABEL: s_shuffle_v4i16_v3i16__0_3_3_3:11307; GFX90A: ; %bb.0:11308; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11309; GFX90A-NEXT: ;;#ASMSTART11310; GFX90A-NEXT: ; def s[8:9]11311; GFX90A-NEXT: ;;#ASMEND11312; GFX90A-NEXT: ;;#ASMSTART11313; GFX90A-NEXT: ; use s[8:9]11314; GFX90A-NEXT: ;;#ASMEND11315; GFX90A-NEXT: s_setpc_b64 s[30:31]11316;11317; GFX942-LABEL: s_shuffle_v4i16_v3i16__0_3_3_3:11318; GFX942: ; %bb.0:11319; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11320; GFX942-NEXT: ;;#ASMSTART11321; GFX942-NEXT: ; def s[8:9]11322; GFX942-NEXT: ;;#ASMEND11323; GFX942-NEXT: s_nop 011324; GFX942-NEXT: ;;#ASMSTART11325; GFX942-NEXT: ; use s[8:9]11326; GFX942-NEXT: ;;#ASMEND11327; GFX942-NEXT: s_setpc_b64 s[30:31]11328 %vec0 = call <4 x i16> asm "; def $0", "=s"()11329 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11330 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>11331 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11332 ret void11333}11334 11335define void @s_shuffle_v4i16_v3i16__1_3_3_3() {11336; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_3_3_3:11337; GFX900: ; %bb.0:11338; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11339; GFX900-NEXT: ;;#ASMSTART11340; GFX900-NEXT: ; def s[4:5]11341; GFX900-NEXT: ;;#ASMEND11342; GFX900-NEXT: s_lshr_b32 s8, s4, 1611343; GFX900-NEXT: ;;#ASMSTART11344; GFX900-NEXT: ; use s[8:9]11345; GFX900-NEXT: ;;#ASMEND11346; GFX900-NEXT: s_setpc_b64 s[30:31]11347;11348; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_3_3_3:11349; GFX90A: ; %bb.0:11350; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11351; GFX90A-NEXT: ;;#ASMSTART11352; GFX90A-NEXT: ; def s[4:5]11353; GFX90A-NEXT: ;;#ASMEND11354; GFX90A-NEXT: s_lshr_b32 s8, s4, 1611355; GFX90A-NEXT: ;;#ASMSTART11356; GFX90A-NEXT: ; use s[8:9]11357; GFX90A-NEXT: ;;#ASMEND11358; GFX90A-NEXT: s_setpc_b64 s[30:31]11359;11360; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_3_3_3:11361; GFX942: ; %bb.0:11362; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11363; GFX942-NEXT: ;;#ASMSTART11364; GFX942-NEXT: ; def s[0:1]11365; GFX942-NEXT: ;;#ASMEND11366; GFX942-NEXT: s_lshr_b32 s8, s0, 1611367; GFX942-NEXT: ;;#ASMSTART11368; GFX942-NEXT: ; use s[8:9]11369; GFX942-NEXT: ;;#ASMEND11370; GFX942-NEXT: s_setpc_b64 s[30:31]11371 %vec0 = call <4 x i16> asm "; def $0", "=s"()11372 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11373 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>11374 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11375 ret void11376}11377 11378define void @s_shuffle_v4i16_v3i16__2_3_3_3() {11379; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_3_3_3:11380; GFX900: ; %bb.0:11381; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11382; GFX900-NEXT: ;;#ASMSTART11383; GFX900-NEXT: ; def s[4:5]11384; GFX900-NEXT: ;;#ASMEND11385; GFX900-NEXT: s_mov_b32 s8, s511386; GFX900-NEXT: ;;#ASMSTART11387; GFX900-NEXT: ; use s[8:9]11388; GFX900-NEXT: ;;#ASMEND11389; GFX900-NEXT: s_setpc_b64 s[30:31]11390;11391; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_3_3_3:11392; GFX90A: ; %bb.0:11393; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11394; GFX90A-NEXT: ;;#ASMSTART11395; GFX90A-NEXT: ; def s[4:5]11396; GFX90A-NEXT: ;;#ASMEND11397; GFX90A-NEXT: s_mov_b32 s8, s511398; GFX90A-NEXT: ;;#ASMSTART11399; GFX90A-NEXT: ; use s[8:9]11400; GFX90A-NEXT: ;;#ASMEND11401; GFX90A-NEXT: s_setpc_b64 s[30:31]11402;11403; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_3_3_3:11404; GFX942: ; %bb.0:11405; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11406; GFX942-NEXT: ;;#ASMSTART11407; GFX942-NEXT: ; def s[0:1]11408; GFX942-NEXT: ;;#ASMEND11409; GFX942-NEXT: s_mov_b32 s8, s111410; GFX942-NEXT: ;;#ASMSTART11411; GFX942-NEXT: ; use s[8:9]11412; GFX942-NEXT: ;;#ASMEND11413; GFX942-NEXT: s_setpc_b64 s[30:31]11414 %vec0 = call <4 x i16> asm "; def $0", "=s"()11415 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11416 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>11417 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11418 ret void11419}11420 11421define void @s_shuffle_v4i16_v3i16__3_3_3_3() {11422; GFX9-LABEL: s_shuffle_v4i16_v3i16__3_3_3_3:11423; GFX9: ; %bb.0:11424; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11425; GFX9-NEXT: ;;#ASMSTART11426; GFX9-NEXT: ; use s[8:9]11427; GFX9-NEXT: ;;#ASMEND11428; GFX9-NEXT: s_setpc_b64 s[30:31]11429 %vec0 = call <4 x i16> asm "; def $0", "=s"()11430 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11431 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>11432 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11433 ret void11434}11435 11436define void @s_shuffle_v4i16_v3i16__4_3_3_3() {11437; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_3_3_3:11438; GFX900: ; %bb.0:11439; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11440; GFX900-NEXT: ;;#ASMSTART11441; GFX900-NEXT: ; def s[4:5]11442; GFX900-NEXT: ;;#ASMEND11443; GFX900-NEXT: s_lshr_b32 s5, s4, 1611444; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s411445; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411446; GFX900-NEXT: ;;#ASMSTART11447; GFX900-NEXT: ; use s[8:9]11448; GFX900-NEXT: ;;#ASMEND11449; GFX900-NEXT: s_setpc_b64 s[30:31]11450;11451; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_3_3_3:11452; GFX90A: ; %bb.0:11453; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11454; GFX90A-NEXT: ;;#ASMSTART11455; GFX90A-NEXT: ; def s[4:5]11456; GFX90A-NEXT: ;;#ASMEND11457; GFX90A-NEXT: s_lshr_b32 s5, s4, 1611458; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s411459; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411460; GFX90A-NEXT: ;;#ASMSTART11461; GFX90A-NEXT: ; use s[8:9]11462; GFX90A-NEXT: ;;#ASMEND11463; GFX90A-NEXT: s_setpc_b64 s[30:31]11464;11465; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_3_3_3:11466; GFX942: ; %bb.0:11467; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11468; GFX942-NEXT: ;;#ASMSTART11469; GFX942-NEXT: ; def s[0:1]11470; GFX942-NEXT: ;;#ASMEND11471; GFX942-NEXT: s_lshr_b32 s1, s0, 1611472; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s011473; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011474; GFX942-NEXT: ;;#ASMSTART11475; GFX942-NEXT: ; use s[8:9]11476; GFX942-NEXT: ;;#ASMEND11477; GFX942-NEXT: s_setpc_b64 s[30:31]11478 %vec0 = call <4 x i16> asm "; def $0", "=s"()11479 %vec1 = call <4 x i16> asm "; def $0", "=s"()11480 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11481 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11482 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 3, i32 3, i32 3>11483 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11484 ret void11485}11486 11487define void @s_shuffle_v4i16_v3i16__5_3_3_3() {11488; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_3_3:11489; GFX900: ; %bb.0:11490; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11491; GFX900-NEXT: ;;#ASMSTART11492; GFX900-NEXT: ; def s[4:5]11493; GFX900-NEXT: ;;#ASMEND11494; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s411495; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411496; GFX900-NEXT: ;;#ASMSTART11497; GFX900-NEXT: ; use s[8:9]11498; GFX900-NEXT: ;;#ASMEND11499; GFX900-NEXT: s_setpc_b64 s[30:31]11500;11501; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_3_3:11502; GFX90A: ; %bb.0:11503; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11504; GFX90A-NEXT: ;;#ASMSTART11505; GFX90A-NEXT: ; def s[4:5]11506; GFX90A-NEXT: ;;#ASMEND11507; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s411508; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411509; GFX90A-NEXT: ;;#ASMSTART11510; GFX90A-NEXT: ; use s[8:9]11511; GFX90A-NEXT: ;;#ASMEND11512; GFX90A-NEXT: s_setpc_b64 s[30:31]11513;11514; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_3_3:11515; GFX942: ; %bb.0:11516; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11517; GFX942-NEXT: ;;#ASMSTART11518; GFX942-NEXT: ; def s[0:1]11519; GFX942-NEXT: ;;#ASMEND11520; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s011521; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011522; GFX942-NEXT: ;;#ASMSTART11523; GFX942-NEXT: ; use s[8:9]11524; GFX942-NEXT: ;;#ASMEND11525; GFX942-NEXT: s_setpc_b64 s[30:31]11526 %vec0 = call <4 x i16> asm "; def $0", "=s"()11527 %vec1 = call <4 x i16> asm "; def $0", "=s"()11528 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11529 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11530 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 3, i32 3>11531 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11532 ret void11533}11534 11535define void @s_shuffle_v4i16_v3i16__5_u_3_3() {11536; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_3_3:11537; GFX900: ; %bb.0:11538; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11539; GFX900-NEXT: ;;#ASMSTART11540; GFX900-NEXT: ; def s[4:5]11541; GFX900-NEXT: ;;#ASMEND11542; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411543; GFX900-NEXT: s_mov_b32 s8, s511544; GFX900-NEXT: ;;#ASMSTART11545; GFX900-NEXT: ; use s[8:9]11546; GFX900-NEXT: ;;#ASMEND11547; GFX900-NEXT: s_setpc_b64 s[30:31]11548;11549; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_3_3:11550; GFX90A: ; %bb.0:11551; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11552; GFX90A-NEXT: ;;#ASMSTART11553; GFX90A-NEXT: ; def s[4:5]11554; GFX90A-NEXT: ;;#ASMEND11555; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411556; GFX90A-NEXT: s_mov_b32 s8, s511557; GFX90A-NEXT: ;;#ASMSTART11558; GFX90A-NEXT: ; use s[8:9]11559; GFX90A-NEXT: ;;#ASMEND11560; GFX90A-NEXT: s_setpc_b64 s[30:31]11561;11562; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_3_3:11563; GFX942: ; %bb.0:11564; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11565; GFX942-NEXT: ;;#ASMSTART11566; GFX942-NEXT: ; def s[0:1]11567; GFX942-NEXT: ;;#ASMEND11568; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011569; GFX942-NEXT: s_mov_b32 s8, s111570; GFX942-NEXT: ;;#ASMSTART11571; GFX942-NEXT: ; use s[8:9]11572; GFX942-NEXT: ;;#ASMEND11573; GFX942-NEXT: s_setpc_b64 s[30:31]11574 %vec0 = call <4 x i16> asm "; def $0", "=s"()11575 %vec1 = call <4 x i16> asm "; def $0", "=s"()11576 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11577 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11578 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>11579 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11580 ret void11581}11582 11583define void @s_shuffle_v4i16_v3i16__5_0_3_3() {11584; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_3_3:11585; GFX900: ; %bb.0:11586; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11587; GFX900-NEXT: ;;#ASMSTART11588; GFX900-NEXT: ; def s[4:5]11589; GFX900-NEXT: ;;#ASMEND11590; GFX900-NEXT: ;;#ASMSTART11591; GFX900-NEXT: ; def s[6:7]11592; GFX900-NEXT: ;;#ASMEND11593; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s411594; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s611595; GFX900-NEXT: ;;#ASMSTART11596; GFX900-NEXT: ; use s[8:9]11597; GFX900-NEXT: ;;#ASMEND11598; GFX900-NEXT: s_setpc_b64 s[30:31]11599;11600; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_3_3:11601; GFX90A: ; %bb.0:11602; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11603; GFX90A-NEXT: ;;#ASMSTART11604; GFX90A-NEXT: ; def s[4:5]11605; GFX90A-NEXT: ;;#ASMEND11606; GFX90A-NEXT: ;;#ASMSTART11607; GFX90A-NEXT: ; def s[6:7]11608; GFX90A-NEXT: ;;#ASMEND11609; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s411610; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s611611; GFX90A-NEXT: ;;#ASMSTART11612; GFX90A-NEXT: ; use s[8:9]11613; GFX90A-NEXT: ;;#ASMEND11614; GFX90A-NEXT: s_setpc_b64 s[30:31]11615;11616; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_3_3:11617; GFX942: ; %bb.0:11618; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11619; GFX942-NEXT: ;;#ASMSTART11620; GFX942-NEXT: ; def s[0:1]11621; GFX942-NEXT: ;;#ASMEND11622; GFX942-NEXT: ;;#ASMSTART11623; GFX942-NEXT: ; def s[2:3]11624; GFX942-NEXT: ;;#ASMEND11625; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s011626; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s211627; GFX942-NEXT: ;;#ASMSTART11628; GFX942-NEXT: ; use s[8:9]11629; GFX942-NEXT: ;;#ASMEND11630; GFX942-NEXT: s_setpc_b64 s[30:31]11631 %vec0 = call <4 x i16> asm "; def $0", "=s"()11632 %vec1 = call <4 x i16> asm "; def $0", "=s"()11633 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11634 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11635 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 3, i32 3>11636 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11637 ret void11638}11639 11640define void @s_shuffle_v4i16_v3i16__5_1_3_3() {11641; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_3_3:11642; GFX900: ; %bb.0:11643; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11644; GFX900-NEXT: ;;#ASMSTART11645; GFX900-NEXT: ; def s[4:5]11646; GFX900-NEXT: ;;#ASMEND11647; GFX900-NEXT: ;;#ASMSTART11648; GFX900-NEXT: ; def s[6:7]11649; GFX900-NEXT: ;;#ASMEND11650; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s411651; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s611652; GFX900-NEXT: ;;#ASMSTART11653; GFX900-NEXT: ; use s[8:9]11654; GFX900-NEXT: ;;#ASMEND11655; GFX900-NEXT: s_setpc_b64 s[30:31]11656;11657; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_3_3:11658; GFX90A: ; %bb.0:11659; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11660; GFX90A-NEXT: ;;#ASMSTART11661; GFX90A-NEXT: ; def s[4:5]11662; GFX90A-NEXT: ;;#ASMEND11663; GFX90A-NEXT: ;;#ASMSTART11664; GFX90A-NEXT: ; def s[6:7]11665; GFX90A-NEXT: ;;#ASMEND11666; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s411667; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s611668; GFX90A-NEXT: ;;#ASMSTART11669; GFX90A-NEXT: ; use s[8:9]11670; GFX90A-NEXT: ;;#ASMEND11671; GFX90A-NEXT: s_setpc_b64 s[30:31]11672;11673; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_3_3:11674; GFX942: ; %bb.0:11675; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11676; GFX942-NEXT: ;;#ASMSTART11677; GFX942-NEXT: ; def s[0:1]11678; GFX942-NEXT: ;;#ASMEND11679; GFX942-NEXT: ;;#ASMSTART11680; GFX942-NEXT: ; def s[2:3]11681; GFX942-NEXT: ;;#ASMEND11682; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s011683; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s211684; GFX942-NEXT: ;;#ASMSTART11685; GFX942-NEXT: ; use s[8:9]11686; GFX942-NEXT: ;;#ASMEND11687; GFX942-NEXT: s_setpc_b64 s[30:31]11688 %vec0 = call <4 x i16> asm "; def $0", "=s"()11689 %vec1 = call <4 x i16> asm "; def $0", "=s"()11690 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11691 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11692 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 3, i32 3>11693 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11694 ret void11695}11696 11697define void @s_shuffle_v4i16_v3i16__5_2_3_3() {11698; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_3_3:11699; GFX900: ; %bb.0:11700; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11701; GFX900-NEXT: ;;#ASMSTART11702; GFX900-NEXT: ; def s[4:5]11703; GFX900-NEXT: ;;#ASMEND11704; GFX900-NEXT: ;;#ASMSTART11705; GFX900-NEXT: ; def s[6:7]11706; GFX900-NEXT: ;;#ASMEND11707; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s511708; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s611709; GFX900-NEXT: ;;#ASMSTART11710; GFX900-NEXT: ; use s[8:9]11711; GFX900-NEXT: ;;#ASMEND11712; GFX900-NEXT: s_setpc_b64 s[30:31]11713;11714; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_3_3:11715; GFX90A: ; %bb.0:11716; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11717; GFX90A-NEXT: ;;#ASMSTART11718; GFX90A-NEXT: ; def s[4:5]11719; GFX90A-NEXT: ;;#ASMEND11720; GFX90A-NEXT: ;;#ASMSTART11721; GFX90A-NEXT: ; def s[6:7]11722; GFX90A-NEXT: ;;#ASMEND11723; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s511724; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s611725; GFX90A-NEXT: ;;#ASMSTART11726; GFX90A-NEXT: ; use s[8:9]11727; GFX90A-NEXT: ;;#ASMEND11728; GFX90A-NEXT: s_setpc_b64 s[30:31]11729;11730; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_3_3:11731; GFX942: ; %bb.0:11732; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11733; GFX942-NEXT: ;;#ASMSTART11734; GFX942-NEXT: ; def s[0:1]11735; GFX942-NEXT: ;;#ASMEND11736; GFX942-NEXT: ;;#ASMSTART11737; GFX942-NEXT: ; def s[2:3]11738; GFX942-NEXT: ;;#ASMEND11739; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s111740; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s211741; GFX942-NEXT: ;;#ASMSTART11742; GFX942-NEXT: ; use s[8:9]11743; GFX942-NEXT: ;;#ASMEND11744; GFX942-NEXT: s_setpc_b64 s[30:31]11745 %vec0 = call <4 x i16> asm "; def $0", "=s"()11746 %vec1 = call <4 x i16> asm "; def $0", "=s"()11747 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11748 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11749 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 3, i32 3>11750 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11751 ret void11752}11753 11754define void @s_shuffle_v4i16_v3i16__5_4_3_3() {11755; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_3_3:11756; GFX900: ; %bb.0:11757; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11758; GFX900-NEXT: ;;#ASMSTART11759; GFX900-NEXT: ; def s[4:5]11760; GFX900-NEXT: ;;#ASMEND11761; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s411762; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411763; GFX900-NEXT: ;;#ASMSTART11764; GFX900-NEXT: ; use s[8:9]11765; GFX900-NEXT: ;;#ASMEND11766; GFX900-NEXT: s_setpc_b64 s[30:31]11767;11768; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_3_3:11769; GFX90A: ; %bb.0:11770; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11771; GFX90A-NEXT: ;;#ASMSTART11772; GFX90A-NEXT: ; def s[4:5]11773; GFX90A-NEXT: ;;#ASMEND11774; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s411775; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411776; GFX90A-NEXT: ;;#ASMSTART11777; GFX90A-NEXT: ; use s[8:9]11778; GFX90A-NEXT: ;;#ASMEND11779; GFX90A-NEXT: s_setpc_b64 s[30:31]11780;11781; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_3_3:11782; GFX942: ; %bb.0:11783; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11784; GFX942-NEXT: ;;#ASMSTART11785; GFX942-NEXT: ; def s[0:1]11786; GFX942-NEXT: ;;#ASMEND11787; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s011788; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011789; GFX942-NEXT: ;;#ASMSTART11790; GFX942-NEXT: ; use s[8:9]11791; GFX942-NEXT: ;;#ASMEND11792; GFX942-NEXT: s_setpc_b64 s[30:31]11793 %vec0 = call <4 x i16> asm "; def $0", "=s"()11794 %vec1 = call <4 x i16> asm "; def $0", "=s"()11795 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11796 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11797 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 3, i32 3>11798 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11799 ret void11800}11801 11802define void @s_shuffle_v4i16_v3i16__5_5_3_3() {11803; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_3:11804; GFX900: ; %bb.0:11805; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11806; GFX900-NEXT: ;;#ASMSTART11807; GFX900-NEXT: ; def s[4:5]11808; GFX900-NEXT: ;;#ASMEND11809; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411810; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s511811; GFX900-NEXT: ;;#ASMSTART11812; GFX900-NEXT: ; use s[8:9]11813; GFX900-NEXT: ;;#ASMEND11814; GFX900-NEXT: s_setpc_b64 s[30:31]11815;11816; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_3:11817; GFX90A: ; %bb.0:11818; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11819; GFX90A-NEXT: ;;#ASMSTART11820; GFX90A-NEXT: ; def s[4:5]11821; GFX90A-NEXT: ;;#ASMEND11822; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411823; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s511824; GFX90A-NEXT: ;;#ASMSTART11825; GFX90A-NEXT: ; use s[8:9]11826; GFX90A-NEXT: ;;#ASMEND11827; GFX90A-NEXT: s_setpc_b64 s[30:31]11828;11829; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_3:11830; GFX942: ; %bb.0:11831; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11832; GFX942-NEXT: ;;#ASMSTART11833; GFX942-NEXT: ; def s[0:1]11834; GFX942-NEXT: ;;#ASMEND11835; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011836; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s111837; GFX942-NEXT: ;;#ASMSTART11838; GFX942-NEXT: ; use s[8:9]11839; GFX942-NEXT: ;;#ASMEND11840; GFX942-NEXT: s_setpc_b64 s[30:31]11841 %vec0 = call <4 x i16> asm "; def $0", "=s"()11842 %vec1 = call <4 x i16> asm "; def $0", "=s"()11843 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11844 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11845 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 3>11846 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11847 ret void11848}11849 11850define void @s_shuffle_v4i16_v3i16__5_5_u_3() {11851; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_3:11852; GFX900: ; %bb.0:11853; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11854; GFX900-NEXT: ;;#ASMSTART11855; GFX900-NEXT: ; def s[4:5]11856; GFX900-NEXT: ;;#ASMEND11857; GFX900-NEXT: s_lshl_b32 s9, s4, 1611858; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s511859; GFX900-NEXT: ;;#ASMSTART11860; GFX900-NEXT: ; use s[8:9]11861; GFX900-NEXT: ;;#ASMEND11862; GFX900-NEXT: s_setpc_b64 s[30:31]11863;11864; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_3:11865; GFX90A: ; %bb.0:11866; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11867; GFX90A-NEXT: ;;#ASMSTART11868; GFX90A-NEXT: ; def s[4:5]11869; GFX90A-NEXT: ;;#ASMEND11870; GFX90A-NEXT: s_lshl_b32 s9, s4, 1611871; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s511872; GFX90A-NEXT: ;;#ASMSTART11873; GFX90A-NEXT: ; use s[8:9]11874; GFX90A-NEXT: ;;#ASMEND11875; GFX90A-NEXT: s_setpc_b64 s[30:31]11876;11877; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_3:11878; GFX942: ; %bb.0:11879; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11880; GFX942-NEXT: ;;#ASMSTART11881; GFX942-NEXT: ; def s[0:1]11882; GFX942-NEXT: ;;#ASMEND11883; GFX942-NEXT: s_lshl_b32 s9, s0, 1611884; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s111885; GFX942-NEXT: ;;#ASMSTART11886; GFX942-NEXT: ; use s[8:9]11887; GFX942-NEXT: ;;#ASMEND11888; GFX942-NEXT: s_setpc_b64 s[30:31]11889 %vec0 = call <4 x i16> asm "; def $0", "=s"()11890 %vec1 = call <4 x i16> asm "; def $0", "=s"()11891 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11892 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11893 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>11894 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11895 ret void11896}11897 11898define void @s_shuffle_v4i16_v3i16__5_5_0_3() {11899; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_3:11900; GFX900: ; %bb.0:11901; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11902; GFX900-NEXT: ;;#ASMSTART11903; GFX900-NEXT: ; def s[4:5]11904; GFX900-NEXT: ;;#ASMEND11905; GFX900-NEXT: ;;#ASMSTART11906; GFX900-NEXT: ; def s[6:7]11907; GFX900-NEXT: ;;#ASMEND11908; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s611909; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711910; GFX900-NEXT: ;;#ASMSTART11911; GFX900-NEXT: ; use s[8:9]11912; GFX900-NEXT: ;;#ASMEND11913; GFX900-NEXT: s_setpc_b64 s[30:31]11914;11915; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_3:11916; GFX90A: ; %bb.0:11917; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11918; GFX90A-NEXT: ;;#ASMSTART11919; GFX90A-NEXT: ; def s[4:5]11920; GFX90A-NEXT: ;;#ASMEND11921; GFX90A-NEXT: ;;#ASMSTART11922; GFX90A-NEXT: ; def s[6:7]11923; GFX90A-NEXT: ;;#ASMEND11924; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s611925; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711926; GFX90A-NEXT: ;;#ASMSTART11927; GFX90A-NEXT: ; use s[8:9]11928; GFX90A-NEXT: ;;#ASMEND11929; GFX90A-NEXT: s_setpc_b64 s[30:31]11930;11931; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_3:11932; GFX942: ; %bb.0:11933; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11934; GFX942-NEXT: ;;#ASMSTART11935; GFX942-NEXT: ; def s[0:1]11936; GFX942-NEXT: ;;#ASMEND11937; GFX942-NEXT: ;;#ASMSTART11938; GFX942-NEXT: ; def s[2:3]11939; GFX942-NEXT: ;;#ASMEND11940; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s211941; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311942; GFX942-NEXT: ;;#ASMSTART11943; GFX942-NEXT: ; use s[8:9]11944; GFX942-NEXT: ;;#ASMEND11945; GFX942-NEXT: s_setpc_b64 s[30:31]11946 %vec0 = call <4 x i16> asm "; def $0", "=s"()11947 %vec1 = call <4 x i16> asm "; def $0", "=s"()11948 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11949 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>11950 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 3>11951 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)11952 ret void11953}11954 11955define void @s_shuffle_v4i16_v3i16__5_5_1_3() {11956; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_3:11957; GFX900: ; %bb.0:11958; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11959; GFX900-NEXT: ;;#ASMSTART11960; GFX900-NEXT: ; def s[4:5]11961; GFX900-NEXT: ;;#ASMEND11962; GFX900-NEXT: s_lshr_b32 s4, s4, 1611963; GFX900-NEXT: ;;#ASMSTART11964; GFX900-NEXT: ; def s[6:7]11965; GFX900-NEXT: ;;#ASMEND11966; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s611967; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711968; GFX900-NEXT: ;;#ASMSTART11969; GFX900-NEXT: ; use s[8:9]11970; GFX900-NEXT: ;;#ASMEND11971; GFX900-NEXT: s_setpc_b64 s[30:31]11972;11973; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_3:11974; GFX90A: ; %bb.0:11975; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11976; GFX90A-NEXT: ;;#ASMSTART11977; GFX90A-NEXT: ; def s[4:5]11978; GFX90A-NEXT: ;;#ASMEND11979; GFX90A-NEXT: s_lshr_b32 s4, s4, 1611980; GFX90A-NEXT: ;;#ASMSTART11981; GFX90A-NEXT: ; def s[6:7]11982; GFX90A-NEXT: ;;#ASMEND11983; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s611984; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711985; GFX90A-NEXT: ;;#ASMSTART11986; GFX90A-NEXT: ; use s[8:9]11987; GFX90A-NEXT: ;;#ASMEND11988; GFX90A-NEXT: s_setpc_b64 s[30:31]11989;11990; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_3:11991; GFX942: ; %bb.0:11992; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11993; GFX942-NEXT: ;;#ASMSTART11994; GFX942-NEXT: ; def s[0:1]11995; GFX942-NEXT: ;;#ASMEND11996; GFX942-NEXT: s_lshr_b32 s0, s0, 1611997; GFX942-NEXT: ;;#ASMSTART11998; GFX942-NEXT: ; def s[2:3]11999; GFX942-NEXT: ;;#ASMEND12000; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s212001; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312002; GFX942-NEXT: ;;#ASMSTART12003; GFX942-NEXT: ; use s[8:9]12004; GFX942-NEXT: ;;#ASMEND12005; GFX942-NEXT: s_setpc_b64 s[30:31]12006 %vec0 = call <4 x i16> asm "; def $0", "=s"()12007 %vec1 = call <4 x i16> asm "; def $0", "=s"()12008 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12009 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12010 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 3>12011 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12012 ret void12013}12014 12015define void @s_shuffle_v4i16_v3i16__5_5_2_3() {12016; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_3:12017; GFX900: ; %bb.0:12018; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12019; GFX900-NEXT: ;;#ASMSTART12020; GFX900-NEXT: ; def s[4:5]12021; GFX900-NEXT: ;;#ASMEND12022; GFX900-NEXT: ;;#ASMSTART12023; GFX900-NEXT: ; def s[6:7]12024; GFX900-NEXT: ;;#ASMEND12025; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s612026; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712027; GFX900-NEXT: ;;#ASMSTART12028; GFX900-NEXT: ; use s[8:9]12029; GFX900-NEXT: ;;#ASMEND12030; GFX900-NEXT: s_setpc_b64 s[30:31]12031;12032; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_3:12033; GFX90A: ; %bb.0:12034; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12035; GFX90A-NEXT: ;;#ASMSTART12036; GFX90A-NEXT: ; def s[4:5]12037; GFX90A-NEXT: ;;#ASMEND12038; GFX90A-NEXT: ;;#ASMSTART12039; GFX90A-NEXT: ; def s[6:7]12040; GFX90A-NEXT: ;;#ASMEND12041; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s612042; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712043; GFX90A-NEXT: ;;#ASMSTART12044; GFX90A-NEXT: ; use s[8:9]12045; GFX90A-NEXT: ;;#ASMEND12046; GFX90A-NEXT: s_setpc_b64 s[30:31]12047;12048; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_3:12049; GFX942: ; %bb.0:12050; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12051; GFX942-NEXT: ;;#ASMSTART12052; GFX942-NEXT: ; def s[0:1]12053; GFX942-NEXT: ;;#ASMEND12054; GFX942-NEXT: ;;#ASMSTART12055; GFX942-NEXT: ; def s[2:3]12056; GFX942-NEXT: ;;#ASMEND12057; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s212058; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312059; GFX942-NEXT: ;;#ASMSTART12060; GFX942-NEXT: ; use s[8:9]12061; GFX942-NEXT: ;;#ASMEND12062; GFX942-NEXT: s_setpc_b64 s[30:31]12063 %vec0 = call <4 x i16> asm "; def $0", "=s"()12064 %vec1 = call <4 x i16> asm "; def $0", "=s"()12065 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12066 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12067 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 3>12068 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12069 ret void12070}12071 12072define void @s_shuffle_v4i16_v3i16__5_5_4_3() {12073; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_3:12074; GFX900: ; %bb.0:12075; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12076; GFX900-NEXT: ;;#ASMSTART12077; GFX900-NEXT: ; def s[4:5]12078; GFX900-NEXT: ;;#ASMEND12079; GFX900-NEXT: s_lshr_b32 s6, s4, 1612080; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s412081; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512082; GFX900-NEXT: ;;#ASMSTART12083; GFX900-NEXT: ; use s[8:9]12084; GFX900-NEXT: ;;#ASMEND12085; GFX900-NEXT: s_setpc_b64 s[30:31]12086;12087; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_3:12088; GFX90A: ; %bb.0:12089; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12090; GFX90A-NEXT: ;;#ASMSTART12091; GFX90A-NEXT: ; def s[4:5]12092; GFX90A-NEXT: ;;#ASMEND12093; GFX90A-NEXT: s_lshr_b32 s6, s4, 1612094; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s412095; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512096; GFX90A-NEXT: ;;#ASMSTART12097; GFX90A-NEXT: ; use s[8:9]12098; GFX90A-NEXT: ;;#ASMEND12099; GFX90A-NEXT: s_setpc_b64 s[30:31]12100;12101; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_3:12102; GFX942: ; %bb.0:12103; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12104; GFX942-NEXT: ;;#ASMSTART12105; GFX942-NEXT: ; def s[0:1]12106; GFX942-NEXT: ;;#ASMEND12107; GFX942-NEXT: s_lshr_b32 s2, s0, 1612108; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s012109; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s112110; GFX942-NEXT: ;;#ASMSTART12111; GFX942-NEXT: ; use s[8:9]12112; GFX942-NEXT: ;;#ASMEND12113; GFX942-NEXT: s_setpc_b64 s[30:31]12114 %vec0 = call <4 x i16> asm "; def $0", "=s"()12115 %vec1 = call <4 x i16> asm "; def $0", "=s"()12116 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12117 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12118 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 3>12119 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12120 ret void12121}12122 12123define void @s_shuffle_v4i16_v3i16__u_4_4_4() {12124; GFX9-LABEL: s_shuffle_v4i16_v3i16__u_4_4_4:12125; GFX9: ; %bb.0:12126; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12127; GFX9-NEXT: ;;#ASMSTART12128; GFX9-NEXT: ; def s[8:9]12129; GFX9-NEXT: ;;#ASMEND12130; GFX9-NEXT: s_pack_hh_b32_b16 s9, s8, s812131; GFX9-NEXT: ;;#ASMSTART12132; GFX9-NEXT: ; use s[8:9]12133; GFX9-NEXT: ;;#ASMEND12134; GFX9-NEXT: s_setpc_b64 s[30:31]12135 %vec0 = call <4 x i16> asm "; def $0", "=s"()12136 %vec1 = call <4 x i16> asm "; def $0", "=s"()12137 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12138 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12139 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>12140 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12141 ret void12142}12143 12144define void @s_shuffle_v4i16_v3i16__0_4_4_4() {12145; GFX900-LABEL: s_shuffle_v4i16_v3i16__0_4_4_4:12146; GFX900: ; %bb.0:12147; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12148; GFX900-NEXT: ;;#ASMSTART12149; GFX900-NEXT: ; def s[4:5]12150; GFX900-NEXT: ;;#ASMEND12151; GFX900-NEXT: ;;#ASMSTART12152; GFX900-NEXT: ; def s[6:7]12153; GFX900-NEXT: ;;#ASMEND12154; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s612155; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s612156; GFX900-NEXT: ;;#ASMSTART12157; GFX900-NEXT: ; use s[8:9]12158; GFX900-NEXT: ;;#ASMEND12159; GFX900-NEXT: s_setpc_b64 s[30:31]12160;12161; GFX90A-LABEL: s_shuffle_v4i16_v3i16__0_4_4_4:12162; GFX90A: ; %bb.0:12163; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12164; GFX90A-NEXT: ;;#ASMSTART12165; GFX90A-NEXT: ; def s[4:5]12166; GFX90A-NEXT: ;;#ASMEND12167; GFX90A-NEXT: ;;#ASMSTART12168; GFX90A-NEXT: ; def s[6:7]12169; GFX90A-NEXT: ;;#ASMEND12170; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s612171; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s612172; GFX90A-NEXT: ;;#ASMSTART12173; GFX90A-NEXT: ; use s[8:9]12174; GFX90A-NEXT: ;;#ASMEND12175; GFX90A-NEXT: s_setpc_b64 s[30:31]12176;12177; GFX942-LABEL: s_shuffle_v4i16_v3i16__0_4_4_4:12178; GFX942: ; %bb.0:12179; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12180; GFX942-NEXT: ;;#ASMSTART12181; GFX942-NEXT: ; def s[0:1]12182; GFX942-NEXT: ;;#ASMEND12183; GFX942-NEXT: ;;#ASMSTART12184; GFX942-NEXT: ; def s[2:3]12185; GFX942-NEXT: ;;#ASMEND12186; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s212187; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s212188; GFX942-NEXT: ;;#ASMSTART12189; GFX942-NEXT: ; use s[8:9]12190; GFX942-NEXT: ;;#ASMEND12191; GFX942-NEXT: s_setpc_b64 s[30:31]12192 %vec0 = call <4 x i16> asm "; def $0", "=s"()12193 %vec1 = call <4 x i16> asm "; def $0", "=s"()12194 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12195 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12196 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 0, i32 4, i32 4, i32 4>12197 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12198 ret void12199}12200 12201define void @s_shuffle_v4i16_v3i16__1_4_4_4() {12202; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_4_4_4:12203; GFX900: ; %bb.0:12204; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12205; GFX900-NEXT: ;;#ASMSTART12206; GFX900-NEXT: ; def s[4:5]12207; GFX900-NEXT: ;;#ASMEND12208; GFX900-NEXT: ;;#ASMSTART12209; GFX900-NEXT: ; def s[6:7]12210; GFX900-NEXT: ;;#ASMEND12211; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s612212; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s612213; GFX900-NEXT: ;;#ASMSTART12214; GFX900-NEXT: ; use s[8:9]12215; GFX900-NEXT: ;;#ASMEND12216; GFX900-NEXT: s_setpc_b64 s[30:31]12217;12218; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_4_4_4:12219; GFX90A: ; %bb.0:12220; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12221; GFX90A-NEXT: ;;#ASMSTART12222; GFX90A-NEXT: ; def s[4:5]12223; GFX90A-NEXT: ;;#ASMEND12224; GFX90A-NEXT: ;;#ASMSTART12225; GFX90A-NEXT: ; def s[6:7]12226; GFX90A-NEXT: ;;#ASMEND12227; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s612228; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s612229; GFX90A-NEXT: ;;#ASMSTART12230; GFX90A-NEXT: ; use s[8:9]12231; GFX90A-NEXT: ;;#ASMEND12232; GFX90A-NEXT: s_setpc_b64 s[30:31]12233;12234; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_4_4_4:12235; GFX942: ; %bb.0:12236; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12237; GFX942-NEXT: ;;#ASMSTART12238; GFX942-NEXT: ; def s[0:1]12239; GFX942-NEXT: ;;#ASMEND12240; GFX942-NEXT: ;;#ASMSTART12241; GFX942-NEXT: ; def s[2:3]12242; GFX942-NEXT: ;;#ASMEND12243; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s212244; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s212245; GFX942-NEXT: ;;#ASMSTART12246; GFX942-NEXT: ; use s[8:9]12247; GFX942-NEXT: ;;#ASMEND12248; GFX942-NEXT: s_setpc_b64 s[30:31]12249 %vec0 = call <4 x i16> asm "; def $0", "=s"()12250 %vec1 = call <4 x i16> asm "; def $0", "=s"()12251 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12252 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12253 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 1, i32 4, i32 4, i32 4>12254 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12255 ret void12256}12257 12258define void @s_shuffle_v4i16_v3i16__2_4_4_4() {12259; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_4_4_4:12260; GFX900: ; %bb.0:12261; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12262; GFX900-NEXT: ;;#ASMSTART12263; GFX900-NEXT: ; def s[4:5]12264; GFX900-NEXT: ;;#ASMEND12265; GFX900-NEXT: ;;#ASMSTART12266; GFX900-NEXT: ; def s[6:7]12267; GFX900-NEXT: ;;#ASMEND12268; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s612269; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s612270; GFX900-NEXT: ;;#ASMSTART12271; GFX900-NEXT: ; use s[8:9]12272; GFX900-NEXT: ;;#ASMEND12273; GFX900-NEXT: s_setpc_b64 s[30:31]12274;12275; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_4_4_4:12276; GFX90A: ; %bb.0:12277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12278; GFX90A-NEXT: ;;#ASMSTART12279; GFX90A-NEXT: ; def s[4:5]12280; GFX90A-NEXT: ;;#ASMEND12281; GFX90A-NEXT: ;;#ASMSTART12282; GFX90A-NEXT: ; def s[6:7]12283; GFX90A-NEXT: ;;#ASMEND12284; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s612285; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s612286; GFX90A-NEXT: ;;#ASMSTART12287; GFX90A-NEXT: ; use s[8:9]12288; GFX90A-NEXT: ;;#ASMEND12289; GFX90A-NEXT: s_setpc_b64 s[30:31]12290;12291; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_4_4_4:12292; GFX942: ; %bb.0:12293; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12294; GFX942-NEXT: ;;#ASMSTART12295; GFX942-NEXT: ; def s[0:1]12296; GFX942-NEXT: ;;#ASMEND12297; GFX942-NEXT: ;;#ASMSTART12298; GFX942-NEXT: ; def s[2:3]12299; GFX942-NEXT: ;;#ASMEND12300; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s212301; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s212302; GFX942-NEXT: ;;#ASMSTART12303; GFX942-NEXT: ; use s[8:9]12304; GFX942-NEXT: ;;#ASMEND12305; GFX942-NEXT: s_setpc_b64 s[30:31]12306 %vec0 = call <4 x i16> asm "; def $0", "=s"()12307 %vec1 = call <4 x i16> asm "; def $0", "=s"()12308 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12309 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12310 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 2, i32 4, i32 4, i32 4>12311 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12312 ret void12313}12314 12315define void @s_shuffle_v4i16_v3i16__3_4_4_4() {12316; GFX9-LABEL: s_shuffle_v4i16_v3i16__3_4_4_4:12317; GFX9: ; %bb.0:12318; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12319; GFX9-NEXT: ;;#ASMSTART12320; GFX9-NEXT: ; def s[8:9]12321; GFX9-NEXT: ;;#ASMEND12322; GFX9-NEXT: s_pack_hh_b32_b16 s9, s8, s812323; GFX9-NEXT: ;;#ASMSTART12324; GFX9-NEXT: ; use s[8:9]12325; GFX9-NEXT: ;;#ASMEND12326; GFX9-NEXT: s_setpc_b64 s[30:31]12327 %vec0 = call <4 x i16> asm "; def $0", "=s"()12328 %vec1 = call <4 x i16> asm "; def $0", "=s"()12329 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12330 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12331 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 3, i32 4, i32 4, i32 4>12332 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12333 ret void12334}12335 12336define void @s_shuffle_v4i16_v3i16__4_4_4_4() {12337; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_4_4_4:12338; GFX900: ; %bb.0:12339; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12340; GFX900-NEXT: ;;#ASMSTART12341; GFX900-NEXT: ; def s[4:5]12342; GFX900-NEXT: ;;#ASMEND12343; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s412344; GFX900-NEXT: s_mov_b32 s9, s812345; GFX900-NEXT: ;;#ASMSTART12346; GFX900-NEXT: ; use s[8:9]12347; GFX900-NEXT: ;;#ASMEND12348; GFX900-NEXT: s_setpc_b64 s[30:31]12349;12350; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_4_4_4:12351; GFX90A: ; %bb.0:12352; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12353; GFX90A-NEXT: ;;#ASMSTART12354; GFX90A-NEXT: ; def s[4:5]12355; GFX90A-NEXT: ;;#ASMEND12356; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s412357; GFX90A-NEXT: s_mov_b32 s9, s812358; GFX90A-NEXT: ;;#ASMSTART12359; GFX90A-NEXT: ; use s[8:9]12360; GFX90A-NEXT: ;;#ASMEND12361; GFX90A-NEXT: s_setpc_b64 s[30:31]12362;12363; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_4_4_4:12364; GFX942: ; %bb.0:12365; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12366; GFX942-NEXT: ;;#ASMSTART12367; GFX942-NEXT: ; def s[0:1]12368; GFX942-NEXT: ;;#ASMEND12369; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s012370; GFX942-NEXT: s_mov_b32 s9, s812371; GFX942-NEXT: ;;#ASMSTART12372; GFX942-NEXT: ; use s[8:9]12373; GFX942-NEXT: ;;#ASMEND12374; GFX942-NEXT: s_setpc_b64 s[30:31]12375 %vec0 = call <4 x i16> asm "; def $0", "=s"()12376 %vec1 = call <4 x i16> asm "; def $0", "=s"()12377 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12378 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12379 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 4, i32 4, i32 4>12380 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12381 ret void12382}12383 12384define void @s_shuffle_v4i16_v3i16__5_4_4_4() {12385; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_4_4:12386; GFX900: ; %bb.0:12387; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12388; GFX900-NEXT: ;;#ASMSTART12389; GFX900-NEXT: ; def s[4:5]12390; GFX900-NEXT: ;;#ASMEND12391; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s412392; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s412393; GFX900-NEXT: ;;#ASMSTART12394; GFX900-NEXT: ; use s[8:9]12395; GFX900-NEXT: ;;#ASMEND12396; GFX900-NEXT: s_setpc_b64 s[30:31]12397;12398; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_4_4:12399; GFX90A: ; %bb.0:12400; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12401; GFX90A-NEXT: ;;#ASMSTART12402; GFX90A-NEXT: ; def s[4:5]12403; GFX90A-NEXT: ;;#ASMEND12404; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s412405; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s412406; GFX90A-NEXT: ;;#ASMSTART12407; GFX90A-NEXT: ; use s[8:9]12408; GFX90A-NEXT: ;;#ASMEND12409; GFX90A-NEXT: s_setpc_b64 s[30:31]12410;12411; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_4_4:12412; GFX942: ; %bb.0:12413; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12414; GFX942-NEXT: ;;#ASMSTART12415; GFX942-NEXT: ; def s[0:1]12416; GFX942-NEXT: ;;#ASMEND12417; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s012418; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s012419; GFX942-NEXT: ;;#ASMSTART12420; GFX942-NEXT: ; use s[8:9]12421; GFX942-NEXT: ;;#ASMEND12422; GFX942-NEXT: s_setpc_b64 s[30:31]12423 %vec0 = call <4 x i16> asm "; def $0", "=s"()12424 %vec1 = call <4 x i16> asm "; def $0", "=s"()12425 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12426 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12427 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 4, i32 4>12428 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12429 ret void12430}12431 12432define void @s_shuffle_v4i16_v3i16__5_u_4_4() {12433; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_4_4:12434; GFX900: ; %bb.0:12435; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12436; GFX900-NEXT: ;;#ASMSTART12437; GFX900-NEXT: ; def s[4:5]12438; GFX900-NEXT: ;;#ASMEND12439; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s412440; GFX900-NEXT: s_mov_b32 s8, s512441; GFX900-NEXT: ;;#ASMSTART12442; GFX900-NEXT: ; use s[8:9]12443; GFX900-NEXT: ;;#ASMEND12444; GFX900-NEXT: s_setpc_b64 s[30:31]12445;12446; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_4_4:12447; GFX90A: ; %bb.0:12448; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12449; GFX90A-NEXT: ;;#ASMSTART12450; GFX90A-NEXT: ; def s[4:5]12451; GFX90A-NEXT: ;;#ASMEND12452; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s412453; GFX90A-NEXT: s_mov_b32 s8, s512454; GFX90A-NEXT: ;;#ASMSTART12455; GFX90A-NEXT: ; use s[8:9]12456; GFX90A-NEXT: ;;#ASMEND12457; GFX90A-NEXT: s_setpc_b64 s[30:31]12458;12459; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_4_4:12460; GFX942: ; %bb.0:12461; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12462; GFX942-NEXT: ;;#ASMSTART12463; GFX942-NEXT: ; def s[0:1]12464; GFX942-NEXT: ;;#ASMEND12465; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s012466; GFX942-NEXT: s_mov_b32 s8, s112467; GFX942-NEXT: ;;#ASMSTART12468; GFX942-NEXT: ; use s[8:9]12469; GFX942-NEXT: ;;#ASMEND12470; GFX942-NEXT: s_setpc_b64 s[30:31]12471 %vec0 = call <4 x i16> asm "; def $0", "=s"()12472 %vec1 = call <4 x i16> asm "; def $0", "=s"()12473 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12474 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12475 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>12476 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12477 ret void12478}12479 12480define void @s_shuffle_v4i16_v3i16__5_0_4_4() {12481; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_4_4:12482; GFX900: ; %bb.0:12483; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12484; GFX900-NEXT: ;;#ASMSTART12485; GFX900-NEXT: ; def s[4:5]12486; GFX900-NEXT: ;;#ASMEND12487; GFX900-NEXT: ;;#ASMSTART12488; GFX900-NEXT: ; def s[6:7]12489; GFX900-NEXT: ;;#ASMEND12490; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s412491; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s612492; GFX900-NEXT: ;;#ASMSTART12493; GFX900-NEXT: ; use s[8:9]12494; GFX900-NEXT: ;;#ASMEND12495; GFX900-NEXT: s_setpc_b64 s[30:31]12496;12497; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_4_4:12498; GFX90A: ; %bb.0:12499; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12500; GFX90A-NEXT: ;;#ASMSTART12501; GFX90A-NEXT: ; def s[4:5]12502; GFX90A-NEXT: ;;#ASMEND12503; GFX90A-NEXT: ;;#ASMSTART12504; GFX90A-NEXT: ; def s[6:7]12505; GFX90A-NEXT: ;;#ASMEND12506; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s412507; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s612508; GFX90A-NEXT: ;;#ASMSTART12509; GFX90A-NEXT: ; use s[8:9]12510; GFX90A-NEXT: ;;#ASMEND12511; GFX90A-NEXT: s_setpc_b64 s[30:31]12512;12513; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_4_4:12514; GFX942: ; %bb.0:12515; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12516; GFX942-NEXT: ;;#ASMSTART12517; GFX942-NEXT: ; def s[0:1]12518; GFX942-NEXT: ;;#ASMEND12519; GFX942-NEXT: ;;#ASMSTART12520; GFX942-NEXT: ; def s[2:3]12521; GFX942-NEXT: ;;#ASMEND12522; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s012523; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s212524; GFX942-NEXT: ;;#ASMSTART12525; GFX942-NEXT: ; use s[8:9]12526; GFX942-NEXT: ;;#ASMEND12527; GFX942-NEXT: s_setpc_b64 s[30:31]12528 %vec0 = call <4 x i16> asm "; def $0", "=s"()12529 %vec1 = call <4 x i16> asm "; def $0", "=s"()12530 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12531 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12532 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 4, i32 4>12533 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12534 ret void12535}12536 12537define void @s_shuffle_v4i16_v3i16__5_1_4_4() {12538; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_4_4:12539; GFX900: ; %bb.0:12540; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12541; GFX900-NEXT: ;;#ASMSTART12542; GFX900-NEXT: ; def s[4:5]12543; GFX900-NEXT: ;;#ASMEND12544; GFX900-NEXT: ;;#ASMSTART12545; GFX900-NEXT: ; def s[6:7]12546; GFX900-NEXT: ;;#ASMEND12547; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s412548; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s612549; GFX900-NEXT: ;;#ASMSTART12550; GFX900-NEXT: ; use s[8:9]12551; GFX900-NEXT: ;;#ASMEND12552; GFX900-NEXT: s_setpc_b64 s[30:31]12553;12554; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_4_4:12555; GFX90A: ; %bb.0:12556; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12557; GFX90A-NEXT: ;;#ASMSTART12558; GFX90A-NEXT: ; def s[4:5]12559; GFX90A-NEXT: ;;#ASMEND12560; GFX90A-NEXT: ;;#ASMSTART12561; GFX90A-NEXT: ; def s[6:7]12562; GFX90A-NEXT: ;;#ASMEND12563; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s412564; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s612565; GFX90A-NEXT: ;;#ASMSTART12566; GFX90A-NEXT: ; use s[8:9]12567; GFX90A-NEXT: ;;#ASMEND12568; GFX90A-NEXT: s_setpc_b64 s[30:31]12569;12570; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_4_4:12571; GFX942: ; %bb.0:12572; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12573; GFX942-NEXT: ;;#ASMSTART12574; GFX942-NEXT: ; def s[0:1]12575; GFX942-NEXT: ;;#ASMEND12576; GFX942-NEXT: ;;#ASMSTART12577; GFX942-NEXT: ; def s[2:3]12578; GFX942-NEXT: ;;#ASMEND12579; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s012580; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s212581; GFX942-NEXT: ;;#ASMSTART12582; GFX942-NEXT: ; use s[8:9]12583; GFX942-NEXT: ;;#ASMEND12584; GFX942-NEXT: s_setpc_b64 s[30:31]12585 %vec0 = call <4 x i16> asm "; def $0", "=s"()12586 %vec1 = call <4 x i16> asm "; def $0", "=s"()12587 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12588 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12589 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 4, i32 4>12590 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12591 ret void12592}12593 12594define void @s_shuffle_v4i16_v3i16__5_2_4_4() {12595; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_4_4:12596; GFX900: ; %bb.0:12597; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12598; GFX900-NEXT: ;;#ASMSTART12599; GFX900-NEXT: ; def s[4:5]12600; GFX900-NEXT: ;;#ASMEND12601; GFX900-NEXT: ;;#ASMSTART12602; GFX900-NEXT: ; def s[6:7]12603; GFX900-NEXT: ;;#ASMEND12604; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s512605; GFX900-NEXT: s_pack_hh_b32_b16 s9, s6, s612606; GFX900-NEXT: ;;#ASMSTART12607; GFX900-NEXT: ; use s[8:9]12608; GFX900-NEXT: ;;#ASMEND12609; GFX900-NEXT: s_setpc_b64 s[30:31]12610;12611; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_4_4:12612; GFX90A: ; %bb.0:12613; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12614; GFX90A-NEXT: ;;#ASMSTART12615; GFX90A-NEXT: ; def s[4:5]12616; GFX90A-NEXT: ;;#ASMEND12617; GFX90A-NEXT: ;;#ASMSTART12618; GFX90A-NEXT: ; def s[6:7]12619; GFX90A-NEXT: ;;#ASMEND12620; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s512621; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s6, s612622; GFX90A-NEXT: ;;#ASMSTART12623; GFX90A-NEXT: ; use s[8:9]12624; GFX90A-NEXT: ;;#ASMEND12625; GFX90A-NEXT: s_setpc_b64 s[30:31]12626;12627; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_4_4:12628; GFX942: ; %bb.0:12629; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12630; GFX942-NEXT: ;;#ASMSTART12631; GFX942-NEXT: ; def s[0:1]12632; GFX942-NEXT: ;;#ASMEND12633; GFX942-NEXT: ;;#ASMSTART12634; GFX942-NEXT: ; def s[2:3]12635; GFX942-NEXT: ;;#ASMEND12636; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s112637; GFX942-NEXT: s_pack_hh_b32_b16 s9, s2, s212638; GFX942-NEXT: ;;#ASMSTART12639; GFX942-NEXT: ; use s[8:9]12640; GFX942-NEXT: ;;#ASMEND12641; GFX942-NEXT: s_setpc_b64 s[30:31]12642 %vec0 = call <4 x i16> asm "; def $0", "=s"()12643 %vec1 = call <4 x i16> asm "; def $0", "=s"()12644 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12645 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12646 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 4, i32 4>12647 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12648 ret void12649}12650 12651define void @s_shuffle_v4i16_v3i16__5_3_4_4() {12652; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_4_4:12653; GFX900: ; %bb.0:12654; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12655; GFX900-NEXT: ;;#ASMSTART12656; GFX900-NEXT: ; def s[4:5]12657; GFX900-NEXT: ;;#ASMEND12658; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s412659; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s412660; GFX900-NEXT: ;;#ASMSTART12661; GFX900-NEXT: ; use s[8:9]12662; GFX900-NEXT: ;;#ASMEND12663; GFX900-NEXT: s_setpc_b64 s[30:31]12664;12665; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_4_4:12666; GFX90A: ; %bb.0:12667; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12668; GFX90A-NEXT: ;;#ASMSTART12669; GFX90A-NEXT: ; def s[4:5]12670; GFX90A-NEXT: ;;#ASMEND12671; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s412672; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s412673; GFX90A-NEXT: ;;#ASMSTART12674; GFX90A-NEXT: ; use s[8:9]12675; GFX90A-NEXT: ;;#ASMEND12676; GFX90A-NEXT: s_setpc_b64 s[30:31]12677;12678; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_4_4:12679; GFX942: ; %bb.0:12680; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12681; GFX942-NEXT: ;;#ASMSTART12682; GFX942-NEXT: ; def s[0:1]12683; GFX942-NEXT: ;;#ASMEND12684; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s012685; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s012686; GFX942-NEXT: ;;#ASMSTART12687; GFX942-NEXT: ; use s[8:9]12688; GFX942-NEXT: ;;#ASMEND12689; GFX942-NEXT: s_setpc_b64 s[30:31]12690 %vec0 = call <4 x i16> asm "; def $0", "=s"()12691 %vec1 = call <4 x i16> asm "; def $0", "=s"()12692 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12693 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12694 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 4, i32 4>12695 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12696 ret void12697}12698 12699define void @s_shuffle_v4i16_v3i16__5_5_4_4() {12700; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_4:12701; GFX900: ; %bb.0:12702; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12703; GFX900-NEXT: ;;#ASMSTART12704; GFX900-NEXT: ; def s[4:5]12705; GFX900-NEXT: ;;#ASMEND12706; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s412707; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512708; GFX900-NEXT: ;;#ASMSTART12709; GFX900-NEXT: ; use s[8:9]12710; GFX900-NEXT: ;;#ASMEND12711; GFX900-NEXT: s_setpc_b64 s[30:31]12712;12713; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_4:12714; GFX90A: ; %bb.0:12715; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12716; GFX90A-NEXT: ;;#ASMSTART12717; GFX90A-NEXT: ; def s[4:5]12718; GFX90A-NEXT: ;;#ASMEND12719; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s412720; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512721; GFX90A-NEXT: ;;#ASMSTART12722; GFX90A-NEXT: ; use s[8:9]12723; GFX90A-NEXT: ;;#ASMEND12724; GFX90A-NEXT: s_setpc_b64 s[30:31]12725;12726; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_4:12727; GFX942: ; %bb.0:12728; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12729; GFX942-NEXT: ;;#ASMSTART12730; GFX942-NEXT: ; def s[0:1]12731; GFX942-NEXT: ;;#ASMEND12732; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s012733; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s112734; GFX942-NEXT: ;;#ASMSTART12735; GFX942-NEXT: ; use s[8:9]12736; GFX942-NEXT: ;;#ASMEND12737; GFX942-NEXT: s_setpc_b64 s[30:31]12738 %vec0 = call <4 x i16> asm "; def $0", "=s"()12739 %vec1 = call <4 x i16> asm "; def $0", "=s"()12740 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12741 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12742 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 4>12743 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12744 ret void12745}12746 12747define void @s_shuffle_v4i16_v3i16__5_5_u_4() {12748; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_4:12749; GFX900: ; %bb.0:12750; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12751; GFX900-NEXT: ;;#ASMSTART12752; GFX900-NEXT: ; def s[4:5]12753; GFX900-NEXT: ;;#ASMEND12754; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512755; GFX900-NEXT: s_mov_b32 s9, s412756; GFX900-NEXT: ;;#ASMSTART12757; GFX900-NEXT: ; use s[8:9]12758; GFX900-NEXT: ;;#ASMEND12759; GFX900-NEXT: s_setpc_b64 s[30:31]12760;12761; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_4:12762; GFX90A: ; %bb.0:12763; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12764; GFX90A-NEXT: ;;#ASMSTART12765; GFX90A-NEXT: ; def s[4:5]12766; GFX90A-NEXT: ;;#ASMEND12767; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512768; GFX90A-NEXT: s_mov_b32 s9, s412769; GFX90A-NEXT: ;;#ASMSTART12770; GFX90A-NEXT: ; use s[8:9]12771; GFX90A-NEXT: ;;#ASMEND12772; GFX90A-NEXT: s_setpc_b64 s[30:31]12773;12774; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_4:12775; GFX942: ; %bb.0:12776; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12777; GFX942-NEXT: ;;#ASMSTART12778; GFX942-NEXT: ; def s[0:1]12779; GFX942-NEXT: ;;#ASMEND12780; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s112781; GFX942-NEXT: s_mov_b32 s9, s012782; GFX942-NEXT: ;;#ASMSTART12783; GFX942-NEXT: ; use s[8:9]12784; GFX942-NEXT: ;;#ASMEND12785; GFX942-NEXT: s_setpc_b64 s[30:31]12786 %vec0 = call <4 x i16> asm "; def $0", "=s"()12787 %vec1 = call <4 x i16> asm "; def $0", "=s"()12788 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12789 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12790 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>12791 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12792 ret void12793}12794 12795define void @s_shuffle_v4i16_v3i16__5_5_0_4() {12796; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_4:12797; GFX900: ; %bb.0:12798; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12799; GFX900-NEXT: ;;#ASMSTART12800; GFX900-NEXT: ; def s[4:5]12801; GFX900-NEXT: ;;#ASMEND12802; GFX900-NEXT: ;;#ASMSTART12803; GFX900-NEXT: ; def s[6:7]12804; GFX900-NEXT: ;;#ASMEND12805; GFX900-NEXT: s_pack_lh_b32_b16 s9, s4, s612806; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712807; GFX900-NEXT: ;;#ASMSTART12808; GFX900-NEXT: ; use s[8:9]12809; GFX900-NEXT: ;;#ASMEND12810; GFX900-NEXT: s_setpc_b64 s[30:31]12811;12812; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_4:12813; GFX90A: ; %bb.0:12814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12815; GFX90A-NEXT: ;;#ASMSTART12816; GFX90A-NEXT: ; def s[4:5]12817; GFX90A-NEXT: ;;#ASMEND12818; GFX90A-NEXT: ;;#ASMSTART12819; GFX90A-NEXT: ; def s[6:7]12820; GFX90A-NEXT: ;;#ASMEND12821; GFX90A-NEXT: s_pack_lh_b32_b16 s9, s4, s612822; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712823; GFX90A-NEXT: ;;#ASMSTART12824; GFX90A-NEXT: ; use s[8:9]12825; GFX90A-NEXT: ;;#ASMEND12826; GFX90A-NEXT: s_setpc_b64 s[30:31]12827;12828; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_4:12829; GFX942: ; %bb.0:12830; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12831; GFX942-NEXT: ;;#ASMSTART12832; GFX942-NEXT: ; def s[0:1]12833; GFX942-NEXT: ;;#ASMEND12834; GFX942-NEXT: ;;#ASMSTART12835; GFX942-NEXT: ; def s[2:3]12836; GFX942-NEXT: ;;#ASMEND12837; GFX942-NEXT: s_pack_lh_b32_b16 s9, s0, s212838; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312839; GFX942-NEXT: ;;#ASMSTART12840; GFX942-NEXT: ; use s[8:9]12841; GFX942-NEXT: ;;#ASMEND12842; GFX942-NEXT: s_setpc_b64 s[30:31]12843 %vec0 = call <4 x i16> asm "; def $0", "=s"()12844 %vec1 = call <4 x i16> asm "; def $0", "=s"()12845 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12846 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12847 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 4>12848 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12849 ret void12850}12851 12852define void @s_shuffle_v4i16_v3i16__5_5_1_4() {12853; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_4:12854; GFX900: ; %bb.0:12855; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12856; GFX900-NEXT: ;;#ASMSTART12857; GFX900-NEXT: ; def s[4:5]12858; GFX900-NEXT: ;;#ASMEND12859; GFX900-NEXT: ;;#ASMSTART12860; GFX900-NEXT: ; def s[6:7]12861; GFX900-NEXT: ;;#ASMEND12862; GFX900-NEXT: s_pack_hh_b32_b16 s9, s4, s612863; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712864; GFX900-NEXT: ;;#ASMSTART12865; GFX900-NEXT: ; use s[8:9]12866; GFX900-NEXT: ;;#ASMEND12867; GFX900-NEXT: s_setpc_b64 s[30:31]12868;12869; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_4:12870; GFX90A: ; %bb.0:12871; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12872; GFX90A-NEXT: ;;#ASMSTART12873; GFX90A-NEXT: ; def s[4:5]12874; GFX90A-NEXT: ;;#ASMEND12875; GFX90A-NEXT: ;;#ASMSTART12876; GFX90A-NEXT: ; def s[6:7]12877; GFX90A-NEXT: ;;#ASMEND12878; GFX90A-NEXT: s_pack_hh_b32_b16 s9, s4, s612879; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712880; GFX90A-NEXT: ;;#ASMSTART12881; GFX90A-NEXT: ; use s[8:9]12882; GFX90A-NEXT: ;;#ASMEND12883; GFX90A-NEXT: s_setpc_b64 s[30:31]12884;12885; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_4:12886; GFX942: ; %bb.0:12887; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12888; GFX942-NEXT: ;;#ASMSTART12889; GFX942-NEXT: ; def s[0:1]12890; GFX942-NEXT: ;;#ASMEND12891; GFX942-NEXT: ;;#ASMSTART12892; GFX942-NEXT: ; def s[2:3]12893; GFX942-NEXT: ;;#ASMEND12894; GFX942-NEXT: s_pack_hh_b32_b16 s9, s0, s212895; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312896; GFX942-NEXT: ;;#ASMSTART12897; GFX942-NEXT: ; use s[8:9]12898; GFX942-NEXT: ;;#ASMEND12899; GFX942-NEXT: s_setpc_b64 s[30:31]12900 %vec0 = call <4 x i16> asm "; def $0", "=s"()12901 %vec1 = call <4 x i16> asm "; def $0", "=s"()12902 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12903 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12904 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 4>12905 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12906 ret void12907}12908 12909define void @s_shuffle_v4i16_v3i16__5_5_2_4() {12910; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_4:12911; GFX900: ; %bb.0:12912; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12913; GFX900-NEXT: ;;#ASMSTART12914; GFX900-NEXT: ; def s[4:5]12915; GFX900-NEXT: ;;#ASMEND12916; GFX900-NEXT: ;;#ASMSTART12917; GFX900-NEXT: ; def s[6:7]12918; GFX900-NEXT: ;;#ASMEND12919; GFX900-NEXT: s_pack_lh_b32_b16 s9, s5, s612920; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712921; GFX900-NEXT: ;;#ASMSTART12922; GFX900-NEXT: ; use s[8:9]12923; GFX900-NEXT: ;;#ASMEND12924; GFX900-NEXT: s_setpc_b64 s[30:31]12925;12926; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_4:12927; GFX90A: ; %bb.0:12928; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12929; GFX90A-NEXT: ;;#ASMSTART12930; GFX90A-NEXT: ; def s[4:5]12931; GFX90A-NEXT: ;;#ASMEND12932; GFX90A-NEXT: ;;#ASMSTART12933; GFX90A-NEXT: ; def s[6:7]12934; GFX90A-NEXT: ;;#ASMEND12935; GFX90A-NEXT: s_pack_lh_b32_b16 s9, s5, s612936; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712937; GFX90A-NEXT: ;;#ASMSTART12938; GFX90A-NEXT: ; use s[8:9]12939; GFX90A-NEXT: ;;#ASMEND12940; GFX90A-NEXT: s_setpc_b64 s[30:31]12941;12942; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_4:12943; GFX942: ; %bb.0:12944; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12945; GFX942-NEXT: ;;#ASMSTART12946; GFX942-NEXT: ; def s[0:1]12947; GFX942-NEXT: ;;#ASMEND12948; GFX942-NEXT: ;;#ASMSTART12949; GFX942-NEXT: ; def s[2:3]12950; GFX942-NEXT: ;;#ASMEND12951; GFX942-NEXT: s_pack_lh_b32_b16 s9, s1, s212952; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312953; GFX942-NEXT: ;;#ASMSTART12954; GFX942-NEXT: ; use s[8:9]12955; GFX942-NEXT: ;;#ASMEND12956; GFX942-NEXT: s_setpc_b64 s[30:31]12957 %vec0 = call <4 x i16> asm "; def $0", "=s"()12958 %vec1 = call <4 x i16> asm "; def $0", "=s"()12959 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12960 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>12961 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 4>12962 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)12963 ret void12964}12965 12966define void @s_shuffle_v4i16_v3i16__5_5_3_4() {12967; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_4:12968; GFX900: ; %bb.0:12969; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12970; GFX900-NEXT: ;;#ASMSTART12971; GFX900-NEXT: ; def s[4:5]12972; GFX900-NEXT: ;;#ASMEND12973; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512974; GFX900-NEXT: s_mov_b32 s9, s412975; GFX900-NEXT: ;;#ASMSTART12976; GFX900-NEXT: ; use s[8:9]12977; GFX900-NEXT: ;;#ASMEND12978; GFX900-NEXT: s_setpc_b64 s[30:31]12979;12980; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_4:12981; GFX90A: ; %bb.0:12982; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12983; GFX90A-NEXT: ;;#ASMSTART12984; GFX90A-NEXT: ; def s[4:5]12985; GFX90A-NEXT: ;;#ASMEND12986; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512987; GFX90A-NEXT: s_mov_b32 s9, s412988; GFX90A-NEXT: ;;#ASMSTART12989; GFX90A-NEXT: ; use s[8:9]12990; GFX90A-NEXT: ;;#ASMEND12991; GFX90A-NEXT: s_setpc_b64 s[30:31]12992;12993; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_4:12994; GFX942: ; %bb.0:12995; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12996; GFX942-NEXT: ;;#ASMSTART12997; GFX942-NEXT: ; def s[0:1]12998; GFX942-NEXT: ;;#ASMEND12999; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113000; GFX942-NEXT: s_mov_b32 s9, s013001; GFX942-NEXT: ;;#ASMSTART13002; GFX942-NEXT: ; use s[8:9]13003; GFX942-NEXT: ;;#ASMEND13004; GFX942-NEXT: s_setpc_b64 s[30:31]13005 %vec0 = call <4 x i16> asm "; def $0", "=s"()13006 %vec1 = call <4 x i16> asm "; def $0", "=s"()13007 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13008 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13009 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 4>13010 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13011 ret void13012}13013 13014define void @s_shuffle_v4i16_v3i16__u_5_5_5() {13015; GFX900-LABEL: s_shuffle_v4i16_v3i16__u_5_5_5:13016; GFX900: ; %bb.0:13017; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13018; GFX900-NEXT: ;;#ASMSTART13019; GFX900-NEXT: ; def s[4:5]13020; GFX900-NEXT: ;;#ASMEND13021; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513022; GFX900-NEXT: s_lshl_b32 s8, s5, 1613023; GFX900-NEXT: ;;#ASMSTART13024; GFX900-NEXT: ; use s[8:9]13025; GFX900-NEXT: ;;#ASMEND13026; GFX900-NEXT: s_setpc_b64 s[30:31]13027;13028; GFX90A-LABEL: s_shuffle_v4i16_v3i16__u_5_5_5:13029; GFX90A: ; %bb.0:13030; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13031; GFX90A-NEXT: ;;#ASMSTART13032; GFX90A-NEXT: ; def s[4:5]13033; GFX90A-NEXT: ;;#ASMEND13034; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513035; GFX90A-NEXT: s_lshl_b32 s8, s5, 1613036; GFX90A-NEXT: ;;#ASMSTART13037; GFX90A-NEXT: ; use s[8:9]13038; GFX90A-NEXT: ;;#ASMEND13039; GFX90A-NEXT: s_setpc_b64 s[30:31]13040;13041; GFX942-LABEL: s_shuffle_v4i16_v3i16__u_5_5_5:13042; GFX942: ; %bb.0:13043; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13044; GFX942-NEXT: ;;#ASMSTART13045; GFX942-NEXT: ; def s[0:1]13046; GFX942-NEXT: ;;#ASMEND13047; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113048; GFX942-NEXT: s_lshl_b32 s8, s1, 1613049; GFX942-NEXT: ;;#ASMSTART13050; GFX942-NEXT: ; use s[8:9]13051; GFX942-NEXT: ;;#ASMEND13052; GFX942-NEXT: s_setpc_b64 s[30:31]13053 %vec0 = call <4 x i16> asm "; def $0", "=s"()13054 %vec1 = call <4 x i16> asm "; def $0", "=s"()13055 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13056 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13057 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>13058 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13059 ret void13060}13061 13062define void @s_shuffle_v4i16_v3i16__0_5_5_5() {13063; GFX900-LABEL: s_shuffle_v4i16_v3i16__0_5_5_5:13064; GFX900: ; %bb.0:13065; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13066; GFX900-NEXT: ;;#ASMSTART13067; GFX900-NEXT: ; def s[4:5]13068; GFX900-NEXT: ;;#ASMEND13069; GFX900-NEXT: ;;#ASMSTART13070; GFX900-NEXT: ; def s[6:7]13071; GFX900-NEXT: ;;#ASMEND13072; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s713073; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713074; GFX900-NEXT: ;;#ASMSTART13075; GFX900-NEXT: ; use s[8:9]13076; GFX900-NEXT: ;;#ASMEND13077; GFX900-NEXT: s_setpc_b64 s[30:31]13078;13079; GFX90A-LABEL: s_shuffle_v4i16_v3i16__0_5_5_5:13080; GFX90A: ; %bb.0:13081; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13082; GFX90A-NEXT: ;;#ASMSTART13083; GFX90A-NEXT: ; def s[4:5]13084; GFX90A-NEXT: ;;#ASMEND13085; GFX90A-NEXT: ;;#ASMSTART13086; GFX90A-NEXT: ; def s[6:7]13087; GFX90A-NEXT: ;;#ASMEND13088; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s713089; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713090; GFX90A-NEXT: ;;#ASMSTART13091; GFX90A-NEXT: ; use s[8:9]13092; GFX90A-NEXT: ;;#ASMEND13093; GFX90A-NEXT: s_setpc_b64 s[30:31]13094;13095; GFX942-LABEL: s_shuffle_v4i16_v3i16__0_5_5_5:13096; GFX942: ; %bb.0:13097; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13098; GFX942-NEXT: ;;#ASMSTART13099; GFX942-NEXT: ; def s[0:1]13100; GFX942-NEXT: ;;#ASMEND13101; GFX942-NEXT: ;;#ASMSTART13102; GFX942-NEXT: ; def s[2:3]13103; GFX942-NEXT: ;;#ASMEND13104; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s313105; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313106; GFX942-NEXT: ;;#ASMSTART13107; GFX942-NEXT: ; use s[8:9]13108; GFX942-NEXT: ;;#ASMEND13109; GFX942-NEXT: s_setpc_b64 s[30:31]13110 %vec0 = call <4 x i16> asm "; def $0", "=s"()13111 %vec1 = call <4 x i16> asm "; def $0", "=s"()13112 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13113 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13114 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 0, i32 5, i32 5, i32 5>13115 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13116 ret void13117}13118 13119define void @s_shuffle_v4i16_v3i16__1_5_5_5() {13120; GFX900-LABEL: s_shuffle_v4i16_v3i16__1_5_5_5:13121; GFX900: ; %bb.0:13122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13123; GFX900-NEXT: ;;#ASMSTART13124; GFX900-NEXT: ; def s[4:5]13125; GFX900-NEXT: ;;#ASMEND13126; GFX900-NEXT: s_lshr_b32 s4, s4, 1613127; GFX900-NEXT: ;;#ASMSTART13128; GFX900-NEXT: ; def s[6:7]13129; GFX900-NEXT: ;;#ASMEND13130; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s713131; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713132; GFX900-NEXT: ;;#ASMSTART13133; GFX900-NEXT: ; use s[8:9]13134; GFX900-NEXT: ;;#ASMEND13135; GFX900-NEXT: s_setpc_b64 s[30:31]13136;13137; GFX90A-LABEL: s_shuffle_v4i16_v3i16__1_5_5_5:13138; GFX90A: ; %bb.0:13139; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13140; GFX90A-NEXT: ;;#ASMSTART13141; GFX90A-NEXT: ; def s[4:5]13142; GFX90A-NEXT: ;;#ASMEND13143; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613144; GFX90A-NEXT: ;;#ASMSTART13145; GFX90A-NEXT: ; def s[6:7]13146; GFX90A-NEXT: ;;#ASMEND13147; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s713148; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713149; GFX90A-NEXT: ;;#ASMSTART13150; GFX90A-NEXT: ; use s[8:9]13151; GFX90A-NEXT: ;;#ASMEND13152; GFX90A-NEXT: s_setpc_b64 s[30:31]13153;13154; GFX942-LABEL: s_shuffle_v4i16_v3i16__1_5_5_5:13155; GFX942: ; %bb.0:13156; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13157; GFX942-NEXT: ;;#ASMSTART13158; GFX942-NEXT: ; def s[0:1]13159; GFX942-NEXT: ;;#ASMEND13160; GFX942-NEXT: s_lshr_b32 s0, s0, 1613161; GFX942-NEXT: ;;#ASMSTART13162; GFX942-NEXT: ; def s[2:3]13163; GFX942-NEXT: ;;#ASMEND13164; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s313165; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313166; GFX942-NEXT: ;;#ASMSTART13167; GFX942-NEXT: ; use s[8:9]13168; GFX942-NEXT: ;;#ASMEND13169; GFX942-NEXT: s_setpc_b64 s[30:31]13170 %vec0 = call <4 x i16> asm "; def $0", "=s"()13171 %vec1 = call <4 x i16> asm "; def $0", "=s"()13172 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13173 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13174 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 1, i32 5, i32 5, i32 5>13175 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13176 ret void13177}13178 13179define void @s_shuffle_v4i16_v3i16__2_5_5_5() {13180; GFX900-LABEL: s_shuffle_v4i16_v3i16__2_5_5_5:13181; GFX900: ; %bb.0:13182; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13183; GFX900-NEXT: ;;#ASMSTART13184; GFX900-NEXT: ; def s[4:5]13185; GFX900-NEXT: ;;#ASMEND13186; GFX900-NEXT: ;;#ASMSTART13187; GFX900-NEXT: ; def s[6:7]13188; GFX900-NEXT: ;;#ASMEND13189; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s713190; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713191; GFX900-NEXT: ;;#ASMSTART13192; GFX900-NEXT: ; use s[8:9]13193; GFX900-NEXT: ;;#ASMEND13194; GFX900-NEXT: s_setpc_b64 s[30:31]13195;13196; GFX90A-LABEL: s_shuffle_v4i16_v3i16__2_5_5_5:13197; GFX90A: ; %bb.0:13198; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13199; GFX90A-NEXT: ;;#ASMSTART13200; GFX90A-NEXT: ; def s[4:5]13201; GFX90A-NEXT: ;;#ASMEND13202; GFX90A-NEXT: ;;#ASMSTART13203; GFX90A-NEXT: ; def s[6:7]13204; GFX90A-NEXT: ;;#ASMEND13205; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s713206; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713207; GFX90A-NEXT: ;;#ASMSTART13208; GFX90A-NEXT: ; use s[8:9]13209; GFX90A-NEXT: ;;#ASMEND13210; GFX90A-NEXT: s_setpc_b64 s[30:31]13211;13212; GFX942-LABEL: s_shuffle_v4i16_v3i16__2_5_5_5:13213; GFX942: ; %bb.0:13214; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13215; GFX942-NEXT: ;;#ASMSTART13216; GFX942-NEXT: ; def s[0:1]13217; GFX942-NEXT: ;;#ASMEND13218; GFX942-NEXT: ;;#ASMSTART13219; GFX942-NEXT: ; def s[2:3]13220; GFX942-NEXT: ;;#ASMEND13221; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s313222; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313223; GFX942-NEXT: ;;#ASMSTART13224; GFX942-NEXT: ; use s[8:9]13225; GFX942-NEXT: ;;#ASMEND13226; GFX942-NEXT: s_setpc_b64 s[30:31]13227 %vec0 = call <4 x i16> asm "; def $0", "=s"()13228 %vec1 = call <4 x i16> asm "; def $0", "=s"()13229 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13230 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13231 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 2, i32 5, i32 5, i32 5>13232 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13233 ret void13234}13235 13236define void @s_shuffle_v4i16_v3i16__3_5_5_5() {13237; GFX900-LABEL: s_shuffle_v4i16_v3i16__3_5_5_5:13238; GFX900: ; %bb.0:13239; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13240; GFX900-NEXT: ;;#ASMSTART13241; GFX900-NEXT: ; def s[4:5]13242; GFX900-NEXT: ;;#ASMEND13243; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s513244; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513245; GFX900-NEXT: ;;#ASMSTART13246; GFX900-NEXT: ; use s[8:9]13247; GFX900-NEXT: ;;#ASMEND13248; GFX900-NEXT: s_setpc_b64 s[30:31]13249;13250; GFX90A-LABEL: s_shuffle_v4i16_v3i16__3_5_5_5:13251; GFX90A: ; %bb.0:13252; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13253; GFX90A-NEXT: ;;#ASMSTART13254; GFX90A-NEXT: ; def s[4:5]13255; GFX90A-NEXT: ;;#ASMEND13256; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s513257; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513258; GFX90A-NEXT: ;;#ASMSTART13259; GFX90A-NEXT: ; use s[8:9]13260; GFX90A-NEXT: ;;#ASMEND13261; GFX90A-NEXT: s_setpc_b64 s[30:31]13262;13263; GFX942-LABEL: s_shuffle_v4i16_v3i16__3_5_5_5:13264; GFX942: ; %bb.0:13265; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13266; GFX942-NEXT: ;;#ASMSTART13267; GFX942-NEXT: ; def s[0:1]13268; GFX942-NEXT: ;;#ASMEND13269; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s113270; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113271; GFX942-NEXT: ;;#ASMSTART13272; GFX942-NEXT: ; use s[8:9]13273; GFX942-NEXT: ;;#ASMEND13274; GFX942-NEXT: s_setpc_b64 s[30:31]13275 %vec0 = call <4 x i16> asm "; def $0", "=s"()13276 %vec1 = call <4 x i16> asm "; def $0", "=s"()13277 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13278 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13279 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 3, i32 5, i32 5, i32 5>13280 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13281 ret void13282}13283 13284define void @s_shuffle_v4i16_v3i16__4_5_5_5() {13285; GFX900-LABEL: s_shuffle_v4i16_v3i16__4_5_5_5:13286; GFX900: ; %bb.0:13287; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13288; GFX900-NEXT: ;;#ASMSTART13289; GFX900-NEXT: ; def s[4:5]13290; GFX900-NEXT: ;;#ASMEND13291; GFX900-NEXT: s_lshr_b32 s4, s4, 1613292; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s513293; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513294; GFX900-NEXT: ;;#ASMSTART13295; GFX900-NEXT: ; use s[8:9]13296; GFX900-NEXT: ;;#ASMEND13297; GFX900-NEXT: s_setpc_b64 s[30:31]13298;13299; GFX90A-LABEL: s_shuffle_v4i16_v3i16__4_5_5_5:13300; GFX90A: ; %bb.0:13301; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13302; GFX90A-NEXT: ;;#ASMSTART13303; GFX90A-NEXT: ; def s[4:5]13304; GFX90A-NEXT: ;;#ASMEND13305; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613306; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s513307; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513308; GFX90A-NEXT: ;;#ASMSTART13309; GFX90A-NEXT: ; use s[8:9]13310; GFX90A-NEXT: ;;#ASMEND13311; GFX90A-NEXT: s_setpc_b64 s[30:31]13312;13313; GFX942-LABEL: s_shuffle_v4i16_v3i16__4_5_5_5:13314; GFX942: ; %bb.0:13315; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13316; GFX942-NEXT: ;;#ASMSTART13317; GFX942-NEXT: ; def s[0:1]13318; GFX942-NEXT: ;;#ASMEND13319; GFX942-NEXT: s_lshr_b32 s0, s0, 1613320; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s113321; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113322; GFX942-NEXT: ;;#ASMSTART13323; GFX942-NEXT: ; use s[8:9]13324; GFX942-NEXT: ;;#ASMEND13325; GFX942-NEXT: s_setpc_b64 s[30:31]13326 %vec0 = call <4 x i16> asm "; def $0", "=s"()13327 %vec1 = call <4 x i16> asm "; def $0", "=s"()13328 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13329 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13330 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 4, i32 5, i32 5, i32 5>13331 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13332 ret void13333}13334 13335define void @s_shuffle_v4i16_v3i16__5_u_5_5() {13336; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_u_5_5:13337; GFX900: ; %bb.0:13338; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13339; GFX900-NEXT: ;;#ASMSTART13340; GFX900-NEXT: ; def s[4:5]13341; GFX900-NEXT: ;;#ASMEND13342; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513343; GFX900-NEXT: s_mov_b32 s8, s513344; GFX900-NEXT: ;;#ASMSTART13345; GFX900-NEXT: ; use s[8:9]13346; GFX900-NEXT: ;;#ASMEND13347; GFX900-NEXT: s_setpc_b64 s[30:31]13348;13349; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_u_5_5:13350; GFX90A: ; %bb.0:13351; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13352; GFX90A-NEXT: ;;#ASMSTART13353; GFX90A-NEXT: ; def s[4:5]13354; GFX90A-NEXT: ;;#ASMEND13355; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513356; GFX90A-NEXT: s_mov_b32 s8, s513357; GFX90A-NEXT: ;;#ASMSTART13358; GFX90A-NEXT: ; use s[8:9]13359; GFX90A-NEXT: ;;#ASMEND13360; GFX90A-NEXT: s_setpc_b64 s[30:31]13361;13362; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_u_5_5:13363; GFX942: ; %bb.0:13364; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13365; GFX942-NEXT: ;;#ASMSTART13366; GFX942-NEXT: ; def s[0:1]13367; GFX942-NEXT: ;;#ASMEND13368; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113369; GFX942-NEXT: s_mov_b32 s8, s113370; GFX942-NEXT: ;;#ASMSTART13371; GFX942-NEXT: ; use s[8:9]13372; GFX942-NEXT: ;;#ASMEND13373; GFX942-NEXT: s_setpc_b64 s[30:31]13374 %vec0 = call <4 x i16> asm "; def $0", "=s"()13375 %vec1 = call <4 x i16> asm "; def $0", "=s"()13376 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13377 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13378 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>13379 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13380 ret void13381}13382 13383define void @s_shuffle_v4i16_v3i16__5_0_5_5() {13384; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_0_5_5:13385; GFX900: ; %bb.0:13386; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13387; GFX900-NEXT: ;;#ASMSTART13388; GFX900-NEXT: ; def s[4:5]13389; GFX900-NEXT: ;;#ASMEND13390; GFX900-NEXT: ;;#ASMSTART13391; GFX900-NEXT: ; def s[6:7]13392; GFX900-NEXT: ;;#ASMEND13393; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s413394; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713395; GFX900-NEXT: ;;#ASMSTART13396; GFX900-NEXT: ; use s[8:9]13397; GFX900-NEXT: ;;#ASMEND13398; GFX900-NEXT: s_setpc_b64 s[30:31]13399;13400; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_0_5_5:13401; GFX90A: ; %bb.0:13402; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13403; GFX90A-NEXT: ;;#ASMSTART13404; GFX90A-NEXT: ; def s[4:5]13405; GFX90A-NEXT: ;;#ASMEND13406; GFX90A-NEXT: ;;#ASMSTART13407; GFX90A-NEXT: ; def s[6:7]13408; GFX90A-NEXT: ;;#ASMEND13409; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s413410; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713411; GFX90A-NEXT: ;;#ASMSTART13412; GFX90A-NEXT: ; use s[8:9]13413; GFX90A-NEXT: ;;#ASMEND13414; GFX90A-NEXT: s_setpc_b64 s[30:31]13415;13416; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_0_5_5:13417; GFX942: ; %bb.0:13418; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13419; GFX942-NEXT: ;;#ASMSTART13420; GFX942-NEXT: ; def s[0:1]13421; GFX942-NEXT: ;;#ASMEND13422; GFX942-NEXT: ;;#ASMSTART13423; GFX942-NEXT: ; def s[2:3]13424; GFX942-NEXT: ;;#ASMEND13425; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s013426; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313427; GFX942-NEXT: ;;#ASMSTART13428; GFX942-NEXT: ; use s[8:9]13429; GFX942-NEXT: ;;#ASMEND13430; GFX942-NEXT: s_setpc_b64 s[30:31]13431 %vec0 = call <4 x i16> asm "; def $0", "=s"()13432 %vec1 = call <4 x i16> asm "; def $0", "=s"()13433 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13434 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13435 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 0, i32 5, i32 5>13436 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13437 ret void13438}13439 13440define void @s_shuffle_v4i16_v3i16__5_1_5_5() {13441; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_1_5_5:13442; GFX900: ; %bb.0:13443; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13444; GFX900-NEXT: ;;#ASMSTART13445; GFX900-NEXT: ; def s[4:5]13446; GFX900-NEXT: ;;#ASMEND13447; GFX900-NEXT: ;;#ASMSTART13448; GFX900-NEXT: ; def s[6:7]13449; GFX900-NEXT: ;;#ASMEND13450; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s413451; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713452; GFX900-NEXT: ;;#ASMSTART13453; GFX900-NEXT: ; use s[8:9]13454; GFX900-NEXT: ;;#ASMEND13455; GFX900-NEXT: s_setpc_b64 s[30:31]13456;13457; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_1_5_5:13458; GFX90A: ; %bb.0:13459; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13460; GFX90A-NEXT: ;;#ASMSTART13461; GFX90A-NEXT: ; def s[4:5]13462; GFX90A-NEXT: ;;#ASMEND13463; GFX90A-NEXT: ;;#ASMSTART13464; GFX90A-NEXT: ; def s[6:7]13465; GFX90A-NEXT: ;;#ASMEND13466; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s413467; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713468; GFX90A-NEXT: ;;#ASMSTART13469; GFX90A-NEXT: ; use s[8:9]13470; GFX90A-NEXT: ;;#ASMEND13471; GFX90A-NEXT: s_setpc_b64 s[30:31]13472;13473; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_1_5_5:13474; GFX942: ; %bb.0:13475; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13476; GFX942-NEXT: ;;#ASMSTART13477; GFX942-NEXT: ; def s[0:1]13478; GFX942-NEXT: ;;#ASMEND13479; GFX942-NEXT: ;;#ASMSTART13480; GFX942-NEXT: ; def s[2:3]13481; GFX942-NEXT: ;;#ASMEND13482; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s013483; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313484; GFX942-NEXT: ;;#ASMSTART13485; GFX942-NEXT: ; use s[8:9]13486; GFX942-NEXT: ;;#ASMEND13487; GFX942-NEXT: s_setpc_b64 s[30:31]13488 %vec0 = call <4 x i16> asm "; def $0", "=s"()13489 %vec1 = call <4 x i16> asm "; def $0", "=s"()13490 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13491 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13492 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 1, i32 5, i32 5>13493 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13494 ret void13495}13496 13497define void @s_shuffle_v4i16_v3i16__5_2_5_5() {13498; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_2_5_5:13499; GFX900: ; %bb.0:13500; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13501; GFX900-NEXT: ;;#ASMSTART13502; GFX900-NEXT: ; def s[4:5]13503; GFX900-NEXT: ;;#ASMEND13504; GFX900-NEXT: ;;#ASMSTART13505; GFX900-NEXT: ; def s[6:7]13506; GFX900-NEXT: ;;#ASMEND13507; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s513508; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713509; GFX900-NEXT: ;;#ASMSTART13510; GFX900-NEXT: ; use s[8:9]13511; GFX900-NEXT: ;;#ASMEND13512; GFX900-NEXT: s_setpc_b64 s[30:31]13513;13514; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_2_5_5:13515; GFX90A: ; %bb.0:13516; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13517; GFX90A-NEXT: ;;#ASMSTART13518; GFX90A-NEXT: ; def s[4:5]13519; GFX90A-NEXT: ;;#ASMEND13520; GFX90A-NEXT: ;;#ASMSTART13521; GFX90A-NEXT: ; def s[6:7]13522; GFX90A-NEXT: ;;#ASMEND13523; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s513524; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713525; GFX90A-NEXT: ;;#ASMSTART13526; GFX90A-NEXT: ; use s[8:9]13527; GFX90A-NEXT: ;;#ASMEND13528; GFX90A-NEXT: s_setpc_b64 s[30:31]13529;13530; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_2_5_5:13531; GFX942: ; %bb.0:13532; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13533; GFX942-NEXT: ;;#ASMSTART13534; GFX942-NEXT: ; def s[0:1]13535; GFX942-NEXT: ;;#ASMEND13536; GFX942-NEXT: ;;#ASMSTART13537; GFX942-NEXT: ; def s[2:3]13538; GFX942-NEXT: ;;#ASMEND13539; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s113540; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313541; GFX942-NEXT: ;;#ASMSTART13542; GFX942-NEXT: ; use s[8:9]13543; GFX942-NEXT: ;;#ASMEND13544; GFX942-NEXT: s_setpc_b64 s[30:31]13545 %vec0 = call <4 x i16> asm "; def $0", "=s"()13546 %vec1 = call <4 x i16> asm "; def $0", "=s"()13547 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13548 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13549 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 2, i32 5, i32 5>13550 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13551 ret void13552}13553 13554define void @s_shuffle_v4i16_v3i16__5_3_5_5() {13555; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_3_5_5:13556; GFX900: ; %bb.0:13557; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13558; GFX900-NEXT: ;;#ASMSTART13559; GFX900-NEXT: ; def s[4:5]13560; GFX900-NEXT: ;;#ASMEND13561; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s413562; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513563; GFX900-NEXT: ;;#ASMSTART13564; GFX900-NEXT: ; use s[8:9]13565; GFX900-NEXT: ;;#ASMEND13566; GFX900-NEXT: s_setpc_b64 s[30:31]13567;13568; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_3_5_5:13569; GFX90A: ; %bb.0:13570; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13571; GFX90A-NEXT: ;;#ASMSTART13572; GFX90A-NEXT: ; def s[4:5]13573; GFX90A-NEXT: ;;#ASMEND13574; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s413575; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513576; GFX90A-NEXT: ;;#ASMSTART13577; GFX90A-NEXT: ; use s[8:9]13578; GFX90A-NEXT: ;;#ASMEND13579; GFX90A-NEXT: s_setpc_b64 s[30:31]13580;13581; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_3_5_5:13582; GFX942: ; %bb.0:13583; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13584; GFX942-NEXT: ;;#ASMSTART13585; GFX942-NEXT: ; def s[0:1]13586; GFX942-NEXT: ;;#ASMEND13587; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s013588; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113589; GFX942-NEXT: ;;#ASMSTART13590; GFX942-NEXT: ; use s[8:9]13591; GFX942-NEXT: ;;#ASMEND13592; GFX942-NEXT: s_setpc_b64 s[30:31]13593 %vec0 = call <4 x i16> asm "; def $0", "=s"()13594 %vec1 = call <4 x i16> asm "; def $0", "=s"()13595 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13596 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13597 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 3, i32 5, i32 5>13598 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13599 ret void13600}13601 13602define void @s_shuffle_v4i16_v3i16__5_4_5_5() {13603; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_4_5_5:13604; GFX900: ; %bb.0:13605; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13606; GFX900-NEXT: ;;#ASMSTART13607; GFX900-NEXT: ; def s[4:5]13608; GFX900-NEXT: ;;#ASMEND13609; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s413610; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513611; GFX900-NEXT: ;;#ASMSTART13612; GFX900-NEXT: ; use s[8:9]13613; GFX900-NEXT: ;;#ASMEND13614; GFX900-NEXT: s_setpc_b64 s[30:31]13615;13616; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_4_5_5:13617; GFX90A: ; %bb.0:13618; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13619; GFX90A-NEXT: ;;#ASMSTART13620; GFX90A-NEXT: ; def s[4:5]13621; GFX90A-NEXT: ;;#ASMEND13622; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s413623; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513624; GFX90A-NEXT: ;;#ASMSTART13625; GFX90A-NEXT: ; use s[8:9]13626; GFX90A-NEXT: ;;#ASMEND13627; GFX90A-NEXT: s_setpc_b64 s[30:31]13628;13629; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_4_5_5:13630; GFX942: ; %bb.0:13631; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13632; GFX942-NEXT: ;;#ASMSTART13633; GFX942-NEXT: ; def s[0:1]13634; GFX942-NEXT: ;;#ASMEND13635; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s013636; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113637; GFX942-NEXT: ;;#ASMSTART13638; GFX942-NEXT: ; use s[8:9]13639; GFX942-NEXT: ;;#ASMEND13640; GFX942-NEXT: s_setpc_b64 s[30:31]13641 %vec0 = call <4 x i16> asm "; def $0", "=s"()13642 %vec1 = call <4 x i16> asm "; def $0", "=s"()13643 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13644 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13645 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 4, i32 5, i32 5>13646 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13647 ret void13648}13649 13650define void @s_shuffle_v4i16_v3i16__5_5_u_5() {13651; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_u_5:13652; GFX900: ; %bb.0:13653; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13654; GFX900-NEXT: ;;#ASMSTART13655; GFX900-NEXT: ; def s[4:5]13656; GFX900-NEXT: ;;#ASMEND13657; GFX900-NEXT: s_lshl_b32 s9, s5, 1613658; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s513659; GFX900-NEXT: ;;#ASMSTART13660; GFX900-NEXT: ; use s[8:9]13661; GFX900-NEXT: ;;#ASMEND13662; GFX900-NEXT: s_setpc_b64 s[30:31]13663;13664; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_u_5:13665; GFX90A: ; %bb.0:13666; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13667; GFX90A-NEXT: ;;#ASMSTART13668; GFX90A-NEXT: ; def s[4:5]13669; GFX90A-NEXT: ;;#ASMEND13670; GFX90A-NEXT: s_lshl_b32 s9, s5, 1613671; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s513672; GFX90A-NEXT: ;;#ASMSTART13673; GFX90A-NEXT: ; use s[8:9]13674; GFX90A-NEXT: ;;#ASMEND13675; GFX90A-NEXT: s_setpc_b64 s[30:31]13676;13677; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_u_5:13678; GFX942: ; %bb.0:13679; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13680; GFX942-NEXT: ;;#ASMSTART13681; GFX942-NEXT: ; def s[0:1]13682; GFX942-NEXT: ;;#ASMEND13683; GFX942-NEXT: s_lshl_b32 s9, s1, 1613684; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113685; GFX942-NEXT: ;;#ASMSTART13686; GFX942-NEXT: ; use s[8:9]13687; GFX942-NEXT: ;;#ASMEND13688; GFX942-NEXT: s_setpc_b64 s[30:31]13689 %vec0 = call <4 x i16> asm "; def $0", "=s"()13690 %vec1 = call <4 x i16> asm "; def $0", "=s"()13691 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13692 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13693 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>13694 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13695 ret void13696}13697 13698define void @s_shuffle_v4i16_v3i16__5_5_0_5() {13699; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_0_5:13700; GFX900: ; %bb.0:13701; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13702; GFX900-NEXT: ;;#ASMSTART13703; GFX900-NEXT: ; def s[4:5]13704; GFX900-NEXT: ;;#ASMEND13705; GFX900-NEXT: ;;#ASMSTART13706; GFX900-NEXT: ; def s[6:7]13707; GFX900-NEXT: ;;#ASMEND13708; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s713709; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713710; GFX900-NEXT: ;;#ASMSTART13711; GFX900-NEXT: ; use s[8:9]13712; GFX900-NEXT: ;;#ASMEND13713; GFX900-NEXT: s_setpc_b64 s[30:31]13714;13715; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_0_5:13716; GFX90A: ; %bb.0:13717; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13718; GFX90A-NEXT: ;;#ASMSTART13719; GFX90A-NEXT: ; def s[4:5]13720; GFX90A-NEXT: ;;#ASMEND13721; GFX90A-NEXT: ;;#ASMSTART13722; GFX90A-NEXT: ; def s[6:7]13723; GFX90A-NEXT: ;;#ASMEND13724; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s713725; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713726; GFX90A-NEXT: ;;#ASMSTART13727; GFX90A-NEXT: ; use s[8:9]13728; GFX90A-NEXT: ;;#ASMEND13729; GFX90A-NEXT: s_setpc_b64 s[30:31]13730;13731; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_0_5:13732; GFX942: ; %bb.0:13733; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13734; GFX942-NEXT: ;;#ASMSTART13735; GFX942-NEXT: ; def s[0:1]13736; GFX942-NEXT: ;;#ASMEND13737; GFX942-NEXT: ;;#ASMSTART13738; GFX942-NEXT: ; def s[2:3]13739; GFX942-NEXT: ;;#ASMEND13740; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s313741; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s313742; GFX942-NEXT: ;;#ASMSTART13743; GFX942-NEXT: ; use s[8:9]13744; GFX942-NEXT: ;;#ASMEND13745; GFX942-NEXT: s_setpc_b64 s[30:31]13746 %vec0 = call <4 x i16> asm "; def $0", "=s"()13747 %vec1 = call <4 x i16> asm "; def $0", "=s"()13748 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13749 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13750 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 5>13751 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13752 ret void13753}13754 13755define void @s_shuffle_v4i16_v3i16__5_5_1_5() {13756; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_1_5:13757; GFX900: ; %bb.0:13758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13759; GFX900-NEXT: ;;#ASMSTART13760; GFX900-NEXT: ; def s[4:5]13761; GFX900-NEXT: ;;#ASMEND13762; GFX900-NEXT: s_lshr_b32 s4, s4, 1613763; GFX900-NEXT: ;;#ASMSTART13764; GFX900-NEXT: ; def s[6:7]13765; GFX900-NEXT: ;;#ASMEND13766; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s713767; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713768; GFX900-NEXT: ;;#ASMSTART13769; GFX900-NEXT: ; use s[8:9]13770; GFX900-NEXT: ;;#ASMEND13771; GFX900-NEXT: s_setpc_b64 s[30:31]13772;13773; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_1_5:13774; GFX90A: ; %bb.0:13775; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13776; GFX90A-NEXT: ;;#ASMSTART13777; GFX90A-NEXT: ; def s[4:5]13778; GFX90A-NEXT: ;;#ASMEND13779; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613780; GFX90A-NEXT: ;;#ASMSTART13781; GFX90A-NEXT: ; def s[6:7]13782; GFX90A-NEXT: ;;#ASMEND13783; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s713784; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713785; GFX90A-NEXT: ;;#ASMSTART13786; GFX90A-NEXT: ; use s[8:9]13787; GFX90A-NEXT: ;;#ASMEND13788; GFX90A-NEXT: s_setpc_b64 s[30:31]13789;13790; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_1_5:13791; GFX942: ; %bb.0:13792; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13793; GFX942-NEXT: ;;#ASMSTART13794; GFX942-NEXT: ; def s[0:1]13795; GFX942-NEXT: ;;#ASMEND13796; GFX942-NEXT: s_lshr_b32 s0, s0, 1613797; GFX942-NEXT: ;;#ASMSTART13798; GFX942-NEXT: ; def s[2:3]13799; GFX942-NEXT: ;;#ASMEND13800; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s313801; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s313802; GFX942-NEXT: ;;#ASMSTART13803; GFX942-NEXT: ; use s[8:9]13804; GFX942-NEXT: ;;#ASMEND13805; GFX942-NEXT: s_setpc_b64 s[30:31]13806 %vec0 = call <4 x i16> asm "; def $0", "=s"()13807 %vec1 = call <4 x i16> asm "; def $0", "=s"()13808 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13809 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13810 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 5>13811 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13812 ret void13813}13814 13815define void @s_shuffle_v4i16_v3i16__5_5_2_5() {13816; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_2_5:13817; GFX900: ; %bb.0:13818; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13819; GFX900-NEXT: ;;#ASMSTART13820; GFX900-NEXT: ; def s[4:5]13821; GFX900-NEXT: ;;#ASMEND13822; GFX900-NEXT: ;;#ASMSTART13823; GFX900-NEXT: ; def s[6:7]13824; GFX900-NEXT: ;;#ASMEND13825; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s713826; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713827; GFX900-NEXT: ;;#ASMSTART13828; GFX900-NEXT: ; use s[8:9]13829; GFX900-NEXT: ;;#ASMEND13830; GFX900-NEXT: s_setpc_b64 s[30:31]13831;13832; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_2_5:13833; GFX90A: ; %bb.0:13834; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13835; GFX90A-NEXT: ;;#ASMSTART13836; GFX90A-NEXT: ; def s[4:5]13837; GFX90A-NEXT: ;;#ASMEND13838; GFX90A-NEXT: ;;#ASMSTART13839; GFX90A-NEXT: ; def s[6:7]13840; GFX90A-NEXT: ;;#ASMEND13841; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s713842; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713843; GFX90A-NEXT: ;;#ASMSTART13844; GFX90A-NEXT: ; use s[8:9]13845; GFX90A-NEXT: ;;#ASMEND13846; GFX90A-NEXT: s_setpc_b64 s[30:31]13847;13848; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_2_5:13849; GFX942: ; %bb.0:13850; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13851; GFX942-NEXT: ;;#ASMSTART13852; GFX942-NEXT: ; def s[0:1]13853; GFX942-NEXT: ;;#ASMEND13854; GFX942-NEXT: ;;#ASMSTART13855; GFX942-NEXT: ; def s[2:3]13856; GFX942-NEXT: ;;#ASMEND13857; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s313858; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s313859; GFX942-NEXT: ;;#ASMSTART13860; GFX942-NEXT: ; use s[8:9]13861; GFX942-NEXT: ;;#ASMEND13862; GFX942-NEXT: s_setpc_b64 s[30:31]13863 %vec0 = call <4 x i16> asm "; def $0", "=s"()13864 %vec1 = call <4 x i16> asm "; def $0", "=s"()13865 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13866 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13867 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 5>13868 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13869 ret void13870}13871 13872define void @s_shuffle_v4i16_v3i16__5_5_3_5() {13873; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_3_5:13874; GFX900: ; %bb.0:13875; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13876; GFX900-NEXT: ;;#ASMSTART13877; GFX900-NEXT: ; def s[4:5]13878; GFX900-NEXT: ;;#ASMEND13879; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s513880; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s513881; GFX900-NEXT: ;;#ASMSTART13882; GFX900-NEXT: ; use s[8:9]13883; GFX900-NEXT: ;;#ASMEND13884; GFX900-NEXT: s_setpc_b64 s[30:31]13885;13886; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_3_5:13887; GFX90A: ; %bb.0:13888; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13889; GFX90A-NEXT: ;;#ASMSTART13890; GFX90A-NEXT: ; def s[4:5]13891; GFX90A-NEXT: ;;#ASMEND13892; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s513893; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s513894; GFX90A-NEXT: ;;#ASMSTART13895; GFX90A-NEXT: ; use s[8:9]13896; GFX90A-NEXT: ;;#ASMEND13897; GFX90A-NEXT: s_setpc_b64 s[30:31]13898;13899; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_3_5:13900; GFX942: ; %bb.0:13901; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13902; GFX942-NEXT: ;;#ASMSTART13903; GFX942-NEXT: ; def s[0:1]13904; GFX942-NEXT: ;;#ASMEND13905; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s113906; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113907; GFX942-NEXT: ;;#ASMSTART13908; GFX942-NEXT: ; use s[8:9]13909; GFX942-NEXT: ;;#ASMEND13910; GFX942-NEXT: s_setpc_b64 s[30:31]13911 %vec0 = call <4 x i16> asm "; def $0", "=s"()13912 %vec1 = call <4 x i16> asm "; def $0", "=s"()13913 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13914 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13915 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 5>13916 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13917 ret void13918}13919 13920define void @s_shuffle_v4i16_v3i16__5_5_4_5() {13921; GFX900-LABEL: s_shuffle_v4i16_v3i16__5_5_4_5:13922; GFX900: ; %bb.0:13923; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13924; GFX900-NEXT: ;;#ASMSTART13925; GFX900-NEXT: ; def s[4:5]13926; GFX900-NEXT: ;;#ASMEND13927; GFX900-NEXT: s_lshr_b32 s4, s4, 1613928; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s513929; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s513930; GFX900-NEXT: ;;#ASMSTART13931; GFX900-NEXT: ; use s[8:9]13932; GFX900-NEXT: ;;#ASMEND13933; GFX900-NEXT: s_setpc_b64 s[30:31]13934;13935; GFX90A-LABEL: s_shuffle_v4i16_v3i16__5_5_4_5:13936; GFX90A: ; %bb.0:13937; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13938; GFX90A-NEXT: ;;#ASMSTART13939; GFX90A-NEXT: ; def s[4:5]13940; GFX90A-NEXT: ;;#ASMEND13941; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613942; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s513943; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s513944; GFX90A-NEXT: ;;#ASMSTART13945; GFX90A-NEXT: ; use s[8:9]13946; GFX90A-NEXT: ;;#ASMEND13947; GFX90A-NEXT: s_setpc_b64 s[30:31]13948;13949; GFX942-LABEL: s_shuffle_v4i16_v3i16__5_5_4_5:13950; GFX942: ; %bb.0:13951; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13952; GFX942-NEXT: ;;#ASMSTART13953; GFX942-NEXT: ; def s[0:1]13954; GFX942-NEXT: ;;#ASMEND13955; GFX942-NEXT: s_lshr_b32 s0, s0, 1613956; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s113957; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113958; GFX942-NEXT: ;;#ASMSTART13959; GFX942-NEXT: ; use s[8:9]13960; GFX942-NEXT: ;;#ASMEND13961; GFX942-NEXT: s_setpc_b64 s[30:31]13962 %vec0 = call <4 x i16> asm "; def $0", "=s"()13963 %vec1 = call <4 x i16> asm "; def $0", "=s"()13964 %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13965 %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>13966 %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 5>13967 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %shuf)13968 ret void13969}13970;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:13971; GFX90APLUS: {{.*}}13972