14242 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_v4f16_v3f16__u_u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v4f16_v3f16__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 half> asm "; def $0", "=v"()13 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> poison15 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 816 ret void17}18 19define void @v_shuffle_v4f16_v3f16__0_u_u_u(ptr addrspace(1) inreg %ptr) {20; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()53 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>54 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>55 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 856 ret void57}58 59define void @v_shuffle_v4f16_v3f16__1_u_u_u(ptr addrspace(1) inreg %ptr) {60; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()96 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>97 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>98 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 899 ret void100}101 102define void @v_shuffle_v4f16_v3f16__2_u_u_u(ptr addrspace(1) inreg %ptr) {103; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()138 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>139 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>140 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8141 ret void142}143 144define void @v_shuffle_v4f16_v3f16__3_u_u_u(ptr addrspace(1) inreg %ptr) {145; GFX9-LABEL: v_shuffle_v4f16_v3f16__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 half> asm "; def $0", "=v"()150 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>151 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>152 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8153 ret void154}155 156define void @v_shuffle_v4f16_v3f16__4_u_u_u(ptr addrspace(1) inreg %ptr) {157; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()193 %vec1 = call <4 x half> asm "; def $0", "=v"()194 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>195 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>196 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 poison, i32 poison, i32 poison>197 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8198 ret void199}200 201define void @v_shuffle_v4f16_v3f16__5_u_u_u(ptr addrspace(1) inreg %ptr) {202; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()237 %vec1 = call <4 x half> asm "; def $0", "=v"()238 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>239 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>240 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 poison, i32 poison>241 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8242 ret void243}244 245define void @v_shuffle_v4f16_v3f16__5_0_u_u(ptr addrspace(1) inreg %ptr) {246; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()295 %vec1 = call <4 x half> asm "; def $0", "=v"()296 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>297 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>298 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 poison, i32 poison>299 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8300 ret void301}302 303define void @v_shuffle_v4f16_v3f16__5_1_u_u(ptr addrspace(1) inreg %ptr) {304; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()353 %vec1 = call <4 x half> asm "; def $0", "=v"()354 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>355 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>356 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 poison, i32 poison>357 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8358 ret void359}360 361define void @v_shuffle_v4f16_v3f16__5_2_u_u(ptr addrspace(1) inreg %ptr) {362; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()411 %vec1 = call <4 x half> asm "; def $0", "=v"()412 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>413 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>414 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 poison, i32 poison>415 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8416 ret void417}418 419define void @v_shuffle_v4f16_v3f16__5_3_u_u(ptr addrspace(1) inreg %ptr) {420; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()459 %vec1 = call <4 x half> asm "; def $0", "=v"()460 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>461 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>462 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 poison, i32 poison>463 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8464 ret void465}466 467define void @v_shuffle_v4f16_v3f16__5_4_u_u(ptr addrspace(1) inreg %ptr) {468; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()507 %vec1 = call <4 x half> asm "; def $0", "=v"()508 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>509 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>510 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 poison, i32 poison>511 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8512 ret void513}514 515define void @v_shuffle_v4f16_v3f16__5_5_u_u(ptr addrspace(1) inreg %ptr) {516; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()555 %vec1 = call <4 x half> asm "; def $0", "=v"()556 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>557 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>558 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 poison>559 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8560 ret void561}562 563define void @v_shuffle_v4f16_v3f16__5_5_0_u(ptr addrspace(1) inreg %ptr) {564; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()614 %vec1 = call <4 x half> asm "; def $0", "=v"()615 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>616 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>617 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 poison>618 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8619 ret void620}621 622define void @v_shuffle_v4f16_v3f16__5_5_1_u(ptr addrspace(1) inreg %ptr) {623; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()674 %vec1 = call <4 x half> asm "; def $0", "=v"()675 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>676 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>677 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 poison>678 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8679 ret void680}681 682define void @v_shuffle_v4f16_v3f16__5_5_2_u(ptr addrspace(1) inreg %ptr) {683; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()732 %vec1 = call <4 x half> asm "; def $0", "=v"()733 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>734 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>735 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 poison>736 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8737 ret void738}739 740define void @v_shuffle_v4f16_v3f16__5_5_3_u(ptr addrspace(1) inreg %ptr) {741; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()783 %vec1 = call <4 x half> asm "; def $0", "=v"()784 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>785 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>786 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>787 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8788 ret void789}790 791define void @v_shuffle_v4f16_v3f16__5_5_4_u(ptr addrspace(1) inreg %ptr) {792; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()835 %vec1 = call <4 x half> asm "; def $0", "=v"()836 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>837 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>838 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>839 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8840 ret void841}842 843define void @v_shuffle_v4f16_v3f16__5_5_5_u(ptr addrspace(1) inreg %ptr) {844; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()883 %vec1 = call <4 x half> asm "; def $0", "=v"()884 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>885 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>886 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>887 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8888 ret void889}890 891define void @v_shuffle_v4f16_v3f16__5_5_5_0(ptr addrspace(1) inreg %ptr) {892; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()944 %vec1 = call <4 x half> asm "; def $0", "=v"()945 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>946 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>947 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 0>948 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 8949 ret void950}951 952define void @v_shuffle_v4f16_v3f16__5_5_5_1(ptr addrspace(1) inreg %ptr) {953; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1007 %vec1 = call <4 x half> asm "; def $0", "=v"()1008 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1009 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1010 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 1>1011 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81012 ret void1013}1014 1015define void @v_shuffle_v4f16_v3f16__5_5_5_2(ptr addrspace(1) inreg %ptr) {1016; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1068 %vec1 = call <4 x half> asm "; def $0", "=v"()1069 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1070 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1071 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 2>1072 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81073 ret void1074}1075 1076define void @v_shuffle_v4f16_v3f16__5_5_5_3(ptr addrspace(1) inreg %ptr) {1077; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1120 %vec1 = call <4 x half> asm "; def $0", "=v"()1121 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1122 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1123 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 3>1124 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81125 ret void1126}1127 1128define void @v_shuffle_v4f16_v3f16__5_5_5_4(ptr addrspace(1) inreg %ptr) {1129; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1174 %vec1 = call <4 x half> asm "; def $0", "=v"()1175 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1176 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1177 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 4>1178 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81179 ret void1180}1181 1182define void @v_shuffle_v4f16_v3f16__5_5_5_5(ptr addrspace(1) inreg %ptr) {1183; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1225 %vec1 = call <4 x half> asm "; def $0", "=v"()1226 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1227 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1228 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 5>1229 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81230 ret void1231}1232 1233define void @v_shuffle_v4f16_v3f16__u_0_0_0(ptr addrspace(1) inreg %ptr) {1234; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1276 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1277 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>1278 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81279 ret void1280}1281 1282define void @v_shuffle_v4f16_v3f16__0_0_0_0(ptr addrspace(1) inreg %ptr) {1283; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1325 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1326 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> zeroinitializer1327 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81328 ret void1329}1330 1331define void @v_shuffle_v4f16_v3f16__1_0_0_0(ptr addrspace(1) inreg %ptr) {1332; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1374 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1375 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>1376 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81377 ret void1378}1379 1380define void @v_shuffle_v4f16_v3f16__2_0_0_0(ptr addrspace(1) inreg %ptr) {1381; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1424 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1425 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>1426 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81427 ret void1428}1429 1430define void @v_shuffle_v4f16_v3f16__3_0_0_0(ptr addrspace(1) inreg %ptr) {1431; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1473 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1474 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>1475 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81476 ret void1477}1478 1479define void @v_shuffle_v4f16_v3f16__4_0_0_0(ptr addrspace(1) inreg %ptr) {1480; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1531 %vec1 = call <4 x half> asm "; def $0", "=v"()1532 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1533 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1534 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 0, i32 0, i32 0>1535 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81536 ret void1537}1538 1539define void @v_shuffle_v4f16_v3f16__5_0_0_0(ptr addrspace(1) inreg %ptr) {1540; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1592 %vec1 = call <4 x half> asm "; def $0", "=v"()1593 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1594 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1595 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 0, i32 0>1596 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81597 ret void1598}1599 1600define void @v_shuffle_v4f16_v3f16__5_u_0_0(ptr addrspace(1) inreg %ptr) {1601; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1651 %vec1 = call <4 x half> asm "; def $0", "=v"()1652 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1653 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1654 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>1655 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81656 ret void1657}1658 1659define void @v_shuffle_v4f16_v3f16__5_1_0_0(ptr addrspace(1) inreg %ptr) {1660; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1714 %vec1 = call <4 x half> asm "; def $0", "=v"()1715 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1716 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1717 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 0, i32 0>1718 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81719 ret void1720}1721 1722define void @v_shuffle_v4f16_v3f16__5_2_0_0(ptr addrspace(1) inreg %ptr) {1723; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1775 %vec1 = call <4 x half> asm "; def $0", "=v"()1776 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1777 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1778 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 0, i32 0>1779 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81780 ret void1781}1782 1783define void @v_shuffle_v4f16_v3f16__5_3_0_0(ptr addrspace(1) inreg %ptr) {1784; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1835 %vec1 = call <4 x half> asm "; def $0", "=v"()1836 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1837 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1838 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 0, i32 0>1839 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81840 ret void1841}1842 1843define void @v_shuffle_v4f16_v3f16__5_4_0_0(ptr addrspace(1) inreg %ptr) {1844; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1899 %vec1 = call <4 x half> asm "; def $0", "=v"()1900 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1901 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1902 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 0, i32 0>1903 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81904 ret void1905}1906 1907define void @v_shuffle_v4f16_v3f16__5_5_0_0(ptr addrspace(1) inreg %ptr) {1908; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()1959 %vec1 = call <4 x half> asm "; def $0", "=v"()1960 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1961 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>1962 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 0>1963 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 81964 ret void1965}1966 1967define void @v_shuffle_v4f16_v3f16__5_5_u_0(ptr addrspace(1) inreg %ptr) {1968; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2019 %vec1 = call <4 x half> asm "; def $0", "=v"()2020 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2021 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2022 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>2023 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82024 ret void2025}2026 2027define void @v_shuffle_v4f16_v3f16__5_5_1_0(ptr addrspace(1) inreg %ptr) {2028; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2079 %vec1 = call <4 x half> asm "; def $0", "=v"()2080 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2081 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2082 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 0>2083 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82084 ret void2085}2086 2087define void @v_shuffle_v4f16_v3f16__5_5_2_0(ptr addrspace(1) inreg %ptr) {2088; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2139 %vec1 = call <4 x half> asm "; def $0", "=v"()2140 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2141 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2142 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 0>2143 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82144 ret void2145}2146 2147define void @v_shuffle_v4f16_v3f16__5_5_3_0(ptr addrspace(1) inreg %ptr) {2148; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2200 %vec1 = call <4 x half> asm "; def $0", "=v"()2201 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2202 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2203 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 0>2204 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82205 ret void2206}2207 2208define void @v_shuffle_v4f16_v3f16__5_5_4_0(ptr addrspace(1) inreg %ptr) {2209; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2261 %vec1 = call <4 x half> asm "; def $0", "=v"()2262 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2263 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2264 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 0>2265 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82266 ret void2267}2268 2269define void @v_shuffle_v4f16_v3f16__u_1_1_1(ptr addrspace(1) inreg %ptr) {2270; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2309 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2310 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>2311 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82312 ret void2313}2314 2315define void @v_shuffle_v4f16_v3f16__0_1_1_1(ptr addrspace(1) inreg %ptr) {2316; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2355 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2356 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>2357 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82358 ret void2359}2360 2361define void @v_shuffle_v4f16_v3f16__1_1_1_1(ptr addrspace(1) inreg %ptr) {2362; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2404 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2405 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>2406 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82407 ret void2408}2409 2410define void @v_shuffle_v4f16_v3f16__2_1_1_1(ptr addrspace(1) inreg %ptr) {2411; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2456 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2457 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>2458 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82459 ret void2460}2461 2462define void @v_shuffle_v4f16_v3f16__3_1_1_1(ptr addrspace(1) inreg %ptr) {2463; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2502 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2503 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>2504 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82505 ret void2506}2507 2508define void @v_shuffle_v4f16_v3f16__4_1_1_1(ptr addrspace(1) inreg %ptr) {2509; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2561 %vec1 = call <4 x half> asm "; def $0", "=v"()2562 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2563 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2564 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 1, i32 1, i32 1>2565 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82566 ret void2567}2568 2569define void @v_shuffle_v4f16_v3f16__5_1_1_1(ptr addrspace(1) inreg %ptr) {2570; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2624 %vec1 = call <4 x half> asm "; def $0", "=v"()2625 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2626 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2627 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 1, i32 1>2628 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82629 ret void2630}2631 2632define void @v_shuffle_v4f16_v3f16__5_u_1_1(ptr addrspace(1) inreg %ptr) {2633; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2683 %vec1 = call <4 x half> asm "; def $0", "=v"()2684 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2685 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2686 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>2687 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82688 ret void2689}2690 2691define void @v_shuffle_v4f16_v3f16__5_0_1_1(ptr addrspace(1) inreg %ptr) {2692; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2746 %vec1 = call <4 x half> asm "; def $0", "=v"()2747 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2748 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2749 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 1, i32 1>2750 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82751 ret void2752}2753 2754define void @v_shuffle_v4f16_v3f16__5_2_1_1(ptr addrspace(1) inreg %ptr) {2755; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2809 %vec1 = call <4 x half> asm "; def $0", "=v"()2810 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2811 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2812 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 1, i32 1>2813 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82814 ret void2815}2816 2817define void @v_shuffle_v4f16_v3f16__5_3_1_1(ptr addrspace(1) inreg %ptr) {2818; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2873 %vec1 = call <4 x half> asm "; def $0", "=v"()2874 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2875 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2876 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 1, i32 1>2877 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82878 ret void2879}2880 2881define void @v_shuffle_v4f16_v3f16__5_4_1_1(ptr addrspace(1) inreg %ptr) {2882; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()2937 %vec1 = call <4 x half> asm "; def $0", "=v"()2938 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2939 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>2940 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 1, i32 1>2941 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 82942 ret void2943}2944 2945define void @v_shuffle_v4f16_v3f16__5_5_1_1(ptr addrspace(1) inreg %ptr) {2946; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3001 %vec1 = call <4 x half> asm "; def $0", "=v"()3002 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3003 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3004 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 1>3005 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83006 ret void3007}3008 3009define void @v_shuffle_v4f16_v3f16__5_5_u_1(ptr addrspace(1) inreg %ptr) {3010; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3060 %vec1 = call <4 x half> asm "; def $0", "=v"()3061 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3062 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3063 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>3064 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83065 ret void3066}3067 3068define void @v_shuffle_v4f16_v3f16__5_5_0_1(ptr addrspace(1) inreg %ptr) {3069; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3119 %vec1 = call <4 x half> asm "; def $0", "=v"()3120 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3121 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3122 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 1>3123 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83124 ret void3125}3126 3127define void @v_shuffle_v4f16_v3f16__5_5_2_1(ptr addrspace(1) inreg %ptr) {3128; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3183 %vec1 = call <4 x half> asm "; def $0", "=v"()3184 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3185 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3186 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 1>3187 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83188 ret void3189}3190 3191define void @v_shuffle_v4f16_v3f16__5_5_3_1(ptr addrspace(1) inreg %ptr) {3192; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3246 %vec1 = call <4 x half> asm "; def $0", "=v"()3247 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3248 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3249 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 1>3250 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83251 ret void3252}3253 3254define void @v_shuffle_v4f16_v3f16__5_5_4_1(ptr addrspace(1) inreg %ptr) {3255; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3309 %vec1 = call <4 x half> asm "; def $0", "=v"()3310 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3311 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3312 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 1>3313 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83314 ret void3315}3316 3317define void @v_shuffle_v4f16_v3f16__u_2_2_2(ptr addrspace(1) inreg %ptr) {3318; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3361 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3362 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>3363 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83364 ret void3365}3366 3367define void @v_shuffle_v4f16_v3f16__0_2_2_2(ptr addrspace(1) inreg %ptr) {3368; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3410 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3411 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>3412 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83413 ret void3414}3415 3416define void @v_shuffle_v4f16_v3f16__1_2_2_2(ptr addrspace(1) inreg %ptr) {3417; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3460 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3461 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>3462 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83463 ret void3464}3465 3466define void @v_shuffle_v4f16_v3f16__2_2_2_2(ptr addrspace(1) inreg %ptr) {3467; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3509 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3510 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>3511 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83512 ret void3513}3514 3515define void @v_shuffle_v4f16_v3f16__3_2_2_2(ptr addrspace(1) inreg %ptr) {3516; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3559 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3560 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>3561 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83562 ret void3563}3564 3565define void @v_shuffle_v4f16_v3f16__4_2_2_2(ptr addrspace(1) inreg %ptr) {3566; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3618 %vec1 = call <4 x half> asm "; def $0", "=v"()3619 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3620 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3621 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 2, i32 2, i32 2>3622 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83623 ret void3624}3625 3626define void @v_shuffle_v4f16_v3f16__5_2_2_2(ptr addrspace(1) inreg %ptr) {3627; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3679 %vec1 = call <4 x half> asm "; def $0", "=v"()3680 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3681 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3682 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 2, i32 2>3683 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83684 ret void3685}3686 3687define void @v_shuffle_v4f16_v3f16__5_u_2_2(ptr addrspace(1) inreg %ptr) {3688; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3738 %vec1 = call <4 x half> asm "; def $0", "=v"()3739 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3740 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3741 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>3742 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83743 ret void3744}3745 3746define void @v_shuffle_v4f16_v3f16__5_0_2_2(ptr addrspace(1) inreg %ptr) {3747; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3798 %vec1 = call <4 x half> asm "; def $0", "=v"()3799 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3800 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3801 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 2, i32 2>3802 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83803 ret void3804}3805 3806define void @v_shuffle_v4f16_v3f16__5_1_2_2(ptr addrspace(1) inreg %ptr) {3807; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3861 %vec1 = call <4 x half> asm "; def $0", "=v"()3862 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3863 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3864 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 2, i32 2>3865 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83866 ret void3867}3868 3869define void @v_shuffle_v4f16_v3f16__5_3_2_2(ptr addrspace(1) inreg %ptr) {3870; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3921 %vec1 = call <4 x half> asm "; def $0", "=v"()3922 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3923 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3924 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 2, i32 2>3925 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83926 ret void3927}3928 3929define void @v_shuffle_v4f16_v3f16__5_4_2_2(ptr addrspace(1) inreg %ptr) {3930; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()3984 %vec1 = call <4 x half> asm "; def $0", "=v"()3985 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3986 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>3987 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 2, i32 2>3988 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 83989 ret void3990}3991 3992define void @v_shuffle_v4f16_v3f16__5_5_2_2(ptr addrspace(1) inreg %ptr) {3993; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4044 %vec1 = call <4 x half> asm "; def $0", "=v"()4045 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4046 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4047 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 2>4048 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84049 ret void4050}4051 4052define void @v_shuffle_v4f16_v3f16__5_5_u_2(ptr addrspace(1) inreg %ptr) {4053; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4104 %vec1 = call <4 x half> asm "; def $0", "=v"()4105 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4106 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4107 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>4108 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84109 ret void4110}4111 4112define void @v_shuffle_v4f16_v3f16__5_5_0_2(ptr addrspace(1) inreg %ptr) {4113; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4164 %vec1 = call <4 x half> asm "; def $0", "=v"()4165 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4166 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4167 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 2>4168 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84169 ret void4170}4171 4172define void @v_shuffle_v4f16_v3f16__5_5_1_2(ptr addrspace(1) inreg %ptr) {4173; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4224 %vec1 = call <4 x half> asm "; def $0", "=v"()4225 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4226 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4227 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 2>4228 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84229 ret void4230}4231 4232define void @v_shuffle_v4f16_v3f16__5_5_3_2(ptr addrspace(1) inreg %ptr) {4233; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4285 %vec1 = call <4 x half> asm "; def $0", "=v"()4286 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4287 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4288 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 2>4289 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84290 ret void4291}4292 4293define void @v_shuffle_v4f16_v3f16__5_5_4_2(ptr addrspace(1) inreg %ptr) {4294; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4346 %vec1 = call <4 x half> asm "; def $0", "=v"()4347 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4348 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4349 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 2>4350 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84351 ret void4352}4353 4354define void @v_shuffle_v4f16_v3f16__u_3_3_3(ptr addrspace(1) inreg %ptr) {4355; GFX9-LABEL: v_shuffle_v4f16_v3f16__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 half> asm "; def $0", "=v"()4360 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4361 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>4362 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84363 ret void4364}4365 4366define void @v_shuffle_v4f16_v3f16__0_3_3_3(ptr addrspace(1) inreg %ptr) {4367; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4400 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4401 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>4402 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84403 ret void4404}4405 4406define void @v_shuffle_v4f16_v3f16__1_3_3_3(ptr addrspace(1) inreg %ptr) {4407; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4443 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4444 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>4445 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84446 ret void4447}4448 4449define void @v_shuffle_v4f16_v3f16__2_3_3_3(ptr addrspace(1) inreg %ptr) {4450; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4485 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4486 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>4487 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84488 ret void4489}4490 4491define void @v_shuffle_v4f16_v3f16__3_3_3_3(ptr addrspace(1) inreg %ptr) {4492; GFX9-LABEL: v_shuffle_v4f16_v3f16__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 half> asm "; def $0", "=v"()4497 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4498 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>4499 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84500 ret void4501}4502 4503define void @v_shuffle_v4f16_v3f16__4_3_3_3(ptr addrspace(1) inreg %ptr) {4504; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4546 %vec1 = call <4 x half> asm "; def $0", "=v"()4547 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4548 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4549 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 3, i32 3, i32 3>4550 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84551 ret void4552}4553 4554define void @v_shuffle_v4f16_v3f16__5_3_3_3(ptr addrspace(1) inreg %ptr) {4555; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4598 %vec1 = call <4 x half> asm "; def $0", "=v"()4599 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4600 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4601 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 3, i32 3>4602 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84603 ret void4604}4605 4606define void @v_shuffle_v4f16_v3f16__5_u_3_3(ptr addrspace(1) inreg %ptr) {4607; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4649 %vec1 = call <4 x half> asm "; def $0", "=v"()4650 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4651 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4652 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>4653 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84654 ret void4655}4656 4657define void @v_shuffle_v4f16_v3f16__5_0_3_3(ptr addrspace(1) inreg %ptr) {4658; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4710 %vec1 = call <4 x half> asm "; def $0", "=v"()4711 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4712 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4713 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 3, i32 3>4714 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84715 ret void4716}4717 4718define void @v_shuffle_v4f16_v3f16__5_1_3_3(ptr addrspace(1) inreg %ptr) {4719; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4773 %vec1 = call <4 x half> asm "; def $0", "=v"()4774 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4775 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4776 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 3, i32 3>4777 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84778 ret void4779}4780 4781define void @v_shuffle_v4f16_v3f16__5_2_3_3(ptr addrspace(1) inreg %ptr) {4782; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4834 %vec1 = call <4 x half> asm "; def $0", "=v"()4835 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4836 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4837 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 3, i32 3>4838 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84839 ret void4840}4841 4842define void @v_shuffle_v4f16_v3f16__5_4_3_3(ptr addrspace(1) inreg %ptr) {4843; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4888 %vec1 = call <4 x half> asm "; def $0", "=v"()4889 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4890 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4891 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 3, i32 3>4892 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84893 ret void4894}4895 4896define void @v_shuffle_v4f16_v3f16__5_5_3_3(ptr addrspace(1) inreg %ptr) {4897; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4940 %vec1 = call <4 x half> asm "; def $0", "=v"()4941 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4942 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4943 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 3>4944 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84945 ret void4946}4947 4948define void @v_shuffle_v4f16_v3f16__5_5_u_3(ptr addrspace(1) inreg %ptr) {4949; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()4992 %vec1 = call <4 x half> asm "; def $0", "=v"()4993 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4994 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>4995 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>4996 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 84997 ret void4998}4999 5000define void @v_shuffle_v4f16_v3f16__5_5_0_3(ptr addrspace(1) inreg %ptr) {5001; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5053 %vec1 = call <4 x half> asm "; def $0", "=v"()5054 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5055 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5056 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 3>5057 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85058 ret void5059}5060 5061define void @v_shuffle_v4f16_v3f16__5_5_1_3(ptr addrspace(1) inreg %ptr) {5062; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5114 %vec1 = call <4 x half> asm "; def $0", "=v"()5115 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5116 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5117 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 3>5118 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85119 ret void5120}5121 5122define void @v_shuffle_v4f16_v3f16__5_5_2_3(ptr addrspace(1) inreg %ptr) {5123; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5175 %vec1 = call <4 x half> asm "; def $0", "=v"()5176 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5177 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5178 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 3>5179 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85180 ret void5181}5182 5183define void @v_shuffle_v4f16_v3f16__5_5_4_3(ptr addrspace(1) inreg %ptr) {5184; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5227 %vec1 = call <4 x half> asm "; def $0", "=v"()5228 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5229 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5230 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 3>5231 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85232 ret void5233}5234 5235define void @v_shuffle_v4f16_v3f16__u_4_4_4(ptr addrspace(1) inreg %ptr) {5236; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5275 %vec1 = call <4 x half> asm "; def $0", "=v"()5276 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5277 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5278 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>5279 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85280 ret void5281}5282 5283define void @v_shuffle_v4f16_v3f16__0_4_4_4(ptr addrspace(1) inreg %ptr) {5284; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5338 %vec1 = call <4 x half> asm "; def $0", "=v"()5339 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5340 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5341 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 0, i32 4, i32 4, i32 4>5342 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85343 ret void5344}5345 5346define void @v_shuffle_v4f16_v3f16__1_4_4_4(ptr addrspace(1) inreg %ptr) {5347; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5399 %vec1 = call <4 x half> asm "; def $0", "=v"()5400 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5401 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5402 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 1, i32 4, i32 4, i32 4>5403 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85404 ret void5405}5406 5407define void @v_shuffle_v4f16_v3f16__2_4_4_4(ptr addrspace(1) inreg %ptr) {5408; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5462 %vec1 = call <4 x half> asm "; def $0", "=v"()5463 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5464 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5465 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 2, i32 4, i32 4, i32 4>5466 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85467 ret void5468}5469 5470define void @v_shuffle_v4f16_v3f16__3_4_4_4(ptr addrspace(1) inreg %ptr) {5471; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5510 %vec1 = call <4 x half> asm "; def $0", "=v"()5511 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5512 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5513 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 3, i32 4, i32 4, i32 4>5514 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85515 ret void5516}5517 5518define void @v_shuffle_v4f16_v3f16__4_4_4_4(ptr addrspace(1) inreg %ptr) {5519; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5561 %vec1 = call <4 x half> asm "; def $0", "=v"()5562 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5563 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5564 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 4, i32 4, i32 4>5565 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85566 ret void5567}5568 5569define void @v_shuffle_v4f16_v3f16__5_4_4_4(ptr addrspace(1) inreg %ptr) {5570; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5615 %vec1 = call <4 x half> asm "; def $0", "=v"()5616 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5617 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5618 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 4, i32 4>5619 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85620 ret void5621}5622 5623define void @v_shuffle_v4f16_v3f16__5_u_4_4(ptr addrspace(1) inreg %ptr) {5624; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5666 %vec1 = call <4 x half> asm "; def $0", "=v"()5667 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5668 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5669 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>5670 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85671 ret void5672}5673 5674define void @v_shuffle_v4f16_v3f16__5_0_4_4(ptr addrspace(1) inreg %ptr) {5675; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5729 %vec1 = call <4 x half> asm "; def $0", "=v"()5730 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5731 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5732 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 4, i32 4>5733 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85734 ret void5735}5736 5737define void @v_shuffle_v4f16_v3f16__5_1_4_4(ptr addrspace(1) inreg %ptr) {5738; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5792 %vec1 = call <4 x half> asm "; def $0", "=v"()5793 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5794 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5795 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 4, i32 4>5796 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85797 ret void5798}5799 5800define void @v_shuffle_v4f16_v3f16__5_2_4_4(ptr addrspace(1) inreg %ptr) {5801; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5855 %vec1 = call <4 x half> asm "; def $0", "=v"()5856 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5857 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5858 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 4, i32 4>5859 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85860 ret void5861}5862 5863define void @v_shuffle_v4f16_v3f16__5_3_4_4(ptr addrspace(1) inreg %ptr) {5864; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5909 %vec1 = call <4 x half> asm "; def $0", "=v"()5910 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5911 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5912 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 4, i32 4>5913 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85914 ret void5915}5916 5917define void @v_shuffle_v4f16_v3f16__5_5_4_4(ptr addrspace(1) inreg %ptr) {5918; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()5963 %vec1 = call <4 x half> asm "; def $0", "=v"()5964 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5965 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>5966 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 4>5967 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 85968 ret void5969}5970 5971define void @v_shuffle_v4f16_v3f16__5_5_u_4(ptr addrspace(1) inreg %ptr) {5972; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6014 %vec1 = call <4 x half> asm "; def $0", "=v"()6015 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6016 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6017 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>6018 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86019 ret void6020}6021 6022define void @v_shuffle_v4f16_v3f16__5_5_0_4(ptr addrspace(1) inreg %ptr) {6023; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6077 %vec1 = call <4 x half> asm "; def $0", "=v"()6078 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6079 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6080 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 4>6081 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86082 ret void6083}6084 6085define void @v_shuffle_v4f16_v3f16__5_5_1_4(ptr addrspace(1) inreg %ptr) {6086; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6140 %vec1 = call <4 x half> asm "; def $0", "=v"()6141 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6142 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6143 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 4>6144 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86145 ret void6146}6147 6148define void @v_shuffle_v4f16_v3f16__5_5_2_4(ptr addrspace(1) inreg %ptr) {6149; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6203 %vec1 = call <4 x half> asm "; def $0", "=v"()6204 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6205 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6206 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 4>6207 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86208 ret void6209}6210 6211define void @v_shuffle_v4f16_v3f16__5_5_3_4(ptr addrspace(1) inreg %ptr) {6212; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6254 %vec1 = call <4 x half> asm "; def $0", "=v"()6255 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6256 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6257 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 4>6258 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86259 ret void6260}6261 6262define void @v_shuffle_v4f16_v3f16__u_5_5_5(ptr addrspace(1) inreg %ptr) {6263; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6306 %vec1 = call <4 x half> asm "; def $0", "=v"()6307 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6308 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6309 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>6310 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86311 ret void6312}6313 6314define void @v_shuffle_v4f16_v3f16__0_5_5_5(ptr addrspace(1) inreg %ptr) {6315; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6367 %vec1 = call <4 x half> asm "; def $0", "=v"()6368 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6369 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6370 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 0, i32 5, i32 5, i32 5>6371 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86372 ret void6373}6374 6375define void @v_shuffle_v4f16_v3f16__1_5_5_5(ptr addrspace(1) inreg %ptr) {6376; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6428 %vec1 = call <4 x half> asm "; def $0", "=v"()6429 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6430 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6431 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 1, i32 5, i32 5, i32 5>6432 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86433 ret void6434}6435 6436define void @v_shuffle_v4f16_v3f16__2_5_5_5(ptr addrspace(1) inreg %ptr) {6437; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6489 %vec1 = call <4 x half> asm "; def $0", "=v"()6490 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6491 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6492 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 2, i32 5, i32 5, i32 5>6493 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86494 ret void6495}6496 6497define void @v_shuffle_v4f16_v3f16__3_5_5_5(ptr addrspace(1) inreg %ptr) {6498; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6540 %vec1 = call <4 x half> asm "; def $0", "=v"()6541 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6542 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6543 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 3, i32 5, i32 5, i32 5>6544 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86545 ret void6546}6547 6548define void @v_shuffle_v4f16_v3f16__4_5_5_5(ptr addrspace(1) inreg %ptr) {6549; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6592 %vec1 = call <4 x half> asm "; def $0", "=v"()6593 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6594 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6595 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 5, i32 5, i32 5>6596 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86597 ret void6598}6599 6600define void @v_shuffle_v4f16_v3f16__5_u_5_5(ptr addrspace(1) inreg %ptr) {6601; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6643 %vec1 = call <4 x half> asm "; def $0", "=v"()6644 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6645 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6646 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>6647 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86648 ret void6649}6650 6651define void @v_shuffle_v4f16_v3f16__5_0_5_5(ptr addrspace(1) inreg %ptr) {6652; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6704 %vec1 = call <4 x half> asm "; def $0", "=v"()6705 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6706 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6707 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 5, i32 5>6708 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86709 ret void6710}6711 6712define void @v_shuffle_v4f16_v3f16__5_1_5_5(ptr addrspace(1) inreg %ptr) {6713; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6767 %vec1 = call <4 x half> asm "; def $0", "=v"()6768 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6769 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6770 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 5, i32 5>6771 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86772 ret void6773}6774 6775define void @v_shuffle_v4f16_v3f16__5_2_5_5(ptr addrspace(1) inreg %ptr) {6776; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6828 %vec1 = call <4 x half> asm "; def $0", "=v"()6829 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6830 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6831 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 5, i32 5>6832 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86833 ret void6834}6835 6836define void @v_shuffle_v4f16_v3f16__5_3_5_5(ptr addrspace(1) inreg %ptr) {6837; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6879 %vec1 = call <4 x half> asm "; def $0", "=v"()6880 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6881 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6882 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 5, i32 5>6883 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86884 ret void6885}6886 6887define void @v_shuffle_v4f16_v3f16__5_4_5_5(ptr addrspace(1) inreg %ptr) {6888; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6933 %vec1 = call <4 x half> asm "; def $0", "=v"()6934 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6935 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6936 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 5, i32 5>6937 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86938 ret void6939}6940 6941define void @v_shuffle_v4f16_v3f16__5_5_u_5(ptr addrspace(1) inreg %ptr) {6942; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()6984 %vec1 = call <4 x half> asm "; def $0", "=v"()6985 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6986 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>6987 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>6988 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 86989 ret void6990}6991 6992define void @v_shuffle_v4f16_v3f16__5_5_0_5(ptr addrspace(1) inreg %ptr) {6993; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()7045 %vec1 = call <4 x half> asm "; def $0", "=v"()7046 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7047 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7048 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 5>7049 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 87050 ret void7051}7052 7053define void @v_shuffle_v4f16_v3f16__5_5_1_5(ptr addrspace(1) inreg %ptr) {7054; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()7106 %vec1 = call <4 x half> asm "; def $0", "=v"()7107 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7108 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7109 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 5>7110 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 87111 ret void7112}7113 7114define void @v_shuffle_v4f16_v3f16__5_5_2_5(ptr addrspace(1) inreg %ptr) {7115; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()7167 %vec1 = call <4 x half> asm "; def $0", "=v"()7168 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7169 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7170 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 5>7171 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 87172 ret void7173}7174 7175define void @v_shuffle_v4f16_v3f16__5_5_3_5(ptr addrspace(1) inreg %ptr) {7176; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()7219 %vec1 = call <4 x half> asm "; def $0", "=v"()7220 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7221 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7222 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 5>7223 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 87224 ret void7225}7226 7227define void @v_shuffle_v4f16_v3f16__5_5_4_5(ptr addrspace(1) inreg %ptr) {7228; GFX900-LABEL: v_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=v"()7271 %vec1 = call <4 x half> asm "; def $0", "=v"()7272 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7273 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7274 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 5>7275 store <4 x half> %shuf, ptr addrspace(1) %ptr, align 87276 ret void7277}7278 7279define void @s_shuffle_v4f16_v3f16__u_u_u_u() {7280; GFX9-LABEL: s_shuffle_v4f16_v3f16__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 half> asm "; def $0", "=s"()7288 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7289 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> poison7290 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7291 ret void7292}7293 7294define void @s_shuffle_v4f16_v3f16__0_u_u_u() {7295; GFX900-LABEL: s_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=s"()7329 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7330 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>7331 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7332 ret void7333}7334 7335define void @s_shuffle_v4f16_v3f16__1_u_u_u() {7336; GFX900-LABEL: s_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=s"()7372 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7373 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>7374 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7375 ret void7376}7377 7378define void @s_shuffle_v4f16_v3f16__2_u_u_u() {7379; GFX900-LABEL: s_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=s"()7415 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7416 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>7417 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7418 ret void7419}7420 7421define void @s_shuffle_v4f16_v3f16__3_u_u_u() {7422; GFX9-LABEL: s_shuffle_v4f16_v3f16__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 half> asm "; def $0", "=s"()7430 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7431 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>7432 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7433 ret void7434}7435 7436define void @s_shuffle_v4f16_v3f16__4_u_u_u() {7437; GFX900-LABEL: s_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=s"()7473 %vec1 = call <4 x half> asm "; def $0", "=s"()7474 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7475 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7476 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 poison, i32 poison, i32 poison>7477 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7478 ret void7479}7480 7481define void @s_shuffle_v4f16_v3f16__5_u_u_u() {7482; GFX900-LABEL: s_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=s"()7518 %vec1 = call <4 x half> asm "; def $0", "=s"()7519 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7520 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7521 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 poison, i32 poison>7522 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7523 ret void7524}7525 7526define void @s_shuffle_v4f16_v3f16__5_0_u_u() {7527; GFX900-LABEL: s_shuffle_v4f16_v3f16__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_v4f16_v3f16__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_v4f16_v3f16__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 half> asm "; def $0", "=s"()7572 %vec1 = call <4 x half> asm "; def $0", "=s"()7573 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7574 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7575 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 poison, i32 poison>7576 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7577 ret void7578}7579 7580define void @s_shuffle_v4f16_v3f16__5_1_u_u() {7581; GFX900-LABEL: s_shuffle_v4f16_v3f16__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: s_lshr_b32 s4, s4, 167588; GFX900-NEXT: ;;#ASMSTART7589; GFX900-NEXT: ; def s[6:7]7590; GFX900-NEXT: ;;#ASMEND7591; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s47592; GFX900-NEXT: ;;#ASMSTART7593; GFX900-NEXT: ; use s[8:9]7594; GFX900-NEXT: ;;#ASMEND7595; GFX900-NEXT: s_setpc_b64 s[30:31]7596;7597; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_u_u:7598; GFX90A: ; %bb.0:7599; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7600; GFX90A-NEXT: ;;#ASMSTART7601; GFX90A-NEXT: ; def s[4:5]7602; GFX90A-NEXT: ;;#ASMEND7603; GFX90A-NEXT: s_lshr_b32 s4, s4, 167604; GFX90A-NEXT: ;;#ASMSTART7605; GFX90A-NEXT: ; def s[6:7]7606; GFX90A-NEXT: ;;#ASMEND7607; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s47608; GFX90A-NEXT: ;;#ASMSTART7609; GFX90A-NEXT: ; use s[8:9]7610; GFX90A-NEXT: ;;#ASMEND7611; GFX90A-NEXT: s_setpc_b64 s[30:31]7612;7613; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_u_u:7614; GFX942: ; %bb.0:7615; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7616; GFX942-NEXT: ;;#ASMSTART7617; GFX942-NEXT: ; def s[0:1]7618; GFX942-NEXT: ;;#ASMEND7619; GFX942-NEXT: s_lshr_b32 s0, s0, 167620; GFX942-NEXT: ;;#ASMSTART7621; GFX942-NEXT: ; def s[2:3]7622; GFX942-NEXT: ;;#ASMEND7623; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s07624; GFX942-NEXT: ;;#ASMSTART7625; GFX942-NEXT: ; use s[8:9]7626; GFX942-NEXT: ;;#ASMEND7627; GFX942-NEXT: s_setpc_b64 s[30:31]7628 %vec0 = call <4 x half> asm "; def $0", "=s"()7629 %vec1 = call <4 x half> asm "; def $0", "=s"()7630 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7631 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7632 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 poison, i32 poison>7633 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7634 ret void7635}7636 7637define void @s_shuffle_v4f16_v3f16__5_2_u_u() {7638; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_u_u:7639; GFX900: ; %bb.0:7640; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7641; GFX900-NEXT: ;;#ASMSTART7642; GFX900-NEXT: ; def s[4:5]7643; GFX900-NEXT: ;;#ASMEND7644; GFX900-NEXT: ;;#ASMSTART7645; GFX900-NEXT: ; def s[6:7]7646; GFX900-NEXT: ;;#ASMEND7647; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s57648; GFX900-NEXT: ;;#ASMSTART7649; GFX900-NEXT: ; use s[8:9]7650; GFX900-NEXT: ;;#ASMEND7651; GFX900-NEXT: s_setpc_b64 s[30:31]7652;7653; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_u_u:7654; GFX90A: ; %bb.0:7655; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7656; GFX90A-NEXT: ;;#ASMSTART7657; GFX90A-NEXT: ; def s[4:5]7658; GFX90A-NEXT: ;;#ASMEND7659; GFX90A-NEXT: ;;#ASMSTART7660; GFX90A-NEXT: ; def s[6:7]7661; GFX90A-NEXT: ;;#ASMEND7662; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s57663; GFX90A-NEXT: ;;#ASMSTART7664; GFX90A-NEXT: ; use s[8:9]7665; GFX90A-NEXT: ;;#ASMEND7666; GFX90A-NEXT: s_setpc_b64 s[30:31]7667;7668; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_u_u:7669; GFX942: ; %bb.0:7670; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7671; GFX942-NEXT: ;;#ASMSTART7672; GFX942-NEXT: ; def s[0:1]7673; GFX942-NEXT: ;;#ASMEND7674; GFX942-NEXT: ;;#ASMSTART7675; GFX942-NEXT: ; def s[2:3]7676; GFX942-NEXT: ;;#ASMEND7677; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s17678; GFX942-NEXT: ;;#ASMSTART7679; GFX942-NEXT: ; use s[8:9]7680; GFX942-NEXT: ;;#ASMEND7681; GFX942-NEXT: s_setpc_b64 s[30:31]7682 %vec0 = call <4 x half> asm "; def $0", "=s"()7683 %vec1 = call <4 x half> asm "; def $0", "=s"()7684 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7685 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7686 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 poison, i32 poison>7687 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7688 ret void7689}7690 7691define void @s_shuffle_v4f16_v3f16__5_3_u_u() {7692; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_u_u:7693; GFX900: ; %bb.0:7694; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7695; GFX900-NEXT: ;;#ASMSTART7696; GFX900-NEXT: ; def s[4:5]7697; GFX900-NEXT: ;;#ASMEND7698; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47699; GFX900-NEXT: ;;#ASMSTART7700; GFX900-NEXT: ; use s[8:9]7701; GFX900-NEXT: ;;#ASMEND7702; GFX900-NEXT: s_setpc_b64 s[30:31]7703;7704; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_u_u:7705; GFX90A: ; %bb.0:7706; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7707; GFX90A-NEXT: ;;#ASMSTART7708; GFX90A-NEXT: ; def s[4:5]7709; GFX90A-NEXT: ;;#ASMEND7710; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47711; GFX90A-NEXT: ;;#ASMSTART7712; GFX90A-NEXT: ; use s[8:9]7713; GFX90A-NEXT: ;;#ASMEND7714; GFX90A-NEXT: s_setpc_b64 s[30:31]7715;7716; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_3_u_u:7717; GFX942: ; %bb.0:7718; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7719; GFX942-NEXT: ;;#ASMSTART7720; GFX942-NEXT: ; def s[0:1]7721; GFX942-NEXT: ;;#ASMEND7722; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07723; GFX942-NEXT: ;;#ASMSTART7724; GFX942-NEXT: ; use s[8:9]7725; GFX942-NEXT: ;;#ASMEND7726; GFX942-NEXT: s_setpc_b64 s[30:31]7727 %vec0 = call <4 x half> asm "; def $0", "=s"()7728 %vec1 = call <4 x half> asm "; def $0", "=s"()7729 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7730 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7731 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 poison, i32 poison>7732 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7733 ret void7734}7735 7736define void @s_shuffle_v4f16_v3f16__5_4_u_u() {7737; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_u_u:7738; GFX900: ; %bb.0:7739; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7740; GFX900-NEXT: ;;#ASMSTART7741; GFX900-NEXT: ; def s[4:5]7742; GFX900-NEXT: ;;#ASMEND7743; GFX900-NEXT: s_lshr_b32 s4, s4, 167744; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47745; GFX900-NEXT: ;;#ASMSTART7746; GFX900-NEXT: ; use s[8:9]7747; GFX900-NEXT: ;;#ASMEND7748; GFX900-NEXT: s_setpc_b64 s[30:31]7749;7750; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_u_u:7751; GFX90A: ; %bb.0:7752; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7753; GFX90A-NEXT: ;;#ASMSTART7754; GFX90A-NEXT: ; def s[4:5]7755; GFX90A-NEXT: ;;#ASMEND7756; GFX90A-NEXT: s_lshr_b32 s4, s4, 167757; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47758; GFX90A-NEXT: ;;#ASMSTART7759; GFX90A-NEXT: ; use s[8:9]7760; GFX90A-NEXT: ;;#ASMEND7761; GFX90A-NEXT: s_setpc_b64 s[30:31]7762;7763; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_u_u:7764; GFX942: ; %bb.0:7765; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7766; GFX942-NEXT: ;;#ASMSTART7767; GFX942-NEXT: ; def s[0:1]7768; GFX942-NEXT: ;;#ASMEND7769; GFX942-NEXT: s_lshr_b32 s0, s0, 167770; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07771; GFX942-NEXT: ;;#ASMSTART7772; GFX942-NEXT: ; use s[8:9]7773; GFX942-NEXT: ;;#ASMEND7774; GFX942-NEXT: s_setpc_b64 s[30:31]7775 %vec0 = call <4 x half> asm "; def $0", "=s"()7776 %vec1 = call <4 x half> asm "; def $0", "=s"()7777 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7778 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7779 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 poison, i32 poison>7780 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7781 ret void7782}7783 7784define void @s_shuffle_v4f16_v3f16__5_5_u_u() {7785; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_u:7786; GFX900: ; %bb.0:7787; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7788; GFX900-NEXT: ;;#ASMSTART7789; GFX900-NEXT: ; def s[4:5]7790; GFX900-NEXT: ;;#ASMEND7791; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s57792; GFX900-NEXT: ;;#ASMSTART7793; GFX900-NEXT: ; use s[8:9]7794; GFX900-NEXT: ;;#ASMEND7795; GFX900-NEXT: s_setpc_b64 s[30:31]7796;7797; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_u:7798; GFX90A: ; %bb.0:7799; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7800; GFX90A-NEXT: ;;#ASMSTART7801; GFX90A-NEXT: ; def s[4:5]7802; GFX90A-NEXT: ;;#ASMEND7803; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s57804; GFX90A-NEXT: ;;#ASMSTART7805; GFX90A-NEXT: ; use s[8:9]7806; GFX90A-NEXT: ;;#ASMEND7807; GFX90A-NEXT: s_setpc_b64 s[30:31]7808;7809; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_u:7810; GFX942: ; %bb.0:7811; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7812; GFX942-NEXT: ;;#ASMSTART7813; GFX942-NEXT: ; def s[0:1]7814; GFX942-NEXT: ;;#ASMEND7815; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s17816; GFX942-NEXT: ;;#ASMSTART7817; GFX942-NEXT: ; use s[8:9]7818; GFX942-NEXT: ;;#ASMEND7819; GFX942-NEXT: s_setpc_b64 s[30:31]7820 %vec0 = call <4 x half> asm "; def $0", "=s"()7821 %vec1 = call <4 x half> asm "; def $0", "=s"()7822 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7823 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7824 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 poison>7825 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7826 ret void7827}7828 7829define void @s_shuffle_v4f16_v3f16__5_5_0_u() {7830; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_u:7831; GFX900: ; %bb.0:7832; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7833; GFX900-NEXT: ;;#ASMSTART7834; GFX900-NEXT: ; def s[4:5]7835; GFX900-NEXT: ;;#ASMEND7836; GFX900-NEXT: ;;#ASMSTART7837; GFX900-NEXT: ; def s[6:7]7838; GFX900-NEXT: ;;#ASMEND7839; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s77840; GFX900-NEXT: s_mov_b32 s9, s47841; GFX900-NEXT: ;;#ASMSTART7842; GFX900-NEXT: ; use s[8:9]7843; GFX900-NEXT: ;;#ASMEND7844; GFX900-NEXT: s_setpc_b64 s[30:31]7845;7846; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_u:7847; GFX90A: ; %bb.0:7848; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7849; GFX90A-NEXT: ;;#ASMSTART7850; GFX90A-NEXT: ; def s[4:5]7851; GFX90A-NEXT: ;;#ASMEND7852; GFX90A-NEXT: ;;#ASMSTART7853; GFX90A-NEXT: ; def s[6:7]7854; GFX90A-NEXT: ;;#ASMEND7855; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s77856; GFX90A-NEXT: s_mov_b32 s9, s47857; GFX90A-NEXT: ;;#ASMSTART7858; GFX90A-NEXT: ; use s[8:9]7859; GFX90A-NEXT: ;;#ASMEND7860; GFX90A-NEXT: s_setpc_b64 s[30:31]7861;7862; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_u:7863; GFX942: ; %bb.0:7864; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7865; GFX942-NEXT: ;;#ASMSTART7866; GFX942-NEXT: ; def s[0:1]7867; GFX942-NEXT: ;;#ASMEND7868; GFX942-NEXT: ;;#ASMSTART7869; GFX942-NEXT: ; def s[2:3]7870; GFX942-NEXT: ;;#ASMEND7871; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s37872; GFX942-NEXT: s_mov_b32 s9, s07873; GFX942-NEXT: ;;#ASMSTART7874; GFX942-NEXT: ; use s[8:9]7875; GFX942-NEXT: ;;#ASMEND7876; GFX942-NEXT: s_setpc_b64 s[30:31]7877 %vec0 = call <4 x half> asm "; def $0", "=s"()7878 %vec1 = call <4 x half> asm "; def $0", "=s"()7879 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7880 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7881 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 poison>7882 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7883 ret void7884}7885 7886define void @s_shuffle_v4f16_v3f16__5_5_1_u() {7887; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_u:7888; GFX900: ; %bb.0:7889; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7890; GFX900-NEXT: ;;#ASMSTART7891; GFX900-NEXT: ; def s[4:5]7892; GFX900-NEXT: ;;#ASMEND7893; GFX900-NEXT: ;;#ASMSTART7894; GFX900-NEXT: ; def s[6:7]7895; GFX900-NEXT: ;;#ASMEND7896; GFX900-NEXT: s_lshr_b32 s9, s4, 167897; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s77898; GFX900-NEXT: ;;#ASMSTART7899; GFX900-NEXT: ; use s[8:9]7900; GFX900-NEXT: ;;#ASMEND7901; GFX900-NEXT: s_setpc_b64 s[30:31]7902;7903; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_u:7904; GFX90A: ; %bb.0:7905; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7906; GFX90A-NEXT: ;;#ASMSTART7907; GFX90A-NEXT: ; def s[4:5]7908; GFX90A-NEXT: ;;#ASMEND7909; GFX90A-NEXT: ;;#ASMSTART7910; GFX90A-NEXT: ; def s[6:7]7911; GFX90A-NEXT: ;;#ASMEND7912; GFX90A-NEXT: s_lshr_b32 s9, s4, 167913; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s77914; GFX90A-NEXT: ;;#ASMSTART7915; GFX90A-NEXT: ; use s[8:9]7916; GFX90A-NEXT: ;;#ASMEND7917; GFX90A-NEXT: s_setpc_b64 s[30:31]7918;7919; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_u:7920; GFX942: ; %bb.0:7921; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7922; GFX942-NEXT: ;;#ASMSTART7923; GFX942-NEXT: ; def s[0:1]7924; GFX942-NEXT: ;;#ASMEND7925; GFX942-NEXT: ;;#ASMSTART7926; GFX942-NEXT: ; def s[2:3]7927; GFX942-NEXT: ;;#ASMEND7928; GFX942-NEXT: s_lshr_b32 s9, s0, 167929; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s37930; GFX942-NEXT: ;;#ASMSTART7931; GFX942-NEXT: ; use s[8:9]7932; GFX942-NEXT: ;;#ASMEND7933; GFX942-NEXT: s_setpc_b64 s[30:31]7934 %vec0 = call <4 x half> asm "; def $0", "=s"()7935 %vec1 = call <4 x half> asm "; def $0", "=s"()7936 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7937 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7938 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 poison>7939 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7940 ret void7941}7942 7943define void @s_shuffle_v4f16_v3f16__5_5_2_u() {7944; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_u:7945; GFX900: ; %bb.0:7946; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7947; GFX900-NEXT: ;;#ASMSTART7948; GFX900-NEXT: ; def s[8:9]7949; GFX900-NEXT: ;;#ASMEND7950; GFX900-NEXT: ;;#ASMSTART7951; GFX900-NEXT: ; def s[4:5]7952; GFX900-NEXT: ;;#ASMEND7953; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s57954; GFX900-NEXT: ;;#ASMSTART7955; GFX900-NEXT: ; use s[8:9]7956; GFX900-NEXT: ;;#ASMEND7957; GFX900-NEXT: s_setpc_b64 s[30:31]7958;7959; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_u:7960; GFX90A: ; %bb.0:7961; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7962; GFX90A-NEXT: ;;#ASMSTART7963; GFX90A-NEXT: ; def s[8:9]7964; GFX90A-NEXT: ;;#ASMEND7965; GFX90A-NEXT: ;;#ASMSTART7966; GFX90A-NEXT: ; def s[4:5]7967; GFX90A-NEXT: ;;#ASMEND7968; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s57969; GFX90A-NEXT: ;;#ASMSTART7970; GFX90A-NEXT: ; use s[8:9]7971; GFX90A-NEXT: ;;#ASMEND7972; GFX90A-NEXT: s_setpc_b64 s[30:31]7973;7974; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_u:7975; GFX942: ; %bb.0:7976; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7977; GFX942-NEXT: ;;#ASMSTART7978; GFX942-NEXT: ; def s[8:9]7979; GFX942-NEXT: ;;#ASMEND7980; GFX942-NEXT: ;;#ASMSTART7981; GFX942-NEXT: ; def s[0:1]7982; GFX942-NEXT: ;;#ASMEND7983; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s17984; GFX942-NEXT: ;;#ASMSTART7985; GFX942-NEXT: ; use s[8:9]7986; GFX942-NEXT: ;;#ASMEND7987; GFX942-NEXT: s_setpc_b64 s[30:31]7988 %vec0 = call <4 x half> asm "; def $0", "=s"()7989 %vec1 = call <4 x half> asm "; def $0", "=s"()7990 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7991 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>7992 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 poison>7993 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)7994 ret void7995}7996 7997define void @s_shuffle_v4f16_v3f16__5_5_3_u() {7998; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_u:7999; GFX900: ; %bb.0:8000; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8001; GFX900-NEXT: ;;#ASMSTART8002; GFX900-NEXT: ; def s[4:5]8003; GFX900-NEXT: ;;#ASMEND8004; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58005; GFX900-NEXT: s_mov_b32 s9, s48006; GFX900-NEXT: ;;#ASMSTART8007; GFX900-NEXT: ; use s[8:9]8008; GFX900-NEXT: ;;#ASMEND8009; GFX900-NEXT: s_setpc_b64 s[30:31]8010;8011; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_u:8012; GFX90A: ; %bb.0:8013; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8014; GFX90A-NEXT: ;;#ASMSTART8015; GFX90A-NEXT: ; def s[4:5]8016; GFX90A-NEXT: ;;#ASMEND8017; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58018; GFX90A-NEXT: s_mov_b32 s9, s48019; GFX90A-NEXT: ;;#ASMSTART8020; GFX90A-NEXT: ; use s[8:9]8021; GFX90A-NEXT: ;;#ASMEND8022; GFX90A-NEXT: s_setpc_b64 s[30:31]8023;8024; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_u:8025; GFX942: ; %bb.0:8026; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8027; GFX942-NEXT: ;;#ASMSTART8028; GFX942-NEXT: ; def s[0:1]8029; GFX942-NEXT: ;;#ASMEND8030; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18031; GFX942-NEXT: s_mov_b32 s9, s08032; GFX942-NEXT: ;;#ASMSTART8033; GFX942-NEXT: ; use s[8:9]8034; GFX942-NEXT: ;;#ASMEND8035; GFX942-NEXT: s_setpc_b64 s[30:31]8036 %vec0 = call <4 x half> asm "; def $0", "=s"()8037 %vec1 = call <4 x half> asm "; def $0", "=s"()8038 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8039 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8040 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 poison>8041 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8042 ret void8043}8044 8045define void @s_shuffle_v4f16_v3f16__5_5_4_u() {8046; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_u:8047; GFX900: ; %bb.0:8048; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8049; GFX900-NEXT: ;;#ASMSTART8050; GFX900-NEXT: ; def s[4:5]8051; GFX900-NEXT: ;;#ASMEND8052; GFX900-NEXT: s_lshr_b32 s9, s4, 168053; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58054; GFX900-NEXT: ;;#ASMSTART8055; GFX900-NEXT: ; use s[8:9]8056; GFX900-NEXT: ;;#ASMEND8057; GFX900-NEXT: s_setpc_b64 s[30:31]8058;8059; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_u:8060; GFX90A: ; %bb.0:8061; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8062; GFX90A-NEXT: ;;#ASMSTART8063; GFX90A-NEXT: ; def s[4:5]8064; GFX90A-NEXT: ;;#ASMEND8065; GFX90A-NEXT: s_lshr_b32 s9, s4, 168066; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58067; GFX90A-NEXT: ;;#ASMSTART8068; GFX90A-NEXT: ; use s[8:9]8069; GFX90A-NEXT: ;;#ASMEND8070; GFX90A-NEXT: s_setpc_b64 s[30:31]8071;8072; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_4_u:8073; GFX942: ; %bb.0:8074; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8075; GFX942-NEXT: ;;#ASMSTART8076; GFX942-NEXT: ; def s[0:1]8077; GFX942-NEXT: ;;#ASMEND8078; GFX942-NEXT: s_lshr_b32 s9, s0, 168079; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18080; GFX942-NEXT: ;;#ASMSTART8081; GFX942-NEXT: ; use s[8:9]8082; GFX942-NEXT: ;;#ASMEND8083; GFX942-NEXT: s_setpc_b64 s[30:31]8084 %vec0 = call <4 x half> asm "; def $0", "=s"()8085 %vec1 = call <4 x half> asm "; def $0", "=s"()8086 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8087 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8088 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 poison>8089 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8090 ret void8091}8092 8093define void @s_shuffle_v4f16_v3f16__5_5_5_u() {8094; GFX9-LABEL: s_shuffle_v4f16_v3f16__5_5_5_u:8095; GFX9: ; %bb.0:8096; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8097; GFX9-NEXT: ;;#ASMSTART8098; GFX9-NEXT: ; def s[8:9]8099; GFX9-NEXT: ;;#ASMEND8100; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s98101; GFX9-NEXT: ;;#ASMSTART8102; GFX9-NEXT: ; use s[8:9]8103; GFX9-NEXT: ;;#ASMEND8104; GFX9-NEXT: s_setpc_b64 s[30:31]8105 %vec0 = call <4 x half> asm "; def $0", "=s"()8106 %vec1 = call <4 x half> asm "; def $0", "=s"()8107 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8108 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8109 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 poison>8110 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8111 ret void8112}8113 8114define void @s_shuffle_v4f16_v3f16__5_5_5_0() {8115; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_5_0:8116; GFX900: ; %bb.0:8117; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8118; GFX900-NEXT: ;;#ASMSTART8119; GFX900-NEXT: ; def s[4:5]8120; GFX900-NEXT: ;;#ASMEND8121; GFX900-NEXT: ;;#ASMSTART8122; GFX900-NEXT: ; def s[6:7]8123; GFX900-NEXT: ;;#ASMEND8124; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s48125; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s78126; GFX900-NEXT: ;;#ASMSTART8127; GFX900-NEXT: ; use s[8:9]8128; GFX900-NEXT: ;;#ASMEND8129; GFX900-NEXT: s_setpc_b64 s[30:31]8130;8131; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_5_0:8132; GFX90A: ; %bb.0:8133; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8134; GFX90A-NEXT: ;;#ASMSTART8135; GFX90A-NEXT: ; def s[4:5]8136; GFX90A-NEXT: ;;#ASMEND8137; GFX90A-NEXT: ;;#ASMSTART8138; GFX90A-NEXT: ; def s[6:7]8139; GFX90A-NEXT: ;;#ASMEND8140; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s48141; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s78142; GFX90A-NEXT: ;;#ASMSTART8143; GFX90A-NEXT: ; use s[8:9]8144; GFX90A-NEXT: ;;#ASMEND8145; GFX90A-NEXT: s_setpc_b64 s[30:31]8146;8147; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_5_0:8148; GFX942: ; %bb.0:8149; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8150; GFX942-NEXT: ;;#ASMSTART8151; GFX942-NEXT: ; def s[0:1]8152; GFX942-NEXT: ;;#ASMEND8153; GFX942-NEXT: ;;#ASMSTART8154; GFX942-NEXT: ; def s[2:3]8155; GFX942-NEXT: ;;#ASMEND8156; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s08157; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s38158; GFX942-NEXT: ;;#ASMSTART8159; GFX942-NEXT: ; use s[8:9]8160; GFX942-NEXT: ;;#ASMEND8161; GFX942-NEXT: s_setpc_b64 s[30:31]8162 %vec0 = call <4 x half> asm "; def $0", "=s"()8163 %vec1 = call <4 x half> asm "; def $0", "=s"()8164 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8165 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8166 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 0>8167 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8168 ret void8169}8170 8171define void @s_shuffle_v4f16_v3f16__5_5_5_1() {8172; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_5_1:8173; GFX900: ; %bb.0:8174; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8175; GFX900-NEXT: ;;#ASMSTART8176; GFX900-NEXT: ; def s[4:5]8177; GFX900-NEXT: ;;#ASMEND8178; GFX900-NEXT: s_lshr_b32 s4, s4, 168179; GFX900-NEXT: ;;#ASMSTART8180; GFX900-NEXT: ; def s[6:7]8181; GFX900-NEXT: ;;#ASMEND8182; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s48183; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s78184; GFX900-NEXT: ;;#ASMSTART8185; GFX900-NEXT: ; use s[8:9]8186; GFX900-NEXT: ;;#ASMEND8187; GFX900-NEXT: s_setpc_b64 s[30:31]8188;8189; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_5_1:8190; GFX90A: ; %bb.0:8191; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8192; GFX90A-NEXT: ;;#ASMSTART8193; GFX90A-NEXT: ; def s[4:5]8194; GFX90A-NEXT: ;;#ASMEND8195; GFX90A-NEXT: s_lshr_b32 s4, s4, 168196; GFX90A-NEXT: ;;#ASMSTART8197; GFX90A-NEXT: ; def s[6:7]8198; GFX90A-NEXT: ;;#ASMEND8199; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s48200; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s78201; GFX90A-NEXT: ;;#ASMSTART8202; GFX90A-NEXT: ; use s[8:9]8203; GFX90A-NEXT: ;;#ASMEND8204; GFX90A-NEXT: s_setpc_b64 s[30:31]8205;8206; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_5_1:8207; GFX942: ; %bb.0:8208; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8209; GFX942-NEXT: ;;#ASMSTART8210; GFX942-NEXT: ; def s[0:1]8211; GFX942-NEXT: ;;#ASMEND8212; GFX942-NEXT: s_lshr_b32 s0, s0, 168213; GFX942-NEXT: ;;#ASMSTART8214; GFX942-NEXT: ; def s[2:3]8215; GFX942-NEXT: ;;#ASMEND8216; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s08217; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s38218; GFX942-NEXT: ;;#ASMSTART8219; GFX942-NEXT: ; use s[8:9]8220; GFX942-NEXT: ;;#ASMEND8221; GFX942-NEXT: s_setpc_b64 s[30:31]8222 %vec0 = call <4 x half> asm "; def $0", "=s"()8223 %vec1 = call <4 x half> asm "; def $0", "=s"()8224 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8225 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8226 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 1>8227 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8228 ret void8229}8230 8231define void @s_shuffle_v4f16_v3f16__5_5_5_2() {8232; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_5_2:8233; GFX900: ; %bb.0:8234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8235; GFX900-NEXT: ;;#ASMSTART8236; GFX900-NEXT: ; def s[4:5]8237; GFX900-NEXT: ;;#ASMEND8238; GFX900-NEXT: ;;#ASMSTART8239; GFX900-NEXT: ; def s[6:7]8240; GFX900-NEXT: ;;#ASMEND8241; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s58242; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s78243; GFX900-NEXT: ;;#ASMSTART8244; GFX900-NEXT: ; use s[8:9]8245; GFX900-NEXT: ;;#ASMEND8246; GFX900-NEXT: s_setpc_b64 s[30:31]8247;8248; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_5_2:8249; GFX90A: ; %bb.0:8250; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8251; GFX90A-NEXT: ;;#ASMSTART8252; GFX90A-NEXT: ; def s[4:5]8253; GFX90A-NEXT: ;;#ASMEND8254; GFX90A-NEXT: ;;#ASMSTART8255; GFX90A-NEXT: ; def s[6:7]8256; GFX90A-NEXT: ;;#ASMEND8257; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s58258; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s78259; GFX90A-NEXT: ;;#ASMSTART8260; GFX90A-NEXT: ; use s[8:9]8261; GFX90A-NEXT: ;;#ASMEND8262; GFX90A-NEXT: s_setpc_b64 s[30:31]8263;8264; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_5_2:8265; GFX942: ; %bb.0:8266; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8267; GFX942-NEXT: ;;#ASMSTART8268; GFX942-NEXT: ; def s[0:1]8269; GFX942-NEXT: ;;#ASMEND8270; GFX942-NEXT: ;;#ASMSTART8271; GFX942-NEXT: ; def s[2:3]8272; GFX942-NEXT: ;;#ASMEND8273; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s18274; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s38275; GFX942-NEXT: ;;#ASMSTART8276; GFX942-NEXT: ; use s[8:9]8277; GFX942-NEXT: ;;#ASMEND8278; GFX942-NEXT: s_setpc_b64 s[30:31]8279 %vec0 = call <4 x half> asm "; def $0", "=s"()8280 %vec1 = call <4 x half> asm "; def $0", "=s"()8281 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8282 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8283 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 2>8284 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8285 ret void8286}8287 8288define void @s_shuffle_v4f16_v3f16__5_5_5_3() {8289; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_5_3:8290; GFX900: ; %bb.0:8291; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8292; GFX900-NEXT: ;;#ASMSTART8293; GFX900-NEXT: ; def s[4:5]8294; GFX900-NEXT: ;;#ASMEND8295; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s48296; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58297; GFX900-NEXT: ;;#ASMSTART8298; GFX900-NEXT: ; use s[8:9]8299; GFX900-NEXT: ;;#ASMEND8300; GFX900-NEXT: s_setpc_b64 s[30:31]8301;8302; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_5_3:8303; GFX90A: ; %bb.0:8304; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8305; GFX90A-NEXT: ;;#ASMSTART8306; GFX90A-NEXT: ; def s[4:5]8307; GFX90A-NEXT: ;;#ASMEND8308; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s48309; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58310; GFX90A-NEXT: ;;#ASMSTART8311; GFX90A-NEXT: ; use s[8:9]8312; GFX90A-NEXT: ;;#ASMEND8313; GFX90A-NEXT: s_setpc_b64 s[30:31]8314;8315; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_5_3:8316; GFX942: ; %bb.0:8317; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8318; GFX942-NEXT: ;;#ASMSTART8319; GFX942-NEXT: ; def s[0:1]8320; GFX942-NEXT: ;;#ASMEND8321; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s08322; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18323; GFX942-NEXT: ;;#ASMSTART8324; GFX942-NEXT: ; use s[8:9]8325; GFX942-NEXT: ;;#ASMEND8326; GFX942-NEXT: s_setpc_b64 s[30:31]8327 %vec0 = call <4 x half> asm "; def $0", "=s"()8328 %vec1 = call <4 x half> asm "; def $0", "=s"()8329 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8330 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8331 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 3>8332 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8333 ret void8334}8335 8336define void @s_shuffle_v4f16_v3f16__5_5_5_4() {8337; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_5_4:8338; GFX900: ; %bb.0:8339; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8340; GFX900-NEXT: ;;#ASMSTART8341; GFX900-NEXT: ; def s[4:5]8342; GFX900-NEXT: ;;#ASMEND8343; GFX900-NEXT: s_lshr_b32 s4, s4, 168344; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s48345; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58346; GFX900-NEXT: ;;#ASMSTART8347; GFX900-NEXT: ; use s[8:9]8348; GFX900-NEXT: ;;#ASMEND8349; GFX900-NEXT: s_setpc_b64 s[30:31]8350;8351; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_5_4:8352; GFX90A: ; %bb.0:8353; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8354; GFX90A-NEXT: ;;#ASMSTART8355; GFX90A-NEXT: ; def s[4:5]8356; GFX90A-NEXT: ;;#ASMEND8357; GFX90A-NEXT: s_lshr_b32 s4, s4, 168358; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s48359; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58360; GFX90A-NEXT: ;;#ASMSTART8361; GFX90A-NEXT: ; use s[8:9]8362; GFX90A-NEXT: ;;#ASMEND8363; GFX90A-NEXT: s_setpc_b64 s[30:31]8364;8365; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_5_4:8366; GFX942: ; %bb.0:8367; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8368; GFX942-NEXT: ;;#ASMSTART8369; GFX942-NEXT: ; def s[0:1]8370; GFX942-NEXT: ;;#ASMEND8371; GFX942-NEXT: s_lshr_b32 s0, s0, 168372; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s08373; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18374; GFX942-NEXT: ;;#ASMSTART8375; GFX942-NEXT: ; use s[8:9]8376; GFX942-NEXT: ;;#ASMEND8377; GFX942-NEXT: s_setpc_b64 s[30:31]8378 %vec0 = call <4 x half> asm "; def $0", "=s"()8379 %vec1 = call <4 x half> asm "; def $0", "=s"()8380 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8381 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8382 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 4>8383 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8384 ret void8385}8386 8387define void @s_shuffle_v4f16_v3f16__5_5_5_5() {8388; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_5_5:8389; GFX900: ; %bb.0:8390; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8391; GFX900-NEXT: ;;#ASMSTART8392; GFX900-NEXT: ; def s[4:5]8393; GFX900-NEXT: ;;#ASMEND8394; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s58395; GFX900-NEXT: s_mov_b32 s9, s88396; GFX900-NEXT: ;;#ASMSTART8397; GFX900-NEXT: ; use s[8:9]8398; GFX900-NEXT: ;;#ASMEND8399; GFX900-NEXT: s_setpc_b64 s[30:31]8400;8401; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_5_5:8402; GFX90A: ; %bb.0:8403; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8404; GFX90A-NEXT: ;;#ASMSTART8405; GFX90A-NEXT: ; def s[4:5]8406; GFX90A-NEXT: ;;#ASMEND8407; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s58408; GFX90A-NEXT: s_mov_b32 s9, s88409; GFX90A-NEXT: ;;#ASMSTART8410; GFX90A-NEXT: ; use s[8:9]8411; GFX90A-NEXT: ;;#ASMEND8412; GFX90A-NEXT: s_setpc_b64 s[30:31]8413;8414; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_5_5:8415; GFX942: ; %bb.0:8416; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8417; GFX942-NEXT: ;;#ASMSTART8418; GFX942-NEXT: ; def s[0:1]8419; GFX942-NEXT: ;;#ASMEND8420; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s18421; GFX942-NEXT: s_mov_b32 s9, s88422; GFX942-NEXT: ;;#ASMSTART8423; GFX942-NEXT: ; use s[8:9]8424; GFX942-NEXT: ;;#ASMEND8425; GFX942-NEXT: s_setpc_b64 s[30:31]8426 %vec0 = call <4 x half> asm "; def $0", "=s"()8427 %vec1 = call <4 x half> asm "; def $0", "=s"()8428 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8429 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8430 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 5, i32 5>8431 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8432 ret void8433}8434 8435define void @s_shuffle_v4f16_v3f16__u_0_0_0() {8436; GFX900-LABEL: s_shuffle_v4f16_v3f16__u_0_0_0:8437; GFX900: ; %bb.0:8438; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8439; GFX900-NEXT: ;;#ASMSTART8440; GFX900-NEXT: ; def s[4:5]8441; GFX900-NEXT: ;;#ASMEND8442; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48443; GFX900-NEXT: s_lshl_b32 s8, s4, 168444; GFX900-NEXT: ;;#ASMSTART8445; GFX900-NEXT: ; use s[8:9]8446; GFX900-NEXT: ;;#ASMEND8447; GFX900-NEXT: s_setpc_b64 s[30:31]8448;8449; GFX90A-LABEL: s_shuffle_v4f16_v3f16__u_0_0_0:8450; GFX90A: ; %bb.0:8451; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8452; GFX90A-NEXT: ;;#ASMSTART8453; GFX90A-NEXT: ; def s[4:5]8454; GFX90A-NEXT: ;;#ASMEND8455; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48456; GFX90A-NEXT: s_lshl_b32 s8, s4, 168457; GFX90A-NEXT: ;;#ASMSTART8458; GFX90A-NEXT: ; use s[8:9]8459; GFX90A-NEXT: ;;#ASMEND8460; GFX90A-NEXT: s_setpc_b64 s[30:31]8461;8462; GFX942-LABEL: s_shuffle_v4f16_v3f16__u_0_0_0:8463; GFX942: ; %bb.0:8464; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8465; GFX942-NEXT: ;;#ASMSTART8466; GFX942-NEXT: ; def s[0:1]8467; GFX942-NEXT: ;;#ASMEND8468; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08469; GFX942-NEXT: s_lshl_b32 s8, s0, 168470; GFX942-NEXT: ;;#ASMSTART8471; GFX942-NEXT: ; use s[8:9]8472; GFX942-NEXT: ;;#ASMEND8473; GFX942-NEXT: s_setpc_b64 s[30:31]8474 %vec0 = call <4 x half> asm "; def $0", "=s"()8475 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8476 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>8477 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8478 ret void8479}8480 8481define void @s_shuffle_v4f16_v3f16__0_0_0_0() {8482; GFX900-LABEL: s_shuffle_v4f16_v3f16__0_0_0_0:8483; GFX900: ; %bb.0:8484; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8485; GFX900-NEXT: ;;#ASMSTART8486; GFX900-NEXT: ; def s[4:5]8487; GFX900-NEXT: ;;#ASMEND8488; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s48489; GFX900-NEXT: s_mov_b32 s9, s88490; GFX900-NEXT: ;;#ASMSTART8491; GFX900-NEXT: ; use s[8:9]8492; GFX900-NEXT: ;;#ASMEND8493; GFX900-NEXT: s_setpc_b64 s[30:31]8494;8495; GFX90A-LABEL: s_shuffle_v4f16_v3f16__0_0_0_0:8496; GFX90A: ; %bb.0:8497; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8498; GFX90A-NEXT: ;;#ASMSTART8499; GFX90A-NEXT: ; def s[4:5]8500; GFX90A-NEXT: ;;#ASMEND8501; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s48502; GFX90A-NEXT: s_mov_b32 s9, s88503; GFX90A-NEXT: ;;#ASMSTART8504; GFX90A-NEXT: ; use s[8:9]8505; GFX90A-NEXT: ;;#ASMEND8506; GFX90A-NEXT: s_setpc_b64 s[30:31]8507;8508; GFX942-LABEL: s_shuffle_v4f16_v3f16__0_0_0_0:8509; GFX942: ; %bb.0:8510; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8511; GFX942-NEXT: ;;#ASMSTART8512; GFX942-NEXT: ; def s[0:1]8513; GFX942-NEXT: ;;#ASMEND8514; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s08515; GFX942-NEXT: s_mov_b32 s9, s88516; GFX942-NEXT: ;;#ASMSTART8517; GFX942-NEXT: ; use s[8:9]8518; GFX942-NEXT: ;;#ASMEND8519; GFX942-NEXT: s_setpc_b64 s[30:31]8520 %vec0 = call <4 x half> asm "; def $0", "=s"()8521 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8522 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> zeroinitializer8523 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8524 ret void8525}8526 8527define void @s_shuffle_v4f16_v3f16__1_0_0_0() {8528; GFX900-LABEL: s_shuffle_v4f16_v3f16__1_0_0_0:8529; GFX900: ; %bb.0:8530; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8531; GFX900-NEXT: ;;#ASMSTART8532; GFX900-NEXT: ; def s[4:5]8533; GFX900-NEXT: ;;#ASMEND8534; GFX900-NEXT: s_lshr_b32 s5, s4, 168535; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48536; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48537; GFX900-NEXT: ;;#ASMSTART8538; GFX900-NEXT: ; use s[8:9]8539; GFX900-NEXT: ;;#ASMEND8540; GFX900-NEXT: s_setpc_b64 s[30:31]8541;8542; GFX90A-LABEL: s_shuffle_v4f16_v3f16__1_0_0_0:8543; GFX90A: ; %bb.0:8544; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8545; GFX90A-NEXT: ;;#ASMSTART8546; GFX90A-NEXT: ; def s[4:5]8547; GFX90A-NEXT: ;;#ASMEND8548; GFX90A-NEXT: s_lshr_b32 s5, s4, 168549; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48550; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48551; GFX90A-NEXT: ;;#ASMSTART8552; GFX90A-NEXT: ; use s[8:9]8553; GFX90A-NEXT: ;;#ASMEND8554; GFX90A-NEXT: s_setpc_b64 s[30:31]8555;8556; GFX942-LABEL: s_shuffle_v4f16_v3f16__1_0_0_0:8557; GFX942: ; %bb.0:8558; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8559; GFX942-NEXT: ;;#ASMSTART8560; GFX942-NEXT: ; def s[0:1]8561; GFX942-NEXT: ;;#ASMEND8562; GFX942-NEXT: s_lshr_b32 s1, s0, 168563; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08564; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08565; GFX942-NEXT: ;;#ASMSTART8566; GFX942-NEXT: ; use s[8:9]8567; GFX942-NEXT: ;;#ASMEND8568; GFX942-NEXT: s_setpc_b64 s[30:31]8569 %vec0 = call <4 x half> asm "; def $0", "=s"()8570 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8571 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>8572 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8573 ret void8574}8575 8576define void @s_shuffle_v4f16_v3f16__2_0_0_0() {8577; GFX900-LABEL: s_shuffle_v4f16_v3f16__2_0_0_0:8578; GFX900: ; %bb.0:8579; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8580; GFX900-NEXT: ;;#ASMSTART8581; GFX900-NEXT: ; def s[4:5]8582; GFX900-NEXT: ;;#ASMEND8583; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48584; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48585; GFX900-NEXT: ;;#ASMSTART8586; GFX900-NEXT: ; use s[8:9]8587; GFX900-NEXT: ;;#ASMEND8588; GFX900-NEXT: s_setpc_b64 s[30:31]8589;8590; GFX90A-LABEL: s_shuffle_v4f16_v3f16__2_0_0_0:8591; GFX90A: ; %bb.0:8592; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8593; GFX90A-NEXT: ;;#ASMSTART8594; GFX90A-NEXT: ; def s[4:5]8595; GFX90A-NEXT: ;;#ASMEND8596; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48597; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48598; GFX90A-NEXT: ;;#ASMSTART8599; GFX90A-NEXT: ; use s[8:9]8600; GFX90A-NEXT: ;;#ASMEND8601; GFX90A-NEXT: s_setpc_b64 s[30:31]8602;8603; GFX942-LABEL: s_shuffle_v4f16_v3f16__2_0_0_0:8604; GFX942: ; %bb.0:8605; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8606; GFX942-NEXT: ;;#ASMSTART8607; GFX942-NEXT: ; def s[0:1]8608; GFX942-NEXT: ;;#ASMEND8609; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08610; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08611; GFX942-NEXT: ;;#ASMSTART8612; GFX942-NEXT: ; use s[8:9]8613; GFX942-NEXT: ;;#ASMEND8614; GFX942-NEXT: s_setpc_b64 s[30:31]8615 %vec0 = call <4 x half> asm "; def $0", "=s"()8616 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8617 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>8618 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8619 ret void8620}8621 8622define void @s_shuffle_v4f16_v3f16__3_0_0_0() {8623; GFX900-LABEL: s_shuffle_v4f16_v3f16__3_0_0_0:8624; GFX900: ; %bb.0:8625; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8626; GFX900-NEXT: ;;#ASMSTART8627; GFX900-NEXT: ; def s[4:5]8628; GFX900-NEXT: ;;#ASMEND8629; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48630; GFX900-NEXT: s_lshl_b32 s8, s4, 168631; GFX900-NEXT: ;;#ASMSTART8632; GFX900-NEXT: ; use s[8:9]8633; GFX900-NEXT: ;;#ASMEND8634; GFX900-NEXT: s_setpc_b64 s[30:31]8635;8636; GFX90A-LABEL: s_shuffle_v4f16_v3f16__3_0_0_0:8637; GFX90A: ; %bb.0:8638; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8639; GFX90A-NEXT: ;;#ASMSTART8640; GFX90A-NEXT: ; def s[4:5]8641; GFX90A-NEXT: ;;#ASMEND8642; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48643; GFX90A-NEXT: s_lshl_b32 s8, s4, 168644; GFX90A-NEXT: ;;#ASMSTART8645; GFX90A-NEXT: ; use s[8:9]8646; GFX90A-NEXT: ;;#ASMEND8647; GFX90A-NEXT: s_setpc_b64 s[30:31]8648;8649; GFX942-LABEL: s_shuffle_v4f16_v3f16__3_0_0_0:8650; GFX942: ; %bb.0:8651; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8652; GFX942-NEXT: ;;#ASMSTART8653; GFX942-NEXT: ; def s[0:1]8654; GFX942-NEXT: ;;#ASMEND8655; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08656; GFX942-NEXT: s_lshl_b32 s8, s0, 168657; GFX942-NEXT: ;;#ASMSTART8658; GFX942-NEXT: ; use s[8:9]8659; GFX942-NEXT: ;;#ASMEND8660; GFX942-NEXT: s_setpc_b64 s[30:31]8661 %vec0 = call <4 x half> asm "; def $0", "=s"()8662 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8663 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 0, i32 0, i32 0>8664 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8665 ret void8666}8667 8668define void @s_shuffle_v4f16_v3f16__4_0_0_0() {8669; GFX900-LABEL: s_shuffle_v4f16_v3f16__4_0_0_0:8670; GFX900: ; %bb.0:8671; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8672; GFX900-NEXT: ;;#ASMSTART8673; GFX900-NEXT: ; def s[4:5]8674; GFX900-NEXT: ;;#ASMEND8675; GFX900-NEXT: ;;#ASMSTART8676; GFX900-NEXT: ; def s[6:7]8677; GFX900-NEXT: ;;#ASMEND8678; GFX900-NEXT: s_lshr_b32 s5, s6, 168679; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48680; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48681; GFX900-NEXT: ;;#ASMSTART8682; GFX900-NEXT: ; use s[8:9]8683; GFX900-NEXT: ;;#ASMEND8684; GFX900-NEXT: s_setpc_b64 s[30:31]8685;8686; GFX90A-LABEL: s_shuffle_v4f16_v3f16__4_0_0_0:8687; GFX90A: ; %bb.0:8688; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8689; GFX90A-NEXT: ;;#ASMSTART8690; GFX90A-NEXT: ; def s[4:5]8691; GFX90A-NEXT: ;;#ASMEND8692; GFX90A-NEXT: ;;#ASMSTART8693; GFX90A-NEXT: ; def s[6:7]8694; GFX90A-NEXT: ;;#ASMEND8695; GFX90A-NEXT: s_lshr_b32 s5, s6, 168696; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48697; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48698; GFX90A-NEXT: ;;#ASMSTART8699; GFX90A-NEXT: ; use s[8:9]8700; GFX90A-NEXT: ;;#ASMEND8701; GFX90A-NEXT: s_setpc_b64 s[30:31]8702;8703; GFX942-LABEL: s_shuffle_v4f16_v3f16__4_0_0_0:8704; GFX942: ; %bb.0:8705; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8706; GFX942-NEXT: ;;#ASMSTART8707; GFX942-NEXT: ; def s[0:1]8708; GFX942-NEXT: ;;#ASMEND8709; GFX942-NEXT: ;;#ASMSTART8710; GFX942-NEXT: ; def s[2:3]8711; GFX942-NEXT: ;;#ASMEND8712; GFX942-NEXT: s_lshr_b32 s1, s2, 168713; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08714; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08715; GFX942-NEXT: ;;#ASMSTART8716; GFX942-NEXT: ; use s[8:9]8717; GFX942-NEXT: ;;#ASMEND8718; GFX942-NEXT: s_setpc_b64 s[30:31]8719 %vec0 = call <4 x half> asm "; def $0", "=s"()8720 %vec1 = call <4 x half> asm "; def $0", "=s"()8721 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8722 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8723 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 0, i32 0, i32 0>8724 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8725 ret void8726}8727 8728define void @s_shuffle_v4f16_v3f16__5_0_0_0() {8729; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_0_0_0:8730; GFX900: ; %bb.0:8731; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8732; GFX900-NEXT: ;;#ASMSTART8733; GFX900-NEXT: ; def s[4:5]8734; GFX900-NEXT: ;;#ASMEND8735; GFX900-NEXT: ;;#ASMSTART8736; GFX900-NEXT: ; def s[6:7]8737; GFX900-NEXT: ;;#ASMEND8738; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s48739; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48740; GFX900-NEXT: ;;#ASMSTART8741; GFX900-NEXT: ; use s[8:9]8742; GFX900-NEXT: ;;#ASMEND8743; GFX900-NEXT: s_setpc_b64 s[30:31]8744;8745; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_0_0_0:8746; GFX90A: ; %bb.0:8747; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8748; GFX90A-NEXT: ;;#ASMSTART8749; GFX90A-NEXT: ; def s[4:5]8750; GFX90A-NEXT: ;;#ASMEND8751; GFX90A-NEXT: ;;#ASMSTART8752; GFX90A-NEXT: ; def s[6:7]8753; GFX90A-NEXT: ;;#ASMEND8754; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s48755; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48756; GFX90A-NEXT: ;;#ASMSTART8757; GFX90A-NEXT: ; use s[8:9]8758; GFX90A-NEXT: ;;#ASMEND8759; GFX90A-NEXT: s_setpc_b64 s[30:31]8760;8761; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_0_0_0:8762; GFX942: ; %bb.0:8763; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8764; GFX942-NEXT: ;;#ASMSTART8765; GFX942-NEXT: ; def s[0:1]8766; GFX942-NEXT: ;;#ASMEND8767; GFX942-NEXT: ;;#ASMSTART8768; GFX942-NEXT: ; def s[2:3]8769; GFX942-NEXT: ;;#ASMEND8770; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s08771; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08772; GFX942-NEXT: ;;#ASMSTART8773; GFX942-NEXT: ; use s[8:9]8774; GFX942-NEXT: ;;#ASMEND8775; GFX942-NEXT: s_setpc_b64 s[30:31]8776 %vec0 = call <4 x half> asm "; def $0", "=s"()8777 %vec1 = call <4 x half> asm "; def $0", "=s"()8778 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8779 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8780 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 0, i32 0>8781 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8782 ret void8783}8784 8785define void @s_shuffle_v4f16_v3f16__5_u_0_0() {8786; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_u_0_0:8787; GFX900: ; %bb.0:8788; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8789; GFX900-NEXT: ;;#ASMSTART8790; GFX900-NEXT: ; def s[4:5]8791; GFX900-NEXT: ;;#ASMEND8792; GFX900-NEXT: ;;#ASMSTART8793; GFX900-NEXT: ; def s[6:7]8794; GFX900-NEXT: ;;#ASMEND8795; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48796; GFX900-NEXT: s_mov_b32 s8, s78797; GFX900-NEXT: ;;#ASMSTART8798; GFX900-NEXT: ; use s[8:9]8799; GFX900-NEXT: ;;#ASMEND8800; GFX900-NEXT: s_setpc_b64 s[30:31]8801;8802; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_u_0_0:8803; GFX90A: ; %bb.0:8804; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8805; GFX90A-NEXT: ;;#ASMSTART8806; GFX90A-NEXT: ; def s[4:5]8807; GFX90A-NEXT: ;;#ASMEND8808; GFX90A-NEXT: ;;#ASMSTART8809; GFX90A-NEXT: ; def s[6:7]8810; GFX90A-NEXT: ;;#ASMEND8811; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48812; GFX90A-NEXT: s_mov_b32 s8, s78813; GFX90A-NEXT: ;;#ASMSTART8814; GFX90A-NEXT: ; use s[8:9]8815; GFX90A-NEXT: ;;#ASMEND8816; GFX90A-NEXT: s_setpc_b64 s[30:31]8817;8818; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_u_0_0:8819; GFX942: ; %bb.0:8820; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8821; GFX942-NEXT: ;;#ASMSTART8822; GFX942-NEXT: ; def s[0:1]8823; GFX942-NEXT: ;;#ASMEND8824; GFX942-NEXT: ;;#ASMSTART8825; GFX942-NEXT: ; def s[2:3]8826; GFX942-NEXT: ;;#ASMEND8827; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08828; GFX942-NEXT: s_mov_b32 s8, s38829; GFX942-NEXT: ;;#ASMSTART8830; GFX942-NEXT: ; use s[8:9]8831; GFX942-NEXT: ;;#ASMEND8832; GFX942-NEXT: s_setpc_b64 s[30:31]8833 %vec0 = call <4 x half> asm "; def $0", "=s"()8834 %vec1 = call <4 x half> asm "; def $0", "=s"()8835 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8836 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8837 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 0, i32 0>8838 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8839 ret void8840}8841 8842define void @s_shuffle_v4f16_v3f16__5_1_0_0() {8843; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_1_0_0:8844; GFX900: ; %bb.0:8845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8846; GFX900-NEXT: ;;#ASMSTART8847; GFX900-NEXT: ; def s[4:5]8848; GFX900-NEXT: ;;#ASMEND8849; GFX900-NEXT: s_lshr_b32 s5, s4, 168850; GFX900-NEXT: ;;#ASMSTART8851; GFX900-NEXT: ; def s[6:7]8852; GFX900-NEXT: ;;#ASMEND8853; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s58854; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48855; GFX900-NEXT: ;;#ASMSTART8856; GFX900-NEXT: ; use s[8:9]8857; GFX900-NEXT: ;;#ASMEND8858; GFX900-NEXT: s_setpc_b64 s[30:31]8859;8860; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_0_0:8861; GFX90A: ; %bb.0:8862; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8863; GFX90A-NEXT: ;;#ASMSTART8864; GFX90A-NEXT: ; def s[4:5]8865; GFX90A-NEXT: ;;#ASMEND8866; GFX90A-NEXT: s_lshr_b32 s5, s4, 168867; GFX90A-NEXT: ;;#ASMSTART8868; GFX90A-NEXT: ; def s[6:7]8869; GFX90A-NEXT: ;;#ASMEND8870; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s58871; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48872; GFX90A-NEXT: ;;#ASMSTART8873; GFX90A-NEXT: ; use s[8:9]8874; GFX90A-NEXT: ;;#ASMEND8875; GFX90A-NEXT: s_setpc_b64 s[30:31]8876;8877; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_0_0:8878; GFX942: ; %bb.0:8879; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8880; GFX942-NEXT: ;;#ASMSTART8881; GFX942-NEXT: ; def s[0:1]8882; GFX942-NEXT: ;;#ASMEND8883; GFX942-NEXT: s_lshr_b32 s1, s0, 168884; GFX942-NEXT: ;;#ASMSTART8885; GFX942-NEXT: ; def s[2:3]8886; GFX942-NEXT: ;;#ASMEND8887; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s18888; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08889; GFX942-NEXT: ;;#ASMSTART8890; GFX942-NEXT: ; use s[8:9]8891; GFX942-NEXT: ;;#ASMEND8892; GFX942-NEXT: s_setpc_b64 s[30:31]8893 %vec0 = call <4 x half> asm "; def $0", "=s"()8894 %vec1 = call <4 x half> asm "; def $0", "=s"()8895 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8896 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8897 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 0, i32 0>8898 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8899 ret void8900}8901 8902define void @s_shuffle_v4f16_v3f16__5_2_0_0() {8903; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_0_0:8904; GFX900: ; %bb.0:8905; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8906; GFX900-NEXT: ;;#ASMSTART8907; GFX900-NEXT: ; def s[4:5]8908; GFX900-NEXT: ;;#ASMEND8909; GFX900-NEXT: ;;#ASMSTART8910; GFX900-NEXT: ; def s[6:7]8911; GFX900-NEXT: ;;#ASMEND8912; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s58913; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48914; GFX900-NEXT: ;;#ASMSTART8915; GFX900-NEXT: ; use s[8:9]8916; GFX900-NEXT: ;;#ASMEND8917; GFX900-NEXT: s_setpc_b64 s[30:31]8918;8919; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_0_0:8920; GFX90A: ; %bb.0:8921; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8922; GFX90A-NEXT: ;;#ASMSTART8923; GFX90A-NEXT: ; def s[4:5]8924; GFX90A-NEXT: ;;#ASMEND8925; GFX90A-NEXT: ;;#ASMSTART8926; GFX90A-NEXT: ; def s[6:7]8927; GFX90A-NEXT: ;;#ASMEND8928; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s58929; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48930; GFX90A-NEXT: ;;#ASMSTART8931; GFX90A-NEXT: ; use s[8:9]8932; GFX90A-NEXT: ;;#ASMEND8933; GFX90A-NEXT: s_setpc_b64 s[30:31]8934;8935; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_0_0:8936; GFX942: ; %bb.0:8937; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8938; GFX942-NEXT: ;;#ASMSTART8939; GFX942-NEXT: ; def s[0:1]8940; GFX942-NEXT: ;;#ASMEND8941; GFX942-NEXT: ;;#ASMSTART8942; GFX942-NEXT: ; def s[2:3]8943; GFX942-NEXT: ;;#ASMEND8944; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s18945; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s08946; GFX942-NEXT: ;;#ASMSTART8947; GFX942-NEXT: ; use s[8:9]8948; GFX942-NEXT: ;;#ASMEND8949; GFX942-NEXT: s_setpc_b64 s[30:31]8950 %vec0 = call <4 x half> asm "; def $0", "=s"()8951 %vec1 = call <4 x half> asm "; def $0", "=s"()8952 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8953 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>8954 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 0, i32 0>8955 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)8956 ret void8957}8958 8959define void @s_shuffle_v4f16_v3f16__5_3_0_0() {8960; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_0_0:8961; GFX900: ; %bb.0:8962; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8963; GFX900-NEXT: ;;#ASMSTART8964; GFX900-NEXT: ; def s[4:5]8965; GFX900-NEXT: ;;#ASMEND8966; GFX900-NEXT: ;;#ASMSTART8967; GFX900-NEXT: ; def s[6:7]8968; GFX900-NEXT: ;;#ASMEND8969; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s68970; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s48971; GFX900-NEXT: ;;#ASMSTART8972; GFX900-NEXT: ; use s[8:9]8973; GFX900-NEXT: ;;#ASMEND8974; GFX900-NEXT: s_setpc_b64 s[30:31]8975;8976; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_0_0:8977; GFX90A: ; %bb.0:8978; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8979; GFX90A-NEXT: ;;#ASMSTART8980; GFX90A-NEXT: ; def s[4:5]8981; GFX90A-NEXT: ;;#ASMEND8982; GFX90A-NEXT: ;;#ASMSTART8983; GFX90A-NEXT: ; def s[6:7]8984; GFX90A-NEXT: ;;#ASMEND8985; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s68986; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s48987; GFX90A-NEXT: ;;#ASMSTART8988; GFX90A-NEXT: ; use s[8:9]8989; GFX90A-NEXT: ;;#ASMEND8990; GFX90A-NEXT: s_setpc_b64 s[30:31]8991;8992; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_3_0_0:8993; GFX942: ; %bb.0:8994; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8995; GFX942-NEXT: ;;#ASMSTART8996; GFX942-NEXT: ; def s[0:1]8997; GFX942-NEXT: ;;#ASMEND8998; GFX942-NEXT: ;;#ASMSTART8999; GFX942-NEXT: ; def s[2:3]9000; GFX942-NEXT: ;;#ASMEND9001; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s29002; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09003; GFX942-NEXT: ;;#ASMSTART9004; GFX942-NEXT: ; use s[8:9]9005; GFX942-NEXT: ;;#ASMEND9006; GFX942-NEXT: s_setpc_b64 s[30:31]9007 %vec0 = call <4 x half> asm "; def $0", "=s"()9008 %vec1 = call <4 x half> asm "; def $0", "=s"()9009 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9010 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9011 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 0, i32 0>9012 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9013 ret void9014}9015 9016define void @s_shuffle_v4f16_v3f16__5_4_0_0() {9017; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_0_0:9018; GFX900: ; %bb.0:9019; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9020; GFX900-NEXT: ;;#ASMSTART9021; GFX900-NEXT: ; def s[4:5]9022; GFX900-NEXT: ;;#ASMEND9023; GFX900-NEXT: ;;#ASMSTART9024; GFX900-NEXT: ; def s[6:7]9025; GFX900-NEXT: ;;#ASMEND9026; GFX900-NEXT: s_lshr_b32 s5, s6, 169027; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s59028; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49029; GFX900-NEXT: ;;#ASMSTART9030; GFX900-NEXT: ; use s[8:9]9031; GFX900-NEXT: ;;#ASMEND9032; GFX900-NEXT: s_setpc_b64 s[30:31]9033;9034; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_0_0:9035; GFX90A: ; %bb.0:9036; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9037; GFX90A-NEXT: ;;#ASMSTART9038; GFX90A-NEXT: ; def s[4:5]9039; GFX90A-NEXT: ;;#ASMEND9040; GFX90A-NEXT: ;;#ASMSTART9041; GFX90A-NEXT: ; def s[6:7]9042; GFX90A-NEXT: ;;#ASMEND9043; GFX90A-NEXT: s_lshr_b32 s5, s6, 169044; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s59045; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49046; GFX90A-NEXT: ;;#ASMSTART9047; GFX90A-NEXT: ; use s[8:9]9048; GFX90A-NEXT: ;;#ASMEND9049; GFX90A-NEXT: s_setpc_b64 s[30:31]9050;9051; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_0_0:9052; GFX942: ; %bb.0:9053; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9054; GFX942-NEXT: ;;#ASMSTART9055; GFX942-NEXT: ; def s[0:1]9056; GFX942-NEXT: ;;#ASMEND9057; GFX942-NEXT: ;;#ASMSTART9058; GFX942-NEXT: ; def s[2:3]9059; GFX942-NEXT: ;;#ASMEND9060; GFX942-NEXT: s_lshr_b32 s1, s2, 169061; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s19062; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09063; GFX942-NEXT: ;;#ASMSTART9064; GFX942-NEXT: ; use s[8:9]9065; GFX942-NEXT: ;;#ASMEND9066; GFX942-NEXT: s_setpc_b64 s[30:31]9067 %vec0 = call <4 x half> asm "; def $0", "=s"()9068 %vec1 = call <4 x half> asm "; def $0", "=s"()9069 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9070 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9071 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 0, i32 0>9072 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9073 ret void9074}9075 9076define void @s_shuffle_v4f16_v3f16__5_5_0_0() {9077; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_0:9078; GFX900: ; %bb.0:9079; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9080; GFX900-NEXT: ;;#ASMSTART9081; GFX900-NEXT: ; def s[4:5]9082; GFX900-NEXT: ;;#ASMEND9083; GFX900-NEXT: ;;#ASMSTART9084; GFX900-NEXT: ; def s[6:7]9085; GFX900-NEXT: ;;#ASMEND9086; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49087; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79088; GFX900-NEXT: ;;#ASMSTART9089; GFX900-NEXT: ; use s[8:9]9090; GFX900-NEXT: ;;#ASMEND9091; GFX900-NEXT: s_setpc_b64 s[30:31]9092;9093; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_0:9094; GFX90A: ; %bb.0:9095; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9096; GFX90A-NEXT: ;;#ASMSTART9097; GFX90A-NEXT: ; def s[4:5]9098; GFX90A-NEXT: ;;#ASMEND9099; GFX90A-NEXT: ;;#ASMSTART9100; GFX90A-NEXT: ; def s[6:7]9101; GFX90A-NEXT: ;;#ASMEND9102; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49103; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79104; GFX90A-NEXT: ;;#ASMSTART9105; GFX90A-NEXT: ; use s[8:9]9106; GFX90A-NEXT: ;;#ASMEND9107; GFX90A-NEXT: s_setpc_b64 s[30:31]9108;9109; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_0:9110; GFX942: ; %bb.0:9111; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9112; GFX942-NEXT: ;;#ASMSTART9113; GFX942-NEXT: ; def s[0:1]9114; GFX942-NEXT: ;;#ASMEND9115; GFX942-NEXT: ;;#ASMSTART9116; GFX942-NEXT: ; def s[2:3]9117; GFX942-NEXT: ;;#ASMEND9118; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09119; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39120; GFX942-NEXT: ;;#ASMSTART9121; GFX942-NEXT: ; use s[8:9]9122; GFX942-NEXT: ;;#ASMEND9123; GFX942-NEXT: s_setpc_b64 s[30:31]9124 %vec0 = call <4 x half> asm "; def $0", "=s"()9125 %vec1 = call <4 x half> asm "; def $0", "=s"()9126 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9127 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9128 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 0>9129 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9130 ret void9131}9132 9133define void @s_shuffle_v4f16_v3f16__5_5_u_0() {9134; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_0:9135; GFX900: ; %bb.0:9136; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9137; GFX900-NEXT: ;;#ASMSTART9138; GFX900-NEXT: ; def s[4:5]9139; GFX900-NEXT: ;;#ASMEND9140; GFX900-NEXT: ;;#ASMSTART9141; GFX900-NEXT: ; def s[6:7]9142; GFX900-NEXT: ;;#ASMEND9143; GFX900-NEXT: s_lshl_b32 s9, s4, 169144; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79145; GFX900-NEXT: ;;#ASMSTART9146; GFX900-NEXT: ; use s[8:9]9147; GFX900-NEXT: ;;#ASMEND9148; GFX900-NEXT: s_setpc_b64 s[30:31]9149;9150; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_0:9151; GFX90A: ; %bb.0:9152; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9153; GFX90A-NEXT: ;;#ASMSTART9154; GFX90A-NEXT: ; def s[4:5]9155; GFX90A-NEXT: ;;#ASMEND9156; GFX90A-NEXT: ;;#ASMSTART9157; GFX90A-NEXT: ; def s[6:7]9158; GFX90A-NEXT: ;;#ASMEND9159; GFX90A-NEXT: s_lshl_b32 s9, s4, 169160; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79161; GFX90A-NEXT: ;;#ASMSTART9162; GFX90A-NEXT: ; use s[8:9]9163; GFX90A-NEXT: ;;#ASMEND9164; GFX90A-NEXT: s_setpc_b64 s[30:31]9165;9166; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_0:9167; GFX942: ; %bb.0:9168; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9169; GFX942-NEXT: ;;#ASMSTART9170; GFX942-NEXT: ; def s[0:1]9171; GFX942-NEXT: ;;#ASMEND9172; GFX942-NEXT: ;;#ASMSTART9173; GFX942-NEXT: ; def s[2:3]9174; GFX942-NEXT: ;;#ASMEND9175; GFX942-NEXT: s_lshl_b32 s9, s0, 169176; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39177; GFX942-NEXT: ;;#ASMSTART9178; GFX942-NEXT: ; use s[8:9]9179; GFX942-NEXT: ;;#ASMEND9180; GFX942-NEXT: s_setpc_b64 s[30:31]9181 %vec0 = call <4 x half> asm "; def $0", "=s"()9182 %vec1 = call <4 x half> asm "; def $0", "=s"()9183 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9184 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9185 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 0>9186 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9187 ret void9188}9189 9190define void @s_shuffle_v4f16_v3f16__5_5_1_0() {9191; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_0:9192; GFX900: ; %bb.0:9193; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9194; GFX900-NEXT: ;;#ASMSTART9195; GFX900-NEXT: ; def s[4:5]9196; GFX900-NEXT: ;;#ASMEND9197; GFX900-NEXT: s_lshr_b32 s5, s4, 169198; GFX900-NEXT: ;;#ASMSTART9199; GFX900-NEXT: ; def s[6:7]9200; GFX900-NEXT: ;;#ASMEND9201; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s49202; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79203; GFX900-NEXT: ;;#ASMSTART9204; GFX900-NEXT: ; use s[8:9]9205; GFX900-NEXT: ;;#ASMEND9206; GFX900-NEXT: s_setpc_b64 s[30:31]9207;9208; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_0:9209; GFX90A: ; %bb.0:9210; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9211; GFX90A-NEXT: ;;#ASMSTART9212; GFX90A-NEXT: ; def s[4:5]9213; GFX90A-NEXT: ;;#ASMEND9214; GFX90A-NEXT: s_lshr_b32 s5, s4, 169215; GFX90A-NEXT: ;;#ASMSTART9216; GFX90A-NEXT: ; def s[6:7]9217; GFX90A-NEXT: ;;#ASMEND9218; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s49219; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79220; GFX90A-NEXT: ;;#ASMSTART9221; GFX90A-NEXT: ; use s[8:9]9222; GFX90A-NEXT: ;;#ASMEND9223; GFX90A-NEXT: s_setpc_b64 s[30:31]9224;9225; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_0:9226; GFX942: ; %bb.0:9227; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9228; GFX942-NEXT: ;;#ASMSTART9229; GFX942-NEXT: ; def s[0:1]9230; GFX942-NEXT: ;;#ASMEND9231; GFX942-NEXT: s_lshr_b32 s1, s0, 169232; GFX942-NEXT: ;;#ASMSTART9233; GFX942-NEXT: ; def s[2:3]9234; GFX942-NEXT: ;;#ASMEND9235; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s09236; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39237; GFX942-NEXT: ;;#ASMSTART9238; GFX942-NEXT: ; use s[8:9]9239; GFX942-NEXT: ;;#ASMEND9240; GFX942-NEXT: s_setpc_b64 s[30:31]9241 %vec0 = call <4 x half> asm "; def $0", "=s"()9242 %vec1 = call <4 x half> asm "; def $0", "=s"()9243 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9244 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9245 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 0>9246 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9247 ret void9248}9249 9250define void @s_shuffle_v4f16_v3f16__5_5_2_0() {9251; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_0:9252; GFX900: ; %bb.0:9253; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9254; GFX900-NEXT: ;;#ASMSTART9255; GFX900-NEXT: ; def s[4:5]9256; GFX900-NEXT: ;;#ASMEND9257; GFX900-NEXT: ;;#ASMSTART9258; GFX900-NEXT: ; def s[6:7]9259; GFX900-NEXT: ;;#ASMEND9260; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s49261; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79262; GFX900-NEXT: ;;#ASMSTART9263; GFX900-NEXT: ; use s[8:9]9264; GFX900-NEXT: ;;#ASMEND9265; GFX900-NEXT: s_setpc_b64 s[30:31]9266;9267; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_0:9268; GFX90A: ; %bb.0:9269; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9270; GFX90A-NEXT: ;;#ASMSTART9271; GFX90A-NEXT: ; def s[4:5]9272; GFX90A-NEXT: ;;#ASMEND9273; GFX90A-NEXT: ;;#ASMSTART9274; GFX90A-NEXT: ; def s[6:7]9275; GFX90A-NEXT: ;;#ASMEND9276; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s49277; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79278; GFX90A-NEXT: ;;#ASMSTART9279; GFX90A-NEXT: ; use s[8:9]9280; GFX90A-NEXT: ;;#ASMEND9281; GFX90A-NEXT: s_setpc_b64 s[30:31]9282;9283; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_0:9284; GFX942: ; %bb.0:9285; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9286; GFX942-NEXT: ;;#ASMSTART9287; GFX942-NEXT: ; def s[0:1]9288; GFX942-NEXT: ;;#ASMEND9289; GFX942-NEXT: ;;#ASMSTART9290; GFX942-NEXT: ; def s[2:3]9291; GFX942-NEXT: ;;#ASMEND9292; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s09293; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39294; GFX942-NEXT: ;;#ASMSTART9295; GFX942-NEXT: ; use s[8:9]9296; GFX942-NEXT: ;;#ASMEND9297; GFX942-NEXT: s_setpc_b64 s[30:31]9298 %vec0 = call <4 x half> asm "; def $0", "=s"()9299 %vec1 = call <4 x half> asm "; def $0", "=s"()9300 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9301 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9302 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 0>9303 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9304 ret void9305}9306 9307define void @s_shuffle_v4f16_v3f16__5_5_3_0() {9308; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_0:9309; GFX900: ; %bb.0:9310; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9311; GFX900-NEXT: ;;#ASMSTART9312; GFX900-NEXT: ; def s[4:5]9313; GFX900-NEXT: ;;#ASMEND9314; GFX900-NEXT: ;;#ASMSTART9315; GFX900-NEXT: ; def s[6:7]9316; GFX900-NEXT: ;;#ASMEND9317; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s49318; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79319; GFX900-NEXT: ;;#ASMSTART9320; GFX900-NEXT: ; use s[8:9]9321; GFX900-NEXT: ;;#ASMEND9322; GFX900-NEXT: s_setpc_b64 s[30:31]9323;9324; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_0:9325; GFX90A: ; %bb.0:9326; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9327; GFX90A-NEXT: ;;#ASMSTART9328; GFX90A-NEXT: ; def s[4:5]9329; GFX90A-NEXT: ;;#ASMEND9330; GFX90A-NEXT: ;;#ASMSTART9331; GFX90A-NEXT: ; def s[6:7]9332; GFX90A-NEXT: ;;#ASMEND9333; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s49334; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79335; GFX90A-NEXT: ;;#ASMSTART9336; GFX90A-NEXT: ; use s[8:9]9337; GFX90A-NEXT: ;;#ASMEND9338; GFX90A-NEXT: s_setpc_b64 s[30:31]9339;9340; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_0:9341; GFX942: ; %bb.0:9342; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9343; GFX942-NEXT: ;;#ASMSTART9344; GFX942-NEXT: ; def s[0:1]9345; GFX942-NEXT: ;;#ASMEND9346; GFX942-NEXT: ;;#ASMSTART9347; GFX942-NEXT: ; def s[2:3]9348; GFX942-NEXT: ;;#ASMEND9349; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s09350; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39351; GFX942-NEXT: ;;#ASMSTART9352; GFX942-NEXT: ; use s[8:9]9353; GFX942-NEXT: ;;#ASMEND9354; GFX942-NEXT: s_setpc_b64 s[30:31]9355 %vec0 = call <4 x half> asm "; def $0", "=s"()9356 %vec1 = call <4 x half> asm "; def $0", "=s"()9357 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9358 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9359 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 0>9360 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9361 ret void9362}9363 9364define void @s_shuffle_v4f16_v3f16__5_5_4_0() {9365; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_0:9366; GFX900: ; %bb.0:9367; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9368; GFX900-NEXT: ;;#ASMSTART9369; GFX900-NEXT: ; def s[4:5]9370; GFX900-NEXT: ;;#ASMEND9371; GFX900-NEXT: ;;#ASMSTART9372; GFX900-NEXT: ; def s[6:7]9373; GFX900-NEXT: ;;#ASMEND9374; GFX900-NEXT: s_lshr_b32 s5, s6, 169375; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s49376; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s79377; GFX900-NEXT: ;;#ASMSTART9378; GFX900-NEXT: ; use s[8:9]9379; GFX900-NEXT: ;;#ASMEND9380; GFX900-NEXT: s_setpc_b64 s[30:31]9381;9382; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_0:9383; GFX90A: ; %bb.0:9384; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9385; GFX90A-NEXT: ;;#ASMSTART9386; GFX90A-NEXT: ; def s[4:5]9387; GFX90A-NEXT: ;;#ASMEND9388; GFX90A-NEXT: ;;#ASMSTART9389; GFX90A-NEXT: ; def s[6:7]9390; GFX90A-NEXT: ;;#ASMEND9391; GFX90A-NEXT: s_lshr_b32 s5, s6, 169392; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s49393; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s79394; GFX90A-NEXT: ;;#ASMSTART9395; GFX90A-NEXT: ; use s[8:9]9396; GFX90A-NEXT: ;;#ASMEND9397; GFX90A-NEXT: s_setpc_b64 s[30:31]9398;9399; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_4_0:9400; GFX942: ; %bb.0:9401; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9402; GFX942-NEXT: ;;#ASMSTART9403; GFX942-NEXT: ; def s[0:1]9404; GFX942-NEXT: ;;#ASMEND9405; GFX942-NEXT: ;;#ASMSTART9406; GFX942-NEXT: ; def s[2:3]9407; GFX942-NEXT: ;;#ASMEND9408; GFX942-NEXT: s_lshr_b32 s1, s2, 169409; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s09410; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s39411; GFX942-NEXT: ;;#ASMSTART9412; GFX942-NEXT: ; use s[8:9]9413; GFX942-NEXT: ;;#ASMEND9414; GFX942-NEXT: s_setpc_b64 s[30:31]9415 %vec0 = call <4 x half> asm "; def $0", "=s"()9416 %vec1 = call <4 x half> asm "; def $0", "=s"()9417 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9418 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9419 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 0>9420 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9421 ret void9422}9423 9424define void @s_shuffle_v4f16_v3f16__u_1_1_1() {9425; GFX900-LABEL: s_shuffle_v4f16_v3f16__u_1_1_1:9426; GFX900: ; %bb.0:9427; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9428; GFX900-NEXT: ;;#ASMSTART9429; GFX900-NEXT: ; def s[8:9]9430; GFX900-NEXT: ;;#ASMEND9431; GFX900-NEXT: s_lshr_b32 s4, s8, 169432; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49433; GFX900-NEXT: ;;#ASMSTART9434; GFX900-NEXT: ; use s[8:9]9435; GFX900-NEXT: ;;#ASMEND9436; GFX900-NEXT: s_setpc_b64 s[30:31]9437;9438; GFX90A-LABEL: s_shuffle_v4f16_v3f16__u_1_1_1:9439; GFX90A: ; %bb.0:9440; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9441; GFX90A-NEXT: ;;#ASMSTART9442; GFX90A-NEXT: ; def s[8:9]9443; GFX90A-NEXT: ;;#ASMEND9444; GFX90A-NEXT: s_lshr_b32 s4, s8, 169445; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49446; GFX90A-NEXT: ;;#ASMSTART9447; GFX90A-NEXT: ; use s[8:9]9448; GFX90A-NEXT: ;;#ASMEND9449; GFX90A-NEXT: s_setpc_b64 s[30:31]9450;9451; GFX942-LABEL: s_shuffle_v4f16_v3f16__u_1_1_1:9452; GFX942: ; %bb.0:9453; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9454; GFX942-NEXT: ;;#ASMSTART9455; GFX942-NEXT: ; def s[8:9]9456; GFX942-NEXT: ;;#ASMEND9457; GFX942-NEXT: s_lshr_b32 s0, s8, 169458; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09459; GFX942-NEXT: ;;#ASMSTART9460; GFX942-NEXT: ; use s[8:9]9461; GFX942-NEXT: ;;#ASMEND9462; GFX942-NEXT: s_setpc_b64 s[30:31]9463 %vec0 = call <4 x half> asm "; def $0", "=s"()9464 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9465 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>9466 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9467 ret void9468}9469 9470define void @s_shuffle_v4f16_v3f16__0_1_1_1() {9471; GFX900-LABEL: s_shuffle_v4f16_v3f16__0_1_1_1:9472; GFX900: ; %bb.0:9473; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9474; GFX900-NEXT: ;;#ASMSTART9475; GFX900-NEXT: ; def s[8:9]9476; GFX900-NEXT: ;;#ASMEND9477; GFX900-NEXT: s_lshr_b32 s4, s8, 169478; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49479; GFX900-NEXT: ;;#ASMSTART9480; GFX900-NEXT: ; use s[8:9]9481; GFX900-NEXT: ;;#ASMEND9482; GFX900-NEXT: s_setpc_b64 s[30:31]9483;9484; GFX90A-LABEL: s_shuffle_v4f16_v3f16__0_1_1_1:9485; GFX90A: ; %bb.0:9486; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9487; GFX90A-NEXT: ;;#ASMSTART9488; GFX90A-NEXT: ; def s[8:9]9489; GFX90A-NEXT: ;;#ASMEND9490; GFX90A-NEXT: s_lshr_b32 s4, s8, 169491; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49492; GFX90A-NEXT: ;;#ASMSTART9493; GFX90A-NEXT: ; use s[8:9]9494; GFX90A-NEXT: ;;#ASMEND9495; GFX90A-NEXT: s_setpc_b64 s[30:31]9496;9497; GFX942-LABEL: s_shuffle_v4f16_v3f16__0_1_1_1:9498; GFX942: ; %bb.0:9499; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9500; GFX942-NEXT: ;;#ASMSTART9501; GFX942-NEXT: ; def s[8:9]9502; GFX942-NEXT: ;;#ASMEND9503; GFX942-NEXT: s_lshr_b32 s0, s8, 169504; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09505; GFX942-NEXT: ;;#ASMSTART9506; GFX942-NEXT: ; use s[8:9]9507; GFX942-NEXT: ;;#ASMEND9508; GFX942-NEXT: s_setpc_b64 s[30:31]9509 %vec0 = call <4 x half> asm "; def $0", "=s"()9510 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9511 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>9512 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9513 ret void9514}9515 9516define void @s_shuffle_v4f16_v3f16__1_1_1_1() {9517; GFX900-LABEL: s_shuffle_v4f16_v3f16__1_1_1_1:9518; GFX900: ; %bb.0:9519; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9520; GFX900-NEXT: ;;#ASMSTART9521; GFX900-NEXT: ; def s[4:5]9522; GFX900-NEXT: ;;#ASMEND9523; GFX900-NEXT: s_lshr_b32 s4, s4, 169524; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s49525; GFX900-NEXT: s_mov_b32 s9, s89526; GFX900-NEXT: ;;#ASMSTART9527; GFX900-NEXT: ; use s[8:9]9528; GFX900-NEXT: ;;#ASMEND9529; GFX900-NEXT: s_setpc_b64 s[30:31]9530;9531; GFX90A-LABEL: s_shuffle_v4f16_v3f16__1_1_1_1:9532; GFX90A: ; %bb.0:9533; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9534; GFX90A-NEXT: ;;#ASMSTART9535; GFX90A-NEXT: ; def s[4:5]9536; GFX90A-NEXT: ;;#ASMEND9537; GFX90A-NEXT: s_lshr_b32 s4, s4, 169538; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s49539; GFX90A-NEXT: s_mov_b32 s9, s89540; GFX90A-NEXT: ;;#ASMSTART9541; GFX90A-NEXT: ; use s[8:9]9542; GFX90A-NEXT: ;;#ASMEND9543; GFX90A-NEXT: s_setpc_b64 s[30:31]9544;9545; GFX942-LABEL: s_shuffle_v4f16_v3f16__1_1_1_1:9546; GFX942: ; %bb.0:9547; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9548; GFX942-NEXT: ;;#ASMSTART9549; GFX942-NEXT: ; def s[0:1]9550; GFX942-NEXT: ;;#ASMEND9551; GFX942-NEXT: s_lshr_b32 s0, s0, 169552; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s09553; GFX942-NEXT: s_mov_b32 s9, s89554; GFX942-NEXT: ;;#ASMSTART9555; GFX942-NEXT: ; use s[8:9]9556; GFX942-NEXT: ;;#ASMEND9557; GFX942-NEXT: s_setpc_b64 s[30:31]9558 %vec0 = call <4 x half> asm "; def $0", "=s"()9559 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9560 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>9561 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9562 ret void9563}9564 9565define void @s_shuffle_v4f16_v3f16__2_1_1_1() {9566; GFX900-LABEL: s_shuffle_v4f16_v3f16__2_1_1_1:9567; GFX900: ; %bb.0:9568; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9569; GFX900-NEXT: ;;#ASMSTART9570; GFX900-NEXT: ; def s[4:5]9571; GFX900-NEXT: ;;#ASMEND9572; GFX900-NEXT: s_lshr_b32 s4, s4, 169573; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s49574; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49575; GFX900-NEXT: ;;#ASMSTART9576; GFX900-NEXT: ; use s[8:9]9577; GFX900-NEXT: ;;#ASMEND9578; GFX900-NEXT: s_setpc_b64 s[30:31]9579;9580; GFX90A-LABEL: s_shuffle_v4f16_v3f16__2_1_1_1:9581; GFX90A: ; %bb.0:9582; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9583; GFX90A-NEXT: ;;#ASMSTART9584; GFX90A-NEXT: ; def s[4:5]9585; GFX90A-NEXT: ;;#ASMEND9586; GFX90A-NEXT: s_lshr_b32 s4, s4, 169587; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s49588; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49589; GFX90A-NEXT: ;;#ASMSTART9590; GFX90A-NEXT: ; use s[8:9]9591; GFX90A-NEXT: ;;#ASMEND9592; GFX90A-NEXT: s_setpc_b64 s[30:31]9593;9594; GFX942-LABEL: s_shuffle_v4f16_v3f16__2_1_1_1:9595; GFX942: ; %bb.0:9596; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9597; GFX942-NEXT: ;;#ASMSTART9598; GFX942-NEXT: ; def s[0:1]9599; GFX942-NEXT: ;;#ASMEND9600; GFX942-NEXT: s_lshr_b32 s0, s0, 169601; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s09602; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09603; GFX942-NEXT: ;;#ASMSTART9604; GFX942-NEXT: ; use s[8:9]9605; GFX942-NEXT: ;;#ASMEND9606; GFX942-NEXT: s_setpc_b64 s[30:31]9607 %vec0 = call <4 x half> asm "; def $0", "=s"()9608 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9609 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>9610 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9611 ret void9612}9613 9614define void @s_shuffle_v4f16_v3f16__3_1_1_1() {9615; GFX900-LABEL: s_shuffle_v4f16_v3f16__3_1_1_1:9616; GFX900: ; %bb.0:9617; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9618; GFX900-NEXT: ;;#ASMSTART9619; GFX900-NEXT: ; def s[8:9]9620; GFX900-NEXT: ;;#ASMEND9621; GFX900-NEXT: s_lshr_b32 s4, s8, 169622; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49623; GFX900-NEXT: ;;#ASMSTART9624; GFX900-NEXT: ; use s[8:9]9625; GFX900-NEXT: ;;#ASMEND9626; GFX900-NEXT: s_setpc_b64 s[30:31]9627;9628; GFX90A-LABEL: s_shuffle_v4f16_v3f16__3_1_1_1:9629; GFX90A: ; %bb.0:9630; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9631; GFX90A-NEXT: ;;#ASMSTART9632; GFX90A-NEXT: ; def s[8:9]9633; GFX90A-NEXT: ;;#ASMEND9634; GFX90A-NEXT: s_lshr_b32 s4, s8, 169635; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49636; GFX90A-NEXT: ;;#ASMSTART9637; GFX90A-NEXT: ; use s[8:9]9638; GFX90A-NEXT: ;;#ASMEND9639; GFX90A-NEXT: s_setpc_b64 s[30:31]9640;9641; GFX942-LABEL: s_shuffle_v4f16_v3f16__3_1_1_1:9642; GFX942: ; %bb.0:9643; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9644; GFX942-NEXT: ;;#ASMSTART9645; GFX942-NEXT: ; def s[8:9]9646; GFX942-NEXT: ;;#ASMEND9647; GFX942-NEXT: s_lshr_b32 s0, s8, 169648; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09649; GFX942-NEXT: ;;#ASMSTART9650; GFX942-NEXT: ; use s[8:9]9651; GFX942-NEXT: ;;#ASMEND9652; GFX942-NEXT: s_setpc_b64 s[30:31]9653 %vec0 = call <4 x half> asm "; def $0", "=s"()9654 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9655 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 1, i32 1, i32 1>9656 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9657 ret void9658}9659 9660define void @s_shuffle_v4f16_v3f16__4_1_1_1() {9661; GFX900-LABEL: s_shuffle_v4f16_v3f16__4_1_1_1:9662; GFX900: ; %bb.0:9663; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9664; GFX900-NEXT: ;;#ASMSTART9665; GFX900-NEXT: ; def s[4:5]9666; GFX900-NEXT: ;;#ASMEND9667; GFX900-NEXT: ;;#ASMSTART9668; GFX900-NEXT: ; def s[6:7]9669; GFX900-NEXT: ;;#ASMEND9670; GFX900-NEXT: s_lshr_b32 s4, s4, 169671; GFX900-NEXT: s_lshr_b32 s5, s6, 169672; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s49673; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49674; GFX900-NEXT: ;;#ASMSTART9675; GFX900-NEXT: ; use s[8:9]9676; GFX900-NEXT: ;;#ASMEND9677; GFX900-NEXT: s_setpc_b64 s[30:31]9678;9679; GFX90A-LABEL: s_shuffle_v4f16_v3f16__4_1_1_1:9680; GFX90A: ; %bb.0:9681; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9682; GFX90A-NEXT: ;;#ASMSTART9683; GFX90A-NEXT: ; def s[4:5]9684; GFX90A-NEXT: ;;#ASMEND9685; GFX90A-NEXT: ;;#ASMSTART9686; GFX90A-NEXT: ; def s[6:7]9687; GFX90A-NEXT: ;;#ASMEND9688; GFX90A-NEXT: s_lshr_b32 s4, s4, 169689; GFX90A-NEXT: s_lshr_b32 s5, s6, 169690; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s49691; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49692; GFX90A-NEXT: ;;#ASMSTART9693; GFX90A-NEXT: ; use s[8:9]9694; GFX90A-NEXT: ;;#ASMEND9695; GFX90A-NEXT: s_setpc_b64 s[30:31]9696;9697; GFX942-LABEL: s_shuffle_v4f16_v3f16__4_1_1_1:9698; GFX942: ; %bb.0:9699; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9700; GFX942-NEXT: ;;#ASMSTART9701; GFX942-NEXT: ; def s[0:1]9702; GFX942-NEXT: ;;#ASMEND9703; GFX942-NEXT: ;;#ASMSTART9704; GFX942-NEXT: ; def s[2:3]9705; GFX942-NEXT: ;;#ASMEND9706; GFX942-NEXT: s_lshr_b32 s0, s0, 169707; GFX942-NEXT: s_lshr_b32 s1, s2, 169708; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s09709; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09710; GFX942-NEXT: ;;#ASMSTART9711; GFX942-NEXT: ; use s[8:9]9712; GFX942-NEXT: ;;#ASMEND9713; GFX942-NEXT: s_setpc_b64 s[30:31]9714 %vec0 = call <4 x half> asm "; def $0", "=s"()9715 %vec1 = call <4 x half> asm "; def $0", "=s"()9716 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9717 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9718 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 1, i32 1, i32 1>9719 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9720 ret void9721}9722 9723define void @s_shuffle_v4f16_v3f16__5_1_1_1() {9724; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_1_1_1:9725; GFX900: ; %bb.0:9726; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9727; GFX900-NEXT: ;;#ASMSTART9728; GFX900-NEXT: ; def s[4:5]9729; GFX900-NEXT: ;;#ASMEND9730; GFX900-NEXT: s_lshr_b32 s4, s4, 169731; GFX900-NEXT: ;;#ASMSTART9732; GFX900-NEXT: ; def s[6:7]9733; GFX900-NEXT: ;;#ASMEND9734; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s49735; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49736; GFX900-NEXT: ;;#ASMSTART9737; GFX900-NEXT: ; use s[8:9]9738; GFX900-NEXT: ;;#ASMEND9739; GFX900-NEXT: s_setpc_b64 s[30:31]9740;9741; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_1_1:9742; GFX90A: ; %bb.0:9743; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9744; GFX90A-NEXT: ;;#ASMSTART9745; GFX90A-NEXT: ; def s[4:5]9746; GFX90A-NEXT: ;;#ASMEND9747; GFX90A-NEXT: s_lshr_b32 s4, s4, 169748; GFX90A-NEXT: ;;#ASMSTART9749; GFX90A-NEXT: ; def s[6:7]9750; GFX90A-NEXT: ;;#ASMEND9751; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s49752; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49753; GFX90A-NEXT: ;;#ASMSTART9754; GFX90A-NEXT: ; use s[8:9]9755; GFX90A-NEXT: ;;#ASMEND9756; GFX90A-NEXT: s_setpc_b64 s[30:31]9757;9758; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_1_1:9759; GFX942: ; %bb.0:9760; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9761; GFX942-NEXT: ;;#ASMSTART9762; GFX942-NEXT: ; def s[0:1]9763; GFX942-NEXT: ;;#ASMEND9764; GFX942-NEXT: s_lshr_b32 s0, s0, 169765; 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_ll_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 half> asm "; def $0", "=s"()9775 %vec1 = call <4 x half> asm "; def $0", "=s"()9776 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9777 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9778 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 1, i32 1>9779 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9780 ret void9781}9782 9783define void @s_shuffle_v4f16_v3f16__5_u_1_1() {9784; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_u_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: s_lshr_b32 s4, s4, 169791; GFX900-NEXT: ;;#ASMSTART9792; GFX900-NEXT: ; def s[6:7]9793; GFX900-NEXT: ;;#ASMEND9794; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49795; GFX900-NEXT: s_mov_b32 s8, s79796; GFX900-NEXT: ;;#ASMSTART9797; GFX900-NEXT: ; use s[8:9]9798; GFX900-NEXT: ;;#ASMEND9799; GFX900-NEXT: s_setpc_b64 s[30:31]9800;9801; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_u_1_1:9802; GFX90A: ; %bb.0:9803; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9804; GFX90A-NEXT: ;;#ASMSTART9805; GFX90A-NEXT: ; def s[4:5]9806; GFX90A-NEXT: ;;#ASMEND9807; GFX90A-NEXT: s_lshr_b32 s4, s4, 169808; GFX90A-NEXT: ;;#ASMSTART9809; GFX90A-NEXT: ; def s[6:7]9810; GFX90A-NEXT: ;;#ASMEND9811; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49812; GFX90A-NEXT: s_mov_b32 s8, s79813; GFX90A-NEXT: ;;#ASMSTART9814; GFX90A-NEXT: ; use s[8:9]9815; GFX90A-NEXT: ;;#ASMEND9816; GFX90A-NEXT: s_setpc_b64 s[30:31]9817;9818; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_u_1_1:9819; GFX942: ; %bb.0:9820; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9821; GFX942-NEXT: ;;#ASMSTART9822; GFX942-NEXT: ; def s[0:1]9823; GFX942-NEXT: ;;#ASMEND9824; GFX942-NEXT: s_lshr_b32 s0, s0, 169825; GFX942-NEXT: ;;#ASMSTART9826; GFX942-NEXT: ; def s[2:3]9827; GFX942-NEXT: ;;#ASMEND9828; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09829; GFX942-NEXT: s_mov_b32 s8, s39830; GFX942-NEXT: ;;#ASMSTART9831; GFX942-NEXT: ; use s[8:9]9832; GFX942-NEXT: ;;#ASMEND9833; GFX942-NEXT: s_setpc_b64 s[30:31]9834 %vec0 = call <4 x half> asm "; def $0", "=s"()9835 %vec1 = call <4 x half> asm "; def $0", "=s"()9836 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9837 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9838 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 1, i32 1>9839 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9840 ret void9841}9842 9843define void @s_shuffle_v4f16_v3f16__5_0_1_1() {9844; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_0_1_1:9845; GFX900: ; %bb.0:9846; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9847; GFX900-NEXT: ;;#ASMSTART9848; GFX900-NEXT: ; def s[4:5]9849; GFX900-NEXT: ;;#ASMEND9850; GFX900-NEXT: ;;#ASMSTART9851; GFX900-NEXT: ; def s[6:7]9852; GFX900-NEXT: ;;#ASMEND9853; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s49854; GFX900-NEXT: s_lshr_b32 s4, s4, 169855; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49856; GFX900-NEXT: ;;#ASMSTART9857; GFX900-NEXT: ; use s[8:9]9858; GFX900-NEXT: ;;#ASMEND9859; GFX900-NEXT: s_setpc_b64 s[30:31]9860;9861; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_0_1_1:9862; GFX90A: ; %bb.0:9863; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9864; GFX90A-NEXT: ;;#ASMSTART9865; GFX90A-NEXT: ; def s[4:5]9866; GFX90A-NEXT: ;;#ASMEND9867; GFX90A-NEXT: ;;#ASMSTART9868; GFX90A-NEXT: ; def s[6:7]9869; GFX90A-NEXT: ;;#ASMEND9870; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s49871; GFX90A-NEXT: s_lshr_b32 s4, s4, 169872; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49873; GFX90A-NEXT: ;;#ASMSTART9874; GFX90A-NEXT: ; use s[8:9]9875; GFX90A-NEXT: ;;#ASMEND9876; GFX90A-NEXT: s_setpc_b64 s[30:31]9877;9878; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_0_1_1:9879; GFX942: ; %bb.0:9880; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9881; GFX942-NEXT: ;;#ASMSTART9882; GFX942-NEXT: ; def s[0:1]9883; GFX942-NEXT: ;;#ASMEND9884; GFX942-NEXT: ;;#ASMSTART9885; GFX942-NEXT: ; def s[2:3]9886; GFX942-NEXT: ;;#ASMEND9887; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s09888; GFX942-NEXT: s_lshr_b32 s0, s0, 169889; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09890; GFX942-NEXT: ;;#ASMSTART9891; GFX942-NEXT: ; use s[8:9]9892; GFX942-NEXT: ;;#ASMEND9893; GFX942-NEXT: s_setpc_b64 s[30:31]9894 %vec0 = call <4 x half> asm "; def $0", "=s"()9895 %vec1 = call <4 x half> asm "; def $0", "=s"()9896 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9897 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9898 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 1, i32 1>9899 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9900 ret void9901}9902 9903define void @s_shuffle_v4f16_v3f16__5_2_1_1() {9904; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_1_1:9905; GFX900: ; %bb.0:9906; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9907; GFX900-NEXT: ;;#ASMSTART9908; GFX900-NEXT: ; def s[4:5]9909; GFX900-NEXT: ;;#ASMEND9910; GFX900-NEXT: s_lshr_b32 s4, s4, 169911; GFX900-NEXT: ;;#ASMSTART9912; GFX900-NEXT: ; def s[6:7]9913; GFX900-NEXT: ;;#ASMEND9914; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s59915; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49916; GFX900-NEXT: ;;#ASMSTART9917; GFX900-NEXT: ; use s[8:9]9918; GFX900-NEXT: ;;#ASMEND9919; GFX900-NEXT: s_setpc_b64 s[30:31]9920;9921; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_1_1:9922; GFX90A: ; %bb.0:9923; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9924; GFX90A-NEXT: ;;#ASMSTART9925; GFX90A-NEXT: ; def s[4:5]9926; GFX90A-NEXT: ;;#ASMEND9927; GFX90A-NEXT: s_lshr_b32 s4, s4, 169928; GFX90A-NEXT: ;;#ASMSTART9929; GFX90A-NEXT: ; def s[6:7]9930; GFX90A-NEXT: ;;#ASMEND9931; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s59932; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49933; GFX90A-NEXT: ;;#ASMSTART9934; GFX90A-NEXT: ; use s[8:9]9935; GFX90A-NEXT: ;;#ASMEND9936; GFX90A-NEXT: s_setpc_b64 s[30:31]9937;9938; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_1_1:9939; GFX942: ; %bb.0:9940; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9941; GFX942-NEXT: ;;#ASMSTART9942; GFX942-NEXT: ; def s[0:1]9943; GFX942-NEXT: ;;#ASMEND9944; GFX942-NEXT: s_lshr_b32 s0, s0, 169945; GFX942-NEXT: ;;#ASMSTART9946; GFX942-NEXT: ; def s[2:3]9947; GFX942-NEXT: ;;#ASMEND9948; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s19949; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s09950; GFX942-NEXT: ;;#ASMSTART9951; GFX942-NEXT: ; use s[8:9]9952; GFX942-NEXT: ;;#ASMEND9953; GFX942-NEXT: s_setpc_b64 s[30:31]9954 %vec0 = call <4 x half> asm "; def $0", "=s"()9955 %vec1 = call <4 x half> asm "; def $0", "=s"()9956 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9957 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>9958 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 1, i32 1>9959 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)9960 ret void9961}9962 9963define void @s_shuffle_v4f16_v3f16__5_3_1_1() {9964; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_1_1:9965; GFX900: ; %bb.0:9966; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9967; GFX900-NEXT: ;;#ASMSTART9968; GFX900-NEXT: ; def s[4:5]9969; GFX900-NEXT: ;;#ASMEND9970; GFX900-NEXT: s_lshr_b32 s4, s4, 169971; GFX900-NEXT: ;;#ASMSTART9972; GFX900-NEXT: ; def s[6:7]9973; GFX900-NEXT: ;;#ASMEND9974; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s69975; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s49976; GFX900-NEXT: ;;#ASMSTART9977; GFX900-NEXT: ; use s[8:9]9978; GFX900-NEXT: ;;#ASMEND9979; GFX900-NEXT: s_setpc_b64 s[30:31]9980;9981; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_1_1:9982; GFX90A: ; %bb.0:9983; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)9984; GFX90A-NEXT: ;;#ASMSTART9985; GFX90A-NEXT: ; def s[4:5]9986; GFX90A-NEXT: ;;#ASMEND9987; GFX90A-NEXT: s_lshr_b32 s4, s4, 169988; GFX90A-NEXT: ;;#ASMSTART9989; GFX90A-NEXT: ; def s[6:7]9990; GFX90A-NEXT: ;;#ASMEND9991; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s69992; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s49993; GFX90A-NEXT: ;;#ASMSTART9994; GFX90A-NEXT: ; use s[8:9]9995; GFX90A-NEXT: ;;#ASMEND9996; GFX90A-NEXT: s_setpc_b64 s[30:31]9997;9998; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_3_1_1:9999; GFX942: ; %bb.0:10000; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10001; GFX942-NEXT: ;;#ASMSTART10002; GFX942-NEXT: ; def s[0:1]10003; GFX942-NEXT: ;;#ASMEND10004; GFX942-NEXT: s_lshr_b32 s0, s0, 1610005; GFX942-NEXT: ;;#ASMSTART10006; GFX942-NEXT: ; def s[2:3]10007; GFX942-NEXT: ;;#ASMEND10008; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s210009; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s010010; GFX942-NEXT: ;;#ASMSTART10011; GFX942-NEXT: ; use s[8:9]10012; GFX942-NEXT: ;;#ASMEND10013; GFX942-NEXT: s_setpc_b64 s[30:31]10014 %vec0 = call <4 x half> asm "; def $0", "=s"()10015 %vec1 = call <4 x half> asm "; def $0", "=s"()10016 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10017 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10018 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 1, i32 1>10019 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10020 ret void10021}10022 10023define void @s_shuffle_v4f16_v3f16__5_4_1_1() {10024; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_1_1:10025; GFX900: ; %bb.0:10026; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10027; GFX900-NEXT: ;;#ASMSTART10028; GFX900-NEXT: ; def s[4:5]10029; GFX900-NEXT: ;;#ASMEND10030; GFX900-NEXT: ;;#ASMSTART10031; GFX900-NEXT: ; def s[6:7]10032; GFX900-NEXT: ;;#ASMEND10033; GFX900-NEXT: s_lshr_b32 s5, s6, 1610034; GFX900-NEXT: s_lshr_b32 s4, s4, 1610035; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s510036; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s410037; GFX900-NEXT: ;;#ASMSTART10038; GFX900-NEXT: ; use s[8:9]10039; GFX900-NEXT: ;;#ASMEND10040; GFX900-NEXT: s_setpc_b64 s[30:31]10041;10042; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_1_1:10043; GFX90A: ; %bb.0:10044; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10045; GFX90A-NEXT: ;;#ASMSTART10046; GFX90A-NEXT: ; def s[4:5]10047; GFX90A-NEXT: ;;#ASMEND10048; GFX90A-NEXT: ;;#ASMSTART10049; GFX90A-NEXT: ; def s[6:7]10050; GFX90A-NEXT: ;;#ASMEND10051; GFX90A-NEXT: s_lshr_b32 s5, s6, 1610052; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610053; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s510054; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s410055; GFX90A-NEXT: ;;#ASMSTART10056; GFX90A-NEXT: ; use s[8:9]10057; GFX90A-NEXT: ;;#ASMEND10058; GFX90A-NEXT: s_setpc_b64 s[30:31]10059;10060; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_1_1:10061; GFX942: ; %bb.0:10062; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10063; GFX942-NEXT: ;;#ASMSTART10064; GFX942-NEXT: ; def s[0:1]10065; GFX942-NEXT: ;;#ASMEND10066; GFX942-NEXT: ;;#ASMSTART10067; GFX942-NEXT: ; def s[2:3]10068; GFX942-NEXT: ;;#ASMEND10069; GFX942-NEXT: s_lshr_b32 s1, s2, 1610070; GFX942-NEXT: s_lshr_b32 s0, s0, 1610071; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s110072; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s010073; GFX942-NEXT: ;;#ASMSTART10074; GFX942-NEXT: ; use s[8:9]10075; GFX942-NEXT: ;;#ASMEND10076; GFX942-NEXT: s_setpc_b64 s[30:31]10077 %vec0 = call <4 x half> asm "; def $0", "=s"()10078 %vec1 = call <4 x half> asm "; def $0", "=s"()10079 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10080 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10081 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 1, i32 1>10082 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10083 ret void10084}10085 10086define void @s_shuffle_v4f16_v3f16__5_5_1_1() {10087; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_1:10088; GFX900: ; %bb.0:10089; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10090; GFX900-NEXT: ;;#ASMSTART10091; GFX900-NEXT: ; def s[4:5]10092; GFX900-NEXT: ;;#ASMEND10093; GFX900-NEXT: s_lshr_b32 s4, s4, 1610094; GFX900-NEXT: ;;#ASMSTART10095; GFX900-NEXT: ; def s[6:7]10096; GFX900-NEXT: ;;#ASMEND10097; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s410098; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710099; GFX900-NEXT: ;;#ASMSTART10100; GFX900-NEXT: ; use s[8:9]10101; GFX900-NEXT: ;;#ASMEND10102; GFX900-NEXT: s_setpc_b64 s[30:31]10103;10104; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_1:10105; GFX90A: ; %bb.0:10106; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10107; GFX90A-NEXT: ;;#ASMSTART10108; GFX90A-NEXT: ; def s[4:5]10109; GFX90A-NEXT: ;;#ASMEND10110; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610111; GFX90A-NEXT: ;;#ASMSTART10112; GFX90A-NEXT: ; def s[6:7]10113; GFX90A-NEXT: ;;#ASMEND10114; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s410115; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710116; GFX90A-NEXT: ;;#ASMSTART10117; GFX90A-NEXT: ; use s[8:9]10118; GFX90A-NEXT: ;;#ASMEND10119; GFX90A-NEXT: s_setpc_b64 s[30:31]10120;10121; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_1:10122; GFX942: ; %bb.0:10123; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10124; GFX942-NEXT: ;;#ASMSTART10125; GFX942-NEXT: ; def s[0:1]10126; GFX942-NEXT: ;;#ASMEND10127; GFX942-NEXT: s_lshr_b32 s0, s0, 1610128; GFX942-NEXT: ;;#ASMSTART10129; GFX942-NEXT: ; def s[2:3]10130; GFX942-NEXT: ;;#ASMEND10131; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s010132; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310133; GFX942-NEXT: ;;#ASMSTART10134; GFX942-NEXT: ; use s[8:9]10135; GFX942-NEXT: ;;#ASMEND10136; GFX942-NEXT: s_setpc_b64 s[30:31]10137 %vec0 = call <4 x half> asm "; def $0", "=s"()10138 %vec1 = call <4 x half> asm "; def $0", "=s"()10139 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10140 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10141 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 1>10142 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10143 ret void10144}10145 10146define void @s_shuffle_v4f16_v3f16__5_5_u_1() {10147; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_1:10148; GFX900: ; %bb.0:10149; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10150; GFX900-NEXT: ;;#ASMSTART10151; GFX900-NEXT: ; def s[4:5]10152; GFX900-NEXT: ;;#ASMEND10153; GFX900-NEXT: ;;#ASMSTART10154; GFX900-NEXT: ; def s[6:7]10155; GFX900-NEXT: ;;#ASMEND10156; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710157; GFX900-NEXT: s_mov_b32 s9, s410158; GFX900-NEXT: ;;#ASMSTART10159; GFX900-NEXT: ; use s[8:9]10160; GFX900-NEXT: ;;#ASMEND10161; GFX900-NEXT: s_setpc_b64 s[30:31]10162;10163; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_1:10164; GFX90A: ; %bb.0:10165; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10166; GFX90A-NEXT: ;;#ASMSTART10167; GFX90A-NEXT: ; def s[4:5]10168; GFX90A-NEXT: ;;#ASMEND10169; GFX90A-NEXT: ;;#ASMSTART10170; GFX90A-NEXT: ; def s[6:7]10171; GFX90A-NEXT: ;;#ASMEND10172; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710173; GFX90A-NEXT: s_mov_b32 s9, s410174; GFX90A-NEXT: ;;#ASMSTART10175; GFX90A-NEXT: ; use s[8:9]10176; GFX90A-NEXT: ;;#ASMEND10177; GFX90A-NEXT: s_setpc_b64 s[30:31]10178;10179; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_1:10180; GFX942: ; %bb.0:10181; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10182; GFX942-NEXT: ;;#ASMSTART10183; GFX942-NEXT: ; def s[0:1]10184; GFX942-NEXT: ;;#ASMEND10185; GFX942-NEXT: ;;#ASMSTART10186; GFX942-NEXT: ; def s[2:3]10187; GFX942-NEXT: ;;#ASMEND10188; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310189; GFX942-NEXT: s_mov_b32 s9, s010190; GFX942-NEXT: ;;#ASMSTART10191; GFX942-NEXT: ; use s[8:9]10192; GFX942-NEXT: ;;#ASMEND10193; GFX942-NEXT: s_setpc_b64 s[30:31]10194 %vec0 = call <4 x half> asm "; def $0", "=s"()10195 %vec1 = call <4 x half> asm "; def $0", "=s"()10196 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10197 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10198 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 1>10199 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10200 ret void10201}10202 10203define void @s_shuffle_v4f16_v3f16__5_5_0_1() {10204; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_1:10205; GFX900: ; %bb.0:10206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10207; GFX900-NEXT: ;;#ASMSTART10208; GFX900-NEXT: ; def s[4:5]10209; GFX900-NEXT: ;;#ASMEND10210; GFX900-NEXT: ;;#ASMSTART10211; GFX900-NEXT: ; def s[6:7]10212; GFX900-NEXT: ;;#ASMEND10213; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710214; GFX900-NEXT: s_mov_b32 s9, s410215; GFX900-NEXT: ;;#ASMSTART10216; GFX900-NEXT: ; use s[8:9]10217; GFX900-NEXT: ;;#ASMEND10218; GFX900-NEXT: s_setpc_b64 s[30:31]10219;10220; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_1:10221; GFX90A: ; %bb.0:10222; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10223; GFX90A-NEXT: ;;#ASMSTART10224; GFX90A-NEXT: ; def s[4:5]10225; GFX90A-NEXT: ;;#ASMEND10226; GFX90A-NEXT: ;;#ASMSTART10227; GFX90A-NEXT: ; def s[6:7]10228; GFX90A-NEXT: ;;#ASMEND10229; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710230; GFX90A-NEXT: s_mov_b32 s9, s410231; GFX90A-NEXT: ;;#ASMSTART10232; GFX90A-NEXT: ; use s[8:9]10233; GFX90A-NEXT: ;;#ASMEND10234; GFX90A-NEXT: s_setpc_b64 s[30:31]10235;10236; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_1:10237; GFX942: ; %bb.0:10238; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10239; GFX942-NEXT: ;;#ASMSTART10240; GFX942-NEXT: ; def s[0:1]10241; GFX942-NEXT: ;;#ASMEND10242; GFX942-NEXT: ;;#ASMSTART10243; GFX942-NEXT: ; def s[2:3]10244; GFX942-NEXT: ;;#ASMEND10245; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310246; GFX942-NEXT: s_mov_b32 s9, s010247; GFX942-NEXT: ;;#ASMSTART10248; GFX942-NEXT: ; use s[8:9]10249; GFX942-NEXT: ;;#ASMEND10250; GFX942-NEXT: s_setpc_b64 s[30:31]10251 %vec0 = call <4 x half> asm "; def $0", "=s"()10252 %vec1 = call <4 x half> asm "; def $0", "=s"()10253 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10254 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10255 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 1>10256 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10257 ret void10258}10259 10260define void @s_shuffle_v4f16_v3f16__5_5_2_1() {10261; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_1:10262; GFX900: ; %bb.0:10263; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10264; GFX900-NEXT: ;;#ASMSTART10265; GFX900-NEXT: ; def s[4:5]10266; GFX900-NEXT: ;;#ASMEND10267; GFX900-NEXT: s_lshr_b32 s4, s4, 1610268; GFX900-NEXT: ;;#ASMSTART10269; GFX900-NEXT: ; def s[6:7]10270; GFX900-NEXT: ;;#ASMEND10271; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s410272; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710273; GFX900-NEXT: ;;#ASMSTART10274; GFX900-NEXT: ; use s[8:9]10275; GFX900-NEXT: ;;#ASMEND10276; GFX900-NEXT: s_setpc_b64 s[30:31]10277;10278; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_1:10279; GFX90A: ; %bb.0:10280; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10281; GFX90A-NEXT: ;;#ASMSTART10282; GFX90A-NEXT: ; def s[4:5]10283; GFX90A-NEXT: ;;#ASMEND10284; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610285; GFX90A-NEXT: ;;#ASMSTART10286; GFX90A-NEXT: ; def s[6:7]10287; GFX90A-NEXT: ;;#ASMEND10288; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s410289; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710290; GFX90A-NEXT: ;;#ASMSTART10291; GFX90A-NEXT: ; use s[8:9]10292; GFX90A-NEXT: ;;#ASMEND10293; GFX90A-NEXT: s_setpc_b64 s[30:31]10294;10295; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_1:10296; GFX942: ; %bb.0:10297; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10298; GFX942-NEXT: ;;#ASMSTART10299; GFX942-NEXT: ; def s[0:1]10300; GFX942-NEXT: ;;#ASMEND10301; GFX942-NEXT: s_lshr_b32 s0, s0, 1610302; GFX942-NEXT: ;;#ASMSTART10303; GFX942-NEXT: ; def s[2:3]10304; GFX942-NEXT: ;;#ASMEND10305; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s010306; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310307; GFX942-NEXT: ;;#ASMSTART10308; GFX942-NEXT: ; use s[8:9]10309; GFX942-NEXT: ;;#ASMEND10310; GFX942-NEXT: s_setpc_b64 s[30:31]10311 %vec0 = call <4 x half> asm "; def $0", "=s"()10312 %vec1 = call <4 x half> asm "; def $0", "=s"()10313 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10314 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10315 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 1>10316 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10317 ret void10318}10319 10320define void @s_shuffle_v4f16_v3f16__5_5_3_1() {10321; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_1:10322; GFX900: ; %bb.0:10323; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10324; GFX900-NEXT: ;;#ASMSTART10325; GFX900-NEXT: ; def s[4:5]10326; GFX900-NEXT: ;;#ASMEND10327; GFX900-NEXT: s_lshr_b32 s4, s4, 1610328; GFX900-NEXT: ;;#ASMSTART10329; GFX900-NEXT: ; def s[6:7]10330; GFX900-NEXT: ;;#ASMEND10331; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s410332; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710333; GFX900-NEXT: ;;#ASMSTART10334; GFX900-NEXT: ; use s[8:9]10335; GFX900-NEXT: ;;#ASMEND10336; GFX900-NEXT: s_setpc_b64 s[30:31]10337;10338; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_1:10339; GFX90A: ; %bb.0:10340; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10341; GFX90A-NEXT: ;;#ASMSTART10342; GFX90A-NEXT: ; def s[4:5]10343; GFX90A-NEXT: ;;#ASMEND10344; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610345; GFX90A-NEXT: ;;#ASMSTART10346; GFX90A-NEXT: ; def s[6:7]10347; GFX90A-NEXT: ;;#ASMEND10348; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s410349; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710350; GFX90A-NEXT: ;;#ASMSTART10351; GFX90A-NEXT: ; use s[8:9]10352; GFX90A-NEXT: ;;#ASMEND10353; GFX90A-NEXT: s_setpc_b64 s[30:31]10354;10355; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_1:10356; GFX942: ; %bb.0:10357; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10358; GFX942-NEXT: ;;#ASMSTART10359; GFX942-NEXT: ; def s[0:1]10360; GFX942-NEXT: ;;#ASMEND10361; GFX942-NEXT: s_lshr_b32 s0, s0, 1610362; GFX942-NEXT: ;;#ASMSTART10363; GFX942-NEXT: ; def s[2:3]10364; GFX942-NEXT: ;;#ASMEND10365; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s010366; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310367; GFX942-NEXT: ;;#ASMSTART10368; GFX942-NEXT: ; use s[8:9]10369; GFX942-NEXT: ;;#ASMEND10370; GFX942-NEXT: s_setpc_b64 s[30:31]10371 %vec0 = call <4 x half> asm "; def $0", "=s"()10372 %vec1 = call <4 x half> asm "; def $0", "=s"()10373 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10374 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10375 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 1>10376 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10377 ret void10378}10379 10380define void @s_shuffle_v4f16_v3f16__5_5_4_1() {10381; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_1:10382; GFX900: ; %bb.0:10383; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10384; GFX900-NEXT: ;;#ASMSTART10385; GFX900-NEXT: ; def s[4:5]10386; GFX900-NEXT: ;;#ASMEND10387; GFX900-NEXT: ;;#ASMSTART10388; GFX900-NEXT: ; def s[6:7]10389; GFX900-NEXT: ;;#ASMEND10390; GFX900-NEXT: s_lshr_b32 s4, s4, 1610391; GFX900-NEXT: s_lshr_b32 s5, s6, 1610392; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s410393; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s710394; GFX900-NEXT: ;;#ASMSTART10395; GFX900-NEXT: ; use s[8:9]10396; GFX900-NEXT: ;;#ASMEND10397; GFX900-NEXT: s_setpc_b64 s[30:31]10398;10399; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_1:10400; GFX90A: ; %bb.0:10401; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10402; GFX90A-NEXT: ;;#ASMSTART10403; GFX90A-NEXT: ; def s[4:5]10404; GFX90A-NEXT: ;;#ASMEND10405; GFX90A-NEXT: ;;#ASMSTART10406; GFX90A-NEXT: ; def s[6:7]10407; GFX90A-NEXT: ;;#ASMEND10408; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610409; GFX90A-NEXT: s_lshr_b32 s5, s6, 1610410; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s410411; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s710412; 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_v4f16_v3f16__5_5_4_1: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: ;;#ASMSTART10424; GFX942-NEXT: ; def s[2:3]10425; GFX942-NEXT: ;;#ASMEND10426; GFX942-NEXT: s_lshr_b32 s0, s0, 1610427; GFX942-NEXT: s_lshr_b32 s1, s2, 1610428; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s010429; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s310430; GFX942-NEXT: ;;#ASMSTART10431; GFX942-NEXT: ; use s[8:9]10432; GFX942-NEXT: ;;#ASMEND10433; GFX942-NEXT: s_setpc_b64 s[30:31]10434 %vec0 = call <4 x half> asm "; def $0", "=s"()10435 %vec1 = call <4 x half> asm "; def $0", "=s"()10436 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10437 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10438 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 1>10439 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10440 ret void10441}10442 10443define void @s_shuffle_v4f16_v3f16__u_2_2_2() {10444; GFX900-LABEL: s_shuffle_v4f16_v3f16__u_2_2_2:10445; GFX900: ; %bb.0:10446; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10447; GFX900-NEXT: ;;#ASMSTART10448; GFX900-NEXT: ; def s[4:5]10449; GFX900-NEXT: ;;#ASMEND10450; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510451; GFX900-NEXT: s_lshl_b32 s8, s5, 1610452; GFX900-NEXT: ;;#ASMSTART10453; GFX900-NEXT: ; use s[8:9]10454; GFX900-NEXT: ;;#ASMEND10455; GFX900-NEXT: s_setpc_b64 s[30:31]10456;10457; GFX90A-LABEL: s_shuffle_v4f16_v3f16__u_2_2_2:10458; GFX90A: ; %bb.0:10459; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10460; GFX90A-NEXT: ;;#ASMSTART10461; GFX90A-NEXT: ; def s[4:5]10462; GFX90A-NEXT: ;;#ASMEND10463; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510464; GFX90A-NEXT: s_lshl_b32 s8, s5, 1610465; GFX90A-NEXT: ;;#ASMSTART10466; GFX90A-NEXT: ; use s[8:9]10467; GFX90A-NEXT: ;;#ASMEND10468; GFX90A-NEXT: s_setpc_b64 s[30:31]10469;10470; GFX942-LABEL: s_shuffle_v4f16_v3f16__u_2_2_2:10471; GFX942: ; %bb.0:10472; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10473; GFX942-NEXT: ;;#ASMSTART10474; GFX942-NEXT: ; def s[0:1]10475; GFX942-NEXT: ;;#ASMEND10476; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110477; GFX942-NEXT: s_lshl_b32 s8, s1, 1610478; GFX942-NEXT: ;;#ASMSTART10479; GFX942-NEXT: ; use s[8:9]10480; GFX942-NEXT: ;;#ASMEND10481; GFX942-NEXT: s_setpc_b64 s[30:31]10482 %vec0 = call <4 x half> asm "; def $0", "=s"()10483 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10484 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>10485 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10486 ret void10487}10488 10489define void @s_shuffle_v4f16_v3f16__0_2_2_2() {10490; GFX900-LABEL: s_shuffle_v4f16_v3f16__0_2_2_2:10491; GFX900: ; %bb.0:10492; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10493; GFX900-NEXT: ;;#ASMSTART10494; GFX900-NEXT: ; def s[4:5]10495; GFX900-NEXT: ;;#ASMEND10496; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s510497; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510498; GFX900-NEXT: ;;#ASMSTART10499; GFX900-NEXT: ; use s[8:9]10500; GFX900-NEXT: ;;#ASMEND10501; GFX900-NEXT: s_setpc_b64 s[30:31]10502;10503; GFX90A-LABEL: s_shuffle_v4f16_v3f16__0_2_2_2:10504; GFX90A: ; %bb.0:10505; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10506; GFX90A-NEXT: ;;#ASMSTART10507; GFX90A-NEXT: ; def s[4:5]10508; GFX90A-NEXT: ;;#ASMEND10509; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s510510; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510511; GFX90A-NEXT: ;;#ASMSTART10512; GFX90A-NEXT: ; use s[8:9]10513; GFX90A-NEXT: ;;#ASMEND10514; GFX90A-NEXT: s_setpc_b64 s[30:31]10515;10516; GFX942-LABEL: s_shuffle_v4f16_v3f16__0_2_2_2:10517; GFX942: ; %bb.0:10518; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10519; GFX942-NEXT: ;;#ASMSTART10520; GFX942-NEXT: ; def s[0:1]10521; GFX942-NEXT: ;;#ASMEND10522; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s110523; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110524; GFX942-NEXT: ;;#ASMSTART10525; GFX942-NEXT: ; use s[8:9]10526; GFX942-NEXT: ;;#ASMEND10527; GFX942-NEXT: s_setpc_b64 s[30:31]10528 %vec0 = call <4 x half> asm "; def $0", "=s"()10529 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10530 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>10531 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10532 ret void10533}10534 10535define void @s_shuffle_v4f16_v3f16__1_2_2_2() {10536; GFX900-LABEL: s_shuffle_v4f16_v3f16__1_2_2_2:10537; GFX900: ; %bb.0:10538; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10539; GFX900-NEXT: ;;#ASMSTART10540; GFX900-NEXT: ; def s[4:5]10541; GFX900-NEXT: ;;#ASMEND10542; GFX900-NEXT: s_lshr_b32 s4, s4, 1610543; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s510544; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510545; GFX900-NEXT: ;;#ASMSTART10546; GFX900-NEXT: ; use s[8:9]10547; GFX900-NEXT: ;;#ASMEND10548; GFX900-NEXT: s_setpc_b64 s[30:31]10549;10550; GFX90A-LABEL: s_shuffle_v4f16_v3f16__1_2_2_2:10551; GFX90A: ; %bb.0:10552; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10553; GFX90A-NEXT: ;;#ASMSTART10554; GFX90A-NEXT: ; def s[4:5]10555; GFX90A-NEXT: ;;#ASMEND10556; GFX90A-NEXT: s_lshr_b32 s4, s4, 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_v4f16_v3f16__1_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: s_lshr_b32 s0, s0, 1610571; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s110572; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110573; GFX942-NEXT: ;;#ASMSTART10574; GFX942-NEXT: ; use s[8:9]10575; GFX942-NEXT: ;;#ASMEND10576; GFX942-NEXT: s_setpc_b64 s[30:31]10577 %vec0 = call <4 x half> asm "; def $0", "=s"()10578 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10579 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>10580 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10581 ret void10582}10583 10584define void @s_shuffle_v4f16_v3f16__2_2_2_2() {10585; GFX900-LABEL: s_shuffle_v4f16_v3f16__2_2_2_2:10586; GFX900: ; %bb.0:10587; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10588; GFX900-NEXT: ;;#ASMSTART10589; GFX900-NEXT: ; def s[4:5]10590; GFX900-NEXT: ;;#ASMEND10591; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s510592; GFX900-NEXT: s_mov_b32 s9, s810593; GFX900-NEXT: ;;#ASMSTART10594; GFX900-NEXT: ; use s[8:9]10595; GFX900-NEXT: ;;#ASMEND10596; GFX900-NEXT: s_setpc_b64 s[30:31]10597;10598; GFX90A-LABEL: s_shuffle_v4f16_v3f16__2_2_2_2:10599; GFX90A: ; %bb.0:10600; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10601; GFX90A-NEXT: ;;#ASMSTART10602; GFX90A-NEXT: ; def s[4:5]10603; GFX90A-NEXT: ;;#ASMEND10604; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s510605; GFX90A-NEXT: s_mov_b32 s9, s810606; GFX90A-NEXT: ;;#ASMSTART10607; GFX90A-NEXT: ; use s[8:9]10608; GFX90A-NEXT: ;;#ASMEND10609; GFX90A-NEXT: s_setpc_b64 s[30:31]10610;10611; GFX942-LABEL: s_shuffle_v4f16_v3f16__2_2_2_2:10612; GFX942: ; %bb.0:10613; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10614; GFX942-NEXT: ;;#ASMSTART10615; GFX942-NEXT: ; def s[0:1]10616; GFX942-NEXT: ;;#ASMEND10617; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s110618; GFX942-NEXT: s_mov_b32 s9, s810619; GFX942-NEXT: ;;#ASMSTART10620; GFX942-NEXT: ; use s[8:9]10621; GFX942-NEXT: ;;#ASMEND10622; GFX942-NEXT: s_setpc_b64 s[30:31]10623 %vec0 = call <4 x half> asm "; def $0", "=s"()10624 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10625 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>10626 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10627 ret void10628}10629 10630define void @s_shuffle_v4f16_v3f16__3_2_2_2() {10631; GFX900-LABEL: s_shuffle_v4f16_v3f16__3_2_2_2:10632; GFX900: ; %bb.0:10633; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10634; GFX900-NEXT: ;;#ASMSTART10635; GFX900-NEXT: ; def s[4:5]10636; GFX900-NEXT: ;;#ASMEND10637; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510638; GFX900-NEXT: s_lshl_b32 s8, s5, 1610639; GFX900-NEXT: ;;#ASMSTART10640; GFX900-NEXT: ; use s[8:9]10641; GFX900-NEXT: ;;#ASMEND10642; GFX900-NEXT: s_setpc_b64 s[30:31]10643;10644; GFX90A-LABEL: s_shuffle_v4f16_v3f16__3_2_2_2:10645; GFX90A: ; %bb.0:10646; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10647; GFX90A-NEXT: ;;#ASMSTART10648; GFX90A-NEXT: ; def s[4:5]10649; GFX90A-NEXT: ;;#ASMEND10650; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510651; GFX90A-NEXT: s_lshl_b32 s8, s5, 1610652; GFX90A-NEXT: ;;#ASMSTART10653; GFX90A-NEXT: ; use s[8:9]10654; GFX90A-NEXT: ;;#ASMEND10655; GFX90A-NEXT: s_setpc_b64 s[30:31]10656;10657; GFX942-LABEL: s_shuffle_v4f16_v3f16__3_2_2_2:10658; GFX942: ; %bb.0:10659; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10660; GFX942-NEXT: ;;#ASMSTART10661; GFX942-NEXT: ; def s[0:1]10662; GFX942-NEXT: ;;#ASMEND10663; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110664; GFX942-NEXT: s_lshl_b32 s8, s1, 1610665; GFX942-NEXT: ;;#ASMSTART10666; GFX942-NEXT: ; use s[8:9]10667; GFX942-NEXT: ;;#ASMEND10668; GFX942-NEXT: s_setpc_b64 s[30:31]10669 %vec0 = call <4 x half> asm "; def $0", "=s"()10670 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10671 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 2, i32 2, i32 2>10672 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10673 ret void10674}10675 10676define void @s_shuffle_v4f16_v3f16__4_2_2_2() {10677; GFX900-LABEL: s_shuffle_v4f16_v3f16__4_2_2_2:10678; GFX900: ; %bb.0:10679; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10680; GFX900-NEXT: ;;#ASMSTART10681; GFX900-NEXT: ; def s[4:5]10682; GFX900-NEXT: ;;#ASMEND10683; GFX900-NEXT: ;;#ASMSTART10684; GFX900-NEXT: ; def s[6:7]10685; GFX900-NEXT: ;;#ASMEND10686; GFX900-NEXT: s_lshr_b32 s4, s6, 1610687; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s510688; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510689; GFX900-NEXT: ;;#ASMSTART10690; GFX900-NEXT: ; use s[8:9]10691; GFX900-NEXT: ;;#ASMEND10692; GFX900-NEXT: s_setpc_b64 s[30:31]10693;10694; GFX90A-LABEL: s_shuffle_v4f16_v3f16__4_2_2_2:10695; GFX90A: ; %bb.0:10696; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10697; GFX90A-NEXT: ;;#ASMSTART10698; GFX90A-NEXT: ; def s[4:5]10699; GFX90A-NEXT: ;;#ASMEND10700; GFX90A-NEXT: ;;#ASMSTART10701; GFX90A-NEXT: ; def s[6:7]10702; GFX90A-NEXT: ;;#ASMEND10703; GFX90A-NEXT: s_lshr_b32 s4, s6, 1610704; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s510705; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510706; GFX90A-NEXT: ;;#ASMSTART10707; GFX90A-NEXT: ; use s[8:9]10708; GFX90A-NEXT: ;;#ASMEND10709; GFX90A-NEXT: s_setpc_b64 s[30:31]10710;10711; GFX942-LABEL: s_shuffle_v4f16_v3f16__4_2_2_2:10712; GFX942: ; %bb.0:10713; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10714; GFX942-NEXT: ;;#ASMSTART10715; GFX942-NEXT: ; def s[0:1]10716; GFX942-NEXT: ;;#ASMEND10717; GFX942-NEXT: ;;#ASMSTART10718; GFX942-NEXT: ; def s[2:3]10719; GFX942-NEXT: ;;#ASMEND10720; GFX942-NEXT: s_lshr_b32 s0, s2, 1610721; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s110722; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110723; GFX942-NEXT: ;;#ASMSTART10724; GFX942-NEXT: ; use s[8:9]10725; GFX942-NEXT: ;;#ASMEND10726; GFX942-NEXT: s_setpc_b64 s[30:31]10727 %vec0 = call <4 x half> asm "; def $0", "=s"()10728 %vec1 = call <4 x half> asm "; def $0", "=s"()10729 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10730 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10731 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 2, i32 2, i32 2>10732 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10733 ret void10734}10735 10736define void @s_shuffle_v4f16_v3f16__5_2_2_2() {10737; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_2_2:10738; GFX900: ; %bb.0:10739; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10740; GFX900-NEXT: ;;#ASMSTART10741; GFX900-NEXT: ; def s[4:5]10742; GFX900-NEXT: ;;#ASMEND10743; GFX900-NEXT: ;;#ASMSTART10744; GFX900-NEXT: ; def s[6:7]10745; GFX900-NEXT: ;;#ASMEND10746; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s510747; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510748; GFX900-NEXT: ;;#ASMSTART10749; GFX900-NEXT: ; use s[8:9]10750; GFX900-NEXT: ;;#ASMEND10751; GFX900-NEXT: s_setpc_b64 s[30:31]10752;10753; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_2_2:10754; GFX90A: ; %bb.0:10755; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10756; GFX90A-NEXT: ;;#ASMSTART10757; GFX90A-NEXT: ; def s[4:5]10758; GFX90A-NEXT: ;;#ASMEND10759; GFX90A-NEXT: ;;#ASMSTART10760; GFX90A-NEXT: ; def s[6:7]10761; GFX90A-NEXT: ;;#ASMEND10762; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s510763; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510764; GFX90A-NEXT: ;;#ASMSTART10765; GFX90A-NEXT: ; use s[8:9]10766; GFX90A-NEXT: ;;#ASMEND10767; GFX90A-NEXT: s_setpc_b64 s[30:31]10768;10769; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_2_2:10770; GFX942: ; %bb.0:10771; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10772; GFX942-NEXT: ;;#ASMSTART10773; GFX942-NEXT: ; def s[0:1]10774; GFX942-NEXT: ;;#ASMEND10775; GFX942-NEXT: ;;#ASMSTART10776; GFX942-NEXT: ; def s[2:3]10777; GFX942-NEXT: ;;#ASMEND10778; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s110779; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110780; GFX942-NEXT: ;;#ASMSTART10781; GFX942-NEXT: ; use s[8:9]10782; GFX942-NEXT: ;;#ASMEND10783; GFX942-NEXT: s_setpc_b64 s[30:31]10784 %vec0 = call <4 x half> asm "; def $0", "=s"()10785 %vec1 = call <4 x half> asm "; def $0", "=s"()10786 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10787 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10788 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 2, i32 2>10789 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10790 ret void10791}10792 10793define void @s_shuffle_v4f16_v3f16__5_u_2_2() {10794; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_u_2_2:10795; GFX900: ; %bb.0:10796; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10797; GFX900-NEXT: ;;#ASMSTART10798; GFX900-NEXT: ; def s[4:5]10799; GFX900-NEXT: ;;#ASMEND10800; GFX900-NEXT: ;;#ASMSTART10801; GFX900-NEXT: ; def s[6:7]10802; GFX900-NEXT: ;;#ASMEND10803; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510804; GFX900-NEXT: s_mov_b32 s8, s710805; GFX900-NEXT: ;;#ASMSTART10806; GFX900-NEXT: ; use s[8:9]10807; GFX900-NEXT: ;;#ASMEND10808; GFX900-NEXT: s_setpc_b64 s[30:31]10809;10810; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_u_2_2:10811; GFX90A: ; %bb.0:10812; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10813; GFX90A-NEXT: ;;#ASMSTART10814; GFX90A-NEXT: ; def s[4:5]10815; GFX90A-NEXT: ;;#ASMEND10816; GFX90A-NEXT: ;;#ASMSTART10817; GFX90A-NEXT: ; def s[6:7]10818; GFX90A-NEXT: ;;#ASMEND10819; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510820; GFX90A-NEXT: s_mov_b32 s8, s710821; GFX90A-NEXT: ;;#ASMSTART10822; GFX90A-NEXT: ; use s[8:9]10823; GFX90A-NEXT: ;;#ASMEND10824; GFX90A-NEXT: s_setpc_b64 s[30:31]10825;10826; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_u_2_2:10827; GFX942: ; %bb.0:10828; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10829; GFX942-NEXT: ;;#ASMSTART10830; GFX942-NEXT: ; def s[0:1]10831; GFX942-NEXT: ;;#ASMEND10832; GFX942-NEXT: ;;#ASMSTART10833; GFX942-NEXT: ; def s[2:3]10834; GFX942-NEXT: ;;#ASMEND10835; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110836; GFX942-NEXT: s_mov_b32 s8, s310837; GFX942-NEXT: ;;#ASMSTART10838; GFX942-NEXT: ; use s[8:9]10839; GFX942-NEXT: ;;#ASMEND10840; GFX942-NEXT: s_setpc_b64 s[30:31]10841 %vec0 = call <4 x half> asm "; def $0", "=s"()10842 %vec1 = call <4 x half> asm "; def $0", "=s"()10843 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10844 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10845 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 2, i32 2>10846 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10847 ret void10848}10849 10850define void @s_shuffle_v4f16_v3f16__5_0_2_2() {10851; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_0_2_2:10852; GFX900: ; %bb.0:10853; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10854; GFX900-NEXT: ;;#ASMSTART10855; GFX900-NEXT: ; def s[4:5]10856; GFX900-NEXT: ;;#ASMEND10857; GFX900-NEXT: ;;#ASMSTART10858; GFX900-NEXT: ; def s[6:7]10859; GFX900-NEXT: ;;#ASMEND10860; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s410861; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510862; GFX900-NEXT: ;;#ASMSTART10863; GFX900-NEXT: ; use s[8:9]10864; GFX900-NEXT: ;;#ASMEND10865; GFX900-NEXT: s_setpc_b64 s[30:31]10866;10867; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_0_2_2:10868; GFX90A: ; %bb.0:10869; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10870; GFX90A-NEXT: ;;#ASMSTART10871; GFX90A-NEXT: ; def s[4:5]10872; GFX90A-NEXT: ;;#ASMEND10873; GFX90A-NEXT: ;;#ASMSTART10874; GFX90A-NEXT: ; def s[6:7]10875; GFX90A-NEXT: ;;#ASMEND10876; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s410877; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510878; GFX90A-NEXT: ;;#ASMSTART10879; GFX90A-NEXT: ; use s[8:9]10880; GFX90A-NEXT: ;;#ASMEND10881; GFX90A-NEXT: s_setpc_b64 s[30:31]10882;10883; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_0_2_2:10884; GFX942: ; %bb.0:10885; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10886; GFX942-NEXT: ;;#ASMSTART10887; GFX942-NEXT: ; def s[0:1]10888; GFX942-NEXT: ;;#ASMEND10889; GFX942-NEXT: ;;#ASMSTART10890; GFX942-NEXT: ; def s[2:3]10891; GFX942-NEXT: ;;#ASMEND10892; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s010893; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110894; GFX942-NEXT: ;;#ASMSTART10895; GFX942-NEXT: ; use s[8:9]10896; GFX942-NEXT: ;;#ASMEND10897; GFX942-NEXT: s_setpc_b64 s[30:31]10898 %vec0 = call <4 x half> asm "; def $0", "=s"()10899 %vec1 = call <4 x half> asm "; def $0", "=s"()10900 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10901 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10902 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 2, i32 2>10903 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10904 ret void10905}10906 10907define void @s_shuffle_v4f16_v3f16__5_1_2_2() {10908; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_1_2_2:10909; GFX900: ; %bb.0:10910; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10911; GFX900-NEXT: ;;#ASMSTART10912; GFX900-NEXT: ; def s[4:5]10913; GFX900-NEXT: ;;#ASMEND10914; GFX900-NEXT: s_lshr_b32 s4, s4, 1610915; GFX900-NEXT: ;;#ASMSTART10916; GFX900-NEXT: ; def s[6:7]10917; GFX900-NEXT: ;;#ASMEND10918; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s410919; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510920; GFX900-NEXT: ;;#ASMSTART10921; GFX900-NEXT: ; use s[8:9]10922; GFX900-NEXT: ;;#ASMEND10923; GFX900-NEXT: s_setpc_b64 s[30:31]10924;10925; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_2_2:10926; GFX90A: ; %bb.0:10927; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10928; GFX90A-NEXT: ;;#ASMSTART10929; GFX90A-NEXT: ; def s[4:5]10930; GFX90A-NEXT: ;;#ASMEND10931; GFX90A-NEXT: s_lshr_b32 s4, s4, 1610932; GFX90A-NEXT: ;;#ASMSTART10933; GFX90A-NEXT: ; def s[6:7]10934; GFX90A-NEXT: ;;#ASMEND10935; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s410936; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510937; GFX90A-NEXT: ;;#ASMSTART10938; GFX90A-NEXT: ; use s[8:9]10939; GFX90A-NEXT: ;;#ASMEND10940; GFX90A-NEXT: s_setpc_b64 s[30:31]10941;10942; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_2_2:10943; GFX942: ; %bb.0:10944; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10945; GFX942-NEXT: ;;#ASMSTART10946; GFX942-NEXT: ; def s[0:1]10947; GFX942-NEXT: ;;#ASMEND10948; GFX942-NEXT: s_lshr_b32 s0, s0, 1610949; GFX942-NEXT: ;;#ASMSTART10950; GFX942-NEXT: ; def s[2:3]10951; GFX942-NEXT: ;;#ASMEND10952; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s010953; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s110954; GFX942-NEXT: ;;#ASMSTART10955; GFX942-NEXT: ; use s[8:9]10956; GFX942-NEXT: ;;#ASMEND10957; GFX942-NEXT: s_setpc_b64 s[30:31]10958 %vec0 = call <4 x half> asm "; def $0", "=s"()10959 %vec1 = call <4 x half> asm "; def $0", "=s"()10960 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10961 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>10962 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 2, i32 2>10963 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)10964 ret void10965}10966 10967define void @s_shuffle_v4f16_v3f16__5_3_2_2() {10968; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_2_2:10969; GFX900: ; %bb.0:10970; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10971; GFX900-NEXT: ;;#ASMSTART10972; GFX900-NEXT: ; def s[4:5]10973; GFX900-NEXT: ;;#ASMEND10974; GFX900-NEXT: ;;#ASMSTART10975; GFX900-NEXT: ; def s[6:7]10976; GFX900-NEXT: ;;#ASMEND10977; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s610978; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s510979; GFX900-NEXT: ;;#ASMSTART10980; GFX900-NEXT: ; use s[8:9]10981; GFX900-NEXT: ;;#ASMEND10982; GFX900-NEXT: s_setpc_b64 s[30:31]10983;10984; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_2_2:10985; GFX90A: ; %bb.0:10986; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)10987; GFX90A-NEXT: ;;#ASMSTART10988; GFX90A-NEXT: ; def s[4:5]10989; GFX90A-NEXT: ;;#ASMEND10990; GFX90A-NEXT: ;;#ASMSTART10991; GFX90A-NEXT: ; def s[6:7]10992; GFX90A-NEXT: ;;#ASMEND10993; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s610994; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s510995; GFX90A-NEXT: ;;#ASMSTART10996; GFX90A-NEXT: ; use s[8:9]10997; GFX90A-NEXT: ;;#ASMEND10998; GFX90A-NEXT: s_setpc_b64 s[30:31]10999;11000; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_3_2_2:11001; GFX942: ; %bb.0:11002; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11003; GFX942-NEXT: ;;#ASMSTART11004; GFX942-NEXT: ; def s[0:1]11005; GFX942-NEXT: ;;#ASMEND11006; GFX942-NEXT: ;;#ASMSTART11007; GFX942-NEXT: ; def s[2:3]11008; GFX942-NEXT: ;;#ASMEND11009; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s211010; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s111011; GFX942-NEXT: ;;#ASMSTART11012; GFX942-NEXT: ; use s[8:9]11013; GFX942-NEXT: ;;#ASMEND11014; GFX942-NEXT: s_setpc_b64 s[30:31]11015 %vec0 = call <4 x half> asm "; def $0", "=s"()11016 %vec1 = call <4 x half> asm "; def $0", "=s"()11017 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11018 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11019 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 2, i32 2>11020 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11021 ret void11022}11023 11024define void @s_shuffle_v4f16_v3f16__5_4_2_2() {11025; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_2_2:11026; GFX900: ; %bb.0:11027; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11028; GFX900-NEXT: ;;#ASMSTART11029; GFX900-NEXT: ; def s[4:5]11030; GFX900-NEXT: ;;#ASMEND11031; GFX900-NEXT: ;;#ASMSTART11032; GFX900-NEXT: ; def s[6:7]11033; GFX900-NEXT: ;;#ASMEND11034; GFX900-NEXT: s_lshr_b32 s4, s6, 1611035; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s411036; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s511037; GFX900-NEXT: ;;#ASMSTART11038; GFX900-NEXT: ; use s[8:9]11039; GFX900-NEXT: ;;#ASMEND11040; GFX900-NEXT: s_setpc_b64 s[30:31]11041;11042; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_2_2:11043; GFX90A: ; %bb.0:11044; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11045; GFX90A-NEXT: ;;#ASMSTART11046; GFX90A-NEXT: ; def s[4:5]11047; GFX90A-NEXT: ;;#ASMEND11048; GFX90A-NEXT: ;;#ASMSTART11049; GFX90A-NEXT: ; def s[6:7]11050; GFX90A-NEXT: ;;#ASMEND11051; GFX90A-NEXT: s_lshr_b32 s4, s6, 1611052; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s411053; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s511054; GFX90A-NEXT: ;;#ASMSTART11055; GFX90A-NEXT: ; use s[8:9]11056; GFX90A-NEXT: ;;#ASMEND11057; GFX90A-NEXT: s_setpc_b64 s[30:31]11058;11059; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_2_2:11060; GFX942: ; %bb.0:11061; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11062; GFX942-NEXT: ;;#ASMSTART11063; GFX942-NEXT: ; def s[0:1]11064; GFX942-NEXT: ;;#ASMEND11065; GFX942-NEXT: ;;#ASMSTART11066; GFX942-NEXT: ; def s[2:3]11067; GFX942-NEXT: ;;#ASMEND11068; GFX942-NEXT: s_lshr_b32 s0, s2, 1611069; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s011070; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s111071; GFX942-NEXT: ;;#ASMSTART11072; GFX942-NEXT: ; use s[8:9]11073; GFX942-NEXT: ;;#ASMEND11074; GFX942-NEXT: s_setpc_b64 s[30:31]11075 %vec0 = call <4 x half> asm "; def $0", "=s"()11076 %vec1 = call <4 x half> asm "; def $0", "=s"()11077 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11078 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11079 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 2, i32 2>11080 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11081 ret void11082}11083 11084define void @s_shuffle_v4f16_v3f16__5_5_2_2() {11085; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_2:11086; GFX900: ; %bb.0:11087; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11088; GFX900-NEXT: ;;#ASMSTART11089; GFX900-NEXT: ; def s[4:5]11090; GFX900-NEXT: ;;#ASMEND11091; GFX900-NEXT: ;;#ASMSTART11092; GFX900-NEXT: ; def s[6:7]11093; GFX900-NEXT: ;;#ASMEND11094; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s511095; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711096; GFX900-NEXT: ;;#ASMSTART11097; GFX900-NEXT: ; use s[8:9]11098; GFX900-NEXT: ;;#ASMEND11099; GFX900-NEXT: s_setpc_b64 s[30:31]11100;11101; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_2:11102; GFX90A: ; %bb.0:11103; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11104; GFX90A-NEXT: ;;#ASMSTART11105; GFX90A-NEXT: ; def s[4:5]11106; GFX90A-NEXT: ;;#ASMEND11107; GFX90A-NEXT: ;;#ASMSTART11108; GFX90A-NEXT: ; def s[6:7]11109; GFX90A-NEXT: ;;#ASMEND11110; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s511111; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711112; GFX90A-NEXT: ;;#ASMSTART11113; GFX90A-NEXT: ; use s[8:9]11114; GFX90A-NEXT: ;;#ASMEND11115; GFX90A-NEXT: s_setpc_b64 s[30:31]11116;11117; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_2:11118; GFX942: ; %bb.0:11119; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11120; GFX942-NEXT: ;;#ASMSTART11121; GFX942-NEXT: ; def s[0:1]11122; GFX942-NEXT: ;;#ASMEND11123; GFX942-NEXT: ;;#ASMSTART11124; GFX942-NEXT: ; def s[2:3]11125; GFX942-NEXT: ;;#ASMEND11126; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s111127; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311128; GFX942-NEXT: ;;#ASMSTART11129; GFX942-NEXT: ; use s[8:9]11130; GFX942-NEXT: ;;#ASMEND11131; GFX942-NEXT: s_setpc_b64 s[30:31]11132 %vec0 = call <4 x half> asm "; def $0", "=s"()11133 %vec1 = call <4 x half> asm "; def $0", "=s"()11134 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11135 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11136 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 2>11137 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11138 ret void11139}11140 11141define void @s_shuffle_v4f16_v3f16__5_5_u_2() {11142; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_2:11143; GFX900: ; %bb.0:11144; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11145; GFX900-NEXT: ;;#ASMSTART11146; GFX900-NEXT: ; def s[4:5]11147; GFX900-NEXT: ;;#ASMEND11148; GFX900-NEXT: ;;#ASMSTART11149; GFX900-NEXT: ; def s[6:7]11150; GFX900-NEXT: ;;#ASMEND11151; GFX900-NEXT: s_lshl_b32 s9, s5, 1611152; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711153; GFX900-NEXT: ;;#ASMSTART11154; GFX900-NEXT: ; use s[8:9]11155; GFX900-NEXT: ;;#ASMEND11156; GFX900-NEXT: s_setpc_b64 s[30:31]11157;11158; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_2:11159; GFX90A: ; %bb.0:11160; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11161; GFX90A-NEXT: ;;#ASMSTART11162; GFX90A-NEXT: ; def s[4:5]11163; GFX90A-NEXT: ;;#ASMEND11164; GFX90A-NEXT: ;;#ASMSTART11165; GFX90A-NEXT: ; def s[6:7]11166; GFX90A-NEXT: ;;#ASMEND11167; GFX90A-NEXT: s_lshl_b32 s9, s5, 1611168; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711169; GFX90A-NEXT: ;;#ASMSTART11170; GFX90A-NEXT: ; use s[8:9]11171; GFX90A-NEXT: ;;#ASMEND11172; GFX90A-NEXT: s_setpc_b64 s[30:31]11173;11174; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_2:11175; GFX942: ; %bb.0:11176; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11177; GFX942-NEXT: ;;#ASMSTART11178; GFX942-NEXT: ; def s[0:1]11179; GFX942-NEXT: ;;#ASMEND11180; GFX942-NEXT: ;;#ASMSTART11181; GFX942-NEXT: ; def s[2:3]11182; GFX942-NEXT: ;;#ASMEND11183; GFX942-NEXT: s_lshl_b32 s9, s1, 1611184; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311185; GFX942-NEXT: ;;#ASMSTART11186; GFX942-NEXT: ; use s[8:9]11187; GFX942-NEXT: ;;#ASMEND11188; GFX942-NEXT: s_setpc_b64 s[30:31]11189 %vec0 = call <4 x half> asm "; def $0", "=s"()11190 %vec1 = call <4 x half> asm "; def $0", "=s"()11191 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11192 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11193 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 2>11194 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11195 ret void11196}11197 11198define void @s_shuffle_v4f16_v3f16__5_5_0_2() {11199; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_2:11200; GFX900: ; %bb.0:11201; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11202; GFX900-NEXT: ;;#ASMSTART11203; GFX900-NEXT: ; def s[4:5]11204; GFX900-NEXT: ;;#ASMEND11205; GFX900-NEXT: ;;#ASMSTART11206; GFX900-NEXT: ; def s[6:7]11207; GFX900-NEXT: ;;#ASMEND11208; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s511209; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711210; GFX900-NEXT: ;;#ASMSTART11211; GFX900-NEXT: ; use s[8:9]11212; GFX900-NEXT: ;;#ASMEND11213; GFX900-NEXT: s_setpc_b64 s[30:31]11214;11215; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_2:11216; GFX90A: ; %bb.0:11217; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11218; GFX90A-NEXT: ;;#ASMSTART11219; GFX90A-NEXT: ; def s[4:5]11220; GFX90A-NEXT: ;;#ASMEND11221; GFX90A-NEXT: ;;#ASMSTART11222; GFX90A-NEXT: ; def s[6:7]11223; GFX90A-NEXT: ;;#ASMEND11224; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s511225; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711226; GFX90A-NEXT: ;;#ASMSTART11227; GFX90A-NEXT: ; use s[8:9]11228; GFX90A-NEXT: ;;#ASMEND11229; GFX90A-NEXT: s_setpc_b64 s[30:31]11230;11231; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_2:11232; GFX942: ; %bb.0:11233; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11234; GFX942-NEXT: ;;#ASMSTART11235; GFX942-NEXT: ; def s[0:1]11236; GFX942-NEXT: ;;#ASMEND11237; GFX942-NEXT: ;;#ASMSTART11238; GFX942-NEXT: ; def s[2:3]11239; GFX942-NEXT: ;;#ASMEND11240; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s111241; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311242; GFX942-NEXT: ;;#ASMSTART11243; GFX942-NEXT: ; use s[8:9]11244; GFX942-NEXT: ;;#ASMEND11245; GFX942-NEXT: s_setpc_b64 s[30:31]11246 %vec0 = call <4 x half> asm "; def $0", "=s"()11247 %vec1 = call <4 x half> asm "; def $0", "=s"()11248 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11249 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11250 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 2>11251 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11252 ret void11253}11254 11255define void @s_shuffle_v4f16_v3f16__5_5_1_2() {11256; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_2:11257; GFX900: ; %bb.0:11258; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11259; GFX900-NEXT: ;;#ASMSTART11260; GFX900-NEXT: ; def s[4:5]11261; GFX900-NEXT: ;;#ASMEND11262; GFX900-NEXT: s_lshr_b32 s4, s4, 1611263; GFX900-NEXT: ;;#ASMSTART11264; GFX900-NEXT: ; def s[6:7]11265; GFX900-NEXT: ;;#ASMEND11266; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s511267; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711268; GFX900-NEXT: ;;#ASMSTART11269; GFX900-NEXT: ; use s[8:9]11270; GFX900-NEXT: ;;#ASMEND11271; GFX900-NEXT: s_setpc_b64 s[30:31]11272;11273; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_2:11274; GFX90A: ; %bb.0:11275; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11276; GFX90A-NEXT: ;;#ASMSTART11277; GFX90A-NEXT: ; def s[4:5]11278; GFX90A-NEXT: ;;#ASMEND11279; GFX90A-NEXT: s_lshr_b32 s4, s4, 1611280; GFX90A-NEXT: ;;#ASMSTART11281; GFX90A-NEXT: ; def s[6:7]11282; GFX90A-NEXT: ;;#ASMEND11283; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s511284; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711285; GFX90A-NEXT: ;;#ASMSTART11286; GFX90A-NEXT: ; use s[8:9]11287; GFX90A-NEXT: ;;#ASMEND11288; GFX90A-NEXT: s_setpc_b64 s[30:31]11289;11290; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_2:11291; GFX942: ; %bb.0:11292; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11293; GFX942-NEXT: ;;#ASMSTART11294; GFX942-NEXT: ; def s[0:1]11295; GFX942-NEXT: ;;#ASMEND11296; GFX942-NEXT: s_lshr_b32 s0, s0, 1611297; GFX942-NEXT: ;;#ASMSTART11298; GFX942-NEXT: ; def s[2:3]11299; GFX942-NEXT: ;;#ASMEND11300; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s111301; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311302; GFX942-NEXT: ;;#ASMSTART11303; GFX942-NEXT: ; use s[8:9]11304; GFX942-NEXT: ;;#ASMEND11305; GFX942-NEXT: s_setpc_b64 s[30:31]11306 %vec0 = call <4 x half> asm "; def $0", "=s"()11307 %vec1 = call <4 x half> asm "; def $0", "=s"()11308 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11309 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11310 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 2>11311 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11312 ret void11313}11314 11315define void @s_shuffle_v4f16_v3f16__5_5_3_2() {11316; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_2:11317; GFX900: ; %bb.0:11318; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11319; GFX900-NEXT: ;;#ASMSTART11320; GFX900-NEXT: ; def s[4:5]11321; GFX900-NEXT: ;;#ASMEND11322; GFX900-NEXT: ;;#ASMSTART11323; GFX900-NEXT: ; def s[6:7]11324; GFX900-NEXT: ;;#ASMEND11325; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s511326; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711327; GFX900-NEXT: ;;#ASMSTART11328; GFX900-NEXT: ; use s[8:9]11329; GFX900-NEXT: ;;#ASMEND11330; GFX900-NEXT: s_setpc_b64 s[30:31]11331;11332; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_2:11333; GFX90A: ; %bb.0:11334; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11335; GFX90A-NEXT: ;;#ASMSTART11336; GFX90A-NEXT: ; def s[4:5]11337; GFX90A-NEXT: ;;#ASMEND11338; GFX90A-NEXT: ;;#ASMSTART11339; GFX90A-NEXT: ; def s[6:7]11340; GFX90A-NEXT: ;;#ASMEND11341; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s511342; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711343; GFX90A-NEXT: ;;#ASMSTART11344; GFX90A-NEXT: ; use s[8:9]11345; GFX90A-NEXT: ;;#ASMEND11346; GFX90A-NEXT: s_setpc_b64 s[30:31]11347;11348; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_2:11349; GFX942: ; %bb.0:11350; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11351; GFX942-NEXT: ;;#ASMSTART11352; GFX942-NEXT: ; def s[0:1]11353; GFX942-NEXT: ;;#ASMEND11354; GFX942-NEXT: ;;#ASMSTART11355; GFX942-NEXT: ; def s[2:3]11356; GFX942-NEXT: ;;#ASMEND11357; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s111358; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311359; GFX942-NEXT: ;;#ASMSTART11360; GFX942-NEXT: ; use s[8:9]11361; GFX942-NEXT: ;;#ASMEND11362; GFX942-NEXT: s_setpc_b64 s[30:31]11363 %vec0 = call <4 x half> asm "; def $0", "=s"()11364 %vec1 = call <4 x half> asm "; def $0", "=s"()11365 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11366 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11367 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 2>11368 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11369 ret void11370}11371 11372define void @s_shuffle_v4f16_v3f16__5_5_4_2() {11373; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_2:11374; GFX900: ; %bb.0:11375; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11376; GFX900-NEXT: ;;#ASMSTART11377; GFX900-NEXT: ; def s[4:5]11378; GFX900-NEXT: ;;#ASMEND11379; GFX900-NEXT: ;;#ASMSTART11380; GFX900-NEXT: ; def s[6:7]11381; GFX900-NEXT: ;;#ASMEND11382; GFX900-NEXT: s_lshr_b32 s4, s6, 1611383; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s511384; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s711385; GFX900-NEXT: ;;#ASMSTART11386; GFX900-NEXT: ; use s[8:9]11387; GFX900-NEXT: ;;#ASMEND11388; GFX900-NEXT: s_setpc_b64 s[30:31]11389;11390; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_2:11391; GFX90A: ; %bb.0:11392; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11393; GFX90A-NEXT: ;;#ASMSTART11394; GFX90A-NEXT: ; def s[4:5]11395; GFX90A-NEXT: ;;#ASMEND11396; GFX90A-NEXT: ;;#ASMSTART11397; GFX90A-NEXT: ; def s[6:7]11398; GFX90A-NEXT: ;;#ASMEND11399; GFX90A-NEXT: s_lshr_b32 s4, s6, 1611400; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s511401; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s711402; GFX90A-NEXT: ;;#ASMSTART11403; GFX90A-NEXT: ; use s[8:9]11404; GFX90A-NEXT: ;;#ASMEND11405; GFX90A-NEXT: s_setpc_b64 s[30:31]11406;11407; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_4_2:11408; GFX942: ; %bb.0:11409; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11410; GFX942-NEXT: ;;#ASMSTART11411; GFX942-NEXT: ; def s[0:1]11412; GFX942-NEXT: ;;#ASMEND11413; GFX942-NEXT: ;;#ASMSTART11414; GFX942-NEXT: ; def s[2:3]11415; GFX942-NEXT: ;;#ASMEND11416; GFX942-NEXT: s_lshr_b32 s0, s2, 1611417; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s111418; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s311419; GFX942-NEXT: ;;#ASMSTART11420; GFX942-NEXT: ; use s[8:9]11421; GFX942-NEXT: ;;#ASMEND11422; GFX942-NEXT: s_setpc_b64 s[30:31]11423 %vec0 = call <4 x half> asm "; def $0", "=s"()11424 %vec1 = call <4 x half> asm "; def $0", "=s"()11425 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11426 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11427 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 2>11428 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11429 ret void11430}11431 11432define void @s_shuffle_v4f16_v3f16__u_3_3_3() {11433; GFX9-LABEL: s_shuffle_v4f16_v3f16__u_3_3_3:11434; GFX9: ; %bb.0:11435; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11436; GFX9-NEXT: ;;#ASMSTART11437; GFX9-NEXT: ; use s[8:9]11438; GFX9-NEXT: ;;#ASMEND11439; GFX9-NEXT: s_setpc_b64 s[30:31]11440 %vec0 = call <4 x half> asm "; def $0", "=s"()11441 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11442 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>11443 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11444 ret void11445}11446 11447define void @s_shuffle_v4f16_v3f16__0_3_3_3() {11448; GFX900-LABEL: s_shuffle_v4f16_v3f16__0_3_3_3:11449; GFX900: ; %bb.0:11450; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11451; GFX900-NEXT: ;;#ASMSTART11452; GFX900-NEXT: ; def s[8:9]11453; GFX900-NEXT: ;;#ASMEND11454; GFX900-NEXT: ;;#ASMSTART11455; GFX900-NEXT: ; use s[8:9]11456; GFX900-NEXT: ;;#ASMEND11457; GFX900-NEXT: s_setpc_b64 s[30:31]11458;11459; GFX90A-LABEL: s_shuffle_v4f16_v3f16__0_3_3_3:11460; GFX90A: ; %bb.0:11461; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11462; GFX90A-NEXT: ;;#ASMSTART11463; GFX90A-NEXT: ; def s[8:9]11464; GFX90A-NEXT: ;;#ASMEND11465; GFX90A-NEXT: ;;#ASMSTART11466; GFX90A-NEXT: ; use s[8:9]11467; GFX90A-NEXT: ;;#ASMEND11468; GFX90A-NEXT: s_setpc_b64 s[30:31]11469;11470; GFX942-LABEL: s_shuffle_v4f16_v3f16__0_3_3_3:11471; GFX942: ; %bb.0:11472; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11473; GFX942-NEXT: ;;#ASMSTART11474; GFX942-NEXT: ; def s[8:9]11475; GFX942-NEXT: ;;#ASMEND11476; GFX942-NEXT: s_nop 011477; GFX942-NEXT: ;;#ASMSTART11478; GFX942-NEXT: ; use s[8:9]11479; GFX942-NEXT: ;;#ASMEND11480; GFX942-NEXT: s_setpc_b64 s[30:31]11481 %vec0 = call <4 x half> asm "; def $0", "=s"()11482 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11483 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 0, i32 3, i32 3, i32 3>11484 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11485 ret void11486}11487 11488define void @s_shuffle_v4f16_v3f16__1_3_3_3() {11489; GFX900-LABEL: s_shuffle_v4f16_v3f16__1_3_3_3:11490; GFX900: ; %bb.0:11491; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11492; GFX900-NEXT: ;;#ASMSTART11493; GFX900-NEXT: ; def s[4:5]11494; GFX900-NEXT: ;;#ASMEND11495; GFX900-NEXT: s_lshr_b32 s8, s4, 1611496; 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_v4f16_v3f16__1_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_lshr_b32 s8, s4, 1611508; GFX90A-NEXT: ;;#ASMSTART11509; GFX90A-NEXT: ; use s[8:9]11510; GFX90A-NEXT: ;;#ASMEND11511; GFX90A-NEXT: s_setpc_b64 s[30:31]11512;11513; GFX942-LABEL: s_shuffle_v4f16_v3f16__1_3_3_3:11514; GFX942: ; %bb.0:11515; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11516; GFX942-NEXT: ;;#ASMSTART11517; GFX942-NEXT: ; def s[0:1]11518; GFX942-NEXT: ;;#ASMEND11519; GFX942-NEXT: s_lshr_b32 s8, s0, 1611520; GFX942-NEXT: ;;#ASMSTART11521; GFX942-NEXT: ; use s[8:9]11522; GFX942-NEXT: ;;#ASMEND11523; GFX942-NEXT: s_setpc_b64 s[30:31]11524 %vec0 = call <4 x half> asm "; def $0", "=s"()11525 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11526 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 1, i32 3, i32 3, i32 3>11527 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11528 ret void11529}11530 11531define void @s_shuffle_v4f16_v3f16__2_3_3_3() {11532; GFX900-LABEL: s_shuffle_v4f16_v3f16__2_3_3_3:11533; GFX900: ; %bb.0:11534; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11535; GFX900-NEXT: ;;#ASMSTART11536; GFX900-NEXT: ; def s[4:5]11537; GFX900-NEXT: ;;#ASMEND11538; GFX900-NEXT: s_mov_b32 s8, s511539; GFX900-NEXT: ;;#ASMSTART11540; GFX900-NEXT: ; use s[8:9]11541; GFX900-NEXT: ;;#ASMEND11542; GFX900-NEXT: s_setpc_b64 s[30:31]11543;11544; GFX90A-LABEL: s_shuffle_v4f16_v3f16__2_3_3_3:11545; GFX90A: ; %bb.0:11546; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11547; GFX90A-NEXT: ;;#ASMSTART11548; GFX90A-NEXT: ; def s[4:5]11549; GFX90A-NEXT: ;;#ASMEND11550; GFX90A-NEXT: s_mov_b32 s8, s511551; GFX90A-NEXT: ;;#ASMSTART11552; GFX90A-NEXT: ; use s[8:9]11553; GFX90A-NEXT: ;;#ASMEND11554; GFX90A-NEXT: s_setpc_b64 s[30:31]11555;11556; GFX942-LABEL: s_shuffle_v4f16_v3f16__2_3_3_3:11557; GFX942: ; %bb.0:11558; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11559; GFX942-NEXT: ;;#ASMSTART11560; GFX942-NEXT: ; def s[0:1]11561; GFX942-NEXT: ;;#ASMEND11562; GFX942-NEXT: s_mov_b32 s8, s111563; GFX942-NEXT: ;;#ASMSTART11564; GFX942-NEXT: ; use s[8:9]11565; GFX942-NEXT: ;;#ASMEND11566; GFX942-NEXT: s_setpc_b64 s[30:31]11567 %vec0 = call <4 x half> asm "; def $0", "=s"()11568 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11569 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 2, i32 3, i32 3, i32 3>11570 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11571 ret void11572}11573 11574define void @s_shuffle_v4f16_v3f16__3_3_3_3() {11575; GFX9-LABEL: s_shuffle_v4f16_v3f16__3_3_3_3:11576; GFX9: ; %bb.0:11577; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11578; GFX9-NEXT: ;;#ASMSTART11579; GFX9-NEXT: ; use s[8:9]11580; GFX9-NEXT: ;;#ASMEND11581; GFX9-NEXT: s_setpc_b64 s[30:31]11582 %vec0 = call <4 x half> asm "; def $0", "=s"()11583 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11584 %shuf = shufflevector <3 x half> %extract3, <3 x half> poison, <4 x i32> <i32 3, i32 3, i32 3, i32 3>11585 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11586 ret void11587}11588 11589define void @s_shuffle_v4f16_v3f16__4_3_3_3() {11590; GFX900-LABEL: s_shuffle_v4f16_v3f16__4_3_3_3:11591; GFX900: ; %bb.0:11592; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11593; GFX900-NEXT: ;;#ASMSTART11594; GFX900-NEXT: ; def s[4:5]11595; GFX900-NEXT: ;;#ASMEND11596; GFX900-NEXT: s_lshr_b32 s5, s4, 1611597; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s411598; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411599; GFX900-NEXT: ;;#ASMSTART11600; GFX900-NEXT: ; use s[8:9]11601; GFX900-NEXT: ;;#ASMEND11602; GFX900-NEXT: s_setpc_b64 s[30:31]11603;11604; GFX90A-LABEL: s_shuffle_v4f16_v3f16__4_3_3_3:11605; GFX90A: ; %bb.0:11606; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11607; GFX90A-NEXT: ;;#ASMSTART11608; GFX90A-NEXT: ; def s[4:5]11609; GFX90A-NEXT: ;;#ASMEND11610; GFX90A-NEXT: s_lshr_b32 s5, s4, 1611611; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s411612; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411613; GFX90A-NEXT: ;;#ASMSTART11614; GFX90A-NEXT: ; use s[8:9]11615; GFX90A-NEXT: ;;#ASMEND11616; GFX90A-NEXT: s_setpc_b64 s[30:31]11617;11618; GFX942-LABEL: s_shuffle_v4f16_v3f16__4_3_3_3:11619; GFX942: ; %bb.0:11620; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11621; GFX942-NEXT: ;;#ASMSTART11622; GFX942-NEXT: ; def s[0:1]11623; GFX942-NEXT: ;;#ASMEND11624; GFX942-NEXT: s_lshr_b32 s1, s0, 1611625; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s011626; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011627; 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 half> asm "; def $0", "=s"()11632 %vec1 = call <4 x half> asm "; def $0", "=s"()11633 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11634 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11635 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 3, i32 3, i32 3>11636 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11637 ret void11638}11639 11640define void @s_shuffle_v4f16_v3f16__5_3_3_3() {11641; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_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: s_pack_ll_b32_b16 s8, s5, s411648; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411649; GFX900-NEXT: ;;#ASMSTART11650; GFX900-NEXT: ; use s[8:9]11651; GFX900-NEXT: ;;#ASMEND11652; GFX900-NEXT: s_setpc_b64 s[30:31]11653;11654; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_3_3:11655; GFX90A: ; %bb.0:11656; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11657; GFX90A-NEXT: ;;#ASMSTART11658; GFX90A-NEXT: ; def s[4:5]11659; GFX90A-NEXT: ;;#ASMEND11660; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s411661; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411662; GFX90A-NEXT: ;;#ASMSTART11663; GFX90A-NEXT: ; use s[8:9]11664; GFX90A-NEXT: ;;#ASMEND11665; GFX90A-NEXT: s_setpc_b64 s[30:31]11666;11667; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_3_3_3:11668; GFX942: ; %bb.0:11669; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11670; GFX942-NEXT: ;;#ASMSTART11671; GFX942-NEXT: ; def s[0:1]11672; GFX942-NEXT: ;;#ASMEND11673; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s011674; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011675; GFX942-NEXT: ;;#ASMSTART11676; GFX942-NEXT: ; use s[8:9]11677; GFX942-NEXT: ;;#ASMEND11678; GFX942-NEXT: s_setpc_b64 s[30:31]11679 %vec0 = call <4 x half> asm "; def $0", "=s"()11680 %vec1 = call <4 x half> asm "; def $0", "=s"()11681 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11682 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11683 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 3, i32 3>11684 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11685 ret void11686}11687 11688define void @s_shuffle_v4f16_v3f16__5_u_3_3() {11689; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_u_3_3:11690; GFX900: ; %bb.0:11691; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11692; GFX900-NEXT: ;;#ASMSTART11693; GFX900-NEXT: ; def s[4:5]11694; GFX900-NEXT: ;;#ASMEND11695; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411696; GFX900-NEXT: s_mov_b32 s8, s511697; GFX900-NEXT: ;;#ASMSTART11698; GFX900-NEXT: ; use s[8:9]11699; GFX900-NEXT: ;;#ASMEND11700; GFX900-NEXT: s_setpc_b64 s[30:31]11701;11702; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_u_3_3:11703; GFX90A: ; %bb.0:11704; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11705; GFX90A-NEXT: ;;#ASMSTART11706; GFX90A-NEXT: ; def s[4:5]11707; GFX90A-NEXT: ;;#ASMEND11708; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411709; GFX90A-NEXT: s_mov_b32 s8, s511710; GFX90A-NEXT: ;;#ASMSTART11711; GFX90A-NEXT: ; use s[8:9]11712; GFX90A-NEXT: ;;#ASMEND11713; GFX90A-NEXT: s_setpc_b64 s[30:31]11714;11715; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_u_3_3:11716; GFX942: ; %bb.0:11717; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11718; GFX942-NEXT: ;;#ASMSTART11719; GFX942-NEXT: ; def s[0:1]11720; GFX942-NEXT: ;;#ASMEND11721; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011722; GFX942-NEXT: s_mov_b32 s8, s111723; GFX942-NEXT: ;;#ASMSTART11724; GFX942-NEXT: ; use s[8:9]11725; GFX942-NEXT: ;;#ASMEND11726; GFX942-NEXT: s_setpc_b64 s[30:31]11727 %vec0 = call <4 x half> asm "; def $0", "=s"()11728 %vec1 = call <4 x half> asm "; def $0", "=s"()11729 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11730 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11731 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 3, i32 3>11732 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11733 ret void11734}11735 11736define void @s_shuffle_v4f16_v3f16__5_0_3_3() {11737; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_0_3_3:11738; GFX900: ; %bb.0:11739; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11740; GFX900-NEXT: ;;#ASMSTART11741; GFX900-NEXT: ; def s[4:5]11742; GFX900-NEXT: ;;#ASMEND11743; GFX900-NEXT: ;;#ASMSTART11744; GFX900-NEXT: ; def s[6:7]11745; GFX900-NEXT: ;;#ASMEND11746; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s411747; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s611748; GFX900-NEXT: ;;#ASMSTART11749; GFX900-NEXT: ; use s[8:9]11750; GFX900-NEXT: ;;#ASMEND11751; GFX900-NEXT: s_setpc_b64 s[30:31]11752;11753; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_0_3_3:11754; GFX90A: ; %bb.0:11755; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11756; GFX90A-NEXT: ;;#ASMSTART11757; GFX90A-NEXT: ; def s[4:5]11758; GFX90A-NEXT: ;;#ASMEND11759; GFX90A-NEXT: ;;#ASMSTART11760; GFX90A-NEXT: ; def s[6:7]11761; GFX90A-NEXT: ;;#ASMEND11762; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s411763; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s611764; GFX90A-NEXT: ;;#ASMSTART11765; GFX90A-NEXT: ; use s[8:9]11766; GFX90A-NEXT: ;;#ASMEND11767; GFX90A-NEXT: s_setpc_b64 s[30:31]11768;11769; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_0_3_3:11770; GFX942: ; %bb.0:11771; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11772; GFX942-NEXT: ;;#ASMSTART11773; GFX942-NEXT: ; def s[0:1]11774; GFX942-NEXT: ;;#ASMEND11775; GFX942-NEXT: ;;#ASMSTART11776; GFX942-NEXT: ; def s[2:3]11777; GFX942-NEXT: ;;#ASMEND11778; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s011779; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s211780; GFX942-NEXT: ;;#ASMSTART11781; GFX942-NEXT: ; use s[8:9]11782; GFX942-NEXT: ;;#ASMEND11783; GFX942-NEXT: s_setpc_b64 s[30:31]11784 %vec0 = call <4 x half> asm "; def $0", "=s"()11785 %vec1 = call <4 x half> asm "; def $0", "=s"()11786 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11787 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11788 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 3, i32 3>11789 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11790 ret void11791}11792 11793define void @s_shuffle_v4f16_v3f16__5_1_3_3() {11794; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_1_3_3:11795; GFX900: ; %bb.0:11796; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11797; GFX900-NEXT: ;;#ASMSTART11798; GFX900-NEXT: ; def s[4:5]11799; GFX900-NEXT: ;;#ASMEND11800; GFX900-NEXT: s_lshr_b32 s4, s4, 1611801; GFX900-NEXT: ;;#ASMSTART11802; GFX900-NEXT: ; def s[6:7]11803; GFX900-NEXT: ;;#ASMEND11804; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s411805; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s611806; GFX900-NEXT: ;;#ASMSTART11807; GFX900-NEXT: ; use s[8:9]11808; GFX900-NEXT: ;;#ASMEND11809; GFX900-NEXT: s_setpc_b64 s[30:31]11810;11811; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_3_3:11812; GFX90A: ; %bb.0:11813; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11814; GFX90A-NEXT: ;;#ASMSTART11815; GFX90A-NEXT: ; def s[4:5]11816; GFX90A-NEXT: ;;#ASMEND11817; GFX90A-NEXT: s_lshr_b32 s4, s4, 1611818; GFX90A-NEXT: ;;#ASMSTART11819; GFX90A-NEXT: ; def s[6:7]11820; GFX90A-NEXT: ;;#ASMEND11821; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s411822; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s611823; GFX90A-NEXT: ;;#ASMSTART11824; GFX90A-NEXT: ; use s[8:9]11825; GFX90A-NEXT: ;;#ASMEND11826; GFX90A-NEXT: s_setpc_b64 s[30:31]11827;11828; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_3_3:11829; GFX942: ; %bb.0:11830; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11831; GFX942-NEXT: ;;#ASMSTART11832; GFX942-NEXT: ; def s[0:1]11833; GFX942-NEXT: ;;#ASMEND11834; GFX942-NEXT: s_lshr_b32 s0, s0, 1611835; GFX942-NEXT: ;;#ASMSTART11836; GFX942-NEXT: ; def s[2:3]11837; GFX942-NEXT: ;;#ASMEND11838; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s011839; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s211840; GFX942-NEXT: ;;#ASMSTART11841; GFX942-NEXT: ; use s[8:9]11842; GFX942-NEXT: ;;#ASMEND11843; GFX942-NEXT: s_setpc_b64 s[30:31]11844 %vec0 = call <4 x half> asm "; def $0", "=s"()11845 %vec1 = call <4 x half> asm "; def $0", "=s"()11846 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11847 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11848 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 3, i32 3>11849 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11850 ret void11851}11852 11853define void @s_shuffle_v4f16_v3f16__5_2_3_3() {11854; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_3_3:11855; GFX900: ; %bb.0:11856; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11857; GFX900-NEXT: ;;#ASMSTART11858; GFX900-NEXT: ; def s[4:5]11859; GFX900-NEXT: ;;#ASMEND11860; GFX900-NEXT: ;;#ASMSTART11861; GFX900-NEXT: ; def s[6:7]11862; GFX900-NEXT: ;;#ASMEND11863; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s511864; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s611865; GFX900-NEXT: ;;#ASMSTART11866; GFX900-NEXT: ; use s[8:9]11867; GFX900-NEXT: ;;#ASMEND11868; GFX900-NEXT: s_setpc_b64 s[30:31]11869;11870; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_3_3:11871; GFX90A: ; %bb.0:11872; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11873; GFX90A-NEXT: ;;#ASMSTART11874; GFX90A-NEXT: ; def s[4:5]11875; GFX90A-NEXT: ;;#ASMEND11876; GFX90A-NEXT: ;;#ASMSTART11877; GFX90A-NEXT: ; def s[6:7]11878; GFX90A-NEXT: ;;#ASMEND11879; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s511880; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s611881; GFX90A-NEXT: ;;#ASMSTART11882; GFX90A-NEXT: ; use s[8:9]11883; GFX90A-NEXT: ;;#ASMEND11884; GFX90A-NEXT: s_setpc_b64 s[30:31]11885;11886; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_3_3:11887; GFX942: ; %bb.0:11888; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11889; GFX942-NEXT: ;;#ASMSTART11890; GFX942-NEXT: ; def s[0:1]11891; GFX942-NEXT: ;;#ASMEND11892; GFX942-NEXT: ;;#ASMSTART11893; GFX942-NEXT: ; def s[2:3]11894; GFX942-NEXT: ;;#ASMEND11895; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s111896; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s211897; GFX942-NEXT: ;;#ASMSTART11898; GFX942-NEXT: ; use s[8:9]11899; GFX942-NEXT: ;;#ASMEND11900; GFX942-NEXT: s_setpc_b64 s[30:31]11901 %vec0 = call <4 x half> asm "; def $0", "=s"()11902 %vec1 = call <4 x half> asm "; def $0", "=s"()11903 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11904 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11905 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 3, i32 3>11906 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11907 ret void11908}11909 11910define void @s_shuffle_v4f16_v3f16__5_4_3_3() {11911; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_3_3:11912; GFX900: ; %bb.0:11913; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11914; GFX900-NEXT: ;;#ASMSTART11915; GFX900-NEXT: ; def s[4:5]11916; GFX900-NEXT: ;;#ASMEND11917; GFX900-NEXT: s_lshr_b32 s6, s4, 1611918; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s611919; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411920; GFX900-NEXT: ;;#ASMSTART11921; GFX900-NEXT: ; use s[8:9]11922; GFX900-NEXT: ;;#ASMEND11923; GFX900-NEXT: s_setpc_b64 s[30:31]11924;11925; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_3_3:11926; GFX90A: ; %bb.0:11927; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11928; GFX90A-NEXT: ;;#ASMSTART11929; GFX90A-NEXT: ; def s[4:5]11930; GFX90A-NEXT: ;;#ASMEND11931; GFX90A-NEXT: s_lshr_b32 s6, s4, 1611932; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s611933; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411934; GFX90A-NEXT: ;;#ASMSTART11935; GFX90A-NEXT: ; use s[8:9]11936; GFX90A-NEXT: ;;#ASMEND11937; GFX90A-NEXT: s_setpc_b64 s[30:31]11938;11939; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_3_3:11940; GFX942: ; %bb.0:11941; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11942; GFX942-NEXT: ;;#ASMSTART11943; GFX942-NEXT: ; def s[0:1]11944; GFX942-NEXT: ;;#ASMEND11945; GFX942-NEXT: s_lshr_b32 s2, s0, 1611946; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s211947; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011948; GFX942-NEXT: ;;#ASMSTART11949; GFX942-NEXT: ; use s[8:9]11950; GFX942-NEXT: ;;#ASMEND11951; GFX942-NEXT: s_setpc_b64 s[30:31]11952 %vec0 = call <4 x half> asm "; def $0", "=s"()11953 %vec1 = call <4 x half> asm "; def $0", "=s"()11954 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11955 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>11956 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 3, i32 3>11957 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)11958 ret void11959}11960 11961define void @s_shuffle_v4f16_v3f16__5_5_3_3() {11962; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_3:11963; GFX900: ; %bb.0:11964; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11965; GFX900-NEXT: ;;#ASMSTART11966; GFX900-NEXT: ; def s[4:5]11967; GFX900-NEXT: ;;#ASMEND11968; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s411969; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s511970; GFX900-NEXT: ;;#ASMSTART11971; GFX900-NEXT: ; use s[8:9]11972; GFX900-NEXT: ;;#ASMEND11973; GFX900-NEXT: s_setpc_b64 s[30:31]11974;11975; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_3:11976; GFX90A: ; %bb.0:11977; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11978; GFX90A-NEXT: ;;#ASMSTART11979; GFX90A-NEXT: ; def s[4:5]11980; GFX90A-NEXT: ;;#ASMEND11981; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s411982; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s511983; GFX90A-NEXT: ;;#ASMSTART11984; GFX90A-NEXT: ; use s[8:9]11985; GFX90A-NEXT: ;;#ASMEND11986; GFX90A-NEXT: s_setpc_b64 s[30:31]11987;11988; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_3:11989; GFX942: ; %bb.0:11990; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11991; GFX942-NEXT: ;;#ASMSTART11992; GFX942-NEXT: ; def s[0:1]11993; GFX942-NEXT: ;;#ASMEND11994; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s011995; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s111996; GFX942-NEXT: ;;#ASMSTART11997; GFX942-NEXT: ; use s[8:9]11998; GFX942-NEXT: ;;#ASMEND11999; GFX942-NEXT: s_setpc_b64 s[30:31]12000 %vec0 = call <4 x half> asm "; def $0", "=s"()12001 %vec1 = call <4 x half> asm "; def $0", "=s"()12002 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12003 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12004 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 3>12005 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12006 ret void12007}12008 12009define void @s_shuffle_v4f16_v3f16__5_5_u_3() {12010; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_3:12011; GFX900: ; %bb.0:12012; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12013; GFX900-NEXT: ;;#ASMSTART12014; GFX900-NEXT: ; def s[4:5]12015; GFX900-NEXT: ;;#ASMEND12016; GFX900-NEXT: s_lshl_b32 s9, s4, 1612017; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512018; GFX900-NEXT: ;;#ASMSTART12019; GFX900-NEXT: ; use s[8:9]12020; GFX900-NEXT: ;;#ASMEND12021; GFX900-NEXT: s_setpc_b64 s[30:31]12022;12023; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_3:12024; GFX90A: ; %bb.0:12025; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12026; GFX90A-NEXT: ;;#ASMSTART12027; GFX90A-NEXT: ; def s[4:5]12028; GFX90A-NEXT: ;;#ASMEND12029; GFX90A-NEXT: s_lshl_b32 s9, s4, 1612030; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512031; GFX90A-NEXT: ;;#ASMSTART12032; GFX90A-NEXT: ; use s[8:9]12033; GFX90A-NEXT: ;;#ASMEND12034; GFX90A-NEXT: s_setpc_b64 s[30:31]12035;12036; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_3:12037; GFX942: ; %bb.0:12038; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12039; GFX942-NEXT: ;;#ASMSTART12040; GFX942-NEXT: ; def s[0:1]12041; GFX942-NEXT: ;;#ASMEND12042; GFX942-NEXT: s_lshl_b32 s9, s0, 1612043; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s112044; GFX942-NEXT: ;;#ASMSTART12045; GFX942-NEXT: ; use s[8:9]12046; GFX942-NEXT: ;;#ASMEND12047; GFX942-NEXT: s_setpc_b64 s[30:31]12048 %vec0 = call <4 x half> asm "; def $0", "=s"()12049 %vec1 = call <4 x half> asm "; def $0", "=s"()12050 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12051 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12052 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 3>12053 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12054 ret void12055}12056 12057define void @s_shuffle_v4f16_v3f16__5_5_0_3() {12058; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_3:12059; GFX900: ; %bb.0:12060; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12061; GFX900-NEXT: ;;#ASMSTART12062; GFX900-NEXT: ; def s[4:5]12063; GFX900-NEXT: ;;#ASMEND12064; GFX900-NEXT: ;;#ASMSTART12065; GFX900-NEXT: ; def s[6:7]12066; GFX900-NEXT: ;;#ASMEND12067; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s612068; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712069; GFX900-NEXT: ;;#ASMSTART12070; GFX900-NEXT: ; use s[8:9]12071; GFX900-NEXT: ;;#ASMEND12072; GFX900-NEXT: s_setpc_b64 s[30:31]12073;12074; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_3:12075; GFX90A: ; %bb.0:12076; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12077; GFX90A-NEXT: ;;#ASMSTART12078; GFX90A-NEXT: ; def s[4:5]12079; GFX90A-NEXT: ;;#ASMEND12080; GFX90A-NEXT: ;;#ASMSTART12081; GFX90A-NEXT: ; def s[6:7]12082; GFX90A-NEXT: ;;#ASMEND12083; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s612084; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712085; GFX90A-NEXT: ;;#ASMSTART12086; GFX90A-NEXT: ; use s[8:9]12087; GFX90A-NEXT: ;;#ASMEND12088; GFX90A-NEXT: s_setpc_b64 s[30:31]12089;12090; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_3:12091; GFX942: ; %bb.0:12092; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12093; GFX942-NEXT: ;;#ASMSTART12094; GFX942-NEXT: ; def s[0:1]12095; GFX942-NEXT: ;;#ASMEND12096; GFX942-NEXT: ;;#ASMSTART12097; GFX942-NEXT: ; def s[2:3]12098; GFX942-NEXT: ;;#ASMEND12099; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s212100; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312101; GFX942-NEXT: ;;#ASMSTART12102; GFX942-NEXT: ; use s[8:9]12103; GFX942-NEXT: ;;#ASMEND12104; GFX942-NEXT: s_setpc_b64 s[30:31]12105 %vec0 = call <4 x half> asm "; def $0", "=s"()12106 %vec1 = call <4 x half> asm "; def $0", "=s"()12107 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12108 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12109 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 3>12110 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12111 ret void12112}12113 12114define void @s_shuffle_v4f16_v3f16__5_5_1_3() {12115; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_3:12116; GFX900: ; %bb.0:12117; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12118; GFX900-NEXT: ;;#ASMSTART12119; GFX900-NEXT: ; def s[4:5]12120; GFX900-NEXT: ;;#ASMEND12121; GFX900-NEXT: s_lshr_b32 s4, s4, 1612122; GFX900-NEXT: ;;#ASMSTART12123; GFX900-NEXT: ; def s[6:7]12124; GFX900-NEXT: ;;#ASMEND12125; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s612126; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712127; GFX900-NEXT: ;;#ASMSTART12128; GFX900-NEXT: ; use s[8:9]12129; GFX900-NEXT: ;;#ASMEND12130; GFX900-NEXT: s_setpc_b64 s[30:31]12131;12132; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_3:12133; GFX90A: ; %bb.0:12134; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12135; GFX90A-NEXT: ;;#ASMSTART12136; GFX90A-NEXT: ; def s[4:5]12137; GFX90A-NEXT: ;;#ASMEND12138; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612139; GFX90A-NEXT: ;;#ASMSTART12140; GFX90A-NEXT: ; def s[6:7]12141; GFX90A-NEXT: ;;#ASMEND12142; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s612143; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712144; GFX90A-NEXT: ;;#ASMSTART12145; GFX90A-NEXT: ; use s[8:9]12146; GFX90A-NEXT: ;;#ASMEND12147; GFX90A-NEXT: s_setpc_b64 s[30:31]12148;12149; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_3:12150; GFX942: ; %bb.0:12151; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12152; GFX942-NEXT: ;;#ASMSTART12153; GFX942-NEXT: ; def s[0:1]12154; GFX942-NEXT: ;;#ASMEND12155; GFX942-NEXT: s_lshr_b32 s0, s0, 1612156; GFX942-NEXT: ;;#ASMSTART12157; GFX942-NEXT: ; def s[2:3]12158; GFX942-NEXT: ;;#ASMEND12159; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s212160; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312161; GFX942-NEXT: ;;#ASMSTART12162; GFX942-NEXT: ; use s[8:9]12163; GFX942-NEXT: ;;#ASMEND12164; GFX942-NEXT: s_setpc_b64 s[30:31]12165 %vec0 = call <4 x half> asm "; def $0", "=s"()12166 %vec1 = call <4 x half> asm "; def $0", "=s"()12167 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12168 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12169 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 3>12170 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12171 ret void12172}12173 12174define void @s_shuffle_v4f16_v3f16__5_5_2_3() {12175; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_3:12176; GFX900: ; %bb.0:12177; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12178; GFX900-NEXT: ;;#ASMSTART12179; GFX900-NEXT: ; def s[4:5]12180; GFX900-NEXT: ;;#ASMEND12181; GFX900-NEXT: ;;#ASMSTART12182; GFX900-NEXT: ; def s[6:7]12183; GFX900-NEXT: ;;#ASMEND12184; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s612185; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s712186; GFX900-NEXT: ;;#ASMSTART12187; GFX900-NEXT: ; use s[8:9]12188; GFX900-NEXT: ;;#ASMEND12189; GFX900-NEXT: s_setpc_b64 s[30:31]12190;12191; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_3:12192; GFX90A: ; %bb.0:12193; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12194; GFX90A-NEXT: ;;#ASMSTART12195; GFX90A-NEXT: ; def s[4:5]12196; GFX90A-NEXT: ;;#ASMEND12197; GFX90A-NEXT: ;;#ASMSTART12198; GFX90A-NEXT: ; def s[6:7]12199; GFX90A-NEXT: ;;#ASMEND12200; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s612201; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s712202; GFX90A-NEXT: ;;#ASMSTART12203; GFX90A-NEXT: ; use s[8:9]12204; GFX90A-NEXT: ;;#ASMEND12205; GFX90A-NEXT: s_setpc_b64 s[30:31]12206;12207; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_3:12208; GFX942: ; %bb.0:12209; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12210; GFX942-NEXT: ;;#ASMSTART12211; GFX942-NEXT: ; def s[0:1]12212; GFX942-NEXT: ;;#ASMEND12213; GFX942-NEXT: ;;#ASMSTART12214; GFX942-NEXT: ; def s[2:3]12215; GFX942-NEXT: ;;#ASMEND12216; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s212217; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s312218; GFX942-NEXT: ;;#ASMSTART12219; GFX942-NEXT: ; use s[8:9]12220; GFX942-NEXT: ;;#ASMEND12221; GFX942-NEXT: s_setpc_b64 s[30:31]12222 %vec0 = call <4 x half> asm "; def $0", "=s"()12223 %vec1 = call <4 x half> asm "; def $0", "=s"()12224 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12225 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12226 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 3>12227 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12228 ret void12229}12230 12231define void @s_shuffle_v4f16_v3f16__5_5_4_3() {12232; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_3:12233; GFX900: ; %bb.0:12234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12235; GFX900-NEXT: ;;#ASMSTART12236; GFX900-NEXT: ; def s[4:5]12237; GFX900-NEXT: ;;#ASMEND12238; GFX900-NEXT: s_lshr_b32 s6, s4, 1612239; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s412240; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512241; GFX900-NEXT: ;;#ASMSTART12242; GFX900-NEXT: ; use s[8:9]12243; GFX900-NEXT: ;;#ASMEND12244; GFX900-NEXT: s_setpc_b64 s[30:31]12245;12246; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_3:12247; GFX90A: ; %bb.0:12248; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12249; GFX90A-NEXT: ;;#ASMSTART12250; GFX90A-NEXT: ; def s[4:5]12251; GFX90A-NEXT: ;;#ASMEND12252; GFX90A-NEXT: s_lshr_b32 s6, s4, 1612253; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s412254; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512255; GFX90A-NEXT: ;;#ASMSTART12256; GFX90A-NEXT: ; use s[8:9]12257; GFX90A-NEXT: ;;#ASMEND12258; GFX90A-NEXT: s_setpc_b64 s[30:31]12259;12260; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_4_3:12261; GFX942: ; %bb.0:12262; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12263; GFX942-NEXT: ;;#ASMSTART12264; GFX942-NEXT: ; def s[0:1]12265; GFX942-NEXT: ;;#ASMEND12266; GFX942-NEXT: s_lshr_b32 s2, s0, 1612267; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s012268; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s112269; GFX942-NEXT: ;;#ASMSTART12270; GFX942-NEXT: ; use s[8:9]12271; GFX942-NEXT: ;;#ASMEND12272; GFX942-NEXT: s_setpc_b64 s[30:31]12273 %vec0 = call <4 x half> asm "; def $0", "=s"()12274 %vec1 = call <4 x half> asm "; def $0", "=s"()12275 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12276 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12277 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 3>12278 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12279 ret void12280}12281 12282define void @s_shuffle_v4f16_v3f16__u_4_4_4() {12283; GFX900-LABEL: s_shuffle_v4f16_v3f16__u_4_4_4:12284; GFX900: ; %bb.0:12285; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12286; GFX900-NEXT: ;;#ASMSTART12287; GFX900-NEXT: ; def s[8:9]12288; GFX900-NEXT: ;;#ASMEND12289; GFX900-NEXT: s_lshr_b32 s4, s8, 1612290; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412291; GFX900-NEXT: ;;#ASMSTART12292; GFX900-NEXT: ; use s[8:9]12293; GFX900-NEXT: ;;#ASMEND12294; GFX900-NEXT: s_setpc_b64 s[30:31]12295;12296; GFX90A-LABEL: s_shuffle_v4f16_v3f16__u_4_4_4:12297; GFX90A: ; %bb.0:12298; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12299; GFX90A-NEXT: ;;#ASMSTART12300; GFX90A-NEXT: ; def s[8:9]12301; GFX90A-NEXT: ;;#ASMEND12302; GFX90A-NEXT: s_lshr_b32 s4, s8, 1612303; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412304; GFX90A-NEXT: ;;#ASMSTART12305; GFX90A-NEXT: ; use s[8:9]12306; GFX90A-NEXT: ;;#ASMEND12307; GFX90A-NEXT: s_setpc_b64 s[30:31]12308;12309; GFX942-LABEL: s_shuffle_v4f16_v3f16__u_4_4_4:12310; GFX942: ; %bb.0:12311; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12312; GFX942-NEXT: ;;#ASMSTART12313; GFX942-NEXT: ; def s[8:9]12314; GFX942-NEXT: ;;#ASMEND12315; GFX942-NEXT: s_lshr_b32 s0, s8, 1612316; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012317; GFX942-NEXT: ;;#ASMSTART12318; GFX942-NEXT: ; use s[8:9]12319; GFX942-NEXT: ;;#ASMEND12320; GFX942-NEXT: s_setpc_b64 s[30:31]12321 %vec0 = call <4 x half> asm "; def $0", "=s"()12322 %vec1 = call <4 x half> asm "; def $0", "=s"()12323 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12324 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12325 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 poison, i32 4, i32 4, i32 4>12326 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12327 ret void12328}12329 12330define void @s_shuffle_v4f16_v3f16__0_4_4_4() {12331; GFX900-LABEL: s_shuffle_v4f16_v3f16__0_4_4_4:12332; GFX900: ; %bb.0:12333; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12334; GFX900-NEXT: ;;#ASMSTART12335; GFX900-NEXT: ; def s[4:5]12336; GFX900-NEXT: ;;#ASMEND12337; GFX900-NEXT: ;;#ASMSTART12338; GFX900-NEXT: ; def s[6:7]12339; GFX900-NEXT: ;;#ASMEND12340; GFX900-NEXT: s_lshr_b32 s5, s6, 1612341; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s512342; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s512343; GFX900-NEXT: ;;#ASMSTART12344; GFX900-NEXT: ; use s[8:9]12345; GFX900-NEXT: ;;#ASMEND12346; GFX900-NEXT: s_setpc_b64 s[30:31]12347;12348; GFX90A-LABEL: s_shuffle_v4f16_v3f16__0_4_4_4:12349; GFX90A: ; %bb.0:12350; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12351; GFX90A-NEXT: ;;#ASMSTART12352; GFX90A-NEXT: ; def s[4:5]12353; GFX90A-NEXT: ;;#ASMEND12354; GFX90A-NEXT: ;;#ASMSTART12355; GFX90A-NEXT: ; def s[6:7]12356; GFX90A-NEXT: ;;#ASMEND12357; GFX90A-NEXT: s_lshr_b32 s5, s6, 1612358; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s512359; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s512360; GFX90A-NEXT: ;;#ASMSTART12361; GFX90A-NEXT: ; use s[8:9]12362; GFX90A-NEXT: ;;#ASMEND12363; GFX90A-NEXT: s_setpc_b64 s[30:31]12364;12365; GFX942-LABEL: s_shuffle_v4f16_v3f16__0_4_4_4:12366; GFX942: ; %bb.0:12367; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12368; GFX942-NEXT: ;;#ASMSTART12369; GFX942-NEXT: ; def s[0:1]12370; GFX942-NEXT: ;;#ASMEND12371; GFX942-NEXT: ;;#ASMSTART12372; GFX942-NEXT: ; def s[2:3]12373; GFX942-NEXT: ;;#ASMEND12374; GFX942-NEXT: s_lshr_b32 s1, s2, 1612375; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s112376; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s112377; GFX942-NEXT: ;;#ASMSTART12378; GFX942-NEXT: ; use s[8:9]12379; GFX942-NEXT: ;;#ASMEND12380; GFX942-NEXT: s_setpc_b64 s[30:31]12381 %vec0 = call <4 x half> asm "; def $0", "=s"()12382 %vec1 = call <4 x half> asm "; def $0", "=s"()12383 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12384 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12385 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 0, i32 4, i32 4, i32 4>12386 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12387 ret void12388}12389 12390define void @s_shuffle_v4f16_v3f16__1_4_4_4() {12391; GFX900-LABEL: s_shuffle_v4f16_v3f16__1_4_4_4:12392; GFX900: ; %bb.0:12393; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12394; GFX900-NEXT: ;;#ASMSTART12395; GFX900-NEXT: ; def s[4:5]12396; GFX900-NEXT: ;;#ASMEND12397; GFX900-NEXT: ;;#ASMSTART12398; GFX900-NEXT: ; def s[6:7]12399; GFX900-NEXT: ;;#ASMEND12400; GFX900-NEXT: s_lshr_b32 s5, s6, 1612401; GFX900-NEXT: s_lshr_b32 s4, s4, 1612402; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s512403; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s512404; GFX900-NEXT: ;;#ASMSTART12405; GFX900-NEXT: ; use s[8:9]12406; GFX900-NEXT: ;;#ASMEND12407; GFX900-NEXT: s_setpc_b64 s[30:31]12408;12409; GFX90A-LABEL: s_shuffle_v4f16_v3f16__1_4_4_4:12410; GFX90A: ; %bb.0:12411; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12412; GFX90A-NEXT: ;;#ASMSTART12413; GFX90A-NEXT: ; def s[4:5]12414; GFX90A-NEXT: ;;#ASMEND12415; GFX90A-NEXT: ;;#ASMSTART12416; GFX90A-NEXT: ; def s[6:7]12417; GFX90A-NEXT: ;;#ASMEND12418; GFX90A-NEXT: s_lshr_b32 s5, s6, 1612419; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612420; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s512421; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s512422; GFX90A-NEXT: ;;#ASMSTART12423; GFX90A-NEXT: ; use s[8:9]12424; GFX90A-NEXT: ;;#ASMEND12425; GFX90A-NEXT: s_setpc_b64 s[30:31]12426;12427; GFX942-LABEL: s_shuffle_v4f16_v3f16__1_4_4_4:12428; GFX942: ; %bb.0:12429; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12430; GFX942-NEXT: ;;#ASMSTART12431; GFX942-NEXT: ; def s[0:1]12432; GFX942-NEXT: ;;#ASMEND12433; GFX942-NEXT: ;;#ASMSTART12434; GFX942-NEXT: ; def s[2:3]12435; GFX942-NEXT: ;;#ASMEND12436; GFX942-NEXT: s_lshr_b32 s1, s2, 1612437; GFX942-NEXT: s_lshr_b32 s0, s0, 1612438; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s112439; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s112440; GFX942-NEXT: ;;#ASMSTART12441; GFX942-NEXT: ; use s[8:9]12442; GFX942-NEXT: ;;#ASMEND12443; GFX942-NEXT: s_setpc_b64 s[30:31]12444 %vec0 = call <4 x half> asm "; def $0", "=s"()12445 %vec1 = call <4 x half> asm "; def $0", "=s"()12446 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12447 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12448 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 1, i32 4, i32 4, i32 4>12449 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12450 ret void12451}12452 12453define void @s_shuffle_v4f16_v3f16__2_4_4_4() {12454; GFX900-LABEL: s_shuffle_v4f16_v3f16__2_4_4_4:12455; GFX900: ; %bb.0:12456; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12457; GFX900-NEXT: ;;#ASMSTART12458; GFX900-NEXT: ; def s[4:5]12459; GFX900-NEXT: ;;#ASMEND12460; GFX900-NEXT: ;;#ASMSTART12461; GFX900-NEXT: ; def s[6:7]12462; GFX900-NEXT: ;;#ASMEND12463; GFX900-NEXT: s_lshr_b32 s4, s6, 1612464; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s412465; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412466; GFX900-NEXT: ;;#ASMSTART12467; GFX900-NEXT: ; use s[8:9]12468; GFX900-NEXT: ;;#ASMEND12469; GFX900-NEXT: s_setpc_b64 s[30:31]12470;12471; GFX90A-LABEL: s_shuffle_v4f16_v3f16__2_4_4_4:12472; GFX90A: ; %bb.0:12473; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12474; GFX90A-NEXT: ;;#ASMSTART12475; GFX90A-NEXT: ; def s[4:5]12476; GFX90A-NEXT: ;;#ASMEND12477; GFX90A-NEXT: ;;#ASMSTART12478; GFX90A-NEXT: ; def s[6:7]12479; GFX90A-NEXT: ;;#ASMEND12480; GFX90A-NEXT: s_lshr_b32 s4, s6, 1612481; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s412482; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412483; GFX90A-NEXT: ;;#ASMSTART12484; GFX90A-NEXT: ; use s[8:9]12485; GFX90A-NEXT: ;;#ASMEND12486; GFX90A-NEXT: s_setpc_b64 s[30:31]12487;12488; GFX942-LABEL: s_shuffle_v4f16_v3f16__2_4_4_4:12489; GFX942: ; %bb.0:12490; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12491; GFX942-NEXT: ;;#ASMSTART12492; GFX942-NEXT: ; def s[0:1]12493; GFX942-NEXT: ;;#ASMEND12494; GFX942-NEXT: ;;#ASMSTART12495; GFX942-NEXT: ; def s[2:3]12496; GFX942-NEXT: ;;#ASMEND12497; GFX942-NEXT: s_lshr_b32 s0, s2, 1612498; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s012499; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012500; GFX942-NEXT: ;;#ASMSTART12501; GFX942-NEXT: ; use s[8:9]12502; GFX942-NEXT: ;;#ASMEND12503; GFX942-NEXT: s_setpc_b64 s[30:31]12504 %vec0 = call <4 x half> asm "; def $0", "=s"()12505 %vec1 = call <4 x half> asm "; def $0", "=s"()12506 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12507 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12508 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 2, i32 4, i32 4, i32 4>12509 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12510 ret void12511}12512 12513define void @s_shuffle_v4f16_v3f16__3_4_4_4() {12514; GFX900-LABEL: s_shuffle_v4f16_v3f16__3_4_4_4:12515; GFX900: ; %bb.0:12516; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12517; GFX900-NEXT: ;;#ASMSTART12518; GFX900-NEXT: ; def s[8:9]12519; GFX900-NEXT: ;;#ASMEND12520; GFX900-NEXT: s_lshr_b32 s4, s8, 1612521; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412522; GFX900-NEXT: ;;#ASMSTART12523; GFX900-NEXT: ; use s[8:9]12524; GFX900-NEXT: ;;#ASMEND12525; GFX900-NEXT: s_setpc_b64 s[30:31]12526;12527; GFX90A-LABEL: s_shuffle_v4f16_v3f16__3_4_4_4:12528; GFX90A: ; %bb.0:12529; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12530; GFX90A-NEXT: ;;#ASMSTART12531; GFX90A-NEXT: ; def s[8:9]12532; GFX90A-NEXT: ;;#ASMEND12533; GFX90A-NEXT: s_lshr_b32 s4, s8, 1612534; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412535; GFX90A-NEXT: ;;#ASMSTART12536; GFX90A-NEXT: ; use s[8:9]12537; GFX90A-NEXT: ;;#ASMEND12538; GFX90A-NEXT: s_setpc_b64 s[30:31]12539;12540; GFX942-LABEL: s_shuffle_v4f16_v3f16__3_4_4_4:12541; GFX942: ; %bb.0:12542; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12543; GFX942-NEXT: ;;#ASMSTART12544; GFX942-NEXT: ; def s[8:9]12545; GFX942-NEXT: ;;#ASMEND12546; GFX942-NEXT: s_lshr_b32 s0, s8, 1612547; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012548; GFX942-NEXT: ;;#ASMSTART12549; GFX942-NEXT: ; use s[8:9]12550; GFX942-NEXT: ;;#ASMEND12551; GFX942-NEXT: s_setpc_b64 s[30:31]12552 %vec0 = call <4 x half> asm "; def $0", "=s"()12553 %vec1 = call <4 x half> asm "; def $0", "=s"()12554 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12555 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12556 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 3, i32 4, i32 4, i32 4>12557 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12558 ret void12559}12560 12561define void @s_shuffle_v4f16_v3f16__4_4_4_4() {12562; GFX900-LABEL: s_shuffle_v4f16_v3f16__4_4_4_4:12563; GFX900: ; %bb.0:12564; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12565; GFX900-NEXT: ;;#ASMSTART12566; GFX900-NEXT: ; def s[4:5]12567; GFX900-NEXT: ;;#ASMEND12568; GFX900-NEXT: s_lshr_b32 s4, s4, 1612569; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s412570; GFX900-NEXT: s_mov_b32 s9, s812571; GFX900-NEXT: ;;#ASMSTART12572; GFX900-NEXT: ; use s[8:9]12573; GFX900-NEXT: ;;#ASMEND12574; GFX900-NEXT: s_setpc_b64 s[30:31]12575;12576; GFX90A-LABEL: s_shuffle_v4f16_v3f16__4_4_4_4:12577; GFX90A: ; %bb.0:12578; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12579; GFX90A-NEXT: ;;#ASMSTART12580; GFX90A-NEXT: ; def s[4:5]12581; GFX90A-NEXT: ;;#ASMEND12582; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612583; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s412584; GFX90A-NEXT: s_mov_b32 s9, s812585; GFX90A-NEXT: ;;#ASMSTART12586; GFX90A-NEXT: ; use s[8:9]12587; GFX90A-NEXT: ;;#ASMEND12588; GFX90A-NEXT: s_setpc_b64 s[30:31]12589;12590; GFX942-LABEL: s_shuffle_v4f16_v3f16__4_4_4_4:12591; GFX942: ; %bb.0:12592; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12593; GFX942-NEXT: ;;#ASMSTART12594; GFX942-NEXT: ; def s[0:1]12595; GFX942-NEXT: ;;#ASMEND12596; GFX942-NEXT: s_lshr_b32 s0, s0, 1612597; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s012598; GFX942-NEXT: s_mov_b32 s9, s812599; GFX942-NEXT: ;;#ASMSTART12600; GFX942-NEXT: ; use s[8:9]12601; GFX942-NEXT: ;;#ASMEND12602; GFX942-NEXT: s_setpc_b64 s[30:31]12603 %vec0 = call <4 x half> asm "; def $0", "=s"()12604 %vec1 = call <4 x half> asm "; def $0", "=s"()12605 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12606 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12607 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 4, i32 4, i32 4>12608 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12609 ret void12610}12611 12612define void @s_shuffle_v4f16_v3f16__5_4_4_4() {12613; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_4_4:12614; GFX900: ; %bb.0:12615; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12616; GFX900-NEXT: ;;#ASMSTART12617; GFX900-NEXT: ; def s[4:5]12618; GFX900-NEXT: ;;#ASMEND12619; GFX900-NEXT: s_lshr_b32 s4, s4, 1612620; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s412621; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412622; GFX900-NEXT: ;;#ASMSTART12623; GFX900-NEXT: ; use s[8:9]12624; GFX900-NEXT: ;;#ASMEND12625; GFX900-NEXT: s_setpc_b64 s[30:31]12626;12627; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_4_4:12628; GFX90A: ; %bb.0:12629; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12630; GFX90A-NEXT: ;;#ASMSTART12631; GFX90A-NEXT: ; def s[4:5]12632; GFX90A-NEXT: ;;#ASMEND12633; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612634; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s412635; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412636; GFX90A-NEXT: ;;#ASMSTART12637; GFX90A-NEXT: ; use s[8:9]12638; GFX90A-NEXT: ;;#ASMEND12639; GFX90A-NEXT: s_setpc_b64 s[30:31]12640;12641; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_4_4:12642; GFX942: ; %bb.0:12643; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12644; GFX942-NEXT: ;;#ASMSTART12645; GFX942-NEXT: ; def s[0:1]12646; GFX942-NEXT: ;;#ASMEND12647; GFX942-NEXT: s_lshr_b32 s0, s0, 1612648; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s012649; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012650; GFX942-NEXT: ;;#ASMSTART12651; GFX942-NEXT: ; use s[8:9]12652; GFX942-NEXT: ;;#ASMEND12653; GFX942-NEXT: s_setpc_b64 s[30:31]12654 %vec0 = call <4 x half> asm "; def $0", "=s"()12655 %vec1 = call <4 x half> asm "; def $0", "=s"()12656 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12657 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12658 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 4, i32 4>12659 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12660 ret void12661}12662 12663define void @s_shuffle_v4f16_v3f16__5_u_4_4() {12664; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_u_4_4:12665; GFX900: ; %bb.0:12666; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12667; GFX900-NEXT: ;;#ASMSTART12668; GFX900-NEXT: ; def s[4:5]12669; GFX900-NEXT: ;;#ASMEND12670; GFX900-NEXT: s_lshr_b32 s4, s4, 1612671; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412672; GFX900-NEXT: s_mov_b32 s8, s512673; GFX900-NEXT: ;;#ASMSTART12674; GFX900-NEXT: ; use s[8:9]12675; GFX900-NEXT: ;;#ASMEND12676; GFX900-NEXT: s_setpc_b64 s[30:31]12677;12678; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_u_4_4:12679; GFX90A: ; %bb.0:12680; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12681; GFX90A-NEXT: ;;#ASMSTART12682; GFX90A-NEXT: ; def s[4:5]12683; GFX90A-NEXT: ;;#ASMEND12684; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612685; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412686; GFX90A-NEXT: s_mov_b32 s8, s512687; GFX90A-NEXT: ;;#ASMSTART12688; GFX90A-NEXT: ; use s[8:9]12689; GFX90A-NEXT: ;;#ASMEND12690; GFX90A-NEXT: s_setpc_b64 s[30:31]12691;12692; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_u_4_4:12693; GFX942: ; %bb.0:12694; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12695; GFX942-NEXT: ;;#ASMSTART12696; GFX942-NEXT: ; def s[0:1]12697; GFX942-NEXT: ;;#ASMEND12698; GFX942-NEXT: s_lshr_b32 s0, s0, 1612699; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012700; GFX942-NEXT: s_mov_b32 s8, s112701; GFX942-NEXT: ;;#ASMSTART12702; GFX942-NEXT: ; use s[8:9]12703; GFX942-NEXT: ;;#ASMEND12704; GFX942-NEXT: s_setpc_b64 s[30:31]12705 %vec0 = call <4 x half> asm "; def $0", "=s"()12706 %vec1 = call <4 x half> asm "; def $0", "=s"()12707 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12708 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12709 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 4, i32 4>12710 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12711 ret void12712}12713 12714define void @s_shuffle_v4f16_v3f16__5_0_4_4() {12715; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_0_4_4:12716; GFX900: ; %bb.0:12717; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12718; GFX900-NEXT: ;;#ASMSTART12719; GFX900-NEXT: ; def s[4:5]12720; GFX900-NEXT: ;;#ASMEND12721; GFX900-NEXT: ;;#ASMSTART12722; GFX900-NEXT: ; def s[6:7]12723; GFX900-NEXT: ;;#ASMEND12724; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s412725; GFX900-NEXT: s_lshr_b32 s4, s6, 1612726; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412727; GFX900-NEXT: ;;#ASMSTART12728; GFX900-NEXT: ; use s[8:9]12729; GFX900-NEXT: ;;#ASMEND12730; GFX900-NEXT: s_setpc_b64 s[30:31]12731;12732; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_0_4_4:12733; GFX90A: ; %bb.0:12734; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12735; GFX90A-NEXT: ;;#ASMSTART12736; GFX90A-NEXT: ; def s[4:5]12737; GFX90A-NEXT: ;;#ASMEND12738; GFX90A-NEXT: ;;#ASMSTART12739; GFX90A-NEXT: ; def s[6:7]12740; GFX90A-NEXT: ;;#ASMEND12741; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s412742; GFX90A-NEXT: s_lshr_b32 s4, s6, 1612743; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412744; GFX90A-NEXT: ;;#ASMSTART12745; GFX90A-NEXT: ; use s[8:9]12746; GFX90A-NEXT: ;;#ASMEND12747; GFX90A-NEXT: s_setpc_b64 s[30:31]12748;12749; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_0_4_4:12750; GFX942: ; %bb.0:12751; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12752; GFX942-NEXT: ;;#ASMSTART12753; GFX942-NEXT: ; def s[0:1]12754; GFX942-NEXT: ;;#ASMEND12755; GFX942-NEXT: ;;#ASMSTART12756; GFX942-NEXT: ; def s[2:3]12757; GFX942-NEXT: ;;#ASMEND12758; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s012759; GFX942-NEXT: s_lshr_b32 s0, s2, 1612760; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012761; GFX942-NEXT: ;;#ASMSTART12762; GFX942-NEXT: ; use s[8:9]12763; GFX942-NEXT: ;;#ASMEND12764; GFX942-NEXT: s_setpc_b64 s[30:31]12765 %vec0 = call <4 x half> asm "; def $0", "=s"()12766 %vec1 = call <4 x half> asm "; def $0", "=s"()12767 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12768 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12769 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 4, i32 4>12770 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12771 ret void12772}12773 12774define void @s_shuffle_v4f16_v3f16__5_1_4_4() {12775; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_1_4_4:12776; GFX900: ; %bb.0:12777; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12778; GFX900-NEXT: ;;#ASMSTART12779; GFX900-NEXT: ; def s[4:5]12780; GFX900-NEXT: ;;#ASMEND12781; GFX900-NEXT: s_lshr_b32 s4, s4, 1612782; GFX900-NEXT: ;;#ASMSTART12783; GFX900-NEXT: ; def s[6:7]12784; GFX900-NEXT: ;;#ASMEND12785; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s412786; GFX900-NEXT: s_lshr_b32 s4, s6, 1612787; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412788; GFX900-NEXT: ;;#ASMSTART12789; GFX900-NEXT: ; use s[8:9]12790; GFX900-NEXT: ;;#ASMEND12791; GFX900-NEXT: s_setpc_b64 s[30:31]12792;12793; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_4_4:12794; GFX90A: ; %bb.0:12795; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12796; GFX90A-NEXT: ;;#ASMSTART12797; GFX90A-NEXT: ; def s[4:5]12798; GFX90A-NEXT: ;;#ASMEND12799; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612800; GFX90A-NEXT: ;;#ASMSTART12801; GFX90A-NEXT: ; def s[6:7]12802; GFX90A-NEXT: ;;#ASMEND12803; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s412804; GFX90A-NEXT: s_lshr_b32 s4, s6, 1612805; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412806; GFX90A-NEXT: ;;#ASMSTART12807; GFX90A-NEXT: ; use s[8:9]12808; GFX90A-NEXT: ;;#ASMEND12809; GFX90A-NEXT: s_setpc_b64 s[30:31]12810;12811; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_4_4:12812; GFX942: ; %bb.0:12813; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12814; GFX942-NEXT: ;;#ASMSTART12815; GFX942-NEXT: ; def s[0:1]12816; GFX942-NEXT: ;;#ASMEND12817; GFX942-NEXT: s_lshr_b32 s0, s0, 1612818; GFX942-NEXT: ;;#ASMSTART12819; GFX942-NEXT: ; def s[2:3]12820; GFX942-NEXT: ;;#ASMEND12821; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s012822; GFX942-NEXT: s_lshr_b32 s0, s2, 1612823; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012824; GFX942-NEXT: ;;#ASMSTART12825; GFX942-NEXT: ; use s[8:9]12826; GFX942-NEXT: ;;#ASMEND12827; GFX942-NEXT: s_setpc_b64 s[30:31]12828 %vec0 = call <4 x half> asm "; def $0", "=s"()12829 %vec1 = call <4 x half> asm "; def $0", "=s"()12830 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12831 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12832 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 4, i32 4>12833 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12834 ret void12835}12836 12837define void @s_shuffle_v4f16_v3f16__5_2_4_4() {12838; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_4_4:12839; GFX900: ; %bb.0:12840; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12841; GFX900-NEXT: ;;#ASMSTART12842; GFX900-NEXT: ; def s[4:5]12843; GFX900-NEXT: ;;#ASMEND12844; GFX900-NEXT: ;;#ASMSTART12845; GFX900-NEXT: ; def s[6:7]12846; GFX900-NEXT: ;;#ASMEND12847; GFX900-NEXT: s_lshr_b32 s4, s6, 1612848; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s512849; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412850; GFX900-NEXT: ;;#ASMSTART12851; GFX900-NEXT: ; use s[8:9]12852; GFX900-NEXT: ;;#ASMEND12853; GFX900-NEXT: s_setpc_b64 s[30:31]12854;12855; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_4_4:12856; GFX90A: ; %bb.0:12857; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12858; GFX90A-NEXT: ;;#ASMSTART12859; GFX90A-NEXT: ; def s[4:5]12860; GFX90A-NEXT: ;;#ASMEND12861; GFX90A-NEXT: ;;#ASMSTART12862; GFX90A-NEXT: ; def s[6:7]12863; GFX90A-NEXT: ;;#ASMEND12864; GFX90A-NEXT: s_lshr_b32 s4, s6, 1612865; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s512866; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412867; GFX90A-NEXT: ;;#ASMSTART12868; GFX90A-NEXT: ; use s[8:9]12869; GFX90A-NEXT: ;;#ASMEND12870; GFX90A-NEXT: s_setpc_b64 s[30:31]12871;12872; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_4_4:12873; GFX942: ; %bb.0:12874; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12875; GFX942-NEXT: ;;#ASMSTART12876; GFX942-NEXT: ; def s[0:1]12877; GFX942-NEXT: ;;#ASMEND12878; GFX942-NEXT: ;;#ASMSTART12879; GFX942-NEXT: ; def s[2:3]12880; GFX942-NEXT: ;;#ASMEND12881; GFX942-NEXT: s_lshr_b32 s0, s2, 1612882; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s112883; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012884; GFX942-NEXT: ;;#ASMSTART12885; GFX942-NEXT: ; use s[8:9]12886; GFX942-NEXT: ;;#ASMEND12887; GFX942-NEXT: s_setpc_b64 s[30:31]12888 %vec0 = call <4 x half> asm "; def $0", "=s"()12889 %vec1 = call <4 x half> asm "; def $0", "=s"()12890 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12891 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12892 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 4, i32 4>12893 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12894 ret void12895}12896 12897define void @s_shuffle_v4f16_v3f16__5_3_4_4() {12898; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_4_4:12899; GFX900: ; %bb.0:12900; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12901; GFX900-NEXT: ;;#ASMSTART12902; GFX900-NEXT: ; def s[4:5]12903; GFX900-NEXT: ;;#ASMEND12904; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s412905; GFX900-NEXT: s_lshr_b32 s4, s4, 1612906; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412907; GFX900-NEXT: ;;#ASMSTART12908; GFX900-NEXT: ; use s[8:9]12909; GFX900-NEXT: ;;#ASMEND12910; GFX900-NEXT: s_setpc_b64 s[30:31]12911;12912; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_4_4:12913; GFX90A: ; %bb.0:12914; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12915; GFX90A-NEXT: ;;#ASMSTART12916; GFX90A-NEXT: ; def s[4:5]12917; GFX90A-NEXT: ;;#ASMEND12918; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s412919; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612920; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412921; GFX90A-NEXT: ;;#ASMSTART12922; GFX90A-NEXT: ; use s[8:9]12923; GFX90A-NEXT: ;;#ASMEND12924; GFX90A-NEXT: s_setpc_b64 s[30:31]12925;12926; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_3_4_4:12927; GFX942: ; %bb.0:12928; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12929; GFX942-NEXT: ;;#ASMSTART12930; GFX942-NEXT: ; def s[0:1]12931; GFX942-NEXT: ;;#ASMEND12932; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s012933; GFX942-NEXT: s_lshr_b32 s0, s0, 1612934; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012935; GFX942-NEXT: ;;#ASMSTART12936; GFX942-NEXT: ; use s[8:9]12937; GFX942-NEXT: ;;#ASMEND12938; GFX942-NEXT: s_setpc_b64 s[30:31]12939 %vec0 = call <4 x half> asm "; def $0", "=s"()12940 %vec1 = call <4 x half> asm "; def $0", "=s"()12941 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12942 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12943 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 4, i32 4>12944 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12945 ret void12946}12947 12948define void @s_shuffle_v4f16_v3f16__5_5_4_4() {12949; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_4:12950; GFX900: ; %bb.0:12951; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12952; GFX900-NEXT: ;;#ASMSTART12953; GFX900-NEXT: ; def s[4:5]12954; GFX900-NEXT: ;;#ASMEND12955; GFX900-NEXT: s_lshr_b32 s4, s4, 1612956; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s412957; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s512958; GFX900-NEXT: ;;#ASMSTART12959; GFX900-NEXT: ; use s[8:9]12960; GFX900-NEXT: ;;#ASMEND12961; GFX900-NEXT: s_setpc_b64 s[30:31]12962;12963; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_4:12964; GFX90A: ; %bb.0:12965; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12966; GFX90A-NEXT: ;;#ASMSTART12967; GFX90A-NEXT: ; def s[4:5]12968; GFX90A-NEXT: ;;#ASMEND12969; GFX90A-NEXT: s_lshr_b32 s4, s4, 1612970; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s412971; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s512972; GFX90A-NEXT: ;;#ASMSTART12973; GFX90A-NEXT: ; use s[8:9]12974; GFX90A-NEXT: ;;#ASMEND12975; GFX90A-NEXT: s_setpc_b64 s[30:31]12976;12977; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_4_4:12978; GFX942: ; %bb.0:12979; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)12980; GFX942-NEXT: ;;#ASMSTART12981; GFX942-NEXT: ; def s[0:1]12982; GFX942-NEXT: ;;#ASMEND12983; GFX942-NEXT: s_lshr_b32 s0, s0, 1612984; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s012985; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s112986; GFX942-NEXT: ;;#ASMSTART12987; GFX942-NEXT: ; use s[8:9]12988; GFX942-NEXT: ;;#ASMEND12989; GFX942-NEXT: s_setpc_b64 s[30:31]12990 %vec0 = call <4 x half> asm "; def $0", "=s"()12991 %vec1 = call <4 x half> asm "; def $0", "=s"()12992 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12993 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>12994 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 4>12995 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)12996 ret void12997}12998 12999define void @s_shuffle_v4f16_v3f16__5_5_u_4() {13000; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_4:13001; GFX900: ; %bb.0:13002; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13003; GFX900-NEXT: ;;#ASMSTART13004; GFX900-NEXT: ; def s[4:5]13005; GFX900-NEXT: ;;#ASMEND13006; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s513007; GFX900-NEXT: s_mov_b32 s9, s413008; GFX900-NEXT: ;;#ASMSTART13009; GFX900-NEXT: ; use s[8:9]13010; GFX900-NEXT: ;;#ASMEND13011; GFX900-NEXT: s_setpc_b64 s[30:31]13012;13013; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_4:13014; GFX90A: ; %bb.0:13015; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13016; GFX90A-NEXT: ;;#ASMSTART13017; GFX90A-NEXT: ; def s[4:5]13018; GFX90A-NEXT: ;;#ASMEND13019; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s513020; GFX90A-NEXT: s_mov_b32 s9, s413021; GFX90A-NEXT: ;;#ASMSTART13022; GFX90A-NEXT: ; use s[8:9]13023; GFX90A-NEXT: ;;#ASMEND13024; GFX90A-NEXT: s_setpc_b64 s[30:31]13025;13026; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_4:13027; GFX942: ; %bb.0:13028; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13029; GFX942-NEXT: ;;#ASMSTART13030; GFX942-NEXT: ; def s[0:1]13031; GFX942-NEXT: ;;#ASMEND13032; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113033; GFX942-NEXT: s_mov_b32 s9, s013034; GFX942-NEXT: ;;#ASMSTART13035; GFX942-NEXT: ; use s[8:9]13036; GFX942-NEXT: ;;#ASMEND13037; GFX942-NEXT: s_setpc_b64 s[30:31]13038 %vec0 = call <4 x half> asm "; def $0", "=s"()13039 %vec1 = call <4 x half> asm "; def $0", "=s"()13040 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13041 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13042 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 4>13043 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13044 ret void13045}13046 13047define void @s_shuffle_v4f16_v3f16__5_5_0_4() {13048; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_4:13049; GFX900: ; %bb.0:13050; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13051; GFX900-NEXT: ;;#ASMSTART13052; GFX900-NEXT: ; def s[4:5]13053; GFX900-NEXT: ;;#ASMEND13054; GFX900-NEXT: ;;#ASMSTART13055; GFX900-NEXT: ; def s[6:7]13056; GFX900-NEXT: ;;#ASMEND13057; GFX900-NEXT: s_lshr_b32 s5, s6, 1613058; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s513059; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713060; GFX900-NEXT: ;;#ASMSTART13061; GFX900-NEXT: ; use s[8:9]13062; GFX900-NEXT: ;;#ASMEND13063; GFX900-NEXT: s_setpc_b64 s[30:31]13064;13065; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_4:13066; GFX90A: ; %bb.0:13067; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13068; GFX90A-NEXT: ;;#ASMSTART13069; GFX90A-NEXT: ; def s[4:5]13070; GFX90A-NEXT: ;;#ASMEND13071; GFX90A-NEXT: ;;#ASMSTART13072; GFX90A-NEXT: ; def s[6:7]13073; GFX90A-NEXT: ;;#ASMEND13074; GFX90A-NEXT: s_lshr_b32 s5, s6, 1613075; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s513076; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713077; GFX90A-NEXT: ;;#ASMSTART13078; GFX90A-NEXT: ; use s[8:9]13079; GFX90A-NEXT: ;;#ASMEND13080; GFX90A-NEXT: s_setpc_b64 s[30:31]13081;13082; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_4:13083; GFX942: ; %bb.0:13084; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13085; GFX942-NEXT: ;;#ASMSTART13086; GFX942-NEXT: ; def s[0:1]13087; GFX942-NEXT: ;;#ASMEND13088; GFX942-NEXT: ;;#ASMSTART13089; GFX942-NEXT: ; def s[2:3]13090; GFX942-NEXT: ;;#ASMEND13091; GFX942-NEXT: s_lshr_b32 s1, s2, 1613092; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s113093; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s313094; GFX942-NEXT: ;;#ASMSTART13095; GFX942-NEXT: ; use s[8:9]13096; GFX942-NEXT: ;;#ASMEND13097; GFX942-NEXT: s_setpc_b64 s[30:31]13098 %vec0 = call <4 x half> asm "; def $0", "=s"()13099 %vec1 = call <4 x half> asm "; def $0", "=s"()13100 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13101 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13102 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 4>13103 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13104 ret void13105}13106 13107define void @s_shuffle_v4f16_v3f16__5_5_1_4() {13108; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_4:13109; GFX900: ; %bb.0:13110; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13111; GFX900-NEXT: ;;#ASMSTART13112; GFX900-NEXT: ; def s[4:5]13113; GFX900-NEXT: ;;#ASMEND13114; GFX900-NEXT: ;;#ASMSTART13115; GFX900-NEXT: ; def s[6:7]13116; GFX900-NEXT: ;;#ASMEND13117; GFX900-NEXT: s_lshr_b32 s5, s6, 1613118; GFX900-NEXT: s_lshr_b32 s4, s4, 1613119; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s513120; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713121; GFX900-NEXT: ;;#ASMSTART13122; GFX900-NEXT: ; use s[8:9]13123; GFX900-NEXT: ;;#ASMEND13124; GFX900-NEXT: s_setpc_b64 s[30:31]13125;13126; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_4:13127; GFX90A: ; %bb.0:13128; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13129; GFX90A-NEXT: ;;#ASMSTART13130; GFX90A-NEXT: ; def s[4:5]13131; GFX90A-NEXT: ;;#ASMEND13132; GFX90A-NEXT: ;;#ASMSTART13133; GFX90A-NEXT: ; def s[6:7]13134; GFX90A-NEXT: ;;#ASMEND13135; GFX90A-NEXT: s_lshr_b32 s5, s6, 1613136; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613137; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s513138; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713139; GFX90A-NEXT: ;;#ASMSTART13140; GFX90A-NEXT: ; use s[8:9]13141; GFX90A-NEXT: ;;#ASMEND13142; GFX90A-NEXT: s_setpc_b64 s[30:31]13143;13144; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_4:13145; GFX942: ; %bb.0:13146; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13147; GFX942-NEXT: ;;#ASMSTART13148; GFX942-NEXT: ; def s[0:1]13149; GFX942-NEXT: ;;#ASMEND13150; GFX942-NEXT: ;;#ASMSTART13151; GFX942-NEXT: ; def s[2:3]13152; GFX942-NEXT: ;;#ASMEND13153; GFX942-NEXT: s_lshr_b32 s1, s2, 1613154; GFX942-NEXT: s_lshr_b32 s0, s0, 1613155; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s113156; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s313157; GFX942-NEXT: ;;#ASMSTART13158; GFX942-NEXT: ; use s[8:9]13159; GFX942-NEXT: ;;#ASMEND13160; GFX942-NEXT: s_setpc_b64 s[30:31]13161 %vec0 = call <4 x half> asm "; def $0", "=s"()13162 %vec1 = call <4 x half> asm "; def $0", "=s"()13163 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13164 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13165 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 4>13166 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13167 ret void13168}13169 13170define void @s_shuffle_v4f16_v3f16__5_5_2_4() {13171; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_4:13172; GFX900: ; %bb.0:13173; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13174; GFX900-NEXT: ;;#ASMSTART13175; GFX900-NEXT: ; def s[4:5]13176; GFX900-NEXT: ;;#ASMEND13177; GFX900-NEXT: ;;#ASMSTART13178; GFX900-NEXT: ; def s[6:7]13179; GFX900-NEXT: ;;#ASMEND13180; GFX900-NEXT: s_lshr_b32 s4, s6, 1613181; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s413182; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713183; GFX900-NEXT: ;;#ASMSTART13184; GFX900-NEXT: ; use s[8:9]13185; GFX900-NEXT: ;;#ASMEND13186; GFX900-NEXT: s_setpc_b64 s[30:31]13187;13188; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_4:13189; GFX90A: ; %bb.0:13190; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13191; GFX90A-NEXT: ;;#ASMSTART13192; GFX90A-NEXT: ; def s[4:5]13193; GFX90A-NEXT: ;;#ASMEND13194; GFX90A-NEXT: ;;#ASMSTART13195; GFX90A-NEXT: ; def s[6:7]13196; GFX90A-NEXT: ;;#ASMEND13197; GFX90A-NEXT: s_lshr_b32 s4, s6, 1613198; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s413199; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713200; GFX90A-NEXT: ;;#ASMSTART13201; GFX90A-NEXT: ; use s[8:9]13202; GFX90A-NEXT: ;;#ASMEND13203; GFX90A-NEXT: s_setpc_b64 s[30:31]13204;13205; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_4:13206; GFX942: ; %bb.0:13207; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13208; GFX942-NEXT: ;;#ASMSTART13209; GFX942-NEXT: ; def s[0:1]13210; GFX942-NEXT: ;;#ASMEND13211; GFX942-NEXT: ;;#ASMSTART13212; GFX942-NEXT: ; def s[2:3]13213; GFX942-NEXT: ;;#ASMEND13214; GFX942-NEXT: s_lshr_b32 s0, s2, 1613215; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s013216; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s313217; GFX942-NEXT: ;;#ASMSTART13218; GFX942-NEXT: ; use s[8:9]13219; GFX942-NEXT: ;;#ASMEND13220; GFX942-NEXT: s_setpc_b64 s[30:31]13221 %vec0 = call <4 x half> asm "; def $0", "=s"()13222 %vec1 = call <4 x half> asm "; def $0", "=s"()13223 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13224 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13225 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 4>13226 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13227 ret void13228}13229 13230define void @s_shuffle_v4f16_v3f16__5_5_3_4() {13231; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_4:13232; GFX900: ; %bb.0:13233; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13234; GFX900-NEXT: ;;#ASMSTART13235; GFX900-NEXT: ; def s[4:5]13236; GFX900-NEXT: ;;#ASMEND13237; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s513238; GFX900-NEXT: s_mov_b32 s9, s413239; GFX900-NEXT: ;;#ASMSTART13240; GFX900-NEXT: ; use s[8:9]13241; GFX900-NEXT: ;;#ASMEND13242; GFX900-NEXT: s_setpc_b64 s[30:31]13243;13244; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_4:13245; GFX90A: ; %bb.0:13246; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13247; GFX90A-NEXT: ;;#ASMSTART13248; GFX90A-NEXT: ; def s[4:5]13249; GFX90A-NEXT: ;;#ASMEND13250; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s513251; GFX90A-NEXT: s_mov_b32 s9, s413252; GFX90A-NEXT: ;;#ASMSTART13253; GFX90A-NEXT: ; use s[8:9]13254; GFX90A-NEXT: ;;#ASMEND13255; GFX90A-NEXT: s_setpc_b64 s[30:31]13256;13257; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_4:13258; GFX942: ; %bb.0:13259; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13260; GFX942-NEXT: ;;#ASMSTART13261; GFX942-NEXT: ; def s[0:1]13262; GFX942-NEXT: ;;#ASMEND13263; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113264; GFX942-NEXT: s_mov_b32 s9, s013265; GFX942-NEXT: ;;#ASMSTART13266; GFX942-NEXT: ; use s[8:9]13267; GFX942-NEXT: ;;#ASMEND13268; GFX942-NEXT: s_setpc_b64 s[30:31]13269 %vec0 = call <4 x half> asm "; def $0", "=s"()13270 %vec1 = call <4 x half> asm "; def $0", "=s"()13271 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13272 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13273 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 4>13274 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13275 ret void13276}13277 13278define void @s_shuffle_v4f16_v3f16__u_5_5_5() {13279; GFX900-LABEL: s_shuffle_v4f16_v3f16__u_5_5_5:13280; GFX900: ; %bb.0:13281; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13282; GFX900-NEXT: ;;#ASMSTART13283; GFX900-NEXT: ; def s[4:5]13284; GFX900-NEXT: ;;#ASMEND13285; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513286; GFX900-NEXT: s_lshl_b32 s8, s5, 1613287; GFX900-NEXT: ;;#ASMSTART13288; GFX900-NEXT: ; use s[8:9]13289; GFX900-NEXT: ;;#ASMEND13290; GFX900-NEXT: s_setpc_b64 s[30:31]13291;13292; GFX90A-LABEL: s_shuffle_v4f16_v3f16__u_5_5_5:13293; GFX90A: ; %bb.0:13294; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13295; GFX90A-NEXT: ;;#ASMSTART13296; GFX90A-NEXT: ; def s[4:5]13297; GFX90A-NEXT: ;;#ASMEND13298; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513299; GFX90A-NEXT: s_lshl_b32 s8, s5, 1613300; GFX90A-NEXT: ;;#ASMSTART13301; GFX90A-NEXT: ; use s[8:9]13302; GFX90A-NEXT: ;;#ASMEND13303; GFX90A-NEXT: s_setpc_b64 s[30:31]13304;13305; GFX942-LABEL: s_shuffle_v4f16_v3f16__u_5_5_5:13306; GFX942: ; %bb.0:13307; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13308; GFX942-NEXT: ;;#ASMSTART13309; GFX942-NEXT: ; def s[0:1]13310; GFX942-NEXT: ;;#ASMEND13311; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113312; GFX942-NEXT: s_lshl_b32 s8, s1, 1613313; GFX942-NEXT: ;;#ASMSTART13314; GFX942-NEXT: ; use s[8:9]13315; GFX942-NEXT: ;;#ASMEND13316; GFX942-NEXT: s_setpc_b64 s[30:31]13317 %vec0 = call <4 x half> asm "; def $0", "=s"()13318 %vec1 = call <4 x half> asm "; def $0", "=s"()13319 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13320 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13321 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 poison, i32 5, i32 5, i32 5>13322 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13323 ret void13324}13325 13326define void @s_shuffle_v4f16_v3f16__0_5_5_5() {13327; GFX900-LABEL: s_shuffle_v4f16_v3f16__0_5_5_5:13328; GFX900: ; %bb.0:13329; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13330; GFX900-NEXT: ;;#ASMSTART13331; GFX900-NEXT: ; def s[4:5]13332; GFX900-NEXT: ;;#ASMEND13333; GFX900-NEXT: ;;#ASMSTART13334; GFX900-NEXT: ; def s[6:7]13335; GFX900-NEXT: ;;#ASMEND13336; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s713337; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713338; GFX900-NEXT: ;;#ASMSTART13339; GFX900-NEXT: ; use s[8:9]13340; GFX900-NEXT: ;;#ASMEND13341; GFX900-NEXT: s_setpc_b64 s[30:31]13342;13343; GFX90A-LABEL: s_shuffle_v4f16_v3f16__0_5_5_5:13344; GFX90A: ; %bb.0:13345; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13346; GFX90A-NEXT: ;;#ASMSTART13347; GFX90A-NEXT: ; def s[4:5]13348; GFX90A-NEXT: ;;#ASMEND13349; GFX90A-NEXT: ;;#ASMSTART13350; GFX90A-NEXT: ; def s[6:7]13351; GFX90A-NEXT: ;;#ASMEND13352; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s713353; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713354; GFX90A-NEXT: ;;#ASMSTART13355; GFX90A-NEXT: ; use s[8:9]13356; GFX90A-NEXT: ;;#ASMEND13357; GFX90A-NEXT: s_setpc_b64 s[30:31]13358;13359; GFX942-LABEL: s_shuffle_v4f16_v3f16__0_5_5_5:13360; GFX942: ; %bb.0:13361; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13362; GFX942-NEXT: ;;#ASMSTART13363; GFX942-NEXT: ; def s[0:1]13364; GFX942-NEXT: ;;#ASMEND13365; GFX942-NEXT: ;;#ASMSTART13366; GFX942-NEXT: ; def s[2:3]13367; GFX942-NEXT: ;;#ASMEND13368; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s313369; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313370; 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 half> asm "; def $0", "=s"()13375 %vec1 = call <4 x half> asm "; def $0", "=s"()13376 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13377 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13378 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 0, i32 5, i32 5, i32 5>13379 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13380 ret void13381}13382 13383define void @s_shuffle_v4f16_v3f16__1_5_5_5() {13384; GFX900-LABEL: s_shuffle_v4f16_v3f16__1_5_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: s_lshr_b32 s4, s4, 1613391; GFX900-NEXT: ;;#ASMSTART13392; GFX900-NEXT: ; def s[6:7]13393; GFX900-NEXT: ;;#ASMEND13394; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s713395; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713396; GFX900-NEXT: ;;#ASMSTART13397; GFX900-NEXT: ; use s[8:9]13398; GFX900-NEXT: ;;#ASMEND13399; GFX900-NEXT: s_setpc_b64 s[30:31]13400;13401; GFX90A-LABEL: s_shuffle_v4f16_v3f16__1_5_5_5:13402; GFX90A: ; %bb.0:13403; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13404; GFX90A-NEXT: ;;#ASMSTART13405; GFX90A-NEXT: ; def s[4:5]13406; GFX90A-NEXT: ;;#ASMEND13407; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613408; GFX90A-NEXT: ;;#ASMSTART13409; GFX90A-NEXT: ; def s[6:7]13410; GFX90A-NEXT: ;;#ASMEND13411; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s713412; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713413; GFX90A-NEXT: ;;#ASMSTART13414; GFX90A-NEXT: ; use s[8:9]13415; GFX90A-NEXT: ;;#ASMEND13416; GFX90A-NEXT: s_setpc_b64 s[30:31]13417;13418; GFX942-LABEL: s_shuffle_v4f16_v3f16__1_5_5_5:13419; GFX942: ; %bb.0:13420; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13421; GFX942-NEXT: ;;#ASMSTART13422; GFX942-NEXT: ; def s[0:1]13423; GFX942-NEXT: ;;#ASMEND13424; GFX942-NEXT: s_lshr_b32 s0, s0, 1613425; GFX942-NEXT: ;;#ASMSTART13426; GFX942-NEXT: ; def s[2:3]13427; GFX942-NEXT: ;;#ASMEND13428; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s313429; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313430; GFX942-NEXT: ;;#ASMSTART13431; GFX942-NEXT: ; use s[8:9]13432; GFX942-NEXT: ;;#ASMEND13433; GFX942-NEXT: s_setpc_b64 s[30:31]13434 %vec0 = call <4 x half> asm "; def $0", "=s"()13435 %vec1 = call <4 x half> asm "; def $0", "=s"()13436 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13437 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13438 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 1, i32 5, i32 5, i32 5>13439 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13440 ret void13441}13442 13443define void @s_shuffle_v4f16_v3f16__2_5_5_5() {13444; GFX900-LABEL: s_shuffle_v4f16_v3f16__2_5_5_5:13445; GFX900: ; %bb.0:13446; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13447; GFX900-NEXT: ;;#ASMSTART13448; GFX900-NEXT: ; def s[4:5]13449; GFX900-NEXT: ;;#ASMEND13450; GFX900-NEXT: ;;#ASMSTART13451; GFX900-NEXT: ; def s[6:7]13452; GFX900-NEXT: ;;#ASMEND13453; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s713454; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713455; GFX900-NEXT: ;;#ASMSTART13456; GFX900-NEXT: ; use s[8:9]13457; GFX900-NEXT: ;;#ASMEND13458; GFX900-NEXT: s_setpc_b64 s[30:31]13459;13460; GFX90A-LABEL: s_shuffle_v4f16_v3f16__2_5_5_5:13461; GFX90A: ; %bb.0:13462; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13463; GFX90A-NEXT: ;;#ASMSTART13464; GFX90A-NEXT: ; def s[4:5]13465; GFX90A-NEXT: ;;#ASMEND13466; GFX90A-NEXT: ;;#ASMSTART13467; GFX90A-NEXT: ; def s[6:7]13468; GFX90A-NEXT: ;;#ASMEND13469; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s713470; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713471; GFX90A-NEXT: ;;#ASMSTART13472; GFX90A-NEXT: ; use s[8:9]13473; GFX90A-NEXT: ;;#ASMEND13474; GFX90A-NEXT: s_setpc_b64 s[30:31]13475;13476; GFX942-LABEL: s_shuffle_v4f16_v3f16__2_5_5_5:13477; GFX942: ; %bb.0:13478; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13479; GFX942-NEXT: ;;#ASMSTART13480; GFX942-NEXT: ; def s[0:1]13481; GFX942-NEXT: ;;#ASMEND13482; GFX942-NEXT: ;;#ASMSTART13483; GFX942-NEXT: ; def s[2:3]13484; GFX942-NEXT: ;;#ASMEND13485; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s313486; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313487; GFX942-NEXT: ;;#ASMSTART13488; GFX942-NEXT: ; use s[8:9]13489; GFX942-NEXT: ;;#ASMEND13490; GFX942-NEXT: s_setpc_b64 s[30:31]13491 %vec0 = call <4 x half> asm "; def $0", "=s"()13492 %vec1 = call <4 x half> asm "; def $0", "=s"()13493 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13494 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13495 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 2, i32 5, i32 5, i32 5>13496 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13497 ret void13498}13499 13500define void @s_shuffle_v4f16_v3f16__3_5_5_5() {13501; GFX900-LABEL: s_shuffle_v4f16_v3f16__3_5_5_5:13502; GFX900: ; %bb.0:13503; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13504; GFX900-NEXT: ;;#ASMSTART13505; GFX900-NEXT: ; def s[4:5]13506; GFX900-NEXT: ;;#ASMEND13507; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s513508; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513509; 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_v4f16_v3f16__3_5_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: s_pack_ll_b32_b16 s8, s4, s513521; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513522; GFX90A-NEXT: ;;#ASMSTART13523; GFX90A-NEXT: ; use s[8:9]13524; GFX90A-NEXT: ;;#ASMEND13525; GFX90A-NEXT: s_setpc_b64 s[30:31]13526;13527; GFX942-LABEL: s_shuffle_v4f16_v3f16__3_5_5_5:13528; GFX942: ; %bb.0:13529; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13530; GFX942-NEXT: ;;#ASMSTART13531; GFX942-NEXT: ; def s[0:1]13532; GFX942-NEXT: ;;#ASMEND13533; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s113534; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113535; GFX942-NEXT: ;;#ASMSTART13536; GFX942-NEXT: ; use s[8:9]13537; GFX942-NEXT: ;;#ASMEND13538; GFX942-NEXT: s_setpc_b64 s[30:31]13539 %vec0 = call <4 x half> asm "; def $0", "=s"()13540 %vec1 = call <4 x half> asm "; def $0", "=s"()13541 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13542 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13543 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 3, i32 5, i32 5, i32 5>13544 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13545 ret void13546}13547 13548define void @s_shuffle_v4f16_v3f16__4_5_5_5() {13549; GFX900-LABEL: s_shuffle_v4f16_v3f16__4_5_5_5:13550; GFX900: ; %bb.0:13551; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13552; GFX900-NEXT: ;;#ASMSTART13553; GFX900-NEXT: ; def s[4:5]13554; GFX900-NEXT: ;;#ASMEND13555; GFX900-NEXT: s_lshr_b32 s4, s4, 1613556; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s513557; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513558; GFX900-NEXT: ;;#ASMSTART13559; GFX900-NEXT: ; use s[8:9]13560; GFX900-NEXT: ;;#ASMEND13561; GFX900-NEXT: s_setpc_b64 s[30:31]13562;13563; GFX90A-LABEL: s_shuffle_v4f16_v3f16__4_5_5_5:13564; GFX90A: ; %bb.0:13565; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13566; GFX90A-NEXT: ;;#ASMSTART13567; GFX90A-NEXT: ; def s[4:5]13568; GFX90A-NEXT: ;;#ASMEND13569; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613570; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s513571; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513572; GFX90A-NEXT: ;;#ASMSTART13573; GFX90A-NEXT: ; use s[8:9]13574; GFX90A-NEXT: ;;#ASMEND13575; GFX90A-NEXT: s_setpc_b64 s[30:31]13576;13577; GFX942-LABEL: s_shuffle_v4f16_v3f16__4_5_5_5:13578; GFX942: ; %bb.0:13579; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13580; GFX942-NEXT: ;;#ASMSTART13581; GFX942-NEXT: ; def s[0:1]13582; GFX942-NEXT: ;;#ASMEND13583; GFX942-NEXT: s_lshr_b32 s0, s0, 1613584; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s113585; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113586; GFX942-NEXT: ;;#ASMSTART13587; GFX942-NEXT: ; use s[8:9]13588; GFX942-NEXT: ;;#ASMEND13589; GFX942-NEXT: s_setpc_b64 s[30:31]13590 %vec0 = call <4 x half> asm "; def $0", "=s"()13591 %vec1 = call <4 x half> asm "; def $0", "=s"()13592 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13593 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13594 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 4, i32 5, i32 5, i32 5>13595 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13596 ret void13597}13598 13599define void @s_shuffle_v4f16_v3f16__5_u_5_5() {13600; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_u_5_5:13601; GFX900: ; %bb.0:13602; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13603; GFX900-NEXT: ;;#ASMSTART13604; GFX900-NEXT: ; def s[4:5]13605; GFX900-NEXT: ;;#ASMEND13606; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513607; GFX900-NEXT: s_mov_b32 s8, s513608; GFX900-NEXT: ;;#ASMSTART13609; GFX900-NEXT: ; use s[8:9]13610; GFX900-NEXT: ;;#ASMEND13611; GFX900-NEXT: s_setpc_b64 s[30:31]13612;13613; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_u_5_5:13614; GFX90A: ; %bb.0:13615; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13616; GFX90A-NEXT: ;;#ASMSTART13617; GFX90A-NEXT: ; def s[4:5]13618; GFX90A-NEXT: ;;#ASMEND13619; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513620; GFX90A-NEXT: s_mov_b32 s8, s513621; GFX90A-NEXT: ;;#ASMSTART13622; GFX90A-NEXT: ; use s[8:9]13623; GFX90A-NEXT: ;;#ASMEND13624; GFX90A-NEXT: s_setpc_b64 s[30:31]13625;13626; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_u_5_5:13627; GFX942: ; %bb.0:13628; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13629; GFX942-NEXT: ;;#ASMSTART13630; GFX942-NEXT: ; def s[0:1]13631; GFX942-NEXT: ;;#ASMEND13632; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113633; GFX942-NEXT: s_mov_b32 s8, s113634; GFX942-NEXT: ;;#ASMSTART13635; GFX942-NEXT: ; use s[8:9]13636; GFX942-NEXT: ;;#ASMEND13637; GFX942-NEXT: s_setpc_b64 s[30:31]13638 %vec0 = call <4 x half> asm "; def $0", "=s"()13639 %vec1 = call <4 x half> asm "; def $0", "=s"()13640 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13641 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13642 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 poison, i32 5, i32 5>13643 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13644 ret void13645}13646 13647define void @s_shuffle_v4f16_v3f16__5_0_5_5() {13648; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_0_5_5:13649; GFX900: ; %bb.0:13650; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13651; GFX900-NEXT: ;;#ASMSTART13652; GFX900-NEXT: ; def s[4:5]13653; GFX900-NEXT: ;;#ASMEND13654; GFX900-NEXT: ;;#ASMSTART13655; GFX900-NEXT: ; def s[6:7]13656; GFX900-NEXT: ;;#ASMEND13657; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s413658; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713659; 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_v4f16_v3f16__5_0_5_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: ;;#ASMSTART13671; GFX90A-NEXT: ; def s[6:7]13672; GFX90A-NEXT: ;;#ASMEND13673; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s413674; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713675; GFX90A-NEXT: ;;#ASMSTART13676; GFX90A-NEXT: ; use s[8:9]13677; GFX90A-NEXT: ;;#ASMEND13678; GFX90A-NEXT: s_setpc_b64 s[30:31]13679;13680; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_0_5_5:13681; GFX942: ; %bb.0:13682; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13683; GFX942-NEXT: ;;#ASMSTART13684; GFX942-NEXT: ; def s[0:1]13685; GFX942-NEXT: ;;#ASMEND13686; GFX942-NEXT: ;;#ASMSTART13687; GFX942-NEXT: ; def s[2:3]13688; GFX942-NEXT: ;;#ASMEND13689; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s013690; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313691; GFX942-NEXT: ;;#ASMSTART13692; GFX942-NEXT: ; use s[8:9]13693; GFX942-NEXT: ;;#ASMEND13694; GFX942-NEXT: s_setpc_b64 s[30:31]13695 %vec0 = call <4 x half> asm "; def $0", "=s"()13696 %vec1 = call <4 x half> asm "; def $0", "=s"()13697 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13698 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13699 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 0, i32 5, i32 5>13700 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13701 ret void13702}13703 13704define void @s_shuffle_v4f16_v3f16__5_1_5_5() {13705; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_1_5_5:13706; GFX900: ; %bb.0:13707; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13708; GFX900-NEXT: ;;#ASMSTART13709; GFX900-NEXT: ; def s[4:5]13710; GFX900-NEXT: ;;#ASMEND13711; GFX900-NEXT: s_lshr_b32 s4, s4, 1613712; GFX900-NEXT: ;;#ASMSTART13713; GFX900-NEXT: ; def s[6:7]13714; GFX900-NEXT: ;;#ASMEND13715; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s413716; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713717; GFX900-NEXT: ;;#ASMSTART13718; GFX900-NEXT: ; use s[8:9]13719; GFX900-NEXT: ;;#ASMEND13720; GFX900-NEXT: s_setpc_b64 s[30:31]13721;13722; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_1_5_5:13723; GFX90A: ; %bb.0:13724; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13725; GFX90A-NEXT: ;;#ASMSTART13726; GFX90A-NEXT: ; def s[4:5]13727; GFX90A-NEXT: ;;#ASMEND13728; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613729; GFX90A-NEXT: ;;#ASMSTART13730; GFX90A-NEXT: ; def s[6:7]13731; GFX90A-NEXT: ;;#ASMEND13732; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s413733; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713734; GFX90A-NEXT: ;;#ASMSTART13735; GFX90A-NEXT: ; use s[8:9]13736; GFX90A-NEXT: ;;#ASMEND13737; GFX90A-NEXT: s_setpc_b64 s[30:31]13738;13739; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_1_5_5:13740; GFX942: ; %bb.0:13741; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13742; GFX942-NEXT: ;;#ASMSTART13743; GFX942-NEXT: ; def s[0:1]13744; GFX942-NEXT: ;;#ASMEND13745; GFX942-NEXT: s_lshr_b32 s0, s0, 1613746; GFX942-NEXT: ;;#ASMSTART13747; GFX942-NEXT: ; def s[2:3]13748; GFX942-NEXT: ;;#ASMEND13749; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s013750; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313751; GFX942-NEXT: ;;#ASMSTART13752; GFX942-NEXT: ; use s[8:9]13753; GFX942-NEXT: ;;#ASMEND13754; GFX942-NEXT: s_setpc_b64 s[30:31]13755 %vec0 = call <4 x half> asm "; def $0", "=s"()13756 %vec1 = call <4 x half> asm "; def $0", "=s"()13757 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13758 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13759 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 1, i32 5, i32 5>13760 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13761 ret void13762}13763 13764define void @s_shuffle_v4f16_v3f16__5_2_5_5() {13765; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_2_5_5:13766; GFX900: ; %bb.0:13767; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13768; GFX900-NEXT: ;;#ASMSTART13769; GFX900-NEXT: ; def s[4:5]13770; GFX900-NEXT: ;;#ASMEND13771; GFX900-NEXT: ;;#ASMSTART13772; GFX900-NEXT: ; def s[6:7]13773; GFX900-NEXT: ;;#ASMEND13774; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s513775; GFX900-NEXT: s_pack_ll_b32_b16 s9, s7, s713776; GFX900-NEXT: ;;#ASMSTART13777; GFX900-NEXT: ; use s[8:9]13778; GFX900-NEXT: ;;#ASMEND13779; GFX900-NEXT: s_setpc_b64 s[30:31]13780;13781; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_2_5_5:13782; GFX90A: ; %bb.0:13783; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13784; GFX90A-NEXT: ;;#ASMSTART13785; GFX90A-NEXT: ; def s[4:5]13786; GFX90A-NEXT: ;;#ASMEND13787; GFX90A-NEXT: ;;#ASMSTART13788; GFX90A-NEXT: ; def s[6:7]13789; GFX90A-NEXT: ;;#ASMEND13790; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s513791; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s7, s713792; GFX90A-NEXT: ;;#ASMSTART13793; GFX90A-NEXT: ; use s[8:9]13794; GFX90A-NEXT: ;;#ASMEND13795; GFX90A-NEXT: s_setpc_b64 s[30:31]13796;13797; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_2_5_5:13798; GFX942: ; %bb.0:13799; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13800; GFX942-NEXT: ;;#ASMSTART13801; GFX942-NEXT: ; def s[0:1]13802; GFX942-NEXT: ;;#ASMEND13803; GFX942-NEXT: ;;#ASMSTART13804; GFX942-NEXT: ; def s[2:3]13805; GFX942-NEXT: ;;#ASMEND13806; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s113807; GFX942-NEXT: s_pack_ll_b32_b16 s9, s3, s313808; GFX942-NEXT: ;;#ASMSTART13809; GFX942-NEXT: ; use s[8:9]13810; GFX942-NEXT: ;;#ASMEND13811; GFX942-NEXT: s_setpc_b64 s[30:31]13812 %vec0 = call <4 x half> asm "; def $0", "=s"()13813 %vec1 = call <4 x half> asm "; def $0", "=s"()13814 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13815 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13816 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 2, i32 5, i32 5>13817 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13818 ret void13819}13820 13821define void @s_shuffle_v4f16_v3f16__5_3_5_5() {13822; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_3_5_5:13823; GFX900: ; %bb.0:13824; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13825; GFX900-NEXT: ;;#ASMSTART13826; GFX900-NEXT: ; def s[4:5]13827; GFX900-NEXT: ;;#ASMEND13828; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s413829; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513830; GFX900-NEXT: ;;#ASMSTART13831; GFX900-NEXT: ; use s[8:9]13832; GFX900-NEXT: ;;#ASMEND13833; GFX900-NEXT: s_setpc_b64 s[30:31]13834;13835; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_3_5_5:13836; GFX90A: ; %bb.0:13837; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13838; GFX90A-NEXT: ;;#ASMSTART13839; GFX90A-NEXT: ; def s[4:5]13840; GFX90A-NEXT: ;;#ASMEND13841; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s413842; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513843; 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_v4f16_v3f16__5_3_5_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: s_pack_ll_b32_b16 s8, s1, s013855; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s113856; GFX942-NEXT: ;;#ASMSTART13857; GFX942-NEXT: ; use s[8:9]13858; GFX942-NEXT: ;;#ASMEND13859; GFX942-NEXT: s_setpc_b64 s[30:31]13860 %vec0 = call <4 x half> asm "; def $0", "=s"()13861 %vec1 = call <4 x half> asm "; def $0", "=s"()13862 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13863 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13864 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 3, i32 5, i32 5>13865 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13866 ret void13867}13868 13869define void @s_shuffle_v4f16_v3f16__5_4_5_5() {13870; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_4_5_5:13871; GFX900: ; %bb.0:13872; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13873; GFX900-NEXT: ;;#ASMSTART13874; GFX900-NEXT: ; def s[4:5]13875; GFX900-NEXT: ;;#ASMEND13876; GFX900-NEXT: s_lshr_b32 s4, s4, 1613877; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s413878; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s513879; GFX900-NEXT: ;;#ASMSTART13880; GFX900-NEXT: ; use s[8:9]13881; GFX900-NEXT: ;;#ASMEND13882; GFX900-NEXT: s_setpc_b64 s[30:31]13883;13884; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_4_5_5:13885; GFX90A: ; %bb.0:13886; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13887; GFX90A-NEXT: ;;#ASMSTART13888; GFX90A-NEXT: ; def s[4:5]13889; GFX90A-NEXT: ;;#ASMEND13890; GFX90A-NEXT: s_lshr_b32 s4, s4, 1613891; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s413892; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s513893; GFX90A-NEXT: ;;#ASMSTART13894; GFX90A-NEXT: ; use s[8:9]13895; GFX90A-NEXT: ;;#ASMEND13896; GFX90A-NEXT: s_setpc_b64 s[30:31]13897;13898; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_4_5_5:13899; GFX942: ; %bb.0:13900; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13901; GFX942-NEXT: ;;#ASMSTART13902; GFX942-NEXT: ; def s[0:1]13903; GFX942-NEXT: ;;#ASMEND13904; GFX942-NEXT: s_lshr_b32 s0, s0, 1613905; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s013906; GFX942-NEXT: s_pack_ll_b32_b16 s9, 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 half> asm "; def $0", "=s"()13912 %vec1 = call <4 x half> asm "; def $0", "=s"()13913 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13914 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13915 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 4, i32 5, i32 5>13916 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13917 ret void13918}13919 13920define void @s_shuffle_v4f16_v3f16__5_5_u_5() {13921; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_u_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_lshl_b32 s9, s5, 1613928; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s513929; GFX900-NEXT: ;;#ASMSTART13930; GFX900-NEXT: ; use s[8:9]13931; GFX900-NEXT: ;;#ASMEND13932; GFX900-NEXT: s_setpc_b64 s[30:31]13933;13934; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_u_5:13935; GFX90A: ; %bb.0:13936; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13937; GFX90A-NEXT: ;;#ASMSTART13938; GFX90A-NEXT: ; def s[4:5]13939; GFX90A-NEXT: ;;#ASMEND13940; GFX90A-NEXT: s_lshl_b32 s9, s5, 1613941; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s513942; GFX90A-NEXT: ;;#ASMSTART13943; GFX90A-NEXT: ; use s[8:9]13944; GFX90A-NEXT: ;;#ASMEND13945; GFX90A-NEXT: s_setpc_b64 s[30:31]13946;13947; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_u_5:13948; GFX942: ; %bb.0:13949; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13950; GFX942-NEXT: ;;#ASMSTART13951; GFX942-NEXT: ; def s[0:1]13952; GFX942-NEXT: ;;#ASMEND13953; GFX942-NEXT: s_lshl_b32 s9, s1, 1613954; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s113955; GFX942-NEXT: ;;#ASMSTART13956; GFX942-NEXT: ; use s[8:9]13957; GFX942-NEXT: ;;#ASMEND13958; GFX942-NEXT: s_setpc_b64 s[30:31]13959 %vec0 = call <4 x half> asm "; def $0", "=s"()13960 %vec1 = call <4 x half> asm "; def $0", "=s"()13961 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13962 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>13963 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 poison, i32 5>13964 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)13965 ret void13966}13967 13968define void @s_shuffle_v4f16_v3f16__5_5_0_5() {13969; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_0_5:13970; GFX900: ; %bb.0:13971; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13972; GFX900-NEXT: ;;#ASMSTART13973; GFX900-NEXT: ; def s[4:5]13974; GFX900-NEXT: ;;#ASMEND13975; GFX900-NEXT: ;;#ASMSTART13976; GFX900-NEXT: ; def s[6:7]13977; GFX900-NEXT: ;;#ASMEND13978; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s713979; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s713980; GFX900-NEXT: ;;#ASMSTART13981; GFX900-NEXT: ; use s[8:9]13982; GFX900-NEXT: ;;#ASMEND13983; GFX900-NEXT: s_setpc_b64 s[30:31]13984;13985; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_0_5:13986; GFX90A: ; %bb.0:13987; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)13988; GFX90A-NEXT: ;;#ASMSTART13989; GFX90A-NEXT: ; def s[4:5]13990; GFX90A-NEXT: ;;#ASMEND13991; GFX90A-NEXT: ;;#ASMSTART13992; GFX90A-NEXT: ; def s[6:7]13993; GFX90A-NEXT: ;;#ASMEND13994; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s713995; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s713996; GFX90A-NEXT: ;;#ASMSTART13997; GFX90A-NEXT: ; use s[8:9]13998; GFX90A-NEXT: ;;#ASMEND13999; GFX90A-NEXT: s_setpc_b64 s[30:31]14000;14001; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_0_5:14002; GFX942: ; %bb.0:14003; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14004; GFX942-NEXT: ;;#ASMSTART14005; GFX942-NEXT: ; def s[0:1]14006; GFX942-NEXT: ;;#ASMEND14007; GFX942-NEXT: ;;#ASMSTART14008; GFX942-NEXT: ; def s[2:3]14009; GFX942-NEXT: ;;#ASMEND14010; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s314011; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s314012; GFX942-NEXT: ;;#ASMSTART14013; GFX942-NEXT: ; use s[8:9]14014; GFX942-NEXT: ;;#ASMEND14015; GFX942-NEXT: s_setpc_b64 s[30:31]14016 %vec0 = call <4 x half> asm "; def $0", "=s"()14017 %vec1 = call <4 x half> asm "; def $0", "=s"()14018 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14019 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14020 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 0, i32 5>14021 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)14022 ret void14023}14024 14025define void @s_shuffle_v4f16_v3f16__5_5_1_5() {14026; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_1_5:14027; GFX900: ; %bb.0:14028; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14029; GFX900-NEXT: ;;#ASMSTART14030; GFX900-NEXT: ; def s[4:5]14031; GFX900-NEXT: ;;#ASMEND14032; GFX900-NEXT: s_lshr_b32 s4, s4, 1614033; GFX900-NEXT: ;;#ASMSTART14034; GFX900-NEXT: ; def s[6:7]14035; GFX900-NEXT: ;;#ASMEND14036; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s714037; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s714038; GFX900-NEXT: ;;#ASMSTART14039; GFX900-NEXT: ; use s[8:9]14040; GFX900-NEXT: ;;#ASMEND14041; GFX900-NEXT: s_setpc_b64 s[30:31]14042;14043; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_1_5:14044; GFX90A: ; %bb.0:14045; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14046; GFX90A-NEXT: ;;#ASMSTART14047; GFX90A-NEXT: ; def s[4:5]14048; GFX90A-NEXT: ;;#ASMEND14049; GFX90A-NEXT: s_lshr_b32 s4, s4, 1614050; GFX90A-NEXT: ;;#ASMSTART14051; GFX90A-NEXT: ; def s[6:7]14052; GFX90A-NEXT: ;;#ASMEND14053; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s714054; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s714055; GFX90A-NEXT: ;;#ASMSTART14056; GFX90A-NEXT: ; use s[8:9]14057; GFX90A-NEXT: ;;#ASMEND14058; GFX90A-NEXT: s_setpc_b64 s[30:31]14059;14060; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_1_5:14061; GFX942: ; %bb.0:14062; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14063; GFX942-NEXT: ;;#ASMSTART14064; GFX942-NEXT: ; def s[0:1]14065; GFX942-NEXT: ;;#ASMEND14066; GFX942-NEXT: s_lshr_b32 s0, s0, 1614067; GFX942-NEXT: ;;#ASMSTART14068; GFX942-NEXT: ; def s[2:3]14069; GFX942-NEXT: ;;#ASMEND14070; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s314071; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s314072; GFX942-NEXT: ;;#ASMSTART14073; GFX942-NEXT: ; use s[8:9]14074; GFX942-NEXT: ;;#ASMEND14075; GFX942-NEXT: s_setpc_b64 s[30:31]14076 %vec0 = call <4 x half> asm "; def $0", "=s"()14077 %vec1 = call <4 x half> asm "; def $0", "=s"()14078 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14079 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14080 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 1, i32 5>14081 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)14082 ret void14083}14084 14085define void @s_shuffle_v4f16_v3f16__5_5_2_5() {14086; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_2_5:14087; GFX900: ; %bb.0:14088; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14089; GFX900-NEXT: ;;#ASMSTART14090; GFX900-NEXT: ; def s[4:5]14091; GFX900-NEXT: ;;#ASMEND14092; GFX900-NEXT: ;;#ASMSTART14093; GFX900-NEXT: ; def s[6:7]14094; GFX900-NEXT: ;;#ASMEND14095; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s714096; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s714097; GFX900-NEXT: ;;#ASMSTART14098; GFX900-NEXT: ; use s[8:9]14099; GFX900-NEXT: ;;#ASMEND14100; GFX900-NEXT: s_setpc_b64 s[30:31]14101;14102; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_2_5:14103; GFX90A: ; %bb.0:14104; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14105; GFX90A-NEXT: ;;#ASMSTART14106; GFX90A-NEXT: ; def s[4:5]14107; GFX90A-NEXT: ;;#ASMEND14108; GFX90A-NEXT: ;;#ASMSTART14109; GFX90A-NEXT: ; def s[6:7]14110; GFX90A-NEXT: ;;#ASMEND14111; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s714112; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s714113; GFX90A-NEXT: ;;#ASMSTART14114; GFX90A-NEXT: ; use s[8:9]14115; GFX90A-NEXT: ;;#ASMEND14116; GFX90A-NEXT: s_setpc_b64 s[30:31]14117;14118; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_2_5:14119; GFX942: ; %bb.0:14120; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14121; GFX942-NEXT: ;;#ASMSTART14122; GFX942-NEXT: ; def s[0:1]14123; GFX942-NEXT: ;;#ASMEND14124; GFX942-NEXT: ;;#ASMSTART14125; GFX942-NEXT: ; def s[2:3]14126; GFX942-NEXT: ;;#ASMEND14127; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s314128; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s314129; GFX942-NEXT: ;;#ASMSTART14130; GFX942-NEXT: ; use s[8:9]14131; GFX942-NEXT: ;;#ASMEND14132; GFX942-NEXT: s_setpc_b64 s[30:31]14133 %vec0 = call <4 x half> asm "; def $0", "=s"()14134 %vec1 = call <4 x half> asm "; def $0", "=s"()14135 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14136 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14137 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 2, i32 5>14138 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)14139 ret void14140}14141 14142define void @s_shuffle_v4f16_v3f16__5_5_3_5() {14143; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_3_5:14144; GFX900: ; %bb.0:14145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14146; GFX900-NEXT: ;;#ASMSTART14147; GFX900-NEXT: ; def s[4:5]14148; GFX900-NEXT: ;;#ASMEND14149; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s514150; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s514151; GFX900-NEXT: ;;#ASMSTART14152; GFX900-NEXT: ; use s[8:9]14153; GFX900-NEXT: ;;#ASMEND14154; GFX900-NEXT: s_setpc_b64 s[30:31]14155;14156; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_3_5:14157; GFX90A: ; %bb.0:14158; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14159; GFX90A-NEXT: ;;#ASMSTART14160; GFX90A-NEXT: ; def s[4:5]14161; GFX90A-NEXT: ;;#ASMEND14162; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s514163; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s514164; GFX90A-NEXT: ;;#ASMSTART14165; GFX90A-NEXT: ; use s[8:9]14166; GFX90A-NEXT: ;;#ASMEND14167; GFX90A-NEXT: s_setpc_b64 s[30:31]14168;14169; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_3_5:14170; GFX942: ; %bb.0:14171; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14172; GFX942-NEXT: ;;#ASMSTART14173; GFX942-NEXT: ; def s[0:1]14174; GFX942-NEXT: ;;#ASMEND14175; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s114176; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s114177; GFX942-NEXT: ;;#ASMSTART14178; GFX942-NEXT: ; use s[8:9]14179; GFX942-NEXT: ;;#ASMEND14180; GFX942-NEXT: s_setpc_b64 s[30:31]14181 %vec0 = call <4 x half> asm "; def $0", "=s"()14182 %vec1 = call <4 x half> asm "; def $0", "=s"()14183 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14184 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14185 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 3, i32 5>14186 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)14187 ret void14188}14189 14190define void @s_shuffle_v4f16_v3f16__5_5_4_5() {14191; GFX900-LABEL: s_shuffle_v4f16_v3f16__5_5_4_5:14192; GFX900: ; %bb.0:14193; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14194; GFX900-NEXT: ;;#ASMSTART14195; GFX900-NEXT: ; def s[4:5]14196; GFX900-NEXT: ;;#ASMEND14197; GFX900-NEXT: s_lshr_b32 s4, s4, 1614198; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s514199; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s514200; GFX900-NEXT: ;;#ASMSTART14201; GFX900-NEXT: ; use s[8:9]14202; GFX900-NEXT: ;;#ASMEND14203; GFX900-NEXT: s_setpc_b64 s[30:31]14204;14205; GFX90A-LABEL: s_shuffle_v4f16_v3f16__5_5_4_5:14206; GFX90A: ; %bb.0:14207; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14208; GFX90A-NEXT: ;;#ASMSTART14209; GFX90A-NEXT: ; def s[4:5]14210; GFX90A-NEXT: ;;#ASMEND14211; GFX90A-NEXT: s_lshr_b32 s4, s4, 1614212; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s514213; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s514214; GFX90A-NEXT: ;;#ASMSTART14215; GFX90A-NEXT: ; use s[8:9]14216; GFX90A-NEXT: ;;#ASMEND14217; GFX90A-NEXT: s_setpc_b64 s[30:31]14218;14219; GFX942-LABEL: s_shuffle_v4f16_v3f16__5_5_4_5:14220; GFX942: ; %bb.0:14221; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)14222; GFX942-NEXT: ;;#ASMSTART14223; GFX942-NEXT: ; def s[0:1]14224; GFX942-NEXT: ;;#ASMEND14225; GFX942-NEXT: s_lshr_b32 s0, s0, 1614226; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s114227; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s114228; GFX942-NEXT: ;;#ASMSTART14229; GFX942-NEXT: ; use s[8:9]14230; GFX942-NEXT: ;;#ASMEND14231; GFX942-NEXT: s_setpc_b64 s[30:31]14232 %vec0 = call <4 x half> asm "; def $0", "=s"()14233 %vec1 = call <4 x half> asm "; def $0", "=s"()14234 %extract3 = shufflevector <4 x half> %vec0, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14235 %extract31 = shufflevector <4 x half> %vec1, <4 x half> poison, <3 x i32> <i32 0, i32 1, i32 2>14236 %shuf = shufflevector <3 x half> %extract3, <3 x half> %extract31, <4 x i32> <i32 5, i32 5, i32 4, i32 5>14237 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %shuf)14238 ret void14239}14240;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:14241; GFX90APLUS: {{.*}}14242