7216 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s5 6 7define void @v_shuffle_v2i16_v4i16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2i16_v4i16__u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <4 x i16> asm "; def $0", "=v"()13 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> poison14 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 415 ret void16}17 18define void @v_shuffle_v2i16_v4i16__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v2, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v[0:1]25; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dword v2, v0, s[16:17]27; GFX900-NEXT: s_waitcnt vmcnt(0)28; GFX900-NEXT: s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v2, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v[0:1]36; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]38; GFX90A-NEXT: s_waitcnt vmcnt(0)39; GFX90A-NEXT: s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v2, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v[0:1]47; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dword v2, v0, s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <4 x i16> asm "; def $0", "=v"()52 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 poison>53 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 454 ret void55}56 57define void @v_shuffle_v2i16_v4i16__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: ;;#ASMSTART62; GFX900-NEXT: ; def v[0:1]63; GFX900-NEXT: ;;#ASMEND64; GFX900-NEXT: v_mov_b32_e32 v2, 065; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 1666; GFX900-NEXT: global_store_dword v2, v0, s[16:17]67; GFX900-NEXT: s_waitcnt vmcnt(0)68; GFX900-NEXT: s_setpc_b64 s[30:31]69;70; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_u:71; GFX90A: ; %bb.0:72; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; GFX90A-NEXT: ;;#ASMSTART74; GFX90A-NEXT: ; def v[0:1]75; GFX90A-NEXT: ;;#ASMEND76; GFX90A-NEXT: v_mov_b32_e32 v2, 077; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 1678; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]79; GFX90A-NEXT: s_waitcnt vmcnt(0)80; GFX90A-NEXT: s_setpc_b64 s[30:31]81;82; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_u:83; GFX942: ; %bb.0:84; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX942-NEXT: ;;#ASMSTART86; GFX942-NEXT: ; def v[0:1]87; GFX942-NEXT: ;;#ASMEND88; GFX942-NEXT: v_mov_b32_e32 v2, 089; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 1690; GFX942-NEXT: global_store_dword v2, v0, s[0:1]91; GFX942-NEXT: s_waitcnt vmcnt(0)92; GFX942-NEXT: s_setpc_b64 s[30:31]93 %vec0 = call <4 x i16> asm "; def $0", "=v"()94 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 poison>95 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 496 ret void97}98 99define void @v_shuffle_v2i16_v4i16__2_u(ptr addrspace(1) inreg %ptr) {100; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_u:101; GFX900: ; %bb.0:102; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX900-NEXT: v_mov_b32_e32 v2, 0104; GFX900-NEXT: ;;#ASMSTART105; GFX900-NEXT: ; def v[0:1]106; GFX900-NEXT: ;;#ASMEND107; GFX900-NEXT: global_store_dword v2, v1, s[16:17]108; GFX900-NEXT: s_waitcnt vmcnt(0)109; GFX900-NEXT: s_setpc_b64 s[30:31]110;111; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_u:112; GFX90A: ; %bb.0:113; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX90A-NEXT: v_mov_b32_e32 v2, 0115; GFX90A-NEXT: ;;#ASMSTART116; GFX90A-NEXT: ; def v[0:1]117; GFX90A-NEXT: ;;#ASMEND118; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]119; GFX90A-NEXT: s_waitcnt vmcnt(0)120; GFX90A-NEXT: s_setpc_b64 s[30:31]121;122; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_u:123; GFX942: ; %bb.0:124; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)125; GFX942-NEXT: v_mov_b32_e32 v2, 0126; GFX942-NEXT: ;;#ASMSTART127; GFX942-NEXT: ; def v[0:1]128; GFX942-NEXT: ;;#ASMEND129; GFX942-NEXT: global_store_dword v2, v1, s[0:1]130; GFX942-NEXT: s_waitcnt vmcnt(0)131; GFX942-NEXT: s_setpc_b64 s[30:31]132 %vec0 = call <4 x i16> asm "; def $0", "=v"()133 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 poison>134 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4135 ret void136}137 138define void @v_shuffle_v2i16_v4i16__3_u(ptr addrspace(1) inreg %ptr) {139; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_u:140; GFX900: ; %bb.0:141; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)142; GFX900-NEXT: ;;#ASMSTART143; GFX900-NEXT: ; def v[0:1]144; GFX900-NEXT: ;;#ASMEND145; GFX900-NEXT: v_mov_b32_e32 v2, 0146; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 16147; GFX900-NEXT: global_store_dword v2, v0, s[16:17]148; GFX900-NEXT: s_waitcnt vmcnt(0)149; GFX900-NEXT: s_setpc_b64 s[30:31]150;151; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_u:152; GFX90A: ; %bb.0:153; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX90A-NEXT: ;;#ASMSTART155; GFX90A-NEXT: ; def v[0:1]156; GFX90A-NEXT: ;;#ASMEND157; GFX90A-NEXT: v_mov_b32_e32 v2, 0158; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 16159; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]160; GFX90A-NEXT: s_waitcnt vmcnt(0)161; GFX90A-NEXT: s_setpc_b64 s[30:31]162;163; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_u:164; GFX942: ; %bb.0:165; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX942-NEXT: ;;#ASMSTART167; GFX942-NEXT: ; def v[0:1]168; GFX942-NEXT: ;;#ASMEND169; GFX942-NEXT: v_mov_b32_e32 v2, 0170; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 16171; GFX942-NEXT: global_store_dword v2, v0, s[0:1]172; GFX942-NEXT: s_waitcnt vmcnt(0)173; GFX942-NEXT: s_setpc_b64 s[30:31]174 %vec0 = call <4 x i16> asm "; def $0", "=v"()175 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 poison>176 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4177 ret void178}179 180define void @v_shuffle_v2i16_v4i16__4_u(ptr addrspace(1) inreg %ptr) {181; GFX9-LABEL: v_shuffle_v2i16_v4i16__4_u:182; GFX9: ; %bb.0:183; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX9-NEXT: s_setpc_b64 s[30:31]185 %vec0 = call <4 x i16> asm "; def $0", "=v"()186 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 poison>187 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4188 ret void189}190 191define void @v_shuffle_v2i16_v4i16__5_u(ptr addrspace(1) inreg %ptr) {192; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_u:193; GFX900: ; %bb.0:194; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)195; GFX900-NEXT: ;;#ASMSTART196; GFX900-NEXT: ; def v[0:1]197; GFX900-NEXT: ;;#ASMEND198; GFX900-NEXT: v_mov_b32_e32 v2, 0199; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 16200; GFX900-NEXT: global_store_dword v2, v0, s[16:17]201; GFX900-NEXT: s_waitcnt vmcnt(0)202; GFX900-NEXT: s_setpc_b64 s[30:31]203;204; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_u:205; GFX90A: ; %bb.0:206; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX90A-NEXT: ;;#ASMSTART208; GFX90A-NEXT: ; def v[0:1]209; GFX90A-NEXT: ;;#ASMEND210; GFX90A-NEXT: v_mov_b32_e32 v2, 0211; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 16212; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]213; GFX90A-NEXT: s_waitcnt vmcnt(0)214; GFX90A-NEXT: s_setpc_b64 s[30:31]215;216; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_u:217; GFX942: ; %bb.0:218; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX942-NEXT: ;;#ASMSTART220; GFX942-NEXT: ; def v[0:1]221; GFX942-NEXT: ;;#ASMEND222; GFX942-NEXT: v_mov_b32_e32 v2, 0223; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 16224; GFX942-NEXT: global_store_dword v2, v0, s[0:1]225; GFX942-NEXT: s_waitcnt vmcnt(0)226; GFX942-NEXT: s_setpc_b64 s[30:31]227 %vec0 = call <4 x i16> asm "; def $0", "=v"()228 %vec1 = call <4 x i16> asm "; def $0", "=v"()229 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 poison>230 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4231 ret void232}233 234define void @v_shuffle_v2i16_v4i16__6_u(ptr addrspace(1) inreg %ptr) {235; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_u:236; GFX900: ; %bb.0:237; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GFX900-NEXT: v_mov_b32_e32 v2, 0239; GFX900-NEXT: ;;#ASMSTART240; GFX900-NEXT: ; def v[0:1]241; GFX900-NEXT: ;;#ASMEND242; GFX900-NEXT: global_store_dword v2, v1, s[16:17]243; GFX900-NEXT: s_waitcnt vmcnt(0)244; GFX900-NEXT: s_setpc_b64 s[30:31]245;246; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_u:247; GFX90A: ; %bb.0:248; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX90A-NEXT: v_mov_b32_e32 v2, 0250; GFX90A-NEXT: ;;#ASMSTART251; GFX90A-NEXT: ; def v[0:1]252; GFX90A-NEXT: ;;#ASMEND253; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]254; GFX90A-NEXT: s_waitcnt vmcnt(0)255; GFX90A-NEXT: s_setpc_b64 s[30:31]256;257; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_u:258; GFX942: ; %bb.0:259; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX942-NEXT: v_mov_b32_e32 v2, 0261; GFX942-NEXT: ;;#ASMSTART262; GFX942-NEXT: ; def v[0:1]263; GFX942-NEXT: ;;#ASMEND264; GFX942-NEXT: global_store_dword v2, v1, s[0:1]265; GFX942-NEXT: s_waitcnt vmcnt(0)266; GFX942-NEXT: s_setpc_b64 s[30:31]267 %vec0 = call <4 x i16> asm "; def $0", "=v"()268 %vec1 = call <4 x i16> asm "; def $0", "=v"()269 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 poison>270 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4271 ret void272}273 274define void @v_shuffle_v2i16_v4i16__7_u(ptr addrspace(1) inreg %ptr) {275; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_u:276; GFX900: ; %bb.0:277; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX900-NEXT: ;;#ASMSTART279; GFX900-NEXT: ; def v[0:1]280; GFX900-NEXT: ;;#ASMEND281; GFX900-NEXT: v_mov_b32_e32 v2, 0282; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 16283; GFX900-NEXT: global_store_dword v2, v0, s[16:17]284; GFX900-NEXT: s_waitcnt vmcnt(0)285; GFX900-NEXT: s_setpc_b64 s[30:31]286;287; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_u:288; GFX90A: ; %bb.0:289; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX90A-NEXT: ;;#ASMSTART291; GFX90A-NEXT: ; def v[0:1]292; GFX90A-NEXT: ;;#ASMEND293; GFX90A-NEXT: v_mov_b32_e32 v2, 0294; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 16295; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]296; GFX90A-NEXT: s_waitcnt vmcnt(0)297; GFX90A-NEXT: s_setpc_b64 s[30:31]298;299; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_u:300; GFX942: ; %bb.0:301; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)302; GFX942-NEXT: ;;#ASMSTART303; GFX942-NEXT: ; def v[0:1]304; GFX942-NEXT: ;;#ASMEND305; GFX942-NEXT: v_mov_b32_e32 v2, 0306; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 16307; GFX942-NEXT: global_store_dword v2, v0, s[0:1]308; GFX942-NEXT: s_waitcnt vmcnt(0)309; GFX942-NEXT: s_setpc_b64 s[30:31]310 %vec0 = call <4 x i16> asm "; def $0", "=v"()311 %vec1 = call <4 x i16> asm "; def $0", "=v"()312 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 poison>313 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4314 ret void315}316 317define void @v_shuffle_v2i16_v4i16__7_0(ptr addrspace(1) inreg %ptr) {318; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_0:319; GFX900: ; %bb.0:320; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)321; GFX900-NEXT: ;;#ASMSTART322; GFX900-NEXT: ; def v[0:1]323; GFX900-NEXT: ;;#ASMEND324; GFX900-NEXT: v_mov_b32_e32 v3, 0325; GFX900-NEXT: ;;#ASMSTART326; GFX900-NEXT: ; def v[1:2]327; GFX900-NEXT: ;;#ASMEND328; GFX900-NEXT: v_alignbit_b32 v0, v0, v2, 16329; GFX900-NEXT: global_store_dword v3, v0, s[16:17]330; GFX900-NEXT: s_waitcnt vmcnt(0)331; GFX900-NEXT: s_setpc_b64 s[30:31]332;333; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_0:334; GFX90A: ; %bb.0:335; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)336; GFX90A-NEXT: ;;#ASMSTART337; GFX90A-NEXT: ; def v[0:1]338; GFX90A-NEXT: ;;#ASMEND339; GFX90A-NEXT: v_mov_b32_e32 v4, 0340; GFX90A-NEXT: ;;#ASMSTART341; GFX90A-NEXT: ; def v[2:3]342; GFX90A-NEXT: ;;#ASMEND343; GFX90A-NEXT: v_alignbit_b32 v0, v0, v3, 16344; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]345; GFX90A-NEXT: s_waitcnt vmcnt(0)346; GFX90A-NEXT: s_setpc_b64 s[30:31]347;348; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_0:349; GFX942: ; %bb.0:350; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)351; GFX942-NEXT: ;;#ASMSTART352; GFX942-NEXT: ; def v[0:1]353; GFX942-NEXT: ;;#ASMEND354; GFX942-NEXT: v_mov_b32_e32 v4, 0355; GFX942-NEXT: ;;#ASMSTART356; GFX942-NEXT: ; def v[2:3]357; GFX942-NEXT: ;;#ASMEND358; GFX942-NEXT: s_nop 0359; GFX942-NEXT: v_alignbit_b32 v0, v0, v3, 16360; GFX942-NEXT: global_store_dword v4, v0, s[0:1]361; GFX942-NEXT: s_waitcnt vmcnt(0)362; GFX942-NEXT: s_setpc_b64 s[30:31]363 %vec0 = call <4 x i16> asm "; def $0", "=v"()364 %vec1 = call <4 x i16> asm "; def $0", "=v"()365 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 0>366 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4367 ret void368}369 370define void @v_shuffle_v2i16_v4i16__7_1(ptr addrspace(1) inreg %ptr) {371; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_1:372; GFX900: ; %bb.0:373; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)374; GFX900-NEXT: ;;#ASMSTART375; GFX900-NEXT: ; def v[0:1]376; GFX900-NEXT: ;;#ASMEND377; GFX900-NEXT: s_mov_b32 s4, 0x7060302378; GFX900-NEXT: v_mov_b32_e32 v3, 0379; GFX900-NEXT: ;;#ASMSTART380; GFX900-NEXT: ; def v[1:2]381; GFX900-NEXT: ;;#ASMEND382; GFX900-NEXT: v_perm_b32 v0, v0, v2, s4383; GFX900-NEXT: global_store_dword v3, v0, s[16:17]384; GFX900-NEXT: s_waitcnt vmcnt(0)385; GFX900-NEXT: s_setpc_b64 s[30:31]386;387; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_1:388; GFX90A: ; %bb.0:389; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX90A-NEXT: ;;#ASMSTART391; GFX90A-NEXT: ; def v[0:1]392; GFX90A-NEXT: ;;#ASMEND393; GFX90A-NEXT: s_mov_b32 s4, 0x7060302394; GFX90A-NEXT: v_mov_b32_e32 v4, 0395; GFX90A-NEXT: ;;#ASMSTART396; GFX90A-NEXT: ; def v[2:3]397; GFX90A-NEXT: ;;#ASMEND398; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s4399; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]400; GFX90A-NEXT: s_waitcnt vmcnt(0)401; GFX90A-NEXT: s_setpc_b64 s[30:31]402;403; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_1:404; GFX942: ; %bb.0:405; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)406; GFX942-NEXT: ;;#ASMSTART407; GFX942-NEXT: ; def v[0:1]408; GFX942-NEXT: ;;#ASMEND409; GFX942-NEXT: s_mov_b32 s2, 0x7060302410; GFX942-NEXT: v_mov_b32_e32 v4, 0411; GFX942-NEXT: ;;#ASMSTART412; GFX942-NEXT: ; def v[2:3]413; GFX942-NEXT: ;;#ASMEND414; GFX942-NEXT: s_nop 0415; GFX942-NEXT: v_perm_b32 v0, v0, v3, s2416; GFX942-NEXT: global_store_dword v4, v0, s[0:1]417; GFX942-NEXT: s_waitcnt vmcnt(0)418; GFX942-NEXT: s_setpc_b64 s[30:31]419 %vec0 = call <4 x i16> asm "; def $0", "=v"()420 %vec1 = call <4 x i16> asm "; def $0", "=v"()421 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 1>422 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4423 ret void424}425 426define void @v_shuffle_v2i16_v4i16__7_2(ptr addrspace(1) inreg %ptr) {427; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_2:428; GFX900: ; %bb.0:429; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)430; GFX900-NEXT: ;;#ASMSTART431; GFX900-NEXT: ; def v[0:1]432; GFX900-NEXT: ;;#ASMEND433; GFX900-NEXT: v_mov_b32_e32 v4, 0434; GFX900-NEXT: ;;#ASMSTART435; GFX900-NEXT: ; def v[2:3]436; GFX900-NEXT: ;;#ASMEND437; GFX900-NEXT: v_alignbit_b32 v0, v1, v3, 16438; GFX900-NEXT: global_store_dword v4, v0, s[16:17]439; GFX900-NEXT: s_waitcnt vmcnt(0)440; GFX900-NEXT: s_setpc_b64 s[30:31]441;442; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_2:443; GFX90A: ; %bb.0:444; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)445; GFX90A-NEXT: ;;#ASMSTART446; GFX90A-NEXT: ; def v[0:1]447; GFX90A-NEXT: ;;#ASMEND448; GFX90A-NEXT: v_mov_b32_e32 v4, 0449; GFX90A-NEXT: ;;#ASMSTART450; GFX90A-NEXT: ; def v[2:3]451; GFX90A-NEXT: ;;#ASMEND452; GFX90A-NEXT: v_alignbit_b32 v0, v1, v3, 16453; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]454; GFX90A-NEXT: s_waitcnt vmcnt(0)455; GFX90A-NEXT: s_setpc_b64 s[30:31]456;457; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_2:458; GFX942: ; %bb.0:459; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)460; GFX942-NEXT: ;;#ASMSTART461; GFX942-NEXT: ; def v[0:1]462; GFX942-NEXT: ;;#ASMEND463; GFX942-NEXT: v_mov_b32_e32 v4, 0464; GFX942-NEXT: ;;#ASMSTART465; GFX942-NEXT: ; def v[2:3]466; GFX942-NEXT: ;;#ASMEND467; GFX942-NEXT: s_nop 0468; GFX942-NEXT: v_alignbit_b32 v0, v1, v3, 16469; GFX942-NEXT: global_store_dword v4, v0, s[0:1]470; GFX942-NEXT: s_waitcnt vmcnt(0)471; GFX942-NEXT: s_setpc_b64 s[30:31]472 %vec0 = call <4 x i16> asm "; def $0", "=v"()473 %vec1 = call <4 x i16> asm "; def $0", "=v"()474 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 2>475 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4476 ret void477}478 479define void @v_shuffle_v2i16_v4i16__7_3(ptr addrspace(1) inreg %ptr) {480; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_3:481; GFX900: ; %bb.0:482; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)483; GFX900-NEXT: ;;#ASMSTART484; GFX900-NEXT: ; def v[0:1]485; GFX900-NEXT: ;;#ASMEND486; GFX900-NEXT: s_mov_b32 s4, 0x7060302487; GFX900-NEXT: v_mov_b32_e32 v4, 0488; GFX900-NEXT: ;;#ASMSTART489; GFX900-NEXT: ; def v[2:3]490; GFX900-NEXT: ;;#ASMEND491; GFX900-NEXT: v_perm_b32 v0, v1, v3, s4492; GFX900-NEXT: global_store_dword v4, v0, s[16:17]493; GFX900-NEXT: s_waitcnt vmcnt(0)494; GFX900-NEXT: s_setpc_b64 s[30:31]495;496; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_3:497; GFX90A: ; %bb.0:498; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)499; GFX90A-NEXT: ;;#ASMSTART500; GFX90A-NEXT: ; def v[0:1]501; GFX90A-NEXT: ;;#ASMEND502; GFX90A-NEXT: s_mov_b32 s4, 0x7060302503; GFX90A-NEXT: v_mov_b32_e32 v4, 0504; GFX90A-NEXT: ;;#ASMSTART505; GFX90A-NEXT: ; def v[2:3]506; GFX90A-NEXT: ;;#ASMEND507; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s4508; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]509; GFX90A-NEXT: s_waitcnt vmcnt(0)510; GFX90A-NEXT: s_setpc_b64 s[30:31]511;512; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_3:513; GFX942: ; %bb.0:514; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX942-NEXT: ;;#ASMSTART516; GFX942-NEXT: ; def v[0:1]517; GFX942-NEXT: ;;#ASMEND518; GFX942-NEXT: s_mov_b32 s2, 0x7060302519; GFX942-NEXT: v_mov_b32_e32 v4, 0520; GFX942-NEXT: ;;#ASMSTART521; GFX942-NEXT: ; def v[2:3]522; GFX942-NEXT: ;;#ASMEND523; GFX942-NEXT: s_nop 0524; GFX942-NEXT: v_perm_b32 v0, v1, v3, s2525; GFX942-NEXT: global_store_dword v4, v0, s[0:1]526; GFX942-NEXT: s_waitcnt vmcnt(0)527; GFX942-NEXT: s_setpc_b64 s[30:31]528 %vec0 = call <4 x i16> asm "; def $0", "=v"()529 %vec1 = call <4 x i16> asm "; def $0", "=v"()530 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 3>531 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4532 ret void533}534 535define void @v_shuffle_v2i16_v4i16__7_4(ptr addrspace(1) inreg %ptr) {536; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_4:537; GFX900: ; %bb.0:538; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)539; GFX900-NEXT: ;;#ASMSTART540; GFX900-NEXT: ; def v[0:1]541; GFX900-NEXT: ;;#ASMEND542; GFX900-NEXT: v_mov_b32_e32 v2, 0543; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16544; GFX900-NEXT: global_store_dword v2, v0, s[16:17]545; GFX900-NEXT: s_waitcnt vmcnt(0)546; GFX900-NEXT: s_setpc_b64 s[30:31]547;548; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_4:549; GFX90A: ; %bb.0:550; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX90A-NEXT: ;;#ASMSTART552; GFX90A-NEXT: ; def v[0:1]553; GFX90A-NEXT: ;;#ASMEND554; GFX90A-NEXT: v_mov_b32_e32 v2, 0555; GFX90A-NEXT: v_alignbit_b32 v0, v0, v1, 16556; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]557; GFX90A-NEXT: s_waitcnt vmcnt(0)558; GFX90A-NEXT: s_setpc_b64 s[30:31]559;560; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_4:561; GFX942: ; %bb.0:562; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX942-NEXT: ;;#ASMSTART564; GFX942-NEXT: ; def v[0:1]565; GFX942-NEXT: ;;#ASMEND566; GFX942-NEXT: v_mov_b32_e32 v2, 0567; GFX942-NEXT: v_alignbit_b32 v0, v0, v1, 16568; GFX942-NEXT: global_store_dword v2, v0, s[0:1]569; GFX942-NEXT: s_waitcnt vmcnt(0)570; GFX942-NEXT: s_setpc_b64 s[30:31]571 %vec0 = call <4 x i16> asm "; def $0", "=v"()572 %vec1 = call <4 x i16> asm "; def $0", "=v"()573 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 4>574 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4575 ret void576}577 578define void @v_shuffle_v2i16_v4i16__7_5(ptr addrspace(1) inreg %ptr) {579; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_5:580; GFX900: ; %bb.0:581; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)582; GFX900-NEXT: ;;#ASMSTART583; GFX900-NEXT: ; def v[0:1]584; GFX900-NEXT: ;;#ASMEND585; GFX900-NEXT: s_mov_b32 s4, 0x7060302586; GFX900-NEXT: v_mov_b32_e32 v2, 0587; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4588; GFX900-NEXT: global_store_dword v2, v0, s[16:17]589; GFX900-NEXT: s_waitcnt vmcnt(0)590; GFX900-NEXT: s_setpc_b64 s[30:31]591;592; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_5:593; GFX90A: ; %bb.0:594; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)595; GFX90A-NEXT: ;;#ASMSTART596; GFX90A-NEXT: ; def v[0:1]597; GFX90A-NEXT: ;;#ASMEND598; GFX90A-NEXT: s_mov_b32 s4, 0x7060302599; GFX90A-NEXT: v_mov_b32_e32 v2, 0600; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4601; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]602; GFX90A-NEXT: s_waitcnt vmcnt(0)603; GFX90A-NEXT: s_setpc_b64 s[30:31]604;605; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_5:606; GFX942: ; %bb.0:607; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)608; GFX942-NEXT: ;;#ASMSTART609; GFX942-NEXT: ; def v[0:1]610; GFX942-NEXT: ;;#ASMEND611; GFX942-NEXT: s_mov_b32 s2, 0x7060302612; GFX942-NEXT: v_mov_b32_e32 v2, 0613; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2614; GFX942-NEXT: global_store_dword v2, v0, s[0:1]615; GFX942-NEXT: s_waitcnt vmcnt(0)616; GFX942-NEXT: s_setpc_b64 s[30:31]617 %vec0 = call <4 x i16> asm "; def $0", "=v"()618 %vec1 = call <4 x i16> asm "; def $0", "=v"()619 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 5>620 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4621 ret void622}623 624define void @v_shuffle_v2i16_v4i16__7_6(ptr addrspace(1) inreg %ptr) {625; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_6:626; GFX900: ; %bb.0:627; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)628; GFX900-NEXT: ;;#ASMSTART629; GFX900-NEXT: ; def v[0:1]630; GFX900-NEXT: ;;#ASMEND631; GFX900-NEXT: v_mov_b32_e32 v2, 0632; GFX900-NEXT: v_alignbit_b32 v0, v1, v1, 16633; GFX900-NEXT: global_store_dword v2, v0, s[16:17]634; GFX900-NEXT: s_waitcnt vmcnt(0)635; GFX900-NEXT: s_setpc_b64 s[30:31]636;637; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_6:638; GFX90A: ; %bb.0:639; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)640; GFX90A-NEXT: ;;#ASMSTART641; GFX90A-NEXT: ; def v[0:1]642; GFX90A-NEXT: ;;#ASMEND643; GFX90A-NEXT: v_mov_b32_e32 v2, 0644; GFX90A-NEXT: v_alignbit_b32 v0, v1, v1, 16645; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]646; GFX90A-NEXT: s_waitcnt vmcnt(0)647; GFX90A-NEXT: s_setpc_b64 s[30:31]648;649; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_6:650; GFX942: ; %bb.0:651; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX942-NEXT: ;;#ASMSTART653; GFX942-NEXT: ; def v[0:1]654; GFX942-NEXT: ;;#ASMEND655; GFX942-NEXT: v_mov_b32_e32 v2, 0656; GFX942-NEXT: v_alignbit_b32 v0, v1, v1, 16657; GFX942-NEXT: global_store_dword v2, v0, s[0:1]658; GFX942-NEXT: s_waitcnt vmcnt(0)659; GFX942-NEXT: s_setpc_b64 s[30:31]660 %vec0 = call <4 x i16> asm "; def $0", "=v"()661 %vec1 = call <4 x i16> asm "; def $0", "=v"()662 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 6>663 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4664 ret void665}666 667define void @v_shuffle_v2i16_v4i16__7_7(ptr addrspace(1) inreg %ptr) {668; GFX900-LABEL: v_shuffle_v2i16_v4i16__7_7:669; GFX900: ; %bb.0:670; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX900-NEXT: ;;#ASMSTART672; GFX900-NEXT: ; def v[0:1]673; GFX900-NEXT: ;;#ASMEND674; GFX900-NEXT: s_mov_b32 s4, 0x7060302675; GFX900-NEXT: v_mov_b32_e32 v2, 0676; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4677; GFX900-NEXT: global_store_dword v2, v0, s[16:17]678; GFX900-NEXT: s_waitcnt vmcnt(0)679; GFX900-NEXT: s_setpc_b64 s[30:31]680;681; GFX90A-LABEL: v_shuffle_v2i16_v4i16__7_7:682; GFX90A: ; %bb.0:683; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)684; GFX90A-NEXT: ;;#ASMSTART685; GFX90A-NEXT: ; def v[0:1]686; GFX90A-NEXT: ;;#ASMEND687; GFX90A-NEXT: s_mov_b32 s4, 0x7060302688; GFX90A-NEXT: v_mov_b32_e32 v2, 0689; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4690; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]691; GFX90A-NEXT: s_waitcnt vmcnt(0)692; GFX90A-NEXT: s_setpc_b64 s[30:31]693;694; GFX942-LABEL: v_shuffle_v2i16_v4i16__7_7:695; GFX942: ; %bb.0:696; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX942-NEXT: ;;#ASMSTART698; GFX942-NEXT: ; def v[0:1]699; GFX942-NEXT: ;;#ASMEND700; GFX942-NEXT: s_mov_b32 s2, 0x7060302701; GFX942-NEXT: v_mov_b32_e32 v2, 0702; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2703; GFX942-NEXT: global_store_dword v2, v0, s[0:1]704; GFX942-NEXT: s_waitcnt vmcnt(0)705; GFX942-NEXT: s_setpc_b64 s[30:31]706 %vec0 = call <4 x i16> asm "; def $0", "=v"()707 %vec1 = call <4 x i16> asm "; def $0", "=v"()708 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 7>709 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4710 ret void711}712 713define void @v_shuffle_v2i16_v4i16__u_0(ptr addrspace(1) inreg %ptr) {714; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_0:715; GFX900: ; %bb.0:716; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)717; GFX900-NEXT: ;;#ASMSTART718; GFX900-NEXT: ; def v[0:1]719; GFX900-NEXT: ;;#ASMEND720; GFX900-NEXT: v_mov_b32_e32 v2, 0721; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0722; GFX900-NEXT: global_store_dword v2, v0, s[16:17]723; GFX900-NEXT: s_waitcnt vmcnt(0)724; GFX900-NEXT: s_setpc_b64 s[30:31]725;726; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_0:727; GFX90A: ; %bb.0:728; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)729; GFX90A-NEXT: ;;#ASMSTART730; GFX90A-NEXT: ; def v[0:1]731; GFX90A-NEXT: ;;#ASMEND732; GFX90A-NEXT: v_mov_b32_e32 v2, 0733; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0734; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]735; GFX90A-NEXT: s_waitcnt vmcnt(0)736; GFX90A-NEXT: s_setpc_b64 s[30:31]737;738; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_0:739; GFX942: ; %bb.0:740; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)741; GFX942-NEXT: ;;#ASMSTART742; GFX942-NEXT: ; def v[0:1]743; GFX942-NEXT: ;;#ASMEND744; GFX942-NEXT: v_mov_b32_e32 v2, 0745; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0746; GFX942-NEXT: global_store_dword v2, v0, s[0:1]747; GFX942-NEXT: s_waitcnt vmcnt(0)748; GFX942-NEXT: s_setpc_b64 s[30:31]749 %vec0 = call <4 x i16> asm "; def $0", "=v"()750 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 0>751 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4752 ret void753}754 755define void @v_shuffle_v2i16_v4i16__0_0(ptr addrspace(1) inreg %ptr) {756; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_0:757; GFX900: ; %bb.0:758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)759; GFX900-NEXT: ;;#ASMSTART760; GFX900-NEXT: ; def v[0:1]761; GFX900-NEXT: ;;#ASMEND762; GFX900-NEXT: s_mov_b32 s4, 0x5040100763; GFX900-NEXT: v_mov_b32_e32 v2, 0764; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4765; GFX900-NEXT: global_store_dword v2, v0, s[16:17]766; GFX900-NEXT: s_waitcnt vmcnt(0)767; GFX900-NEXT: s_setpc_b64 s[30:31]768;769; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_0:770; GFX90A: ; %bb.0:771; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)772; GFX90A-NEXT: ;;#ASMSTART773; GFX90A-NEXT: ; def v[0:1]774; GFX90A-NEXT: ;;#ASMEND775; GFX90A-NEXT: s_mov_b32 s4, 0x5040100776; GFX90A-NEXT: v_mov_b32_e32 v2, 0777; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4778; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]779; GFX90A-NEXT: s_waitcnt vmcnt(0)780; GFX90A-NEXT: s_setpc_b64 s[30:31]781;782; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_0:783; GFX942: ; %bb.0:784; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)785; GFX942-NEXT: ;;#ASMSTART786; GFX942-NEXT: ; def v[0:1]787; GFX942-NEXT: ;;#ASMEND788; GFX942-NEXT: s_mov_b32 s2, 0x5040100789; GFX942-NEXT: v_mov_b32_e32 v2, 0790; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2791; GFX942-NEXT: global_store_dword v2, v0, s[0:1]792; GFX942-NEXT: s_waitcnt vmcnt(0)793; GFX942-NEXT: s_setpc_b64 s[30:31]794 %vec0 = call <4 x i16> asm "; def $0", "=v"()795 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> zeroinitializer796 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4797 ret void798}799 800define void @v_shuffle_v2i16_v4i16__1_0(ptr addrspace(1) inreg %ptr) {801; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_0:802; GFX900: ; %bb.0:803; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)804; GFX900-NEXT: ;;#ASMSTART805; GFX900-NEXT: ; def v[0:1]806; GFX900-NEXT: ;;#ASMEND807; GFX900-NEXT: v_mov_b32_e32 v2, 0808; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 16809; GFX900-NEXT: global_store_dword v2, v0, s[16:17]810; GFX900-NEXT: s_waitcnt vmcnt(0)811; GFX900-NEXT: s_setpc_b64 s[30:31]812;813; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_0:814; GFX90A: ; %bb.0:815; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)816; GFX90A-NEXT: ;;#ASMSTART817; GFX90A-NEXT: ; def v[0:1]818; GFX90A-NEXT: ;;#ASMEND819; GFX90A-NEXT: v_mov_b32_e32 v2, 0820; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 16821; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]822; GFX90A-NEXT: s_waitcnt vmcnt(0)823; GFX90A-NEXT: s_setpc_b64 s[30:31]824;825; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_0:826; GFX942: ; %bb.0:827; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)828; GFX942-NEXT: ;;#ASMSTART829; GFX942-NEXT: ; def v[0:1]830; GFX942-NEXT: ;;#ASMEND831; GFX942-NEXT: v_mov_b32_e32 v2, 0832; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 16833; GFX942-NEXT: global_store_dword v2, v0, s[0:1]834; GFX942-NEXT: s_waitcnt vmcnt(0)835; GFX942-NEXT: s_setpc_b64 s[30:31]836 %vec0 = call <4 x i16> asm "; def $0", "=v"()837 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 0>838 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4839 ret void840}841 842define void @v_shuffle_v2i16_v4i16__2_0(ptr addrspace(1) inreg %ptr) {843; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_0:844; GFX900: ; %bb.0:845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)846; GFX900-NEXT: ;;#ASMSTART847; GFX900-NEXT: ; def v[0:1]848; GFX900-NEXT: ;;#ASMEND849; GFX900-NEXT: s_mov_b32 s4, 0x5040100850; GFX900-NEXT: v_mov_b32_e32 v2, 0851; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4852; GFX900-NEXT: global_store_dword v2, v0, s[16:17]853; GFX900-NEXT: s_waitcnt vmcnt(0)854; GFX900-NEXT: s_setpc_b64 s[30:31]855;856; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_0:857; GFX90A: ; %bb.0:858; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)859; GFX90A-NEXT: ;;#ASMSTART860; GFX90A-NEXT: ; def v[0:1]861; GFX90A-NEXT: ;;#ASMEND862; GFX90A-NEXT: s_mov_b32 s4, 0x5040100863; GFX90A-NEXT: v_mov_b32_e32 v2, 0864; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4865; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]866; GFX90A-NEXT: s_waitcnt vmcnt(0)867; GFX90A-NEXT: s_setpc_b64 s[30:31]868;869; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_0:870; GFX942: ; %bb.0:871; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)872; GFX942-NEXT: ;;#ASMSTART873; GFX942-NEXT: ; def v[0:1]874; GFX942-NEXT: ;;#ASMEND875; GFX942-NEXT: s_mov_b32 s2, 0x5040100876; GFX942-NEXT: v_mov_b32_e32 v2, 0877; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2878; GFX942-NEXT: global_store_dword v2, v0, s[0:1]879; GFX942-NEXT: s_waitcnt vmcnt(0)880; GFX942-NEXT: s_setpc_b64 s[30:31]881 %vec0 = call <4 x i16> asm "; def $0", "=v"()882 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 0>883 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4884 ret void885}886 887define void @v_shuffle_v2i16_v4i16__3_0(ptr addrspace(1) inreg %ptr) {888; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_0:889; GFX900: ; %bb.0:890; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX900-NEXT: ;;#ASMSTART892; GFX900-NEXT: ; def v[0:1]893; GFX900-NEXT: ;;#ASMEND894; GFX900-NEXT: v_mov_b32_e32 v2, 0895; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16896; GFX900-NEXT: global_store_dword v2, v0, s[16:17]897; GFX900-NEXT: s_waitcnt vmcnt(0)898; GFX900-NEXT: s_setpc_b64 s[30:31]899;900; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_0:901; GFX90A: ; %bb.0:902; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)903; GFX90A-NEXT: ;;#ASMSTART904; GFX90A-NEXT: ; def v[0:1]905; GFX90A-NEXT: ;;#ASMEND906; GFX90A-NEXT: v_mov_b32_e32 v2, 0907; GFX90A-NEXT: v_alignbit_b32 v0, v0, v1, 16908; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]909; GFX90A-NEXT: s_waitcnt vmcnt(0)910; GFX90A-NEXT: s_setpc_b64 s[30:31]911;912; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_0:913; GFX942: ; %bb.0:914; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)915; GFX942-NEXT: ;;#ASMSTART916; GFX942-NEXT: ; def v[0:1]917; GFX942-NEXT: ;;#ASMEND918; GFX942-NEXT: v_mov_b32_e32 v2, 0919; GFX942-NEXT: v_alignbit_b32 v0, v0, v1, 16920; GFX942-NEXT: global_store_dword v2, v0, s[0:1]921; GFX942-NEXT: s_waitcnt vmcnt(0)922; GFX942-NEXT: s_setpc_b64 s[30:31]923 %vec0 = call <4 x i16> asm "; def $0", "=v"()924 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 0>925 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4926 ret void927}928 929define void @v_shuffle_v2i16_v4i16__4_0(ptr addrspace(1) inreg %ptr) {930; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_0:931; GFX900: ; %bb.0:932; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)933; GFX900-NEXT: ;;#ASMSTART934; GFX900-NEXT: ; def v[0:1]935; GFX900-NEXT: ;;#ASMEND936; GFX900-NEXT: v_mov_b32_e32 v2, 0937; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0938; GFX900-NEXT: global_store_dword v2, v0, s[16:17]939; GFX900-NEXT: s_waitcnt vmcnt(0)940; GFX900-NEXT: s_setpc_b64 s[30:31]941;942; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_0:943; GFX90A: ; %bb.0:944; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)945; GFX90A-NEXT: ;;#ASMSTART946; GFX90A-NEXT: ; def v[0:1]947; GFX90A-NEXT: ;;#ASMEND948; GFX90A-NEXT: v_mov_b32_e32 v2, 0949; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0950; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]951; GFX90A-NEXT: s_waitcnt vmcnt(0)952; GFX90A-NEXT: s_setpc_b64 s[30:31]953;954; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_0:955; GFX942: ; %bb.0:956; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)957; GFX942-NEXT: ;;#ASMSTART958; GFX942-NEXT: ; def v[0:1]959; GFX942-NEXT: ;;#ASMEND960; GFX942-NEXT: v_mov_b32_e32 v2, 0961; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0962; GFX942-NEXT: global_store_dword v2, v0, s[0:1]963; GFX942-NEXT: s_waitcnt vmcnt(0)964; GFX942-NEXT: s_setpc_b64 s[30:31]965 %vec0 = call <4 x i16> asm "; def $0", "=v"()966 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 0>967 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4968 ret void969}970 971define void @v_shuffle_v2i16_v4i16__5_0(ptr addrspace(1) inreg %ptr) {972; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_0:973; GFX900: ; %bb.0:974; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)975; GFX900-NEXT: ;;#ASMSTART976; GFX900-NEXT: ; def v[0:1]977; GFX900-NEXT: ;;#ASMEND978; GFX900-NEXT: v_mov_b32_e32 v3, 0979; GFX900-NEXT: ;;#ASMSTART980; GFX900-NEXT: ; def v[1:2]981; GFX900-NEXT: ;;#ASMEND982; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16983; GFX900-NEXT: global_store_dword v3, v0, s[16:17]984; GFX900-NEXT: s_waitcnt vmcnt(0)985; GFX900-NEXT: s_setpc_b64 s[30:31]986;987; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_0:988; GFX90A: ; %bb.0:989; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)990; GFX90A-NEXT: ;;#ASMSTART991; GFX90A-NEXT: ; def v[0:1]992; GFX90A-NEXT: ;;#ASMEND993; GFX90A-NEXT: v_mov_b32_e32 v4, 0994; GFX90A-NEXT: ;;#ASMSTART995; GFX90A-NEXT: ; def v[2:3]996; GFX90A-NEXT: ;;#ASMEND997; GFX90A-NEXT: v_alignbit_b32 v0, v0, v2, 16998; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]999; GFX90A-NEXT: s_waitcnt vmcnt(0)1000; GFX90A-NEXT: s_setpc_b64 s[30:31]1001;1002; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_0:1003; GFX942: ; %bb.0:1004; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1005; GFX942-NEXT: ;;#ASMSTART1006; GFX942-NEXT: ; def v[0:1]1007; GFX942-NEXT: ;;#ASMEND1008; GFX942-NEXT: v_mov_b32_e32 v4, 01009; GFX942-NEXT: ;;#ASMSTART1010; GFX942-NEXT: ; def v[2:3]1011; GFX942-NEXT: ;;#ASMEND1012; GFX942-NEXT: s_nop 01013; GFX942-NEXT: v_alignbit_b32 v0, v0, v2, 161014; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1015; GFX942-NEXT: s_waitcnt vmcnt(0)1016; GFX942-NEXT: s_setpc_b64 s[30:31]1017 %vec0 = call <4 x i16> asm "; def $0", "=v"()1018 %vec1 = call <4 x i16> asm "; def $0", "=v"()1019 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 0>1020 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41021 ret void1022}1023 1024define void @v_shuffle_v2i16_v4i16__6_0(ptr addrspace(1) inreg %ptr) {1025; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_0:1026; GFX900: ; %bb.0:1027; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1028; GFX900-NEXT: ;;#ASMSTART1029; GFX900-NEXT: ; def v[0:1]1030; GFX900-NEXT: ;;#ASMEND1031; GFX900-NEXT: s_mov_b32 s4, 0x50401001032; GFX900-NEXT: v_mov_b32_e32 v3, 01033; GFX900-NEXT: ;;#ASMSTART1034; GFX900-NEXT: ; def v[1:2]1035; GFX900-NEXT: ;;#ASMEND1036; GFX900-NEXT: v_perm_b32 v0, v0, v2, s41037; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1038; GFX900-NEXT: s_waitcnt vmcnt(0)1039; GFX900-NEXT: s_setpc_b64 s[30:31]1040;1041; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_0:1042; GFX90A: ; %bb.0:1043; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1044; GFX90A-NEXT: ;;#ASMSTART1045; GFX90A-NEXT: ; def v[0:1]1046; GFX90A-NEXT: ;;#ASMEND1047; GFX90A-NEXT: s_mov_b32 s4, 0x50401001048; GFX90A-NEXT: v_mov_b32_e32 v4, 01049; GFX90A-NEXT: ;;#ASMSTART1050; GFX90A-NEXT: ; def v[2:3]1051; GFX90A-NEXT: ;;#ASMEND1052; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s41053; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1054; GFX90A-NEXT: s_waitcnt vmcnt(0)1055; GFX90A-NEXT: s_setpc_b64 s[30:31]1056;1057; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_0:1058; GFX942: ; %bb.0:1059; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1060; GFX942-NEXT: ;;#ASMSTART1061; GFX942-NEXT: ; def v[0:1]1062; GFX942-NEXT: ;;#ASMEND1063; GFX942-NEXT: s_mov_b32 s2, 0x50401001064; GFX942-NEXT: v_mov_b32_e32 v4, 01065; GFX942-NEXT: ;;#ASMSTART1066; GFX942-NEXT: ; def v[2:3]1067; GFX942-NEXT: ;;#ASMEND1068; GFX942-NEXT: s_nop 01069; GFX942-NEXT: v_perm_b32 v0, v0, v3, s21070; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1071; GFX942-NEXT: s_waitcnt vmcnt(0)1072; GFX942-NEXT: s_setpc_b64 s[30:31]1073 %vec0 = call <4 x i16> asm "; def $0", "=v"()1074 %vec1 = call <4 x i16> asm "; def $0", "=v"()1075 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 0>1076 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41077 ret void1078}1079 1080define void @v_shuffle_v2i16_v4i16__u_1(ptr addrspace(1) inreg %ptr) {1081; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_1:1082; GFX900: ; %bb.0:1083; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1084; GFX900-NEXT: v_mov_b32_e32 v2, 01085; GFX900-NEXT: ;;#ASMSTART1086; GFX900-NEXT: ; def v[0:1]1087; GFX900-NEXT: ;;#ASMEND1088; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1089; GFX900-NEXT: s_waitcnt vmcnt(0)1090; GFX900-NEXT: s_setpc_b64 s[30:31]1091;1092; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_1:1093; GFX90A: ; %bb.0:1094; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1095; GFX90A-NEXT: v_mov_b32_e32 v2, 01096; GFX90A-NEXT: ;;#ASMSTART1097; GFX90A-NEXT: ; def v[0:1]1098; GFX90A-NEXT: ;;#ASMEND1099; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1100; GFX90A-NEXT: s_waitcnt vmcnt(0)1101; GFX90A-NEXT: s_setpc_b64 s[30:31]1102;1103; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_1:1104; GFX942: ; %bb.0:1105; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1106; GFX942-NEXT: v_mov_b32_e32 v2, 01107; GFX942-NEXT: ;;#ASMSTART1108; GFX942-NEXT: ; def v[0:1]1109; GFX942-NEXT: ;;#ASMEND1110; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1111; GFX942-NEXT: s_waitcnt vmcnt(0)1112; GFX942-NEXT: s_setpc_b64 s[30:31]1113 %vec0 = call <4 x i16> asm "; def $0", "=v"()1114 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 1>1115 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41116 ret void1117}1118 1119define void @v_shuffle_v2i16_v4i16__0_1(ptr addrspace(1) inreg %ptr) {1120; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_1:1121; GFX900: ; %bb.0:1122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1123; GFX900-NEXT: v_mov_b32_e32 v2, 01124; GFX900-NEXT: ;;#ASMSTART1125; GFX900-NEXT: ; def v[0:1]1126; GFX900-NEXT: ;;#ASMEND1127; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1128; GFX900-NEXT: s_waitcnt vmcnt(0)1129; GFX900-NEXT: s_setpc_b64 s[30:31]1130;1131; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_1:1132; GFX90A: ; %bb.0:1133; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1134; GFX90A-NEXT: v_mov_b32_e32 v2, 01135; GFX90A-NEXT: ;;#ASMSTART1136; GFX90A-NEXT: ; def v[0:1]1137; GFX90A-NEXT: ;;#ASMEND1138; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1139; GFX90A-NEXT: s_waitcnt vmcnt(0)1140; GFX90A-NEXT: s_setpc_b64 s[30:31]1141;1142; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_1:1143; GFX942: ; %bb.0:1144; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1145; GFX942-NEXT: v_mov_b32_e32 v2, 01146; GFX942-NEXT: ;;#ASMSTART1147; GFX942-NEXT: ; def v[0:1]1148; GFX942-NEXT: ;;#ASMEND1149; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1150; GFX942-NEXT: s_waitcnt vmcnt(0)1151; GFX942-NEXT: s_setpc_b64 s[30:31]1152 %vec0 = call <4 x i16> asm "; def $0", "=v"()1153 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 1>1154 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41155 ret void1156}1157 1158define void @v_shuffle_v2i16_v4i16__1_1(ptr addrspace(1) inreg %ptr) {1159; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_1:1160; GFX900: ; %bb.0:1161; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1162; GFX900-NEXT: ;;#ASMSTART1163; GFX900-NEXT: ; def v[0:1]1164; GFX900-NEXT: ;;#ASMEND1165; GFX900-NEXT: s_mov_b32 s4, 0x70603021166; GFX900-NEXT: v_mov_b32_e32 v2, 01167; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41168; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1169; GFX900-NEXT: s_waitcnt vmcnt(0)1170; GFX900-NEXT: s_setpc_b64 s[30:31]1171;1172; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_1:1173; GFX90A: ; %bb.0:1174; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1175; GFX90A-NEXT: ;;#ASMSTART1176; GFX90A-NEXT: ; def v[0:1]1177; GFX90A-NEXT: ;;#ASMEND1178; GFX90A-NEXT: s_mov_b32 s4, 0x70603021179; GFX90A-NEXT: v_mov_b32_e32 v2, 01180; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41181; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1182; GFX90A-NEXT: s_waitcnt vmcnt(0)1183; GFX90A-NEXT: s_setpc_b64 s[30:31]1184;1185; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_1:1186; GFX942: ; %bb.0:1187; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1188; GFX942-NEXT: ;;#ASMSTART1189; GFX942-NEXT: ; def v[0:1]1190; GFX942-NEXT: ;;#ASMEND1191; GFX942-NEXT: s_mov_b32 s2, 0x70603021192; GFX942-NEXT: v_mov_b32_e32 v2, 01193; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21194; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1195; GFX942-NEXT: s_waitcnt vmcnt(0)1196; GFX942-NEXT: s_setpc_b64 s[30:31]1197 %vec0 = call <4 x i16> asm "; def $0", "=v"()1198 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 1>1199 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41200 ret void1201}1202 1203define void @v_shuffle_v2i16_v4i16__2_1(ptr addrspace(1) inreg %ptr) {1204; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_1:1205; GFX900: ; %bb.0:1206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1207; GFX900-NEXT: ;;#ASMSTART1208; GFX900-NEXT: ; def v[0:1]1209; GFX900-NEXT: ;;#ASMEND1210; GFX900-NEXT: s_mov_b32 s4, 0xffff1211; GFX900-NEXT: v_mov_b32_e32 v2, 01212; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v01213; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1214; GFX900-NEXT: s_waitcnt vmcnt(0)1215; GFX900-NEXT: s_setpc_b64 s[30:31]1216;1217; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_1:1218; GFX90A: ; %bb.0:1219; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1220; GFX90A-NEXT: ;;#ASMSTART1221; GFX90A-NEXT: ; def v[0:1]1222; GFX90A-NEXT: ;;#ASMEND1223; GFX90A-NEXT: s_mov_b32 s4, 0xffff1224; GFX90A-NEXT: v_mov_b32_e32 v2, 01225; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v01226; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1227; GFX90A-NEXT: s_waitcnt vmcnt(0)1228; GFX90A-NEXT: s_setpc_b64 s[30:31]1229;1230; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_1:1231; GFX942: ; %bb.0:1232; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1233; GFX942-NEXT: ;;#ASMSTART1234; GFX942-NEXT: ; def v[0:1]1235; GFX942-NEXT: ;;#ASMEND1236; GFX942-NEXT: s_mov_b32 s2, 0xffff1237; GFX942-NEXT: v_mov_b32_e32 v2, 01238; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v01239; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1240; GFX942-NEXT: s_waitcnt vmcnt(0)1241; GFX942-NEXT: s_setpc_b64 s[30:31]1242 %vec0 = call <4 x i16> asm "; def $0", "=v"()1243 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 1>1244 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41245 ret void1246}1247 1248define void @v_shuffle_v2i16_v4i16__3_1(ptr addrspace(1) inreg %ptr) {1249; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_1:1250; GFX900: ; %bb.0:1251; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX900-NEXT: ;;#ASMSTART1253; GFX900-NEXT: ; def v[0:1]1254; GFX900-NEXT: ;;#ASMEND1255; GFX900-NEXT: s_mov_b32 s4, 0x70603021256; GFX900-NEXT: v_mov_b32_e32 v2, 01257; GFX900-NEXT: v_perm_b32 v0, v0, v1, s41258; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1259; GFX900-NEXT: s_waitcnt vmcnt(0)1260; GFX900-NEXT: s_setpc_b64 s[30:31]1261;1262; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_1:1263; GFX90A: ; %bb.0:1264; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1265; GFX90A-NEXT: ;;#ASMSTART1266; GFX90A-NEXT: ; def v[0:1]1267; GFX90A-NEXT: ;;#ASMEND1268; GFX90A-NEXT: s_mov_b32 s4, 0x70603021269; GFX90A-NEXT: v_mov_b32_e32 v2, 01270; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s41271; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1272; GFX90A-NEXT: s_waitcnt vmcnt(0)1273; GFX90A-NEXT: s_setpc_b64 s[30:31]1274;1275; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_1:1276; GFX942: ; %bb.0:1277; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1278; GFX942-NEXT: ;;#ASMSTART1279; GFX942-NEXT: ; def v[0:1]1280; GFX942-NEXT: ;;#ASMEND1281; GFX942-NEXT: s_mov_b32 s2, 0x70603021282; GFX942-NEXT: v_mov_b32_e32 v2, 01283; GFX942-NEXT: v_perm_b32 v0, v0, v1, s21284; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1285; GFX942-NEXT: s_waitcnt vmcnt(0)1286; GFX942-NEXT: s_setpc_b64 s[30:31]1287 %vec0 = call <4 x i16> asm "; def $0", "=v"()1288 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 1>1289 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41290 ret void1291}1292 1293define void @v_shuffle_v2i16_v4i16__4_1(ptr addrspace(1) inreg %ptr) {1294; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_1:1295; GFX900: ; %bb.0:1296; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1297; GFX900-NEXT: v_mov_b32_e32 v2, 01298; GFX900-NEXT: ;;#ASMSTART1299; GFX900-NEXT: ; def v[0:1]1300; GFX900-NEXT: ;;#ASMEND1301; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1302; GFX900-NEXT: s_waitcnt vmcnt(0)1303; GFX900-NEXT: s_setpc_b64 s[30:31]1304;1305; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_1:1306; GFX90A: ; %bb.0:1307; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1308; GFX90A-NEXT: v_mov_b32_e32 v2, 01309; GFX90A-NEXT: ;;#ASMSTART1310; GFX90A-NEXT: ; def v[0:1]1311; GFX90A-NEXT: ;;#ASMEND1312; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1313; GFX90A-NEXT: s_waitcnt vmcnt(0)1314; GFX90A-NEXT: s_setpc_b64 s[30:31]1315;1316; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_1:1317; GFX942: ; %bb.0:1318; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1319; GFX942-NEXT: v_mov_b32_e32 v2, 01320; GFX942-NEXT: ;;#ASMSTART1321; GFX942-NEXT: ; def v[0:1]1322; GFX942-NEXT: ;;#ASMEND1323; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1324; GFX942-NEXT: s_waitcnt vmcnt(0)1325; GFX942-NEXT: s_setpc_b64 s[30:31]1326 %vec0 = call <4 x i16> asm "; def $0", "=v"()1327 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 1>1328 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41329 ret void1330}1331 1332define void @v_shuffle_v2i16_v4i16__5_1(ptr addrspace(1) inreg %ptr) {1333; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_1:1334; GFX900: ; %bb.0:1335; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1336; GFX900-NEXT: ;;#ASMSTART1337; GFX900-NEXT: ; def v[0:1]1338; GFX900-NEXT: ;;#ASMEND1339; GFX900-NEXT: s_mov_b32 s4, 0x70603021340; GFX900-NEXT: v_mov_b32_e32 v3, 01341; GFX900-NEXT: ;;#ASMSTART1342; GFX900-NEXT: ; def v[1:2]1343; GFX900-NEXT: ;;#ASMEND1344; GFX900-NEXT: v_perm_b32 v0, v0, v1, s41345; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1346; GFX900-NEXT: s_waitcnt vmcnt(0)1347; GFX900-NEXT: s_setpc_b64 s[30:31]1348;1349; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_1:1350; GFX90A: ; %bb.0:1351; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1352; GFX90A-NEXT: ;;#ASMSTART1353; GFX90A-NEXT: ; def v[0:1]1354; GFX90A-NEXT: ;;#ASMEND1355; GFX90A-NEXT: s_mov_b32 s4, 0x70603021356; GFX90A-NEXT: v_mov_b32_e32 v4, 01357; GFX90A-NEXT: ;;#ASMSTART1358; GFX90A-NEXT: ; def v[2:3]1359; GFX90A-NEXT: ;;#ASMEND1360; GFX90A-NEXT: v_perm_b32 v0, v0, v2, s41361; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1362; GFX90A-NEXT: s_waitcnt vmcnt(0)1363; GFX90A-NEXT: s_setpc_b64 s[30:31]1364;1365; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_1:1366; GFX942: ; %bb.0:1367; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1368; GFX942-NEXT: ;;#ASMSTART1369; GFX942-NEXT: ; def v[0:1]1370; GFX942-NEXT: ;;#ASMEND1371; GFX942-NEXT: s_mov_b32 s2, 0x70603021372; GFX942-NEXT: v_mov_b32_e32 v4, 01373; GFX942-NEXT: ;;#ASMSTART1374; GFX942-NEXT: ; def v[2:3]1375; GFX942-NEXT: ;;#ASMEND1376; GFX942-NEXT: s_nop 01377; GFX942-NEXT: v_perm_b32 v0, v0, v2, s21378; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1379; GFX942-NEXT: s_waitcnt vmcnt(0)1380; GFX942-NEXT: s_setpc_b64 s[30:31]1381 %vec0 = call <4 x i16> asm "; def $0", "=v"()1382 %vec1 = call <4 x i16> asm "; def $0", "=v"()1383 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 1>1384 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41385 ret void1386}1387 1388define void @v_shuffle_v2i16_v4i16__6_1(ptr addrspace(1) inreg %ptr) {1389; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_1:1390; GFX900: ; %bb.0:1391; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX900-NEXT: ;;#ASMSTART1393; GFX900-NEXT: ; def v[0:1]1394; GFX900-NEXT: ;;#ASMEND1395; GFX900-NEXT: s_mov_b32 s4, 0xffff1396; GFX900-NEXT: v_mov_b32_e32 v3, 01397; GFX900-NEXT: ;;#ASMSTART1398; GFX900-NEXT: ; def v[1:2]1399; GFX900-NEXT: ;;#ASMEND1400; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v01401; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1402; GFX900-NEXT: s_waitcnt vmcnt(0)1403; GFX900-NEXT: s_setpc_b64 s[30:31]1404;1405; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_1:1406; GFX90A: ; %bb.0:1407; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1408; GFX90A-NEXT: ;;#ASMSTART1409; GFX90A-NEXT: ; def v[0:1]1410; GFX90A-NEXT: ;;#ASMEND1411; GFX90A-NEXT: s_mov_b32 s4, 0xffff1412; GFX90A-NEXT: v_mov_b32_e32 v4, 01413; GFX90A-NEXT: ;;#ASMSTART1414; GFX90A-NEXT: ; def v[2:3]1415; GFX90A-NEXT: ;;#ASMEND1416; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v01417; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1418; GFX90A-NEXT: s_waitcnt vmcnt(0)1419; GFX90A-NEXT: s_setpc_b64 s[30:31]1420;1421; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_1:1422; GFX942: ; %bb.0:1423; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1424; GFX942-NEXT: ;;#ASMSTART1425; GFX942-NEXT: ; def v[0:1]1426; GFX942-NEXT: ;;#ASMEND1427; GFX942-NEXT: s_mov_b32 s2, 0xffff1428; GFX942-NEXT: v_mov_b32_e32 v4, 01429; GFX942-NEXT: ;;#ASMSTART1430; GFX942-NEXT: ; def v[2:3]1431; GFX942-NEXT: ;;#ASMEND1432; GFX942-NEXT: s_nop 01433; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v01434; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1435; GFX942-NEXT: s_waitcnt vmcnt(0)1436; GFX942-NEXT: s_setpc_b64 s[30:31]1437 %vec0 = call <4 x i16> asm "; def $0", "=v"()1438 %vec1 = call <4 x i16> asm "; def $0", "=v"()1439 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 1>1440 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41441 ret void1442}1443 1444define void @v_shuffle_v2i16_v4i16__u_2(ptr addrspace(1) inreg %ptr) {1445; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_2:1446; GFX900: ; %bb.0:1447; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1448; GFX900-NEXT: ;;#ASMSTART1449; GFX900-NEXT: ; def v[0:1]1450; GFX900-NEXT: ;;#ASMEND1451; GFX900-NEXT: v_mov_b32_e32 v2, 01452; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11453; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1454; GFX900-NEXT: s_waitcnt vmcnt(0)1455; GFX900-NEXT: s_setpc_b64 s[30:31]1456;1457; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_2:1458; GFX90A: ; %bb.0:1459; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1460; GFX90A-NEXT: ;;#ASMSTART1461; GFX90A-NEXT: ; def v[0:1]1462; GFX90A-NEXT: ;;#ASMEND1463; GFX90A-NEXT: v_mov_b32_e32 v2, 01464; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11465; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1466; GFX90A-NEXT: s_waitcnt vmcnt(0)1467; GFX90A-NEXT: s_setpc_b64 s[30:31]1468;1469; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_2:1470; GFX942: ; %bb.0:1471; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1472; GFX942-NEXT: ;;#ASMSTART1473; GFX942-NEXT: ; def v[0:1]1474; GFX942-NEXT: ;;#ASMEND1475; GFX942-NEXT: v_mov_b32_e32 v2, 01476; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11477; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1478; GFX942-NEXT: s_waitcnt vmcnt(0)1479; GFX942-NEXT: s_setpc_b64 s[30:31]1480 %vec0 = call <4 x i16> asm "; def $0", "=v"()1481 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 2>1482 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41483 ret void1484}1485 1486define void @v_shuffle_v2i16_v4i16__0_2(ptr addrspace(1) inreg %ptr) {1487; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_2:1488; GFX900: ; %bb.0:1489; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1490; GFX900-NEXT: ;;#ASMSTART1491; GFX900-NEXT: ; def v[0:1]1492; GFX900-NEXT: ;;#ASMEND1493; GFX900-NEXT: s_mov_b32 s4, 0x50401001494; GFX900-NEXT: v_mov_b32_e32 v2, 01495; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41496; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1497; GFX900-NEXT: s_waitcnt vmcnt(0)1498; GFX900-NEXT: s_setpc_b64 s[30:31]1499;1500; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_2:1501; GFX90A: ; %bb.0:1502; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1503; GFX90A-NEXT: ;;#ASMSTART1504; GFX90A-NEXT: ; def v[0:1]1505; GFX90A-NEXT: ;;#ASMEND1506; GFX90A-NEXT: s_mov_b32 s4, 0x50401001507; GFX90A-NEXT: v_mov_b32_e32 v2, 01508; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41509; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1510; GFX90A-NEXT: s_waitcnt vmcnt(0)1511; GFX90A-NEXT: s_setpc_b64 s[30:31]1512;1513; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_2:1514; GFX942: ; %bb.0:1515; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1516; GFX942-NEXT: ;;#ASMSTART1517; GFX942-NEXT: ; def v[0:1]1518; GFX942-NEXT: ;;#ASMEND1519; GFX942-NEXT: s_mov_b32 s2, 0x50401001520; GFX942-NEXT: v_mov_b32_e32 v2, 01521; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21522; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1523; GFX942-NEXT: s_waitcnt vmcnt(0)1524; GFX942-NEXT: s_setpc_b64 s[30:31]1525 %vec0 = call <4 x i16> asm "; def $0", "=v"()1526 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 2>1527 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41528 ret void1529}1530 1531define void @v_shuffle_v2i16_v4i16__1_2(ptr addrspace(1) inreg %ptr) {1532; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_2:1533; GFX900: ; %bb.0:1534; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1535; GFX900-NEXT: ;;#ASMSTART1536; GFX900-NEXT: ; def v[0:1]1537; GFX900-NEXT: ;;#ASMEND1538; GFX900-NEXT: v_mov_b32_e32 v2, 01539; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 161540; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1541; GFX900-NEXT: s_waitcnt vmcnt(0)1542; GFX900-NEXT: s_setpc_b64 s[30:31]1543;1544; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_2:1545; GFX90A: ; %bb.0:1546; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1547; GFX90A-NEXT: ;;#ASMSTART1548; GFX90A-NEXT: ; def v[0:1]1549; GFX90A-NEXT: ;;#ASMEND1550; GFX90A-NEXT: v_mov_b32_e32 v2, 01551; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 161552; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1553; GFX90A-NEXT: s_waitcnt vmcnt(0)1554; GFX90A-NEXT: s_setpc_b64 s[30:31]1555;1556; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_2:1557; GFX942: ; %bb.0:1558; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1559; GFX942-NEXT: ;;#ASMSTART1560; GFX942-NEXT: ; def v[0:1]1561; GFX942-NEXT: ;;#ASMEND1562; GFX942-NEXT: v_mov_b32_e32 v2, 01563; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 161564; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1565; GFX942-NEXT: s_waitcnt vmcnt(0)1566; GFX942-NEXT: s_setpc_b64 s[30:31]1567 %vec0 = call <4 x i16> asm "; def $0", "=v"()1568 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 2>1569 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41570 ret void1571}1572 1573define void @v_shuffle_v2i16_v4i16__2_2(ptr addrspace(1) inreg %ptr) {1574; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_2:1575; GFX900: ; %bb.0:1576; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX900-NEXT: ;;#ASMSTART1578; GFX900-NEXT: ; def v[0:1]1579; GFX900-NEXT: ;;#ASMEND1580; GFX900-NEXT: s_mov_b32 s4, 0x50401001581; GFX900-NEXT: v_mov_b32_e32 v2, 01582; GFX900-NEXT: v_perm_b32 v0, v1, v1, s41583; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1584; GFX900-NEXT: s_waitcnt vmcnt(0)1585; GFX900-NEXT: s_setpc_b64 s[30:31]1586;1587; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_2:1588; GFX90A: ; %bb.0:1589; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1590; GFX90A-NEXT: ;;#ASMSTART1591; GFX90A-NEXT: ; def v[0:1]1592; GFX90A-NEXT: ;;#ASMEND1593; GFX90A-NEXT: s_mov_b32 s4, 0x50401001594; GFX90A-NEXT: v_mov_b32_e32 v2, 01595; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s41596; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1597; GFX90A-NEXT: s_waitcnt vmcnt(0)1598; GFX90A-NEXT: s_setpc_b64 s[30:31]1599;1600; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_2:1601; GFX942: ; %bb.0:1602; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1603; GFX942-NEXT: ;;#ASMSTART1604; GFX942-NEXT: ; def v[0:1]1605; GFX942-NEXT: ;;#ASMEND1606; GFX942-NEXT: s_mov_b32 s2, 0x50401001607; GFX942-NEXT: v_mov_b32_e32 v2, 01608; GFX942-NEXT: v_perm_b32 v0, v1, v1, s21609; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1610; GFX942-NEXT: s_waitcnt vmcnt(0)1611; GFX942-NEXT: s_setpc_b64 s[30:31]1612 %vec0 = call <4 x i16> asm "; def $0", "=v"()1613 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 2>1614 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41615 ret void1616}1617 1618define void @v_shuffle_v2i16_v4i16__3_2(ptr addrspace(1) inreg %ptr) {1619; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_2:1620; GFX900: ; %bb.0:1621; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX900-NEXT: ;;#ASMSTART1623; GFX900-NEXT: ; def v[0:1]1624; GFX900-NEXT: ;;#ASMEND1625; GFX900-NEXT: v_mov_b32_e32 v2, 01626; GFX900-NEXT: v_alignbit_b32 v0, v1, v1, 161627; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1628; GFX900-NEXT: s_waitcnt vmcnt(0)1629; GFX900-NEXT: s_setpc_b64 s[30:31]1630;1631; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_2:1632; GFX90A: ; %bb.0:1633; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1634; GFX90A-NEXT: ;;#ASMSTART1635; GFX90A-NEXT: ; def v[0:1]1636; GFX90A-NEXT: ;;#ASMEND1637; GFX90A-NEXT: v_mov_b32_e32 v2, 01638; GFX90A-NEXT: v_alignbit_b32 v0, v1, v1, 161639; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1640; GFX90A-NEXT: s_waitcnt vmcnt(0)1641; GFX90A-NEXT: s_setpc_b64 s[30:31]1642;1643; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_2:1644; GFX942: ; %bb.0:1645; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1646; GFX942-NEXT: ;;#ASMSTART1647; GFX942-NEXT: ; def v[0:1]1648; GFX942-NEXT: ;;#ASMEND1649; GFX942-NEXT: v_mov_b32_e32 v2, 01650; GFX942-NEXT: v_alignbit_b32 v0, v1, v1, 161651; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1652; GFX942-NEXT: s_waitcnt vmcnt(0)1653; GFX942-NEXT: s_setpc_b64 s[30:31]1654 %vec0 = call <4 x i16> asm "; def $0", "=v"()1655 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 2>1656 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41657 ret void1658}1659 1660define void @v_shuffle_v2i16_v4i16__4_2(ptr addrspace(1) inreg %ptr) {1661; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_2:1662; GFX900: ; %bb.0:1663; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1664; GFX900-NEXT: ;;#ASMSTART1665; GFX900-NEXT: ; def v[0:1]1666; GFX900-NEXT: ;;#ASMEND1667; GFX900-NEXT: v_mov_b32_e32 v2, 01668; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11669; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1670; GFX900-NEXT: s_waitcnt vmcnt(0)1671; GFX900-NEXT: s_setpc_b64 s[30:31]1672;1673; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_2:1674; GFX90A: ; %bb.0:1675; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1676; GFX90A-NEXT: ;;#ASMSTART1677; GFX90A-NEXT: ; def v[0:1]1678; GFX90A-NEXT: ;;#ASMEND1679; GFX90A-NEXT: v_mov_b32_e32 v2, 01680; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11681; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1682; GFX90A-NEXT: s_waitcnt vmcnt(0)1683; GFX90A-NEXT: s_setpc_b64 s[30:31]1684;1685; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_2:1686; GFX942: ; %bb.0:1687; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1688; GFX942-NEXT: ;;#ASMSTART1689; GFX942-NEXT: ; def v[0:1]1690; GFX942-NEXT: ;;#ASMEND1691; GFX942-NEXT: v_mov_b32_e32 v2, 01692; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11693; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1694; GFX942-NEXT: s_waitcnt vmcnt(0)1695; GFX942-NEXT: s_setpc_b64 s[30:31]1696 %vec0 = call <4 x i16> asm "; def $0", "=v"()1697 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 2>1698 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41699 ret void1700}1701 1702define void @v_shuffle_v2i16_v4i16__5_2(ptr addrspace(1) inreg %ptr) {1703; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_2:1704; GFX900: ; %bb.0:1705; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1706; GFX900-NEXT: ;;#ASMSTART1707; GFX900-NEXT: ; def v[0:1]1708; GFX900-NEXT: ;;#ASMEND1709; GFX900-NEXT: v_mov_b32_e32 v4, 01710; GFX900-NEXT: ;;#ASMSTART1711; GFX900-NEXT: ; def v[2:3]1712; GFX900-NEXT: ;;#ASMEND1713; GFX900-NEXT: v_alignbit_b32 v0, v1, v2, 161714; GFX900-NEXT: global_store_dword v4, v0, s[16:17]1715; GFX900-NEXT: s_waitcnt vmcnt(0)1716; GFX900-NEXT: s_setpc_b64 s[30:31]1717;1718; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_2:1719; GFX90A: ; %bb.0:1720; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1721; GFX90A-NEXT: ;;#ASMSTART1722; GFX90A-NEXT: ; def v[0:1]1723; GFX90A-NEXT: ;;#ASMEND1724; GFX90A-NEXT: v_mov_b32_e32 v4, 01725; GFX90A-NEXT: ;;#ASMSTART1726; GFX90A-NEXT: ; def v[2:3]1727; GFX90A-NEXT: ;;#ASMEND1728; GFX90A-NEXT: v_alignbit_b32 v0, v1, v2, 161729; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1730; GFX90A-NEXT: s_waitcnt vmcnt(0)1731; GFX90A-NEXT: s_setpc_b64 s[30:31]1732;1733; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_2:1734; GFX942: ; %bb.0:1735; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1736; GFX942-NEXT: ;;#ASMSTART1737; GFX942-NEXT: ; def v[0:1]1738; GFX942-NEXT: ;;#ASMEND1739; GFX942-NEXT: v_mov_b32_e32 v4, 01740; GFX942-NEXT: ;;#ASMSTART1741; GFX942-NEXT: ; def v[2:3]1742; GFX942-NEXT: ;;#ASMEND1743; GFX942-NEXT: s_nop 01744; GFX942-NEXT: v_alignbit_b32 v0, v1, v2, 161745; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1746; GFX942-NEXT: s_waitcnt vmcnt(0)1747; GFX942-NEXT: s_setpc_b64 s[30:31]1748 %vec0 = call <4 x i16> asm "; def $0", "=v"()1749 %vec1 = call <4 x i16> asm "; def $0", "=v"()1750 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 2>1751 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41752 ret void1753}1754 1755define void @v_shuffle_v2i16_v4i16__6_2(ptr addrspace(1) inreg %ptr) {1756; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_2:1757; GFX900: ; %bb.0:1758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1759; GFX900-NEXT: ;;#ASMSTART1760; GFX900-NEXT: ; def v[0:1]1761; GFX900-NEXT: ;;#ASMEND1762; GFX900-NEXT: s_mov_b32 s4, 0x50401001763; GFX900-NEXT: v_mov_b32_e32 v4, 01764; GFX900-NEXT: ;;#ASMSTART1765; GFX900-NEXT: ; def v[2:3]1766; GFX900-NEXT: ;;#ASMEND1767; GFX900-NEXT: v_perm_b32 v0, v1, v3, s41768; GFX900-NEXT: global_store_dword v4, v0, s[16:17]1769; GFX900-NEXT: s_waitcnt vmcnt(0)1770; GFX900-NEXT: s_setpc_b64 s[30:31]1771;1772; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_2:1773; GFX90A: ; %bb.0:1774; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1775; GFX90A-NEXT: ;;#ASMSTART1776; GFX90A-NEXT: ; def v[0:1]1777; GFX90A-NEXT: ;;#ASMEND1778; GFX90A-NEXT: s_mov_b32 s4, 0x50401001779; GFX90A-NEXT: v_mov_b32_e32 v4, 01780; GFX90A-NEXT: ;;#ASMSTART1781; GFX90A-NEXT: ; def v[2:3]1782; GFX90A-NEXT: ;;#ASMEND1783; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s41784; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1785; GFX90A-NEXT: s_waitcnt vmcnt(0)1786; GFX90A-NEXT: s_setpc_b64 s[30:31]1787;1788; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_2:1789; GFX942: ; %bb.0:1790; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1791; GFX942-NEXT: ;;#ASMSTART1792; GFX942-NEXT: ; def v[0:1]1793; GFX942-NEXT: ;;#ASMEND1794; GFX942-NEXT: s_mov_b32 s2, 0x50401001795; GFX942-NEXT: v_mov_b32_e32 v4, 01796; GFX942-NEXT: ;;#ASMSTART1797; GFX942-NEXT: ; def v[2:3]1798; GFX942-NEXT: ;;#ASMEND1799; GFX942-NEXT: s_nop 01800; GFX942-NEXT: v_perm_b32 v0, v1, v3, s21801; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1802; GFX942-NEXT: s_waitcnt vmcnt(0)1803; GFX942-NEXT: s_setpc_b64 s[30:31]1804 %vec0 = call <4 x i16> asm "; def $0", "=v"()1805 %vec1 = call <4 x i16> asm "; def $0", "=v"()1806 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 2>1807 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41808 ret void1809}1810 1811define void @v_shuffle_v2i16_v4i16__u_3(ptr addrspace(1) inreg %ptr) {1812; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_3:1813; GFX900: ; %bb.0:1814; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1815; GFX900-NEXT: v_mov_b32_e32 v2, 01816; GFX900-NEXT: ;;#ASMSTART1817; GFX900-NEXT: ; def v[0:1]1818; GFX900-NEXT: ;;#ASMEND1819; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1820; GFX900-NEXT: s_waitcnt vmcnt(0)1821; GFX900-NEXT: s_setpc_b64 s[30:31]1822;1823; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_3:1824; GFX90A: ; %bb.0:1825; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1826; GFX90A-NEXT: v_mov_b32_e32 v2, 01827; GFX90A-NEXT: ;;#ASMSTART1828; GFX90A-NEXT: ; def v[0:1]1829; GFX90A-NEXT: ;;#ASMEND1830; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1831; GFX90A-NEXT: s_waitcnt vmcnt(0)1832; GFX90A-NEXT: s_setpc_b64 s[30:31]1833;1834; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_3:1835; GFX942: ; %bb.0:1836; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1837; GFX942-NEXT: v_mov_b32_e32 v2, 01838; GFX942-NEXT: ;;#ASMSTART1839; GFX942-NEXT: ; def v[0:1]1840; GFX942-NEXT: ;;#ASMEND1841; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1842; GFX942-NEXT: s_waitcnt vmcnt(0)1843; GFX942-NEXT: s_setpc_b64 s[30:31]1844 %vec0 = call <4 x i16> asm "; def $0", "=v"()1845 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 3>1846 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41847 ret void1848}1849 1850define void @v_shuffle_v2i16_v4i16__0_3(ptr addrspace(1) inreg %ptr) {1851; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_3:1852; GFX900: ; %bb.0:1853; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1854; GFX900-NEXT: ;;#ASMSTART1855; GFX900-NEXT: ; def v[0:1]1856; GFX900-NEXT: ;;#ASMEND1857; GFX900-NEXT: s_mov_b32 s4, 0xffff1858; GFX900-NEXT: v_mov_b32_e32 v2, 01859; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v11860; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1861; GFX900-NEXT: s_waitcnt vmcnt(0)1862; GFX900-NEXT: s_setpc_b64 s[30:31]1863;1864; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_3:1865; GFX90A: ; %bb.0:1866; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1867; GFX90A-NEXT: ;;#ASMSTART1868; GFX90A-NEXT: ; def v[0:1]1869; GFX90A-NEXT: ;;#ASMEND1870; GFX90A-NEXT: s_mov_b32 s4, 0xffff1871; GFX90A-NEXT: v_mov_b32_e32 v2, 01872; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v11873; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1874; GFX90A-NEXT: s_waitcnt vmcnt(0)1875; GFX90A-NEXT: s_setpc_b64 s[30:31]1876;1877; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_3:1878; GFX942: ; %bb.0:1879; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1880; GFX942-NEXT: ;;#ASMSTART1881; GFX942-NEXT: ; def v[0:1]1882; GFX942-NEXT: ;;#ASMEND1883; GFX942-NEXT: s_mov_b32 s2, 0xffff1884; GFX942-NEXT: v_mov_b32_e32 v2, 01885; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v11886; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1887; GFX942-NEXT: s_waitcnt vmcnt(0)1888; GFX942-NEXT: s_setpc_b64 s[30:31]1889 %vec0 = call <4 x i16> asm "; def $0", "=v"()1890 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 3>1891 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41892 ret void1893}1894 1895define void @v_shuffle_v2i16_v4i16__1_3(ptr addrspace(1) inreg %ptr) {1896; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_3:1897; GFX900: ; %bb.0:1898; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1899; GFX900-NEXT: ;;#ASMSTART1900; GFX900-NEXT: ; def v[0:1]1901; GFX900-NEXT: ;;#ASMEND1902; GFX900-NEXT: s_mov_b32 s4, 0x70603021903; GFX900-NEXT: v_mov_b32_e32 v2, 01904; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41905; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1906; GFX900-NEXT: s_waitcnt vmcnt(0)1907; GFX900-NEXT: s_setpc_b64 s[30:31]1908;1909; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_3:1910; GFX90A: ; %bb.0:1911; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1912; GFX90A-NEXT: ;;#ASMSTART1913; GFX90A-NEXT: ; def v[0:1]1914; GFX90A-NEXT: ;;#ASMEND1915; GFX90A-NEXT: s_mov_b32 s4, 0x70603021916; GFX90A-NEXT: v_mov_b32_e32 v2, 01917; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41918; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1919; GFX90A-NEXT: s_waitcnt vmcnt(0)1920; GFX90A-NEXT: s_setpc_b64 s[30:31]1921;1922; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_3:1923; GFX942: ; %bb.0:1924; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1925; GFX942-NEXT: ;;#ASMSTART1926; GFX942-NEXT: ; def v[0:1]1927; GFX942-NEXT: ;;#ASMEND1928; GFX942-NEXT: s_mov_b32 s2, 0x70603021929; GFX942-NEXT: v_mov_b32_e32 v2, 01930; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21931; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1932; GFX942-NEXT: s_waitcnt vmcnt(0)1933; GFX942-NEXT: s_setpc_b64 s[30:31]1934 %vec0 = call <4 x i16> asm "; def $0", "=v"()1935 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 3>1936 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41937 ret void1938}1939 1940define void @v_shuffle_v2i16_v4i16__2_3(ptr addrspace(1) inreg %ptr) {1941; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_3:1942; GFX900: ; %bb.0:1943; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1944; GFX900-NEXT: v_mov_b32_e32 v2, 01945; GFX900-NEXT: ;;#ASMSTART1946; GFX900-NEXT: ; def v[0:1]1947; GFX900-NEXT: ;;#ASMEND1948; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1949; GFX900-NEXT: s_waitcnt vmcnt(0)1950; GFX900-NEXT: s_setpc_b64 s[30:31]1951;1952; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_3:1953; GFX90A: ; %bb.0:1954; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1955; GFX90A-NEXT: v_mov_b32_e32 v2, 01956; GFX90A-NEXT: ;;#ASMSTART1957; GFX90A-NEXT: ; def v[0:1]1958; GFX90A-NEXT: ;;#ASMEND1959; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1960; GFX90A-NEXT: s_waitcnt vmcnt(0)1961; GFX90A-NEXT: s_setpc_b64 s[30:31]1962;1963; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_3:1964; GFX942: ; %bb.0:1965; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1966; GFX942-NEXT: v_mov_b32_e32 v2, 01967; GFX942-NEXT: ;;#ASMSTART1968; GFX942-NEXT: ; def v[0:1]1969; GFX942-NEXT: ;;#ASMEND1970; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1971; GFX942-NEXT: s_waitcnt vmcnt(0)1972; GFX942-NEXT: s_setpc_b64 s[30:31]1973 %vec0 = call <4 x i16> asm "; def $0", "=v"()1974 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 3>1975 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 41976 ret void1977}1978 1979define void @v_shuffle_v2i16_v4i16__3_3(ptr addrspace(1) inreg %ptr) {1980; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_3:1981; GFX900: ; %bb.0:1982; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1983; GFX900-NEXT: ;;#ASMSTART1984; GFX900-NEXT: ; def v[0:1]1985; GFX900-NEXT: ;;#ASMEND1986; GFX900-NEXT: s_mov_b32 s4, 0x70603021987; GFX900-NEXT: v_mov_b32_e32 v2, 01988; GFX900-NEXT: v_perm_b32 v0, v1, v1, s41989; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1990; GFX900-NEXT: s_waitcnt vmcnt(0)1991; GFX900-NEXT: s_setpc_b64 s[30:31]1992;1993; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_3:1994; GFX90A: ; %bb.0:1995; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1996; GFX90A-NEXT: ;;#ASMSTART1997; GFX90A-NEXT: ; def v[0:1]1998; GFX90A-NEXT: ;;#ASMEND1999; GFX90A-NEXT: s_mov_b32 s4, 0x70603022000; GFX90A-NEXT: v_mov_b32_e32 v2, 02001; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s42002; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2003; GFX90A-NEXT: s_waitcnt vmcnt(0)2004; GFX90A-NEXT: s_setpc_b64 s[30:31]2005;2006; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_3:2007; GFX942: ; %bb.0:2008; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2009; GFX942-NEXT: ;;#ASMSTART2010; GFX942-NEXT: ; def v[0:1]2011; GFX942-NEXT: ;;#ASMEND2012; GFX942-NEXT: s_mov_b32 s2, 0x70603022013; GFX942-NEXT: v_mov_b32_e32 v2, 02014; GFX942-NEXT: v_perm_b32 v0, v1, v1, s22015; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2016; GFX942-NEXT: s_waitcnt vmcnt(0)2017; GFX942-NEXT: s_setpc_b64 s[30:31]2018 %vec0 = call <4 x i16> asm "; def $0", "=v"()2019 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 3>2020 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42021 ret void2022}2023 2024define void @v_shuffle_v2i16_v4i16__4_3(ptr addrspace(1) inreg %ptr) {2025; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_3:2026; GFX900: ; %bb.0:2027; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2028; GFX900-NEXT: v_mov_b32_e32 v2, 02029; GFX900-NEXT: ;;#ASMSTART2030; GFX900-NEXT: ; def v[0:1]2031; GFX900-NEXT: ;;#ASMEND2032; GFX900-NEXT: global_store_dword v2, v1, s[16:17]2033; GFX900-NEXT: s_waitcnt vmcnt(0)2034; GFX900-NEXT: s_setpc_b64 s[30:31]2035;2036; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_3:2037; GFX90A: ; %bb.0:2038; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2039; GFX90A-NEXT: v_mov_b32_e32 v2, 02040; GFX90A-NEXT: ;;#ASMSTART2041; GFX90A-NEXT: ; def v[0:1]2042; GFX90A-NEXT: ;;#ASMEND2043; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]2044; GFX90A-NEXT: s_waitcnt vmcnt(0)2045; GFX90A-NEXT: s_setpc_b64 s[30:31]2046;2047; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_3:2048; GFX942: ; %bb.0:2049; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2050; GFX942-NEXT: v_mov_b32_e32 v2, 02051; GFX942-NEXT: ;;#ASMSTART2052; GFX942-NEXT: ; def v[0:1]2053; GFX942-NEXT: ;;#ASMEND2054; GFX942-NEXT: global_store_dword v2, v1, s[0:1]2055; GFX942-NEXT: s_waitcnt vmcnt(0)2056; GFX942-NEXT: s_setpc_b64 s[30:31]2057 %vec0 = call <4 x i16> asm "; def $0", "=v"()2058 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 3>2059 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42060 ret void2061}2062 2063define void @v_shuffle_v2i16_v4i16__5_3(ptr addrspace(1) inreg %ptr) {2064; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_3:2065; GFX900: ; %bb.0:2066; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2067; GFX900-NEXT: ;;#ASMSTART2068; GFX900-NEXT: ; def v[0:1]2069; GFX900-NEXT: ;;#ASMEND2070; GFX900-NEXT: s_mov_b32 s4, 0x70603022071; GFX900-NEXT: v_mov_b32_e32 v4, 02072; GFX900-NEXT: ;;#ASMSTART2073; GFX900-NEXT: ; def v[2:3]2074; GFX900-NEXT: ;;#ASMEND2075; GFX900-NEXT: v_perm_b32 v0, v1, v2, s42076; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2077; GFX900-NEXT: s_waitcnt vmcnt(0)2078; GFX900-NEXT: s_setpc_b64 s[30:31]2079;2080; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_3:2081; GFX90A: ; %bb.0:2082; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2083; GFX90A-NEXT: ;;#ASMSTART2084; GFX90A-NEXT: ; def v[0:1]2085; GFX90A-NEXT: ;;#ASMEND2086; GFX90A-NEXT: s_mov_b32 s4, 0x70603022087; GFX90A-NEXT: v_mov_b32_e32 v4, 02088; GFX90A-NEXT: ;;#ASMSTART2089; GFX90A-NEXT: ; def v[2:3]2090; GFX90A-NEXT: ;;#ASMEND2091; GFX90A-NEXT: v_perm_b32 v0, v1, v2, s42092; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2093; GFX90A-NEXT: s_waitcnt vmcnt(0)2094; GFX90A-NEXT: s_setpc_b64 s[30:31]2095;2096; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_3:2097; GFX942: ; %bb.0:2098; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2099; GFX942-NEXT: ;;#ASMSTART2100; GFX942-NEXT: ; def v[0:1]2101; GFX942-NEXT: ;;#ASMEND2102; GFX942-NEXT: s_mov_b32 s2, 0x70603022103; GFX942-NEXT: v_mov_b32_e32 v4, 02104; GFX942-NEXT: ;;#ASMSTART2105; GFX942-NEXT: ; def v[2:3]2106; GFX942-NEXT: ;;#ASMEND2107; GFX942-NEXT: s_nop 02108; GFX942-NEXT: v_perm_b32 v0, v1, v2, s22109; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2110; GFX942-NEXT: s_waitcnt vmcnt(0)2111; GFX942-NEXT: s_setpc_b64 s[30:31]2112 %vec0 = call <4 x i16> asm "; def $0", "=v"()2113 %vec1 = call <4 x i16> asm "; def $0", "=v"()2114 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 3>2115 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42116 ret void2117}2118 2119define void @v_shuffle_v2i16_v4i16__6_3(ptr addrspace(1) inreg %ptr) {2120; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_3:2121; GFX900: ; %bb.0:2122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2123; GFX900-NEXT: ;;#ASMSTART2124; GFX900-NEXT: ; def v[0:1]2125; GFX900-NEXT: ;;#ASMEND2126; GFX900-NEXT: s_mov_b32 s4, 0xffff2127; GFX900-NEXT: v_mov_b32_e32 v4, 02128; GFX900-NEXT: ;;#ASMSTART2129; GFX900-NEXT: ; def v[2:3]2130; GFX900-NEXT: ;;#ASMEND2131; GFX900-NEXT: v_bfi_b32 v0, s4, v3, v12132; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2133; GFX900-NEXT: s_waitcnt vmcnt(0)2134; GFX900-NEXT: s_setpc_b64 s[30:31]2135;2136; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_3:2137; GFX90A: ; %bb.0:2138; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2139; GFX90A-NEXT: ;;#ASMSTART2140; GFX90A-NEXT: ; def v[0:1]2141; GFX90A-NEXT: ;;#ASMEND2142; GFX90A-NEXT: s_mov_b32 s4, 0xffff2143; GFX90A-NEXT: v_mov_b32_e32 v4, 02144; GFX90A-NEXT: ;;#ASMSTART2145; GFX90A-NEXT: ; def v[2:3]2146; GFX90A-NEXT: ;;#ASMEND2147; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v12148; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2149; GFX90A-NEXT: s_waitcnt vmcnt(0)2150; GFX90A-NEXT: s_setpc_b64 s[30:31]2151;2152; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_3:2153; GFX942: ; %bb.0:2154; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2155; GFX942-NEXT: ;;#ASMSTART2156; GFX942-NEXT: ; def v[0:1]2157; GFX942-NEXT: ;;#ASMEND2158; GFX942-NEXT: s_mov_b32 s2, 0xffff2159; GFX942-NEXT: v_mov_b32_e32 v4, 02160; GFX942-NEXT: ;;#ASMSTART2161; GFX942-NEXT: ; def v[2:3]2162; GFX942-NEXT: ;;#ASMEND2163; GFX942-NEXT: s_nop 02164; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v12165; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2166; GFX942-NEXT: s_waitcnt vmcnt(0)2167; GFX942-NEXT: s_setpc_b64 s[30:31]2168 %vec0 = call <4 x i16> asm "; def $0", "=v"()2169 %vec1 = call <4 x i16> asm "; def $0", "=v"()2170 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 3>2171 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42172 ret void2173}2174 2175define void @v_shuffle_v2i16_v4i16__u_4(ptr addrspace(1) inreg %ptr) {2176; GFX9-LABEL: v_shuffle_v2i16_v4i16__u_4:2177; GFX9: ; %bb.0:2178; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2179; GFX9-NEXT: s_setpc_b64 s[30:31]2180 %vec0 = call <4 x i16> asm "; def $0", "=v"()2181 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 4>2182 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42183 ret void2184}2185 2186define void @v_shuffle_v2i16_v4i16__0_4(ptr addrspace(1) inreg %ptr) {2187; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_4:2188; GFX900: ; %bb.0:2189; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2190; GFX900-NEXT: v_mov_b32_e32 v2, 02191; GFX900-NEXT: ;;#ASMSTART2192; GFX900-NEXT: ; def v[0:1]2193; GFX900-NEXT: ;;#ASMEND2194; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2195; GFX900-NEXT: s_waitcnt vmcnt(0)2196; GFX900-NEXT: s_setpc_b64 s[30:31]2197;2198; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_4:2199; GFX90A: ; %bb.0:2200; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2201; GFX90A-NEXT: v_mov_b32_e32 v2, 02202; GFX90A-NEXT: ;;#ASMSTART2203; GFX90A-NEXT: ; def v[0:1]2204; GFX90A-NEXT: ;;#ASMEND2205; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2206; GFX90A-NEXT: s_waitcnt vmcnt(0)2207; GFX90A-NEXT: s_setpc_b64 s[30:31]2208;2209; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_4:2210; GFX942: ; %bb.0:2211; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX942-NEXT: v_mov_b32_e32 v2, 02213; GFX942-NEXT: ;;#ASMSTART2214; GFX942-NEXT: ; def v[0:1]2215; GFX942-NEXT: ;;#ASMEND2216; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2217; GFX942-NEXT: s_waitcnt vmcnt(0)2218; GFX942-NEXT: s_setpc_b64 s[30:31]2219 %vec0 = call <4 x i16> asm "; def $0", "=v"()2220 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 4>2221 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42222 ret void2223}2224 2225define void @v_shuffle_v2i16_v4i16__1_4(ptr addrspace(1) inreg %ptr) {2226; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_4:2227; GFX900: ; %bb.0:2228; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX900-NEXT: ;;#ASMSTART2230; GFX900-NEXT: ; def v[0:1]2231; GFX900-NEXT: ;;#ASMEND2232; GFX900-NEXT: v_mov_b32_e32 v2, 02233; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 162234; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2235; GFX900-NEXT: s_waitcnt vmcnt(0)2236; GFX900-NEXT: s_setpc_b64 s[30:31]2237;2238; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_4:2239; GFX90A: ; %bb.0:2240; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2241; GFX90A-NEXT: ;;#ASMSTART2242; GFX90A-NEXT: ; def v[0:1]2243; GFX90A-NEXT: ;;#ASMEND2244; GFX90A-NEXT: v_mov_b32_e32 v2, 02245; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 162246; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2247; GFX90A-NEXT: s_waitcnt vmcnt(0)2248; GFX90A-NEXT: s_setpc_b64 s[30:31]2249;2250; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_4:2251; GFX942: ; %bb.0:2252; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2253; GFX942-NEXT: ;;#ASMSTART2254; GFX942-NEXT: ; def v[0:1]2255; GFX942-NEXT: ;;#ASMEND2256; GFX942-NEXT: v_mov_b32_e32 v2, 02257; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 162258; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2259; GFX942-NEXT: s_waitcnt vmcnt(0)2260; GFX942-NEXT: s_setpc_b64 s[30:31]2261 %vec0 = call <4 x i16> asm "; def $0", "=v"()2262 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 4>2263 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42264 ret void2265}2266 2267define void @v_shuffle_v2i16_v4i16__2_4(ptr addrspace(1) inreg %ptr) {2268; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_4:2269; GFX900: ; %bb.0:2270; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2271; GFX900-NEXT: v_mov_b32_e32 v2, 02272; GFX900-NEXT: ;;#ASMSTART2273; GFX900-NEXT: ; def v[0:1]2274; GFX900-NEXT: ;;#ASMEND2275; GFX900-NEXT: global_store_dword v2, v1, s[16:17]2276; GFX900-NEXT: s_waitcnt vmcnt(0)2277; GFX900-NEXT: s_setpc_b64 s[30:31]2278;2279; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_4:2280; GFX90A: ; %bb.0:2281; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2282; GFX90A-NEXT: v_mov_b32_e32 v2, 02283; GFX90A-NEXT: ;;#ASMSTART2284; GFX90A-NEXT: ; def v[0:1]2285; GFX90A-NEXT: ;;#ASMEND2286; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]2287; GFX90A-NEXT: s_waitcnt vmcnt(0)2288; GFX90A-NEXT: s_setpc_b64 s[30:31]2289;2290; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_4:2291; GFX942: ; %bb.0:2292; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2293; GFX942-NEXT: v_mov_b32_e32 v2, 02294; GFX942-NEXT: ;;#ASMSTART2295; GFX942-NEXT: ; def v[0:1]2296; GFX942-NEXT: ;;#ASMEND2297; GFX942-NEXT: global_store_dword v2, v1, s[0:1]2298; GFX942-NEXT: s_waitcnt vmcnt(0)2299; GFX942-NEXT: s_setpc_b64 s[30:31]2300 %vec0 = call <4 x i16> asm "; def $0", "=v"()2301 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 4>2302 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42303 ret void2304}2305 2306define void @v_shuffle_v2i16_v4i16__3_4(ptr addrspace(1) inreg %ptr) {2307; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_4:2308; GFX900: ; %bb.0:2309; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2310; GFX900-NEXT: ;;#ASMSTART2311; GFX900-NEXT: ; def v[0:1]2312; GFX900-NEXT: ;;#ASMEND2313; GFX900-NEXT: v_mov_b32_e32 v2, 02314; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 162315; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2316; GFX900-NEXT: s_waitcnt vmcnt(0)2317; GFX900-NEXT: s_setpc_b64 s[30:31]2318;2319; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_4:2320; GFX90A: ; %bb.0:2321; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2322; GFX90A-NEXT: ;;#ASMSTART2323; GFX90A-NEXT: ; def v[0:1]2324; GFX90A-NEXT: ;;#ASMEND2325; GFX90A-NEXT: v_mov_b32_e32 v2, 02326; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 162327; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2328; GFX90A-NEXT: s_waitcnt vmcnt(0)2329; GFX90A-NEXT: s_setpc_b64 s[30:31]2330;2331; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_4:2332; GFX942: ; %bb.0:2333; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; GFX942-NEXT: ;;#ASMSTART2335; GFX942-NEXT: ; def v[0:1]2336; GFX942-NEXT: ;;#ASMEND2337; GFX942-NEXT: v_mov_b32_e32 v2, 02338; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 162339; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2340; GFX942-NEXT: s_waitcnt vmcnt(0)2341; GFX942-NEXT: s_setpc_b64 s[30:31]2342 %vec0 = call <4 x i16> asm "; def $0", "=v"()2343 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 4>2344 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42345 ret void2346}2347 2348define void @v_shuffle_v2i16_v4i16__4_4(ptr addrspace(1) inreg %ptr) {2349; GFX9-LABEL: v_shuffle_v2i16_v4i16__4_4:2350; GFX9: ; %bb.0:2351; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2352; GFX9-NEXT: s_setpc_b64 s[30:31]2353 %vec0 = call <4 x i16> asm "; def $0", "=v"()2354 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 4>2355 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42356 ret void2357}2358 2359define void @v_shuffle_v2i16_v4i16__5_4(ptr addrspace(1) inreg %ptr) {2360; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_4:2361; GFX900: ; %bb.0:2362; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2363; GFX900-NEXT: ;;#ASMSTART2364; GFX900-NEXT: ; def v[0:1]2365; GFX900-NEXT: ;;#ASMEND2366; GFX900-NEXT: v_mov_b32_e32 v2, 02367; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 162368; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2369; GFX900-NEXT: s_waitcnt vmcnt(0)2370; GFX900-NEXT: s_setpc_b64 s[30:31]2371;2372; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_4:2373; GFX90A: ; %bb.0:2374; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2375; GFX90A-NEXT: ;;#ASMSTART2376; GFX90A-NEXT: ; def v[0:1]2377; GFX90A-NEXT: ;;#ASMEND2378; GFX90A-NEXT: v_mov_b32_e32 v2, 02379; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 162380; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2381; GFX90A-NEXT: s_waitcnt vmcnt(0)2382; GFX90A-NEXT: s_setpc_b64 s[30:31]2383;2384; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_4:2385; GFX942: ; %bb.0:2386; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2387; GFX942-NEXT: ;;#ASMSTART2388; GFX942-NEXT: ; def v[0:1]2389; GFX942-NEXT: ;;#ASMEND2390; GFX942-NEXT: v_mov_b32_e32 v2, 02391; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 162392; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2393; GFX942-NEXT: s_waitcnt vmcnt(0)2394; GFX942-NEXT: s_setpc_b64 s[30:31]2395 %vec0 = call <4 x i16> asm "; def $0", "=v"()2396 %vec1 = call <4 x i16> asm "; def $0", "=v"()2397 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 4>2398 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42399 ret void2400}2401 2402define void @v_shuffle_v2i16_v4i16__6_4(ptr addrspace(1) inreg %ptr) {2403; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_4:2404; GFX900: ; %bb.0:2405; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX900-NEXT: ;;#ASMSTART2407; GFX900-NEXT: ; def v[0:1]2408; GFX900-NEXT: ;;#ASMEND2409; GFX900-NEXT: s_mov_b32 s4, 0x50401002410; GFX900-NEXT: v_mov_b32_e32 v2, 02411; GFX900-NEXT: v_perm_b32 v0, v0, v1, s42412; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2413; GFX900-NEXT: s_waitcnt vmcnt(0)2414; GFX900-NEXT: s_setpc_b64 s[30:31]2415;2416; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_4:2417; GFX90A: ; %bb.0:2418; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2419; GFX90A-NEXT: ;;#ASMSTART2420; GFX90A-NEXT: ; def v[0:1]2421; GFX90A-NEXT: ;;#ASMEND2422; GFX90A-NEXT: s_mov_b32 s4, 0x50401002423; GFX90A-NEXT: v_mov_b32_e32 v2, 02424; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s42425; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2426; GFX90A-NEXT: s_waitcnt vmcnt(0)2427; GFX90A-NEXT: s_setpc_b64 s[30:31]2428;2429; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_4:2430; GFX942: ; %bb.0:2431; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2432; GFX942-NEXT: ;;#ASMSTART2433; GFX942-NEXT: ; def v[0:1]2434; GFX942-NEXT: ;;#ASMEND2435; GFX942-NEXT: s_mov_b32 s2, 0x50401002436; GFX942-NEXT: v_mov_b32_e32 v2, 02437; GFX942-NEXT: v_perm_b32 v0, v0, v1, s22438; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2439; GFX942-NEXT: s_waitcnt vmcnt(0)2440; GFX942-NEXT: s_setpc_b64 s[30:31]2441 %vec0 = call <4 x i16> asm "; def $0", "=v"()2442 %vec1 = call <4 x i16> asm "; def $0", "=v"()2443 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 4>2444 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42445 ret void2446}2447 2448define void @v_shuffle_v2i16_v4i16__u_5(ptr addrspace(1) inreg %ptr) {2449; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_5:2450; GFX900: ; %bb.0:2451; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2452; GFX900-NEXT: v_mov_b32_e32 v2, 02453; GFX900-NEXT: ;;#ASMSTART2454; GFX900-NEXT: ; def v[0:1]2455; GFX900-NEXT: ;;#ASMEND2456; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2457; GFX900-NEXT: s_waitcnt vmcnt(0)2458; GFX900-NEXT: s_setpc_b64 s[30:31]2459;2460; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_5:2461; GFX90A: ; %bb.0:2462; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2463; GFX90A-NEXT: v_mov_b32_e32 v2, 02464; GFX90A-NEXT: ;;#ASMSTART2465; GFX90A-NEXT: ; def v[0:1]2466; GFX90A-NEXT: ;;#ASMEND2467; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2468; GFX90A-NEXT: s_waitcnt vmcnt(0)2469; GFX90A-NEXT: s_setpc_b64 s[30:31]2470;2471; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_5:2472; GFX942: ; %bb.0:2473; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2474; GFX942-NEXT: v_mov_b32_e32 v2, 02475; GFX942-NEXT: ;;#ASMSTART2476; GFX942-NEXT: ; def v[0:1]2477; GFX942-NEXT: ;;#ASMEND2478; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2479; GFX942-NEXT: s_waitcnt vmcnt(0)2480; GFX942-NEXT: s_setpc_b64 s[30:31]2481 %vec0 = call <4 x i16> asm "; def $0", "=v"()2482 %vec1 = call <4 x i16> asm "; def $0", "=v"()2483 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 poison, i32 5>2484 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42485 ret void2486}2487 2488define void @v_shuffle_v2i16_v4i16__0_5(ptr addrspace(1) inreg %ptr) {2489; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_5:2490; GFX900: ; %bb.0:2491; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2492; GFX900-NEXT: ;;#ASMSTART2493; GFX900-NEXT: ; def v[0:1]2494; GFX900-NEXT: ;;#ASMEND2495; GFX900-NEXT: s_mov_b32 s4, 0xffff2496; GFX900-NEXT: v_mov_b32_e32 v3, 02497; GFX900-NEXT: ;;#ASMSTART2498; GFX900-NEXT: ; def v[1:2]2499; GFX900-NEXT: ;;#ASMEND2500; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v12501; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2502; GFX900-NEXT: s_waitcnt vmcnt(0)2503; GFX900-NEXT: s_setpc_b64 s[30:31]2504;2505; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_5:2506; GFX90A: ; %bb.0:2507; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2508; GFX90A-NEXT: ;;#ASMSTART2509; GFX90A-NEXT: ; def v[0:1]2510; GFX90A-NEXT: ;;#ASMEND2511; GFX90A-NEXT: s_mov_b32 s4, 0xffff2512; GFX90A-NEXT: v_mov_b32_e32 v4, 02513; GFX90A-NEXT: ;;#ASMSTART2514; GFX90A-NEXT: ; def v[2:3]2515; GFX90A-NEXT: ;;#ASMEND2516; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v22517; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2518; GFX90A-NEXT: s_waitcnt vmcnt(0)2519; GFX90A-NEXT: s_setpc_b64 s[30:31]2520;2521; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_5:2522; GFX942: ; %bb.0:2523; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2524; GFX942-NEXT: ;;#ASMSTART2525; GFX942-NEXT: ; def v[0:1]2526; GFX942-NEXT: ;;#ASMEND2527; GFX942-NEXT: s_mov_b32 s2, 0xffff2528; GFX942-NEXT: v_mov_b32_e32 v4, 02529; GFX942-NEXT: ;;#ASMSTART2530; GFX942-NEXT: ; def v[2:3]2531; GFX942-NEXT: ;;#ASMEND2532; GFX942-NEXT: s_nop 02533; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v22534; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2535; GFX942-NEXT: s_waitcnt vmcnt(0)2536; GFX942-NEXT: s_setpc_b64 s[30:31]2537 %vec0 = call <4 x i16> asm "; def $0", "=v"()2538 %vec1 = call <4 x i16> asm "; def $0", "=v"()2539 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 0, i32 5>2540 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42541 ret void2542}2543 2544define void @v_shuffle_v2i16_v4i16__1_5(ptr addrspace(1) inreg %ptr) {2545; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_5:2546; GFX900: ; %bb.0:2547; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2548; GFX900-NEXT: ;;#ASMSTART2549; GFX900-NEXT: ; def v[0:1]2550; GFX900-NEXT: ;;#ASMEND2551; GFX900-NEXT: s_mov_b32 s4, 0x70603022552; GFX900-NEXT: v_mov_b32_e32 v3, 02553; GFX900-NEXT: ;;#ASMSTART2554; GFX900-NEXT: ; def v[1:2]2555; GFX900-NEXT: ;;#ASMEND2556; GFX900-NEXT: v_perm_b32 v0, v1, v0, s42557; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2558; GFX900-NEXT: s_waitcnt vmcnt(0)2559; GFX900-NEXT: s_setpc_b64 s[30:31]2560;2561; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_5:2562; GFX90A: ; %bb.0:2563; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2564; GFX90A-NEXT: ;;#ASMSTART2565; GFX90A-NEXT: ; def v[0:1]2566; GFX90A-NEXT: ;;#ASMEND2567; GFX90A-NEXT: s_mov_b32 s4, 0x70603022568; GFX90A-NEXT: v_mov_b32_e32 v4, 02569; GFX90A-NEXT: ;;#ASMSTART2570; GFX90A-NEXT: ; def v[2:3]2571; GFX90A-NEXT: ;;#ASMEND2572; GFX90A-NEXT: v_perm_b32 v0, v2, v0, s42573; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2574; GFX90A-NEXT: s_waitcnt vmcnt(0)2575; GFX90A-NEXT: s_setpc_b64 s[30:31]2576;2577; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_5:2578; GFX942: ; %bb.0:2579; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2580; GFX942-NEXT: ;;#ASMSTART2581; GFX942-NEXT: ; def v[0:1]2582; GFX942-NEXT: ;;#ASMEND2583; GFX942-NEXT: s_mov_b32 s2, 0x70603022584; GFX942-NEXT: v_mov_b32_e32 v4, 02585; GFX942-NEXT: ;;#ASMSTART2586; GFX942-NEXT: ; def v[2:3]2587; GFX942-NEXT: ;;#ASMEND2588; GFX942-NEXT: s_nop 02589; GFX942-NEXT: v_perm_b32 v0, v2, v0, s22590; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2591; GFX942-NEXT: s_waitcnt vmcnt(0)2592; GFX942-NEXT: s_setpc_b64 s[30:31]2593 %vec0 = call <4 x i16> asm "; def $0", "=v"()2594 %vec1 = call <4 x i16> asm "; def $0", "=v"()2595 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 1, i32 5>2596 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42597 ret void2598}2599 2600define void @v_shuffle_v2i16_v4i16__2_5(ptr addrspace(1) inreg %ptr) {2601; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_5:2602; GFX900: ; %bb.0:2603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2604; GFX900-NEXT: ;;#ASMSTART2605; GFX900-NEXT: ; def v[0:1]2606; GFX900-NEXT: ;;#ASMEND2607; GFX900-NEXT: s_mov_b32 s4, 0xffff2608; GFX900-NEXT: v_mov_b32_e32 v4, 02609; GFX900-NEXT: ;;#ASMSTART2610; GFX900-NEXT: ; def v[2:3]2611; GFX900-NEXT: ;;#ASMEND2612; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v22613; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2614; GFX900-NEXT: s_waitcnt vmcnt(0)2615; GFX900-NEXT: s_setpc_b64 s[30:31]2616;2617; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_5:2618; GFX90A: ; %bb.0:2619; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2620; GFX90A-NEXT: ;;#ASMSTART2621; GFX90A-NEXT: ; def v[0:1]2622; GFX90A-NEXT: ;;#ASMEND2623; GFX90A-NEXT: s_mov_b32 s4, 0xffff2624; GFX90A-NEXT: v_mov_b32_e32 v4, 02625; GFX90A-NEXT: ;;#ASMSTART2626; GFX90A-NEXT: ; def v[2:3]2627; GFX90A-NEXT: ;;#ASMEND2628; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v22629; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2630; GFX90A-NEXT: s_waitcnt vmcnt(0)2631; GFX90A-NEXT: s_setpc_b64 s[30:31]2632;2633; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_5:2634; GFX942: ; %bb.0:2635; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX942-NEXT: ;;#ASMSTART2637; GFX942-NEXT: ; def v[0:1]2638; GFX942-NEXT: ;;#ASMEND2639; GFX942-NEXT: s_mov_b32 s2, 0xffff2640; GFX942-NEXT: v_mov_b32_e32 v4, 02641; GFX942-NEXT: ;;#ASMSTART2642; GFX942-NEXT: ; def v[2:3]2643; GFX942-NEXT: ;;#ASMEND2644; GFX942-NEXT: s_nop 02645; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v22646; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2647; GFX942-NEXT: s_waitcnt vmcnt(0)2648; GFX942-NEXT: s_setpc_b64 s[30:31]2649 %vec0 = call <4 x i16> asm "; def $0", "=v"()2650 %vec1 = call <4 x i16> asm "; def $0", "=v"()2651 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 2, i32 5>2652 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42653 ret void2654}2655 2656define void @v_shuffle_v2i16_v4i16__3_5(ptr addrspace(1) inreg %ptr) {2657; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_5:2658; GFX900: ; %bb.0:2659; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2660; GFX900-NEXT: ;;#ASMSTART2661; GFX900-NEXT: ; def v[0:1]2662; GFX900-NEXT: ;;#ASMEND2663; GFX900-NEXT: s_mov_b32 s4, 0x70603022664; GFX900-NEXT: v_mov_b32_e32 v4, 02665; GFX900-NEXT: ;;#ASMSTART2666; GFX900-NEXT: ; def v[2:3]2667; GFX900-NEXT: ;;#ASMEND2668; GFX900-NEXT: v_perm_b32 v0, v2, v1, s42669; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2670; GFX900-NEXT: s_waitcnt vmcnt(0)2671; GFX900-NEXT: s_setpc_b64 s[30:31]2672;2673; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_5:2674; GFX90A: ; %bb.0:2675; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2676; GFX90A-NEXT: ;;#ASMSTART2677; GFX90A-NEXT: ; def v[0:1]2678; GFX90A-NEXT: ;;#ASMEND2679; GFX90A-NEXT: s_mov_b32 s4, 0x70603022680; GFX90A-NEXT: v_mov_b32_e32 v4, 02681; GFX90A-NEXT: ;;#ASMSTART2682; GFX90A-NEXT: ; def v[2:3]2683; GFX90A-NEXT: ;;#ASMEND2684; GFX90A-NEXT: v_perm_b32 v0, v2, v1, s42685; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2686; GFX90A-NEXT: s_waitcnt vmcnt(0)2687; GFX90A-NEXT: s_setpc_b64 s[30:31]2688;2689; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_5:2690; GFX942: ; %bb.0:2691; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2692; GFX942-NEXT: ;;#ASMSTART2693; GFX942-NEXT: ; def v[0:1]2694; GFX942-NEXT: ;;#ASMEND2695; GFX942-NEXT: s_mov_b32 s2, 0x70603022696; GFX942-NEXT: v_mov_b32_e32 v4, 02697; GFX942-NEXT: ;;#ASMSTART2698; GFX942-NEXT: ; def v[2:3]2699; GFX942-NEXT: ;;#ASMEND2700; GFX942-NEXT: s_nop 02701; GFX942-NEXT: v_perm_b32 v0, v2, v1, s22702; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2703; GFX942-NEXT: s_waitcnt vmcnt(0)2704; GFX942-NEXT: s_setpc_b64 s[30:31]2705 %vec0 = call <4 x i16> asm "; def $0", "=v"()2706 %vec1 = call <4 x i16> asm "; def $0", "=v"()2707 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 3, i32 5>2708 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42709 ret void2710}2711 2712define void @v_shuffle_v2i16_v4i16__4_5(ptr addrspace(1) inreg %ptr) {2713; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_5:2714; GFX900: ; %bb.0:2715; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2716; GFX900-NEXT: v_mov_b32_e32 v2, 02717; GFX900-NEXT: ;;#ASMSTART2718; GFX900-NEXT: ; def v[0:1]2719; GFX900-NEXT: ;;#ASMEND2720; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2721; GFX900-NEXT: s_waitcnt vmcnt(0)2722; GFX900-NEXT: s_setpc_b64 s[30:31]2723;2724; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_5:2725; GFX90A: ; %bb.0:2726; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2727; GFX90A-NEXT: v_mov_b32_e32 v2, 02728; GFX90A-NEXT: ;;#ASMSTART2729; GFX90A-NEXT: ; def v[0:1]2730; GFX90A-NEXT: ;;#ASMEND2731; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2732; GFX90A-NEXT: s_waitcnt vmcnt(0)2733; GFX90A-NEXT: s_setpc_b64 s[30:31]2734;2735; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_5:2736; GFX942: ; %bb.0:2737; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2738; GFX942-NEXT: v_mov_b32_e32 v2, 02739; GFX942-NEXT: ;;#ASMSTART2740; GFX942-NEXT: ; def v[0:1]2741; GFX942-NEXT: ;;#ASMEND2742; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2743; GFX942-NEXT: s_waitcnt vmcnt(0)2744; GFX942-NEXT: s_setpc_b64 s[30:31]2745 %vec0 = call <4 x i16> asm "; def $0", "=v"()2746 %vec1 = call <4 x i16> asm "; def $0", "=v"()2747 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 4, i32 5>2748 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42749 ret void2750}2751 2752define void @v_shuffle_v2i16_v4i16__5_5(ptr addrspace(1) inreg %ptr) {2753; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_5:2754; GFX900: ; %bb.0:2755; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2756; GFX900-NEXT: ;;#ASMSTART2757; GFX900-NEXT: ; def v[0:1]2758; GFX900-NEXT: ;;#ASMEND2759; GFX900-NEXT: s_mov_b32 s4, 0x70603022760; GFX900-NEXT: v_mov_b32_e32 v2, 02761; GFX900-NEXT: v_perm_b32 v0, v0, v0, s42762; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2763; GFX900-NEXT: s_waitcnt vmcnt(0)2764; GFX900-NEXT: s_setpc_b64 s[30:31]2765;2766; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_5:2767; GFX90A: ; %bb.0:2768; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX90A-NEXT: ;;#ASMSTART2770; GFX90A-NEXT: ; def v[0:1]2771; GFX90A-NEXT: ;;#ASMEND2772; GFX90A-NEXT: s_mov_b32 s4, 0x70603022773; GFX90A-NEXT: v_mov_b32_e32 v2, 02774; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s42775; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2776; GFX90A-NEXT: s_waitcnt vmcnt(0)2777; GFX90A-NEXT: s_setpc_b64 s[30:31]2778;2779; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_5:2780; GFX942: ; %bb.0:2781; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2782; GFX942-NEXT: ;;#ASMSTART2783; GFX942-NEXT: ; def v[0:1]2784; GFX942-NEXT: ;;#ASMEND2785; GFX942-NEXT: s_mov_b32 s2, 0x70603022786; GFX942-NEXT: v_mov_b32_e32 v2, 02787; GFX942-NEXT: v_perm_b32 v0, v0, v0, s22788; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2789; GFX942-NEXT: s_waitcnt vmcnt(0)2790; GFX942-NEXT: s_setpc_b64 s[30:31]2791 %vec0 = call <4 x i16> asm "; def $0", "=v"()2792 %vec1 = call <4 x i16> asm "; def $0", "=v"()2793 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 5>2794 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42795 ret void2796}2797 2798define void @v_shuffle_v2i16_v4i16__6_5(ptr addrspace(1) inreg %ptr) {2799; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_5:2800; GFX900: ; %bb.0:2801; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2802; GFX900-NEXT: ;;#ASMSTART2803; GFX900-NEXT: ; def v[0:1]2804; GFX900-NEXT: ;;#ASMEND2805; GFX900-NEXT: s_mov_b32 s4, 0xffff2806; GFX900-NEXT: v_mov_b32_e32 v2, 02807; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v02808; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2809; GFX900-NEXT: s_waitcnt vmcnt(0)2810; GFX900-NEXT: s_setpc_b64 s[30:31]2811;2812; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_5:2813; GFX90A: ; %bb.0:2814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2815; GFX90A-NEXT: ;;#ASMSTART2816; GFX90A-NEXT: ; def v[0:1]2817; GFX90A-NEXT: ;;#ASMEND2818; GFX90A-NEXT: s_mov_b32 s4, 0xffff2819; GFX90A-NEXT: v_mov_b32_e32 v2, 02820; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v02821; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2822; GFX90A-NEXT: s_waitcnt vmcnt(0)2823; GFX90A-NEXT: s_setpc_b64 s[30:31]2824;2825; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_5:2826; GFX942: ; %bb.0:2827; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2828; GFX942-NEXT: ;;#ASMSTART2829; GFX942-NEXT: ; def v[0:1]2830; GFX942-NEXT: ;;#ASMEND2831; GFX942-NEXT: s_mov_b32 s2, 0xffff2832; GFX942-NEXT: v_mov_b32_e32 v2, 02833; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v02834; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2835; GFX942-NEXT: s_waitcnt vmcnt(0)2836; GFX942-NEXT: s_setpc_b64 s[30:31]2837 %vec0 = call <4 x i16> asm "; def $0", "=v"()2838 %vec1 = call <4 x i16> asm "; def $0", "=v"()2839 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 5>2840 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42841 ret void2842}2843 2844define void @v_shuffle_v2i16_v4i16__u_6(ptr addrspace(1) inreg %ptr) {2845; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_6:2846; GFX900: ; %bb.0:2847; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2848; GFX900-NEXT: ;;#ASMSTART2849; GFX900-NEXT: ; def v[0:1]2850; GFX900-NEXT: ;;#ASMEND2851; GFX900-NEXT: v_mov_b32_e32 v2, 02852; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v12853; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2854; GFX900-NEXT: s_waitcnt vmcnt(0)2855; GFX900-NEXT: s_setpc_b64 s[30:31]2856;2857; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_6:2858; GFX90A: ; %bb.0:2859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2860; GFX90A-NEXT: ;;#ASMSTART2861; GFX90A-NEXT: ; def v[0:1]2862; GFX90A-NEXT: ;;#ASMEND2863; GFX90A-NEXT: v_mov_b32_e32 v2, 02864; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v12865; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2866; GFX90A-NEXT: s_waitcnt vmcnt(0)2867; GFX90A-NEXT: s_setpc_b64 s[30:31]2868;2869; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_6:2870; GFX942: ; %bb.0:2871; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2872; GFX942-NEXT: ;;#ASMSTART2873; GFX942-NEXT: ; def v[0:1]2874; GFX942-NEXT: ;;#ASMEND2875; GFX942-NEXT: v_mov_b32_e32 v2, 02876; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v12877; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2878; GFX942-NEXT: s_waitcnt vmcnt(0)2879; GFX942-NEXT: s_setpc_b64 s[30:31]2880 %vec0 = call <4 x i16> asm "; def $0", "=v"()2881 %vec1 = call <4 x i16> asm "; def $0", "=v"()2882 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 poison, i32 6>2883 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42884 ret void2885}2886 2887define void @v_shuffle_v2i16_v4i16__0_6(ptr addrspace(1) inreg %ptr) {2888; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_6:2889; GFX900: ; %bb.0:2890; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2891; GFX900-NEXT: ;;#ASMSTART2892; GFX900-NEXT: ; def v[0:1]2893; GFX900-NEXT: ;;#ASMEND2894; GFX900-NEXT: s_mov_b32 s4, 0x50401002895; GFX900-NEXT: v_mov_b32_e32 v3, 02896; GFX900-NEXT: ;;#ASMSTART2897; GFX900-NEXT: ; def v[1:2]2898; GFX900-NEXT: ;;#ASMEND2899; GFX900-NEXT: v_perm_b32 v0, v2, v0, s42900; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2901; GFX900-NEXT: s_waitcnt vmcnt(0)2902; GFX900-NEXT: s_setpc_b64 s[30:31]2903;2904; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_6:2905; GFX90A: ; %bb.0:2906; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2907; GFX90A-NEXT: ;;#ASMSTART2908; GFX90A-NEXT: ; def v[0:1]2909; GFX90A-NEXT: ;;#ASMEND2910; GFX90A-NEXT: s_mov_b32 s4, 0x50401002911; GFX90A-NEXT: v_mov_b32_e32 v4, 02912; GFX90A-NEXT: ;;#ASMSTART2913; GFX90A-NEXT: ; def v[2:3]2914; GFX90A-NEXT: ;;#ASMEND2915; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s42916; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2917; GFX90A-NEXT: s_waitcnt vmcnt(0)2918; GFX90A-NEXT: s_setpc_b64 s[30:31]2919;2920; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_6:2921; GFX942: ; %bb.0:2922; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2923; GFX942-NEXT: ;;#ASMSTART2924; GFX942-NEXT: ; def v[0:1]2925; GFX942-NEXT: ;;#ASMEND2926; GFX942-NEXT: s_mov_b32 s2, 0x50401002927; GFX942-NEXT: v_mov_b32_e32 v4, 02928; GFX942-NEXT: ;;#ASMSTART2929; GFX942-NEXT: ; def v[2:3]2930; GFX942-NEXT: ;;#ASMEND2931; GFX942-NEXT: s_nop 02932; GFX942-NEXT: v_perm_b32 v0, v3, v0, s22933; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2934; GFX942-NEXT: s_waitcnt vmcnt(0)2935; GFX942-NEXT: s_setpc_b64 s[30:31]2936 %vec0 = call <4 x i16> asm "; def $0", "=v"()2937 %vec1 = call <4 x i16> asm "; def $0", "=v"()2938 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 0, i32 6>2939 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42940 ret void2941}2942 2943define void @v_shuffle_v2i16_v4i16__1_6(ptr addrspace(1) inreg %ptr) {2944; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_6:2945; GFX900: ; %bb.0:2946; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2947; GFX900-NEXT: ;;#ASMSTART2948; GFX900-NEXT: ; def v[0:1]2949; GFX900-NEXT: ;;#ASMEND2950; GFX900-NEXT: v_mov_b32_e32 v3, 02951; GFX900-NEXT: ;;#ASMSTART2952; GFX900-NEXT: ; def v[1:2]2953; GFX900-NEXT: ;;#ASMEND2954; GFX900-NEXT: v_alignbit_b32 v0, v2, v0, 162955; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2956; GFX900-NEXT: s_waitcnt vmcnt(0)2957; GFX900-NEXT: s_setpc_b64 s[30:31]2958;2959; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_6:2960; GFX90A: ; %bb.0:2961; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2962; GFX90A-NEXT: ;;#ASMSTART2963; GFX90A-NEXT: ; def v[0:1]2964; GFX90A-NEXT: ;;#ASMEND2965; GFX90A-NEXT: v_mov_b32_e32 v4, 02966; GFX90A-NEXT: ;;#ASMSTART2967; GFX90A-NEXT: ; def v[2:3]2968; GFX90A-NEXT: ;;#ASMEND2969; GFX90A-NEXT: v_alignbit_b32 v0, v3, v0, 162970; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2971; GFX90A-NEXT: s_waitcnt vmcnt(0)2972; GFX90A-NEXT: s_setpc_b64 s[30:31]2973;2974; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_6:2975; GFX942: ; %bb.0:2976; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2977; GFX942-NEXT: ;;#ASMSTART2978; GFX942-NEXT: ; def v[0:1]2979; GFX942-NEXT: ;;#ASMEND2980; GFX942-NEXT: v_mov_b32_e32 v4, 02981; GFX942-NEXT: ;;#ASMSTART2982; GFX942-NEXT: ; def v[2:3]2983; GFX942-NEXT: ;;#ASMEND2984; GFX942-NEXT: s_nop 02985; GFX942-NEXT: v_alignbit_b32 v0, v3, v0, 162986; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2987; GFX942-NEXT: s_waitcnt vmcnt(0)2988; GFX942-NEXT: s_setpc_b64 s[30:31]2989 %vec0 = call <4 x i16> asm "; def $0", "=v"()2990 %vec1 = call <4 x i16> asm "; def $0", "=v"()2991 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 1, i32 6>2992 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 42993 ret void2994}2995 2996define void @v_shuffle_v2i16_v4i16__2_6(ptr addrspace(1) inreg %ptr) {2997; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_6:2998; GFX900: ; %bb.0:2999; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3000; GFX900-NEXT: ;;#ASMSTART3001; GFX900-NEXT: ; def v[0:1]3002; GFX900-NEXT: ;;#ASMEND3003; GFX900-NEXT: s_mov_b32 s4, 0x50401003004; GFX900-NEXT: v_mov_b32_e32 v4, 03005; GFX900-NEXT: ;;#ASMSTART3006; GFX900-NEXT: ; def v[2:3]3007; GFX900-NEXT: ;;#ASMEND3008; GFX900-NEXT: v_perm_b32 v0, v3, v1, s43009; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3010; GFX900-NEXT: s_waitcnt vmcnt(0)3011; GFX900-NEXT: s_setpc_b64 s[30:31]3012;3013; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_6:3014; GFX90A: ; %bb.0:3015; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3016; GFX90A-NEXT: ;;#ASMSTART3017; GFX90A-NEXT: ; def v[0:1]3018; GFX90A-NEXT: ;;#ASMEND3019; GFX90A-NEXT: s_mov_b32 s4, 0x50401003020; GFX90A-NEXT: v_mov_b32_e32 v4, 03021; GFX90A-NEXT: ;;#ASMSTART3022; GFX90A-NEXT: ; def v[2:3]3023; GFX90A-NEXT: ;;#ASMEND3024; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s43025; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3026; GFX90A-NEXT: s_waitcnt vmcnt(0)3027; GFX90A-NEXT: s_setpc_b64 s[30:31]3028;3029; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_6:3030; GFX942: ; %bb.0:3031; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3032; GFX942-NEXT: ;;#ASMSTART3033; GFX942-NEXT: ; def v[0:1]3034; GFX942-NEXT: ;;#ASMEND3035; GFX942-NEXT: s_mov_b32 s2, 0x50401003036; GFX942-NEXT: v_mov_b32_e32 v4, 03037; GFX942-NEXT: ;;#ASMSTART3038; GFX942-NEXT: ; def v[2:3]3039; GFX942-NEXT: ;;#ASMEND3040; GFX942-NEXT: s_nop 03041; GFX942-NEXT: v_perm_b32 v0, v3, v1, s23042; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3043; GFX942-NEXT: s_waitcnt vmcnt(0)3044; GFX942-NEXT: s_setpc_b64 s[30:31]3045 %vec0 = call <4 x i16> asm "; def $0", "=v"()3046 %vec1 = call <4 x i16> asm "; def $0", "=v"()3047 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 2, i32 6>3048 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43049 ret void3050}3051 3052define void @v_shuffle_v2i16_v4i16__3_6(ptr addrspace(1) inreg %ptr) {3053; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_6:3054; GFX900: ; %bb.0:3055; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3056; GFX900-NEXT: ;;#ASMSTART3057; GFX900-NEXT: ; def v[0:1]3058; GFX900-NEXT: ;;#ASMEND3059; GFX900-NEXT: v_mov_b32_e32 v4, 03060; GFX900-NEXT: ;;#ASMSTART3061; GFX900-NEXT: ; def v[2:3]3062; GFX900-NEXT: ;;#ASMEND3063; GFX900-NEXT: v_alignbit_b32 v0, v3, v1, 163064; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3065; GFX900-NEXT: s_waitcnt vmcnt(0)3066; GFX900-NEXT: s_setpc_b64 s[30:31]3067;3068; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_6:3069; GFX90A: ; %bb.0:3070; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3071; GFX90A-NEXT: ;;#ASMSTART3072; GFX90A-NEXT: ; def v[0:1]3073; GFX90A-NEXT: ;;#ASMEND3074; GFX90A-NEXT: v_mov_b32_e32 v4, 03075; GFX90A-NEXT: ;;#ASMSTART3076; GFX90A-NEXT: ; def v[2:3]3077; GFX90A-NEXT: ;;#ASMEND3078; GFX90A-NEXT: v_alignbit_b32 v0, v3, v1, 163079; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3080; GFX90A-NEXT: s_waitcnt vmcnt(0)3081; GFX90A-NEXT: s_setpc_b64 s[30:31]3082;3083; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_6:3084; GFX942: ; %bb.0:3085; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3086; GFX942-NEXT: ;;#ASMSTART3087; GFX942-NEXT: ; def v[0:1]3088; GFX942-NEXT: ;;#ASMEND3089; GFX942-NEXT: v_mov_b32_e32 v4, 03090; GFX942-NEXT: ;;#ASMSTART3091; GFX942-NEXT: ; def v[2:3]3092; GFX942-NEXT: ;;#ASMEND3093; GFX942-NEXT: s_nop 03094; GFX942-NEXT: v_alignbit_b32 v0, v3, v1, 163095; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3096; GFX942-NEXT: s_waitcnt vmcnt(0)3097; GFX942-NEXT: s_setpc_b64 s[30:31]3098 %vec0 = call <4 x i16> asm "; def $0", "=v"()3099 %vec1 = call <4 x i16> asm "; def $0", "=v"()3100 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 3, i32 6>3101 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43102 ret void3103}3104 3105define void @v_shuffle_v2i16_v4i16__4_6(ptr addrspace(1) inreg %ptr) {3106; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_6:3107; GFX900: ; %bb.0:3108; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3109; GFX900-NEXT: ;;#ASMSTART3110; GFX900-NEXT: ; def v[0:1]3111; GFX900-NEXT: ;;#ASMEND3112; GFX900-NEXT: s_mov_b32 s4, 0x50401003113; GFX900-NEXT: v_mov_b32_e32 v2, 03114; GFX900-NEXT: v_perm_b32 v0, v1, v0, s43115; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3116; GFX900-NEXT: s_waitcnt vmcnt(0)3117; GFX900-NEXT: s_setpc_b64 s[30:31]3118;3119; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_6:3120; GFX90A: ; %bb.0:3121; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; GFX90A-NEXT: ;;#ASMSTART3123; GFX90A-NEXT: ; def v[0:1]3124; GFX90A-NEXT: ;;#ASMEND3125; GFX90A-NEXT: s_mov_b32 s4, 0x50401003126; GFX90A-NEXT: v_mov_b32_e32 v2, 03127; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s43128; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3129; GFX90A-NEXT: s_waitcnt vmcnt(0)3130; GFX90A-NEXT: s_setpc_b64 s[30:31]3131;3132; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_6:3133; GFX942: ; %bb.0:3134; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3135; GFX942-NEXT: ;;#ASMSTART3136; GFX942-NEXT: ; def v[0:1]3137; GFX942-NEXT: ;;#ASMEND3138; GFX942-NEXT: s_mov_b32 s2, 0x50401003139; GFX942-NEXT: v_mov_b32_e32 v2, 03140; GFX942-NEXT: v_perm_b32 v0, v1, v0, s23141; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3142; GFX942-NEXT: s_waitcnt vmcnt(0)3143; GFX942-NEXT: s_setpc_b64 s[30:31]3144 %vec0 = call <4 x i16> asm "; def $0", "=v"()3145 %vec1 = call <4 x i16> asm "; def $0", "=v"()3146 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 4, i32 6>3147 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43148 ret void3149}3150 3151define void @v_shuffle_v2i16_v4i16__5_6(ptr addrspace(1) inreg %ptr) {3152; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_6:3153; GFX900: ; %bb.0:3154; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3155; GFX900-NEXT: ;;#ASMSTART3156; GFX900-NEXT: ; def v[0:1]3157; GFX900-NEXT: ;;#ASMEND3158; GFX900-NEXT: v_mov_b32_e32 v2, 03159; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 163160; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3161; GFX900-NEXT: s_waitcnt vmcnt(0)3162; GFX900-NEXT: s_setpc_b64 s[30:31]3163;3164; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_6:3165; GFX90A: ; %bb.0:3166; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3167; GFX90A-NEXT: ;;#ASMSTART3168; GFX90A-NEXT: ; def v[0:1]3169; GFX90A-NEXT: ;;#ASMEND3170; GFX90A-NEXT: v_mov_b32_e32 v2, 03171; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 163172; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3173; GFX90A-NEXT: s_waitcnt vmcnt(0)3174; GFX90A-NEXT: s_setpc_b64 s[30:31]3175;3176; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_6:3177; GFX942: ; %bb.0:3178; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3179; GFX942-NEXT: ;;#ASMSTART3180; GFX942-NEXT: ; def v[0:1]3181; GFX942-NEXT: ;;#ASMEND3182; GFX942-NEXT: v_mov_b32_e32 v2, 03183; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 163184; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3185; GFX942-NEXT: s_waitcnt vmcnt(0)3186; GFX942-NEXT: s_setpc_b64 s[30:31]3187 %vec0 = call <4 x i16> asm "; def $0", "=v"()3188 %vec1 = call <4 x i16> asm "; def $0", "=v"()3189 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 6>3190 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43191 ret void3192}3193 3194define void @v_shuffle_v2i16_v4i16__6_6(ptr addrspace(1) inreg %ptr) {3195; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_6:3196; GFX900: ; %bb.0:3197; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3198; GFX900-NEXT: ;;#ASMSTART3199; GFX900-NEXT: ; def v[0:1]3200; GFX900-NEXT: ;;#ASMEND3201; GFX900-NEXT: s_mov_b32 s4, 0x50401003202; GFX900-NEXT: v_mov_b32_e32 v2, 03203; GFX900-NEXT: v_perm_b32 v0, v1, v1, s43204; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3205; GFX900-NEXT: s_waitcnt vmcnt(0)3206; GFX900-NEXT: s_setpc_b64 s[30:31]3207;3208; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_6:3209; GFX90A: ; %bb.0:3210; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3211; GFX90A-NEXT: ;;#ASMSTART3212; GFX90A-NEXT: ; def v[0:1]3213; GFX90A-NEXT: ;;#ASMEND3214; GFX90A-NEXT: s_mov_b32 s4, 0x50401003215; GFX90A-NEXT: v_mov_b32_e32 v2, 03216; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s43217; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3218; GFX90A-NEXT: s_waitcnt vmcnt(0)3219; GFX90A-NEXT: s_setpc_b64 s[30:31]3220;3221; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_6:3222; GFX942: ; %bb.0:3223; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3224; GFX942-NEXT: ;;#ASMSTART3225; GFX942-NEXT: ; def v[0:1]3226; GFX942-NEXT: ;;#ASMEND3227; GFX942-NEXT: s_mov_b32 s2, 0x50401003228; GFX942-NEXT: v_mov_b32_e32 v2, 03229; GFX942-NEXT: v_perm_b32 v0, v1, v1, s23230; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3231; GFX942-NEXT: s_waitcnt vmcnt(0)3232; GFX942-NEXT: s_setpc_b64 s[30:31]3233 %vec0 = call <4 x i16> asm "; def $0", "=v"()3234 %vec1 = call <4 x i16> asm "; def $0", "=v"()3235 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 6>3236 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43237 ret void3238}3239 3240define void @v_shuffle_v2i16_v4i16__u_7(ptr addrspace(1) inreg %ptr) {3241; GFX900-LABEL: v_shuffle_v2i16_v4i16__u_7:3242; GFX900: ; %bb.0:3243; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3244; GFX900-NEXT: v_mov_b32_e32 v2, 03245; GFX900-NEXT: ;;#ASMSTART3246; GFX900-NEXT: ; def v[0:1]3247; GFX900-NEXT: ;;#ASMEND3248; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3249; GFX900-NEXT: s_waitcnt vmcnt(0)3250; GFX900-NEXT: s_setpc_b64 s[30:31]3251;3252; GFX90A-LABEL: v_shuffle_v2i16_v4i16__u_7:3253; GFX90A: ; %bb.0:3254; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3255; GFX90A-NEXT: v_mov_b32_e32 v2, 03256; GFX90A-NEXT: ;;#ASMSTART3257; GFX90A-NEXT: ; def v[0:1]3258; GFX90A-NEXT: ;;#ASMEND3259; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3260; GFX90A-NEXT: s_waitcnt vmcnt(0)3261; GFX90A-NEXT: s_setpc_b64 s[30:31]3262;3263; GFX942-LABEL: v_shuffle_v2i16_v4i16__u_7:3264; GFX942: ; %bb.0:3265; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3266; GFX942-NEXT: v_mov_b32_e32 v2, 03267; GFX942-NEXT: ;;#ASMSTART3268; GFX942-NEXT: ; def v[0:1]3269; GFX942-NEXT: ;;#ASMEND3270; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3271; GFX942-NEXT: s_waitcnt vmcnt(0)3272; GFX942-NEXT: s_setpc_b64 s[30:31]3273 %vec0 = call <4 x i16> asm "; def $0", "=v"()3274 %vec1 = call <4 x i16> asm "; def $0", "=v"()3275 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 poison, i32 7>3276 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43277 ret void3278}3279 3280define void @v_shuffle_v2i16_v4i16__0_7(ptr addrspace(1) inreg %ptr) {3281; GFX900-LABEL: v_shuffle_v2i16_v4i16__0_7:3282; GFX900: ; %bb.0:3283; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3284; GFX900-NEXT: ;;#ASMSTART3285; GFX900-NEXT: ; def v[0:1]3286; GFX900-NEXT: ;;#ASMEND3287; GFX900-NEXT: s_mov_b32 s4, 0xffff3288; GFX900-NEXT: v_mov_b32_e32 v3, 03289; GFX900-NEXT: ;;#ASMSTART3290; GFX900-NEXT: ; def v[1:2]3291; GFX900-NEXT: ;;#ASMEND3292; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v23293; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3294; GFX900-NEXT: s_waitcnt vmcnt(0)3295; GFX900-NEXT: s_setpc_b64 s[30:31]3296;3297; GFX90A-LABEL: v_shuffle_v2i16_v4i16__0_7:3298; GFX90A: ; %bb.0:3299; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3300; GFX90A-NEXT: ;;#ASMSTART3301; GFX90A-NEXT: ; def v[0:1]3302; GFX90A-NEXT: ;;#ASMEND3303; GFX90A-NEXT: s_mov_b32 s4, 0xffff3304; GFX90A-NEXT: v_mov_b32_e32 v4, 03305; GFX90A-NEXT: ;;#ASMSTART3306; GFX90A-NEXT: ; def v[2:3]3307; GFX90A-NEXT: ;;#ASMEND3308; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v33309; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3310; GFX90A-NEXT: s_waitcnt vmcnt(0)3311; GFX90A-NEXT: s_setpc_b64 s[30:31]3312;3313; GFX942-LABEL: v_shuffle_v2i16_v4i16__0_7:3314; GFX942: ; %bb.0:3315; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3316; GFX942-NEXT: ;;#ASMSTART3317; GFX942-NEXT: ; def v[0:1]3318; GFX942-NEXT: ;;#ASMEND3319; GFX942-NEXT: s_mov_b32 s2, 0xffff3320; GFX942-NEXT: v_mov_b32_e32 v4, 03321; GFX942-NEXT: ;;#ASMSTART3322; GFX942-NEXT: ; def v[2:3]3323; GFX942-NEXT: ;;#ASMEND3324; GFX942-NEXT: s_nop 03325; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v33326; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3327; GFX942-NEXT: s_waitcnt vmcnt(0)3328; GFX942-NEXT: s_setpc_b64 s[30:31]3329 %vec0 = call <4 x i16> asm "; def $0", "=v"()3330 %vec1 = call <4 x i16> asm "; def $0", "=v"()3331 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 0, i32 7>3332 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43333 ret void3334}3335 3336define void @v_shuffle_v2i16_v4i16__1_7(ptr addrspace(1) inreg %ptr) {3337; GFX900-LABEL: v_shuffle_v2i16_v4i16__1_7:3338; GFX900: ; %bb.0:3339; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; GFX900-NEXT: ;;#ASMSTART3341; GFX900-NEXT: ; def v[0:1]3342; GFX900-NEXT: ;;#ASMEND3343; GFX900-NEXT: s_mov_b32 s4, 0x70603023344; GFX900-NEXT: v_mov_b32_e32 v3, 03345; GFX900-NEXT: ;;#ASMSTART3346; GFX900-NEXT: ; def v[1:2]3347; GFX900-NEXT: ;;#ASMEND3348; GFX900-NEXT: v_perm_b32 v0, v2, v0, s43349; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3350; GFX900-NEXT: s_waitcnt vmcnt(0)3351; GFX900-NEXT: s_setpc_b64 s[30:31]3352;3353; GFX90A-LABEL: v_shuffle_v2i16_v4i16__1_7:3354; GFX90A: ; %bb.0:3355; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3356; GFX90A-NEXT: ;;#ASMSTART3357; GFX90A-NEXT: ; def v[0:1]3358; GFX90A-NEXT: ;;#ASMEND3359; GFX90A-NEXT: s_mov_b32 s4, 0x70603023360; GFX90A-NEXT: v_mov_b32_e32 v4, 03361; GFX90A-NEXT: ;;#ASMSTART3362; GFX90A-NEXT: ; def v[2:3]3363; GFX90A-NEXT: ;;#ASMEND3364; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s43365; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3366; GFX90A-NEXT: s_waitcnt vmcnt(0)3367; GFX90A-NEXT: s_setpc_b64 s[30:31]3368;3369; GFX942-LABEL: v_shuffle_v2i16_v4i16__1_7:3370; GFX942: ; %bb.0:3371; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3372; GFX942-NEXT: ;;#ASMSTART3373; GFX942-NEXT: ; def v[0:1]3374; GFX942-NEXT: ;;#ASMEND3375; GFX942-NEXT: s_mov_b32 s2, 0x70603023376; GFX942-NEXT: v_mov_b32_e32 v4, 03377; GFX942-NEXT: ;;#ASMSTART3378; GFX942-NEXT: ; def v[2:3]3379; GFX942-NEXT: ;;#ASMEND3380; GFX942-NEXT: s_nop 03381; GFX942-NEXT: v_perm_b32 v0, v3, v0, s23382; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3383; GFX942-NEXT: s_waitcnt vmcnt(0)3384; GFX942-NEXT: s_setpc_b64 s[30:31]3385 %vec0 = call <4 x i16> asm "; def $0", "=v"()3386 %vec1 = call <4 x i16> asm "; def $0", "=v"()3387 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 1, i32 7>3388 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43389 ret void3390}3391 3392define void @v_shuffle_v2i16_v4i16__2_7(ptr addrspace(1) inreg %ptr) {3393; GFX900-LABEL: v_shuffle_v2i16_v4i16__2_7:3394; GFX900: ; %bb.0:3395; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3396; GFX900-NEXT: ;;#ASMSTART3397; GFX900-NEXT: ; def v[0:1]3398; GFX900-NEXT: ;;#ASMEND3399; GFX900-NEXT: s_mov_b32 s4, 0xffff3400; GFX900-NEXT: v_mov_b32_e32 v4, 03401; GFX900-NEXT: ;;#ASMSTART3402; GFX900-NEXT: ; def v[2:3]3403; GFX900-NEXT: ;;#ASMEND3404; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v33405; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3406; GFX900-NEXT: s_waitcnt vmcnt(0)3407; GFX900-NEXT: s_setpc_b64 s[30:31]3408;3409; GFX90A-LABEL: v_shuffle_v2i16_v4i16__2_7:3410; GFX90A: ; %bb.0:3411; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3412; GFX90A-NEXT: ;;#ASMSTART3413; GFX90A-NEXT: ; def v[0:1]3414; GFX90A-NEXT: ;;#ASMEND3415; GFX90A-NEXT: s_mov_b32 s4, 0xffff3416; GFX90A-NEXT: v_mov_b32_e32 v4, 03417; GFX90A-NEXT: ;;#ASMSTART3418; GFX90A-NEXT: ; def v[2:3]3419; GFX90A-NEXT: ;;#ASMEND3420; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v33421; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3422; GFX90A-NEXT: s_waitcnt vmcnt(0)3423; GFX90A-NEXT: s_setpc_b64 s[30:31]3424;3425; GFX942-LABEL: v_shuffle_v2i16_v4i16__2_7:3426; GFX942: ; %bb.0:3427; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3428; GFX942-NEXT: ;;#ASMSTART3429; GFX942-NEXT: ; def v[0:1]3430; GFX942-NEXT: ;;#ASMEND3431; GFX942-NEXT: s_mov_b32 s2, 0xffff3432; GFX942-NEXT: v_mov_b32_e32 v4, 03433; GFX942-NEXT: ;;#ASMSTART3434; GFX942-NEXT: ; def v[2:3]3435; GFX942-NEXT: ;;#ASMEND3436; GFX942-NEXT: s_nop 03437; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v33438; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3439; GFX942-NEXT: s_waitcnt vmcnt(0)3440; GFX942-NEXT: s_setpc_b64 s[30:31]3441 %vec0 = call <4 x i16> asm "; def $0", "=v"()3442 %vec1 = call <4 x i16> asm "; def $0", "=v"()3443 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 2, i32 7>3444 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43445 ret void3446}3447 3448define void @v_shuffle_v2i16_v4i16__3_7(ptr addrspace(1) inreg %ptr) {3449; GFX900-LABEL: v_shuffle_v2i16_v4i16__3_7:3450; GFX900: ; %bb.0:3451; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3452; GFX900-NEXT: ;;#ASMSTART3453; GFX900-NEXT: ; def v[0:1]3454; GFX900-NEXT: ;;#ASMEND3455; GFX900-NEXT: s_mov_b32 s4, 0x70603023456; GFX900-NEXT: v_mov_b32_e32 v4, 03457; GFX900-NEXT: ;;#ASMSTART3458; GFX900-NEXT: ; def v[2:3]3459; GFX900-NEXT: ;;#ASMEND3460; GFX900-NEXT: v_perm_b32 v0, v3, v1, s43461; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3462; GFX900-NEXT: s_waitcnt vmcnt(0)3463; GFX900-NEXT: s_setpc_b64 s[30:31]3464;3465; GFX90A-LABEL: v_shuffle_v2i16_v4i16__3_7:3466; GFX90A: ; %bb.0:3467; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3468; GFX90A-NEXT: ;;#ASMSTART3469; GFX90A-NEXT: ; def v[0:1]3470; GFX90A-NEXT: ;;#ASMEND3471; GFX90A-NEXT: s_mov_b32 s4, 0x70603023472; GFX90A-NEXT: v_mov_b32_e32 v4, 03473; GFX90A-NEXT: ;;#ASMSTART3474; GFX90A-NEXT: ; def v[2:3]3475; GFX90A-NEXT: ;;#ASMEND3476; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s43477; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3478; GFX90A-NEXT: s_waitcnt vmcnt(0)3479; GFX90A-NEXT: s_setpc_b64 s[30:31]3480;3481; GFX942-LABEL: v_shuffle_v2i16_v4i16__3_7:3482; GFX942: ; %bb.0:3483; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3484; GFX942-NEXT: ;;#ASMSTART3485; GFX942-NEXT: ; def v[0:1]3486; GFX942-NEXT: ;;#ASMEND3487; GFX942-NEXT: s_mov_b32 s2, 0x70603023488; GFX942-NEXT: v_mov_b32_e32 v4, 03489; GFX942-NEXT: ;;#ASMSTART3490; GFX942-NEXT: ; def v[2:3]3491; GFX942-NEXT: ;;#ASMEND3492; GFX942-NEXT: s_nop 03493; GFX942-NEXT: v_perm_b32 v0, v3, v1, s23494; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3495; GFX942-NEXT: s_waitcnt vmcnt(0)3496; GFX942-NEXT: s_setpc_b64 s[30:31]3497 %vec0 = call <4 x i16> asm "; def $0", "=v"()3498 %vec1 = call <4 x i16> asm "; def $0", "=v"()3499 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 3, i32 7>3500 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43501 ret void3502}3503 3504define void @v_shuffle_v2i16_v4i16__4_7(ptr addrspace(1) inreg %ptr) {3505; GFX900-LABEL: v_shuffle_v2i16_v4i16__4_7:3506; GFX900: ; %bb.0:3507; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3508; GFX900-NEXT: ;;#ASMSTART3509; GFX900-NEXT: ; def v[0:1]3510; GFX900-NEXT: ;;#ASMEND3511; GFX900-NEXT: s_mov_b32 s4, 0xffff3512; GFX900-NEXT: v_mov_b32_e32 v2, 03513; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v13514; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3515; GFX900-NEXT: s_waitcnt vmcnt(0)3516; GFX900-NEXT: s_setpc_b64 s[30:31]3517;3518; GFX90A-LABEL: v_shuffle_v2i16_v4i16__4_7:3519; GFX90A: ; %bb.0:3520; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3521; GFX90A-NEXT: ;;#ASMSTART3522; GFX90A-NEXT: ; def v[0:1]3523; GFX90A-NEXT: ;;#ASMEND3524; GFX90A-NEXT: s_mov_b32 s4, 0xffff3525; GFX90A-NEXT: v_mov_b32_e32 v2, 03526; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v13527; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3528; GFX90A-NEXT: s_waitcnt vmcnt(0)3529; GFX90A-NEXT: s_setpc_b64 s[30:31]3530;3531; GFX942-LABEL: v_shuffle_v2i16_v4i16__4_7:3532; GFX942: ; %bb.0:3533; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3534; GFX942-NEXT: ;;#ASMSTART3535; GFX942-NEXT: ; def v[0:1]3536; GFX942-NEXT: ;;#ASMEND3537; GFX942-NEXT: s_mov_b32 s2, 0xffff3538; GFX942-NEXT: v_mov_b32_e32 v2, 03539; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v13540; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3541; GFX942-NEXT: s_waitcnt vmcnt(0)3542; GFX942-NEXT: s_setpc_b64 s[30:31]3543 %vec0 = call <4 x i16> asm "; def $0", "=v"()3544 %vec1 = call <4 x i16> asm "; def $0", "=v"()3545 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 4, i32 7>3546 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43547 ret void3548}3549 3550define void @v_shuffle_v2i16_v4i16__5_7(ptr addrspace(1) inreg %ptr) {3551; GFX900-LABEL: v_shuffle_v2i16_v4i16__5_7:3552; GFX900: ; %bb.0:3553; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3554; GFX900-NEXT: ;;#ASMSTART3555; GFX900-NEXT: ; def v[0:1]3556; GFX900-NEXT: ;;#ASMEND3557; GFX900-NEXT: s_mov_b32 s4, 0x70603023558; GFX900-NEXT: v_mov_b32_e32 v2, 03559; GFX900-NEXT: v_perm_b32 v0, v1, v0, s43560; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3561; GFX900-NEXT: s_waitcnt vmcnt(0)3562; GFX900-NEXT: s_setpc_b64 s[30:31]3563;3564; GFX90A-LABEL: v_shuffle_v2i16_v4i16__5_7:3565; GFX90A: ; %bb.0:3566; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3567; GFX90A-NEXT: ;;#ASMSTART3568; GFX90A-NEXT: ; def v[0:1]3569; GFX90A-NEXT: ;;#ASMEND3570; GFX90A-NEXT: s_mov_b32 s4, 0x70603023571; GFX90A-NEXT: v_mov_b32_e32 v2, 03572; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s43573; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3574; GFX90A-NEXT: s_waitcnt vmcnt(0)3575; GFX90A-NEXT: s_setpc_b64 s[30:31]3576;3577; GFX942-LABEL: v_shuffle_v2i16_v4i16__5_7:3578; GFX942: ; %bb.0:3579; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3580; GFX942-NEXT: ;;#ASMSTART3581; GFX942-NEXT: ; def v[0:1]3582; GFX942-NEXT: ;;#ASMEND3583; GFX942-NEXT: s_mov_b32 s2, 0x70603023584; GFX942-NEXT: v_mov_b32_e32 v2, 03585; GFX942-NEXT: v_perm_b32 v0, v1, v0, s23586; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3587; GFX942-NEXT: s_waitcnt vmcnt(0)3588; GFX942-NEXT: s_setpc_b64 s[30:31]3589 %vec0 = call <4 x i16> asm "; def $0", "=v"()3590 %vec1 = call <4 x i16> asm "; def $0", "=v"()3591 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 7>3592 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43593 ret void3594}3595 3596define void @v_shuffle_v2i16_v4i16__6_7(ptr addrspace(1) inreg %ptr) {3597; GFX900-LABEL: v_shuffle_v2i16_v4i16__6_7:3598; GFX900: ; %bb.0:3599; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3600; GFX900-NEXT: v_mov_b32_e32 v2, 03601; GFX900-NEXT: ;;#ASMSTART3602; GFX900-NEXT: ; def v[0:1]3603; GFX900-NEXT: ;;#ASMEND3604; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3605; GFX900-NEXT: s_waitcnt vmcnt(0)3606; GFX900-NEXT: s_setpc_b64 s[30:31]3607;3608; GFX90A-LABEL: v_shuffle_v2i16_v4i16__6_7:3609; GFX90A: ; %bb.0:3610; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3611; GFX90A-NEXT: v_mov_b32_e32 v2, 03612; GFX90A-NEXT: ;;#ASMSTART3613; GFX90A-NEXT: ; def v[0:1]3614; GFX90A-NEXT: ;;#ASMEND3615; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3616; GFX90A-NEXT: s_waitcnt vmcnt(0)3617; GFX90A-NEXT: s_setpc_b64 s[30:31]3618;3619; GFX942-LABEL: v_shuffle_v2i16_v4i16__6_7:3620; GFX942: ; %bb.0:3621; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3622; GFX942-NEXT: v_mov_b32_e32 v2, 03623; GFX942-NEXT: ;;#ASMSTART3624; GFX942-NEXT: ; def v[0:1]3625; GFX942-NEXT: ;;#ASMEND3626; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3627; GFX942-NEXT: s_waitcnt vmcnt(0)3628; GFX942-NEXT: s_setpc_b64 s[30:31]3629 %vec0 = call <4 x i16> asm "; def $0", "=v"()3630 %vec1 = call <4 x i16> asm "; def $0", "=v"()3631 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 7>3632 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 43633 ret void3634}3635 3636define void @s_shuffle_v2i16_v4i16__u_u() {3637; GFX9-LABEL: s_shuffle_v2i16_v4i16__u_u:3638; GFX9: ; %bb.0:3639; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3640; GFX9-NEXT: ;;#ASMSTART3641; GFX9-NEXT: ; use s83642; GFX9-NEXT: ;;#ASMEND3643; GFX9-NEXT: s_setpc_b64 s[30:31]3644 %vec0 = call <4 x i16> asm "; def $0", "=s"()3645 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> poison3646 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3647 ret void3648}3649 3650define void @s_shuffle_v2i16_v4i16__0_u() {3651; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_u:3652; GFX900: ; %bb.0:3653; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3654; GFX900-NEXT: ;;#ASMSTART3655; GFX900-NEXT: ; def s[8:9]3656; GFX900-NEXT: ;;#ASMEND3657; GFX900-NEXT: ;;#ASMSTART3658; GFX900-NEXT: ; use s83659; GFX900-NEXT: ;;#ASMEND3660; GFX900-NEXT: s_setpc_b64 s[30:31]3661;3662; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_u:3663; GFX90A: ; %bb.0:3664; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3665; GFX90A-NEXT: ;;#ASMSTART3666; GFX90A-NEXT: ; def s[8:9]3667; GFX90A-NEXT: ;;#ASMEND3668; GFX90A-NEXT: ;;#ASMSTART3669; GFX90A-NEXT: ; use s83670; GFX90A-NEXT: ;;#ASMEND3671; GFX90A-NEXT: s_setpc_b64 s[30:31]3672;3673; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_u:3674; GFX942: ; %bb.0:3675; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3676; GFX942-NEXT: ;;#ASMSTART3677; GFX942-NEXT: ; def s[8:9]3678; GFX942-NEXT: ;;#ASMEND3679; GFX942-NEXT: s_nop 03680; GFX942-NEXT: ;;#ASMSTART3681; GFX942-NEXT: ; use s83682; GFX942-NEXT: ;;#ASMEND3683; GFX942-NEXT: s_setpc_b64 s[30:31]3684 %vec0 = call <4 x i16> asm "; def $0", "=s"()3685 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 poison>3686 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3687 ret void3688}3689 3690define void @s_shuffle_v2i16_v4i16__1_u() {3691; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_u:3692; GFX900: ; %bb.0:3693; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3694; GFX900-NEXT: ;;#ASMSTART3695; GFX900-NEXT: ; def s[4:5]3696; GFX900-NEXT: ;;#ASMEND3697; GFX900-NEXT: s_lshr_b32 s8, s4, 163698; GFX900-NEXT: ;;#ASMSTART3699; GFX900-NEXT: ; use s83700; GFX900-NEXT: ;;#ASMEND3701; GFX900-NEXT: s_setpc_b64 s[30:31]3702;3703; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_u:3704; GFX90A: ; %bb.0:3705; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3706; GFX90A-NEXT: ;;#ASMSTART3707; GFX90A-NEXT: ; def s[4:5]3708; GFX90A-NEXT: ;;#ASMEND3709; GFX90A-NEXT: s_lshr_b32 s8, s4, 163710; GFX90A-NEXT: ;;#ASMSTART3711; GFX90A-NEXT: ; use s83712; GFX90A-NEXT: ;;#ASMEND3713; GFX90A-NEXT: s_setpc_b64 s[30:31]3714;3715; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_u:3716; GFX942: ; %bb.0:3717; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3718; GFX942-NEXT: ;;#ASMSTART3719; GFX942-NEXT: ; def s[0:1]3720; GFX942-NEXT: ;;#ASMEND3721; GFX942-NEXT: s_lshr_b32 s8, s0, 163722; GFX942-NEXT: ;;#ASMSTART3723; GFX942-NEXT: ; use s83724; GFX942-NEXT: ;;#ASMEND3725; GFX942-NEXT: s_setpc_b64 s[30:31]3726 %vec0 = call <4 x i16> asm "; def $0", "=s"()3727 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 poison>3728 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3729 ret void3730}3731 3732define void @s_shuffle_v2i16_v4i16__2_u() {3733; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_u:3734; GFX900: ; %bb.0:3735; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3736; GFX900-NEXT: ;;#ASMSTART3737; GFX900-NEXT: ; def s[4:5]3738; GFX900-NEXT: ;;#ASMEND3739; GFX900-NEXT: s_mov_b32 s8, s53740; GFX900-NEXT: ;;#ASMSTART3741; GFX900-NEXT: ; use s83742; GFX900-NEXT: ;;#ASMEND3743; GFX900-NEXT: s_setpc_b64 s[30:31]3744;3745; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_u:3746; GFX90A: ; %bb.0:3747; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3748; GFX90A-NEXT: ;;#ASMSTART3749; GFX90A-NEXT: ; def s[4:5]3750; GFX90A-NEXT: ;;#ASMEND3751; GFX90A-NEXT: s_mov_b32 s8, s53752; GFX90A-NEXT: ;;#ASMSTART3753; GFX90A-NEXT: ; use s83754; GFX90A-NEXT: ;;#ASMEND3755; GFX90A-NEXT: s_setpc_b64 s[30:31]3756;3757; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_u:3758; GFX942: ; %bb.0:3759; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3760; GFX942-NEXT: ;;#ASMSTART3761; GFX942-NEXT: ; def s[0:1]3762; GFX942-NEXT: ;;#ASMEND3763; GFX942-NEXT: s_mov_b32 s8, s13764; GFX942-NEXT: ;;#ASMSTART3765; GFX942-NEXT: ; use s83766; GFX942-NEXT: ;;#ASMEND3767; GFX942-NEXT: s_setpc_b64 s[30:31]3768 %vec0 = call <4 x i16> asm "; def $0", "=s"()3769 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 poison>3770 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3771 ret void3772}3773 3774define void @s_shuffle_v2i16_v4i16__3_u() {3775; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_u:3776; GFX900: ; %bb.0:3777; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3778; GFX900-NEXT: ;;#ASMSTART3779; GFX900-NEXT: ; def s[4:5]3780; GFX900-NEXT: ;;#ASMEND3781; GFX900-NEXT: s_lshr_b32 s8, s5, 163782; GFX900-NEXT: ;;#ASMSTART3783; GFX900-NEXT: ; use s83784; GFX900-NEXT: ;;#ASMEND3785; GFX900-NEXT: s_setpc_b64 s[30:31]3786;3787; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_u:3788; GFX90A: ; %bb.0:3789; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3790; GFX90A-NEXT: ;;#ASMSTART3791; GFX90A-NEXT: ; def s[4:5]3792; GFX90A-NEXT: ;;#ASMEND3793; GFX90A-NEXT: s_lshr_b32 s8, s5, 163794; GFX90A-NEXT: ;;#ASMSTART3795; GFX90A-NEXT: ; use s83796; GFX90A-NEXT: ;;#ASMEND3797; GFX90A-NEXT: s_setpc_b64 s[30:31]3798;3799; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_u:3800; GFX942: ; %bb.0:3801; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3802; GFX942-NEXT: ;;#ASMSTART3803; GFX942-NEXT: ; def s[0:1]3804; GFX942-NEXT: ;;#ASMEND3805; GFX942-NEXT: s_lshr_b32 s8, s1, 163806; GFX942-NEXT: ;;#ASMSTART3807; GFX942-NEXT: ; use s83808; GFX942-NEXT: ;;#ASMEND3809; GFX942-NEXT: s_setpc_b64 s[30:31]3810 %vec0 = call <4 x i16> asm "; def $0", "=s"()3811 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 poison>3812 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3813 ret void3814}3815 3816define void @s_shuffle_v2i16_v4i16__4_u() {3817; GFX9-LABEL: s_shuffle_v2i16_v4i16__4_u:3818; GFX9: ; %bb.0:3819; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3820; GFX9-NEXT: ;;#ASMSTART3821; GFX9-NEXT: ; use s83822; GFX9-NEXT: ;;#ASMEND3823; GFX9-NEXT: s_setpc_b64 s[30:31]3824 %vec0 = call <4 x i16> asm "; def $0", "=s"()3825 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 poison>3826 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3827 ret void3828}3829 3830define void @s_shuffle_v2i16_v4i16__5_u() {3831; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_u:3832; GFX900: ; %bb.0:3833; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3834; GFX900-NEXT: ;;#ASMSTART3835; GFX900-NEXT: ; def s[4:5]3836; GFX900-NEXT: ;;#ASMEND3837; GFX900-NEXT: s_lshr_b32 s8, s4, 163838; GFX900-NEXT: ;;#ASMSTART3839; GFX900-NEXT: ; use s83840; GFX900-NEXT: ;;#ASMEND3841; GFX900-NEXT: s_setpc_b64 s[30:31]3842;3843; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_u:3844; GFX90A: ; %bb.0:3845; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3846; GFX90A-NEXT: ;;#ASMSTART3847; GFX90A-NEXT: ; def s[4:5]3848; GFX90A-NEXT: ;;#ASMEND3849; GFX90A-NEXT: s_lshr_b32 s8, s4, 163850; GFX90A-NEXT: ;;#ASMSTART3851; GFX90A-NEXT: ; use s83852; GFX90A-NEXT: ;;#ASMEND3853; GFX90A-NEXT: s_setpc_b64 s[30:31]3854;3855; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_u:3856; GFX942: ; %bb.0:3857; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3858; GFX942-NEXT: ;;#ASMSTART3859; GFX942-NEXT: ; def s[0:1]3860; GFX942-NEXT: ;;#ASMEND3861; GFX942-NEXT: s_lshr_b32 s8, s0, 163862; GFX942-NEXT: ;;#ASMSTART3863; GFX942-NEXT: ; use s83864; GFX942-NEXT: ;;#ASMEND3865; GFX942-NEXT: s_setpc_b64 s[30:31]3866 %vec0 = call <4 x i16> asm "; def $0", "=s"()3867 %vec1 = call <4 x i16> asm "; def $0", "=s"()3868 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 poison>3869 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3870 ret void3871}3872 3873define void @s_shuffle_v2i16_v4i16__6_u() {3874; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_u:3875; GFX900: ; %bb.0:3876; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3877; GFX900-NEXT: ;;#ASMSTART3878; GFX900-NEXT: ; def s[4:5]3879; GFX900-NEXT: ;;#ASMEND3880; GFX900-NEXT: s_mov_b32 s8, s53881; GFX900-NEXT: ;;#ASMSTART3882; GFX900-NEXT: ; use s83883; GFX900-NEXT: ;;#ASMEND3884; GFX900-NEXT: s_setpc_b64 s[30:31]3885;3886; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_u:3887; GFX90A: ; %bb.0:3888; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3889; GFX90A-NEXT: ;;#ASMSTART3890; GFX90A-NEXT: ; def s[4:5]3891; GFX90A-NEXT: ;;#ASMEND3892; GFX90A-NEXT: s_mov_b32 s8, s53893; GFX90A-NEXT: ;;#ASMSTART3894; GFX90A-NEXT: ; use s83895; GFX90A-NEXT: ;;#ASMEND3896; GFX90A-NEXT: s_setpc_b64 s[30:31]3897;3898; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_u:3899; GFX942: ; %bb.0:3900; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3901; GFX942-NEXT: ;;#ASMSTART3902; GFX942-NEXT: ; def s[0:1]3903; GFX942-NEXT: ;;#ASMEND3904; GFX942-NEXT: s_mov_b32 s8, s13905; GFX942-NEXT: ;;#ASMSTART3906; GFX942-NEXT: ; use s83907; GFX942-NEXT: ;;#ASMEND3908; GFX942-NEXT: s_setpc_b64 s[30:31]3909 %vec0 = call <4 x i16> asm "; def $0", "=s"()3910 %vec1 = call <4 x i16> asm "; def $0", "=s"()3911 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 poison>3912 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3913 ret void3914}3915 3916define void @s_shuffle_v2i16_v4i16__7_u() {3917; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_u:3918; GFX900: ; %bb.0:3919; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3920; GFX900-NEXT: ;;#ASMSTART3921; GFX900-NEXT: ; def s[4:5]3922; GFX900-NEXT: ;;#ASMEND3923; GFX900-NEXT: s_lshr_b32 s8, s5, 163924; GFX900-NEXT: ;;#ASMSTART3925; GFX900-NEXT: ; use s83926; GFX900-NEXT: ;;#ASMEND3927; GFX900-NEXT: s_setpc_b64 s[30:31]3928;3929; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_u:3930; GFX90A: ; %bb.0:3931; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3932; GFX90A-NEXT: ;;#ASMSTART3933; GFX90A-NEXT: ; def s[4:5]3934; GFX90A-NEXT: ;;#ASMEND3935; GFX90A-NEXT: s_lshr_b32 s8, s5, 163936; GFX90A-NEXT: ;;#ASMSTART3937; GFX90A-NEXT: ; use s83938; GFX90A-NEXT: ;;#ASMEND3939; GFX90A-NEXT: s_setpc_b64 s[30:31]3940;3941; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_u:3942; GFX942: ; %bb.0:3943; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3944; GFX942-NEXT: ;;#ASMSTART3945; GFX942-NEXT: ; def s[0:1]3946; GFX942-NEXT: ;;#ASMEND3947; GFX942-NEXT: s_lshr_b32 s8, s1, 163948; GFX942-NEXT: ;;#ASMSTART3949; GFX942-NEXT: ; use s83950; GFX942-NEXT: ;;#ASMEND3951; GFX942-NEXT: s_setpc_b64 s[30:31]3952 %vec0 = call <4 x i16> asm "; def $0", "=s"()3953 %vec1 = call <4 x i16> asm "; def $0", "=s"()3954 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 poison>3955 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)3956 ret void3957}3958 3959define void @s_shuffle_v2i16_v4i16__7_0() {3960; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_0:3961; GFX900: ; %bb.0:3962; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3963; GFX900-NEXT: ;;#ASMSTART3964; GFX900-NEXT: ; def s[4:5]3965; GFX900-NEXT: ;;#ASMEND3966; GFX900-NEXT: ;;#ASMSTART3967; GFX900-NEXT: ; def s[6:7]3968; GFX900-NEXT: ;;#ASMEND3969; GFX900-NEXT: s_lshr_b32 s5, s7, 163970; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43971; GFX900-NEXT: ;;#ASMSTART3972; GFX900-NEXT: ; use s83973; GFX900-NEXT: ;;#ASMEND3974; GFX900-NEXT: s_setpc_b64 s[30:31]3975;3976; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_0:3977; GFX90A: ; %bb.0:3978; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3979; GFX90A-NEXT: ;;#ASMSTART3980; GFX90A-NEXT: ; def s[4:5]3981; GFX90A-NEXT: ;;#ASMEND3982; GFX90A-NEXT: ;;#ASMSTART3983; GFX90A-NEXT: ; def s[6:7]3984; GFX90A-NEXT: ;;#ASMEND3985; GFX90A-NEXT: s_lshr_b32 s5, s7, 163986; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43987; GFX90A-NEXT: ;;#ASMSTART3988; GFX90A-NEXT: ; use s83989; GFX90A-NEXT: ;;#ASMEND3990; GFX90A-NEXT: s_setpc_b64 s[30:31]3991;3992; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_0:3993; GFX942: ; %bb.0:3994; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3995; GFX942-NEXT: ;;#ASMSTART3996; GFX942-NEXT: ; def s[0:1]3997; GFX942-NEXT: ;;#ASMEND3998; GFX942-NEXT: ;;#ASMSTART3999; GFX942-NEXT: ; def s[2:3]4000; GFX942-NEXT: ;;#ASMEND4001; GFX942-NEXT: s_lshr_b32 s1, s3, 164002; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04003; GFX942-NEXT: ;;#ASMSTART4004; GFX942-NEXT: ; use s84005; GFX942-NEXT: ;;#ASMEND4006; GFX942-NEXT: s_setpc_b64 s[30:31]4007 %vec0 = call <4 x i16> asm "; def $0", "=s"()4008 %vec1 = call <4 x i16> asm "; def $0", "=s"()4009 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 0>4010 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4011 ret void4012}4013 4014define void @s_shuffle_v2i16_v4i16__7_1() {4015; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_1:4016; GFX900: ; %bb.0:4017; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4018; GFX900-NEXT: ;;#ASMSTART4019; GFX900-NEXT: ; def s[4:5]4020; GFX900-NEXT: ;;#ASMEND4021; GFX900-NEXT: ;;#ASMSTART4022; GFX900-NEXT: ; def s[6:7]4023; GFX900-NEXT: ;;#ASMEND4024; GFX900-NEXT: s_pack_hh_b32_b16 s8, s7, s44025; GFX900-NEXT: ;;#ASMSTART4026; GFX900-NEXT: ; use s84027; GFX900-NEXT: ;;#ASMEND4028; GFX900-NEXT: s_setpc_b64 s[30:31]4029;4030; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_1:4031; GFX90A: ; %bb.0:4032; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4033; GFX90A-NEXT: ;;#ASMSTART4034; GFX90A-NEXT: ; def s[4:5]4035; GFX90A-NEXT: ;;#ASMEND4036; GFX90A-NEXT: ;;#ASMSTART4037; GFX90A-NEXT: ; def s[6:7]4038; GFX90A-NEXT: ;;#ASMEND4039; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s7, s44040; GFX90A-NEXT: ;;#ASMSTART4041; GFX90A-NEXT: ; use s84042; GFX90A-NEXT: ;;#ASMEND4043; GFX90A-NEXT: s_setpc_b64 s[30:31]4044;4045; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_1:4046; GFX942: ; %bb.0:4047; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4048; GFX942-NEXT: ;;#ASMSTART4049; GFX942-NEXT: ; def s[0:1]4050; GFX942-NEXT: ;;#ASMEND4051; GFX942-NEXT: ;;#ASMSTART4052; GFX942-NEXT: ; def s[2:3]4053; GFX942-NEXT: ;;#ASMEND4054; GFX942-NEXT: s_pack_hh_b32_b16 s8, s3, s04055; GFX942-NEXT: ;;#ASMSTART4056; GFX942-NEXT: ; use s84057; GFX942-NEXT: ;;#ASMEND4058; GFX942-NEXT: s_setpc_b64 s[30:31]4059 %vec0 = call <4 x i16> asm "; def $0", "=s"()4060 %vec1 = call <4 x i16> asm "; def $0", "=s"()4061 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 1>4062 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4063 ret void4064}4065 4066define void @s_shuffle_v2i16_v4i16__7_2() {4067; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_2:4068; GFX900: ; %bb.0:4069; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4070; GFX900-NEXT: ;;#ASMSTART4071; GFX900-NEXT: ; def s[4:5]4072; GFX900-NEXT: ;;#ASMEND4073; GFX900-NEXT: ;;#ASMSTART4074; GFX900-NEXT: ; def s[6:7]4075; GFX900-NEXT: ;;#ASMEND4076; GFX900-NEXT: s_lshr_b32 s4, s7, 164077; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s54078; GFX900-NEXT: ;;#ASMSTART4079; GFX900-NEXT: ; use s84080; GFX900-NEXT: ;;#ASMEND4081; GFX900-NEXT: s_setpc_b64 s[30:31]4082;4083; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_2:4084; GFX90A: ; %bb.0:4085; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4086; GFX90A-NEXT: ;;#ASMSTART4087; GFX90A-NEXT: ; def s[4:5]4088; GFX90A-NEXT: ;;#ASMEND4089; GFX90A-NEXT: ;;#ASMSTART4090; GFX90A-NEXT: ; def s[6:7]4091; GFX90A-NEXT: ;;#ASMEND4092; GFX90A-NEXT: s_lshr_b32 s4, s7, 164093; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s54094; GFX90A-NEXT: ;;#ASMSTART4095; GFX90A-NEXT: ; use s84096; GFX90A-NEXT: ;;#ASMEND4097; GFX90A-NEXT: s_setpc_b64 s[30:31]4098;4099; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_2:4100; GFX942: ; %bb.0:4101; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4102; GFX942-NEXT: ;;#ASMSTART4103; GFX942-NEXT: ; def s[0:1]4104; GFX942-NEXT: ;;#ASMEND4105; GFX942-NEXT: ;;#ASMSTART4106; GFX942-NEXT: ; def s[2:3]4107; GFX942-NEXT: ;;#ASMEND4108; GFX942-NEXT: s_lshr_b32 s0, s3, 164109; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s14110; GFX942-NEXT: ;;#ASMSTART4111; GFX942-NEXT: ; use s84112; GFX942-NEXT: ;;#ASMEND4113; GFX942-NEXT: s_setpc_b64 s[30:31]4114 %vec0 = call <4 x i16> asm "; def $0", "=s"()4115 %vec1 = call <4 x i16> asm "; def $0", "=s"()4116 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 2>4117 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4118 ret void4119}4120 4121define void @s_shuffle_v2i16_v4i16__7_3() {4122; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_3:4123; GFX900: ; %bb.0:4124; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4125; GFX900-NEXT: ;;#ASMSTART4126; GFX900-NEXT: ; def s[4:5]4127; GFX900-NEXT: ;;#ASMEND4128; GFX900-NEXT: ;;#ASMSTART4129; GFX900-NEXT: ; def s[6:7]4130; GFX900-NEXT: ;;#ASMEND4131; GFX900-NEXT: s_pack_hh_b32_b16 s8, s7, s54132; GFX900-NEXT: ;;#ASMSTART4133; GFX900-NEXT: ; use s84134; GFX900-NEXT: ;;#ASMEND4135; GFX900-NEXT: s_setpc_b64 s[30:31]4136;4137; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_3:4138; GFX90A: ; %bb.0:4139; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4140; GFX90A-NEXT: ;;#ASMSTART4141; GFX90A-NEXT: ; def s[4:5]4142; GFX90A-NEXT: ;;#ASMEND4143; GFX90A-NEXT: ;;#ASMSTART4144; GFX90A-NEXT: ; def s[6:7]4145; GFX90A-NEXT: ;;#ASMEND4146; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s7, s54147; GFX90A-NEXT: ;;#ASMSTART4148; GFX90A-NEXT: ; use s84149; GFX90A-NEXT: ;;#ASMEND4150; GFX90A-NEXT: s_setpc_b64 s[30:31]4151;4152; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_3:4153; GFX942: ; %bb.0:4154; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4155; GFX942-NEXT: ;;#ASMSTART4156; GFX942-NEXT: ; def s[0:1]4157; GFX942-NEXT: ;;#ASMEND4158; GFX942-NEXT: ;;#ASMSTART4159; GFX942-NEXT: ; def s[2:3]4160; GFX942-NEXT: ;;#ASMEND4161; GFX942-NEXT: s_pack_hh_b32_b16 s8, s3, s14162; GFX942-NEXT: ;;#ASMSTART4163; GFX942-NEXT: ; use s84164; GFX942-NEXT: ;;#ASMEND4165; GFX942-NEXT: s_setpc_b64 s[30:31]4166 %vec0 = call <4 x i16> asm "; def $0", "=s"()4167 %vec1 = call <4 x i16> asm "; def $0", "=s"()4168 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 3>4169 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4170 ret void4171}4172 4173define void @s_shuffle_v2i16_v4i16__7_4() {4174; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_4:4175; GFX900: ; %bb.0:4176; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4177; GFX900-NEXT: ;;#ASMSTART4178; GFX900-NEXT: ; def s[4:5]4179; GFX900-NEXT: ;;#ASMEND4180; GFX900-NEXT: s_lshr_b32 s5, s5, 164181; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44182; GFX900-NEXT: ;;#ASMSTART4183; GFX900-NEXT: ; use s84184; GFX900-NEXT: ;;#ASMEND4185; GFX900-NEXT: s_setpc_b64 s[30:31]4186;4187; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_4:4188; GFX90A: ; %bb.0:4189; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4190; GFX90A-NEXT: ;;#ASMSTART4191; GFX90A-NEXT: ; def s[4:5]4192; GFX90A-NEXT: ;;#ASMEND4193; GFX90A-NEXT: s_lshr_b32 s5, s5, 164194; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44195; GFX90A-NEXT: ;;#ASMSTART4196; GFX90A-NEXT: ; use s84197; GFX90A-NEXT: ;;#ASMEND4198; GFX90A-NEXT: s_setpc_b64 s[30:31]4199;4200; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_4:4201; GFX942: ; %bb.0:4202; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4203; GFX942-NEXT: ;;#ASMSTART4204; GFX942-NEXT: ; def s[0:1]4205; GFX942-NEXT: ;;#ASMEND4206; GFX942-NEXT: s_lshr_b32 s1, s1, 164207; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04208; GFX942-NEXT: ;;#ASMSTART4209; GFX942-NEXT: ; use s84210; GFX942-NEXT: ;;#ASMEND4211; GFX942-NEXT: s_setpc_b64 s[30:31]4212 %vec0 = call <4 x i16> asm "; def $0", "=s"()4213 %vec1 = call <4 x i16> asm "; def $0", "=s"()4214 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 4>4215 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4216 ret void4217}4218 4219define void @s_shuffle_v2i16_v4i16__7_5() {4220; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_5:4221; GFX900: ; %bb.0:4222; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4223; GFX900-NEXT: ;;#ASMSTART4224; GFX900-NEXT: ; def s[4:5]4225; GFX900-NEXT: ;;#ASMEND4226; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s44227; GFX900-NEXT: ;;#ASMSTART4228; GFX900-NEXT: ; use s84229; GFX900-NEXT: ;;#ASMEND4230; GFX900-NEXT: s_setpc_b64 s[30:31]4231;4232; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_5:4233; GFX90A: ; %bb.0:4234; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4235; GFX90A-NEXT: ;;#ASMSTART4236; GFX90A-NEXT: ; def s[4:5]4237; GFX90A-NEXT: ;;#ASMEND4238; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s44239; GFX90A-NEXT: ;;#ASMSTART4240; GFX90A-NEXT: ; use s84241; GFX90A-NEXT: ;;#ASMEND4242; GFX90A-NEXT: s_setpc_b64 s[30:31]4243;4244; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_5:4245; GFX942: ; %bb.0:4246; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4247; GFX942-NEXT: ;;#ASMSTART4248; GFX942-NEXT: ; def s[0:1]4249; GFX942-NEXT: ;;#ASMEND4250; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s04251; GFX942-NEXT: ;;#ASMSTART4252; GFX942-NEXT: ; use s84253; GFX942-NEXT: ;;#ASMEND4254; GFX942-NEXT: s_setpc_b64 s[30:31]4255 %vec0 = call <4 x i16> asm "; def $0", "=s"()4256 %vec1 = call <4 x i16> asm "; def $0", "=s"()4257 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 5>4258 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4259 ret void4260}4261 4262define void @s_shuffle_v2i16_v4i16__7_6() {4263; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_6:4264; GFX900: ; %bb.0:4265; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4266; GFX900-NEXT: ;;#ASMSTART4267; GFX900-NEXT: ; def s[4:5]4268; GFX900-NEXT: ;;#ASMEND4269; GFX900-NEXT: s_lshr_b32 s4, s5, 164270; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s54271; GFX900-NEXT: ;;#ASMSTART4272; GFX900-NEXT: ; use s84273; GFX900-NEXT: ;;#ASMEND4274; GFX900-NEXT: s_setpc_b64 s[30:31]4275;4276; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_6:4277; GFX90A: ; %bb.0:4278; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4279; GFX90A-NEXT: ;;#ASMSTART4280; GFX90A-NEXT: ; def s[4:5]4281; GFX90A-NEXT: ;;#ASMEND4282; GFX90A-NEXT: s_lshr_b32 s4, s5, 164283; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s54284; GFX90A-NEXT: ;;#ASMSTART4285; GFX90A-NEXT: ; use s84286; GFX90A-NEXT: ;;#ASMEND4287; GFX90A-NEXT: s_setpc_b64 s[30:31]4288;4289; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_6:4290; GFX942: ; %bb.0:4291; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4292; GFX942-NEXT: ;;#ASMSTART4293; GFX942-NEXT: ; def s[0:1]4294; GFX942-NEXT: ;;#ASMEND4295; GFX942-NEXT: s_lshr_b32 s0, s1, 164296; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s14297; GFX942-NEXT: ;;#ASMSTART4298; GFX942-NEXT: ; use s84299; GFX942-NEXT: ;;#ASMEND4300; GFX942-NEXT: s_setpc_b64 s[30:31]4301 %vec0 = call <4 x i16> asm "; def $0", "=s"()4302 %vec1 = call <4 x i16> asm "; def $0", "=s"()4303 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 6>4304 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4305 ret void4306}4307 4308define void @s_shuffle_v2i16_v4i16__7_7() {4309; GFX900-LABEL: s_shuffle_v2i16_v4i16__7_7:4310; GFX900: ; %bb.0:4311; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4312; GFX900-NEXT: ;;#ASMSTART4313; GFX900-NEXT: ; def s[4:5]4314; GFX900-NEXT: ;;#ASMEND4315; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s54316; GFX900-NEXT: ;;#ASMSTART4317; GFX900-NEXT: ; use s84318; GFX900-NEXT: ;;#ASMEND4319; GFX900-NEXT: s_setpc_b64 s[30:31]4320;4321; GFX90A-LABEL: s_shuffle_v2i16_v4i16__7_7:4322; GFX90A: ; %bb.0:4323; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4324; GFX90A-NEXT: ;;#ASMSTART4325; GFX90A-NEXT: ; def s[4:5]4326; GFX90A-NEXT: ;;#ASMEND4327; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s54328; GFX90A-NEXT: ;;#ASMSTART4329; GFX90A-NEXT: ; use s84330; GFX90A-NEXT: ;;#ASMEND4331; GFX90A-NEXT: s_setpc_b64 s[30:31]4332;4333; GFX942-LABEL: s_shuffle_v2i16_v4i16__7_7:4334; GFX942: ; %bb.0:4335; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4336; GFX942-NEXT: ;;#ASMSTART4337; GFX942-NEXT: ; def s[0:1]4338; GFX942-NEXT: ;;#ASMEND4339; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s14340; GFX942-NEXT: ;;#ASMSTART4341; GFX942-NEXT: ; use s84342; GFX942-NEXT: ;;#ASMEND4343; GFX942-NEXT: s_setpc_b64 s[30:31]4344 %vec0 = call <4 x i16> asm "; def $0", "=s"()4345 %vec1 = call <4 x i16> asm "; def $0", "=s"()4346 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 7, i32 7>4347 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4348 ret void4349}4350 4351define void @s_shuffle_v2i16_v4i16__u_0() {4352; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_0:4353; GFX900: ; %bb.0:4354; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4355; GFX900-NEXT: ;;#ASMSTART4356; GFX900-NEXT: ; def s[4:5]4357; GFX900-NEXT: ;;#ASMEND4358; GFX900-NEXT: s_lshl_b32 s8, s4, 164359; GFX900-NEXT: ;;#ASMSTART4360; GFX900-NEXT: ; use s84361; GFX900-NEXT: ;;#ASMEND4362; GFX900-NEXT: s_setpc_b64 s[30:31]4363;4364; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_0:4365; GFX90A: ; %bb.0:4366; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4367; GFX90A-NEXT: ;;#ASMSTART4368; GFX90A-NEXT: ; def s[4:5]4369; GFX90A-NEXT: ;;#ASMEND4370; GFX90A-NEXT: s_lshl_b32 s8, s4, 164371; GFX90A-NEXT: ;;#ASMSTART4372; GFX90A-NEXT: ; use s84373; GFX90A-NEXT: ;;#ASMEND4374; GFX90A-NEXT: s_setpc_b64 s[30:31]4375;4376; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_0:4377; GFX942: ; %bb.0:4378; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4379; GFX942-NEXT: ;;#ASMSTART4380; GFX942-NEXT: ; def s[0:1]4381; GFX942-NEXT: ;;#ASMEND4382; GFX942-NEXT: s_lshl_b32 s8, s0, 164383; GFX942-NEXT: ;;#ASMSTART4384; GFX942-NEXT: ; use s84385; GFX942-NEXT: ;;#ASMEND4386; GFX942-NEXT: s_setpc_b64 s[30:31]4387 %vec0 = call <4 x i16> asm "; def $0", "=s"()4388 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 0>4389 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4390 ret void4391}4392 4393define void @s_shuffle_v2i16_v4i16__0_0() {4394; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_0:4395; GFX900: ; %bb.0:4396; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4397; GFX900-NEXT: ;;#ASMSTART4398; GFX900-NEXT: ; def s[4:5]4399; GFX900-NEXT: ;;#ASMEND4400; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44401; GFX900-NEXT: ;;#ASMSTART4402; GFX900-NEXT: ; use s84403; GFX900-NEXT: ;;#ASMEND4404; GFX900-NEXT: s_setpc_b64 s[30:31]4405;4406; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_0:4407; GFX90A: ; %bb.0:4408; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4409; GFX90A-NEXT: ;;#ASMSTART4410; GFX90A-NEXT: ; def s[4:5]4411; GFX90A-NEXT: ;;#ASMEND4412; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44413; GFX90A-NEXT: ;;#ASMSTART4414; GFX90A-NEXT: ; use s84415; GFX90A-NEXT: ;;#ASMEND4416; GFX90A-NEXT: s_setpc_b64 s[30:31]4417;4418; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_0:4419; GFX942: ; %bb.0:4420; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4421; GFX942-NEXT: ;;#ASMSTART4422; GFX942-NEXT: ; def s[0:1]4423; GFX942-NEXT: ;;#ASMEND4424; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04425; GFX942-NEXT: ;;#ASMSTART4426; GFX942-NEXT: ; use s84427; GFX942-NEXT: ;;#ASMEND4428; GFX942-NEXT: s_setpc_b64 s[30:31]4429 %vec0 = call <4 x i16> asm "; def $0", "=s"()4430 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> zeroinitializer4431 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4432 ret void4433}4434 4435define void @s_shuffle_v2i16_v4i16__1_0() {4436; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_0:4437; GFX900: ; %bb.0:4438; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4439; GFX900-NEXT: ;;#ASMSTART4440; GFX900-NEXT: ; def s[4:5]4441; GFX900-NEXT: ;;#ASMEND4442; GFX900-NEXT: s_lshr_b32 s5, s4, 164443; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44444; GFX900-NEXT: ;;#ASMSTART4445; GFX900-NEXT: ; use s84446; GFX900-NEXT: ;;#ASMEND4447; GFX900-NEXT: s_setpc_b64 s[30:31]4448;4449; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_0:4450; GFX90A: ; %bb.0:4451; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4452; GFX90A-NEXT: ;;#ASMSTART4453; GFX90A-NEXT: ; def s[4:5]4454; GFX90A-NEXT: ;;#ASMEND4455; GFX90A-NEXT: s_lshr_b32 s5, s4, 164456; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44457; GFX90A-NEXT: ;;#ASMSTART4458; GFX90A-NEXT: ; use s84459; GFX90A-NEXT: ;;#ASMEND4460; GFX90A-NEXT: s_setpc_b64 s[30:31]4461;4462; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_0:4463; GFX942: ; %bb.0:4464; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4465; GFX942-NEXT: ;;#ASMSTART4466; GFX942-NEXT: ; def s[0:1]4467; GFX942-NEXT: ;;#ASMEND4468; GFX942-NEXT: s_lshr_b32 s1, s0, 164469; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04470; GFX942-NEXT: ;;#ASMSTART4471; GFX942-NEXT: ; use s84472; GFX942-NEXT: ;;#ASMEND4473; GFX942-NEXT: s_setpc_b64 s[30:31]4474 %vec0 = call <4 x i16> asm "; def $0", "=s"()4475 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 0>4476 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4477 ret void4478}4479 4480define void @s_shuffle_v2i16_v4i16__2_0() {4481; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_0:4482; GFX900: ; %bb.0:4483; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4484; GFX900-NEXT: ;;#ASMSTART4485; GFX900-NEXT: ; def s[4:5]4486; GFX900-NEXT: ;;#ASMEND4487; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44488; GFX900-NEXT: ;;#ASMSTART4489; GFX900-NEXT: ; use s84490; GFX900-NEXT: ;;#ASMEND4491; GFX900-NEXT: s_setpc_b64 s[30:31]4492;4493; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_0:4494; GFX90A: ; %bb.0:4495; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4496; GFX90A-NEXT: ;;#ASMSTART4497; GFX90A-NEXT: ; def s[4:5]4498; GFX90A-NEXT: ;;#ASMEND4499; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44500; GFX90A-NEXT: ;;#ASMSTART4501; GFX90A-NEXT: ; use s84502; GFX90A-NEXT: ;;#ASMEND4503; GFX90A-NEXT: s_setpc_b64 s[30:31]4504;4505; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_0:4506; GFX942: ; %bb.0:4507; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4508; GFX942-NEXT: ;;#ASMSTART4509; GFX942-NEXT: ; def s[0:1]4510; GFX942-NEXT: ;;#ASMEND4511; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04512; GFX942-NEXT: ;;#ASMSTART4513; GFX942-NEXT: ; use s84514; GFX942-NEXT: ;;#ASMEND4515; GFX942-NEXT: s_setpc_b64 s[30:31]4516 %vec0 = call <4 x i16> asm "; def $0", "=s"()4517 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 0>4518 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4519 ret void4520}4521 4522define void @s_shuffle_v2i16_v4i16__3_0() {4523; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_0:4524; GFX900: ; %bb.0:4525; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4526; GFX900-NEXT: ;;#ASMSTART4527; GFX900-NEXT: ; def s[4:5]4528; GFX900-NEXT: ;;#ASMEND4529; GFX900-NEXT: s_lshr_b32 s5, s5, 164530; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44531; GFX900-NEXT: ;;#ASMSTART4532; GFX900-NEXT: ; use s84533; GFX900-NEXT: ;;#ASMEND4534; GFX900-NEXT: s_setpc_b64 s[30:31]4535;4536; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_0:4537; GFX90A: ; %bb.0:4538; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4539; GFX90A-NEXT: ;;#ASMSTART4540; GFX90A-NEXT: ; def s[4:5]4541; GFX90A-NEXT: ;;#ASMEND4542; GFX90A-NEXT: s_lshr_b32 s5, s5, 164543; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44544; GFX90A-NEXT: ;;#ASMSTART4545; GFX90A-NEXT: ; use s84546; GFX90A-NEXT: ;;#ASMEND4547; GFX90A-NEXT: s_setpc_b64 s[30:31]4548;4549; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_0:4550; GFX942: ; %bb.0:4551; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4552; GFX942-NEXT: ;;#ASMSTART4553; GFX942-NEXT: ; def s[0:1]4554; GFX942-NEXT: ;;#ASMEND4555; GFX942-NEXT: s_lshr_b32 s1, s1, 164556; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04557; GFX942-NEXT: ;;#ASMSTART4558; GFX942-NEXT: ; use s84559; GFX942-NEXT: ;;#ASMEND4560; GFX942-NEXT: s_setpc_b64 s[30:31]4561 %vec0 = call <4 x i16> asm "; def $0", "=s"()4562 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 0>4563 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4564 ret void4565}4566 4567define void @s_shuffle_v2i16_v4i16__4_0() {4568; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_0:4569; GFX900: ; %bb.0:4570; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4571; GFX900-NEXT: ;;#ASMSTART4572; GFX900-NEXT: ; def s[4:5]4573; GFX900-NEXT: ;;#ASMEND4574; GFX900-NEXT: s_lshl_b32 s8, s4, 164575; GFX900-NEXT: ;;#ASMSTART4576; GFX900-NEXT: ; use s84577; GFX900-NEXT: ;;#ASMEND4578; GFX900-NEXT: s_setpc_b64 s[30:31]4579;4580; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_0:4581; GFX90A: ; %bb.0:4582; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4583; GFX90A-NEXT: ;;#ASMSTART4584; GFX90A-NEXT: ; def s[4:5]4585; GFX90A-NEXT: ;;#ASMEND4586; GFX90A-NEXT: s_lshl_b32 s8, s4, 164587; GFX90A-NEXT: ;;#ASMSTART4588; GFX90A-NEXT: ; use s84589; GFX90A-NEXT: ;;#ASMEND4590; GFX90A-NEXT: s_setpc_b64 s[30:31]4591;4592; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_0:4593; GFX942: ; %bb.0:4594; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4595; GFX942-NEXT: ;;#ASMSTART4596; GFX942-NEXT: ; def s[0:1]4597; GFX942-NEXT: ;;#ASMEND4598; GFX942-NEXT: s_lshl_b32 s8, s0, 164599; GFX942-NEXT: ;;#ASMSTART4600; GFX942-NEXT: ; use s84601; GFX942-NEXT: ;;#ASMEND4602; GFX942-NEXT: s_setpc_b64 s[30:31]4603 %vec0 = call <4 x i16> asm "; def $0", "=s"()4604 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 0>4605 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4606 ret void4607}4608 4609define void @s_shuffle_v2i16_v4i16__5_0() {4610; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_0:4611; GFX900: ; %bb.0:4612; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4613; GFX900-NEXT: ;;#ASMSTART4614; GFX900-NEXT: ; def s[4:5]4615; GFX900-NEXT: ;;#ASMEND4616; GFX900-NEXT: ;;#ASMSTART4617; GFX900-NEXT: ; def s[6:7]4618; GFX900-NEXT: ;;#ASMEND4619; GFX900-NEXT: s_lshr_b32 s5, s6, 164620; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44621; GFX900-NEXT: ;;#ASMSTART4622; GFX900-NEXT: ; use s84623; GFX900-NEXT: ;;#ASMEND4624; GFX900-NEXT: s_setpc_b64 s[30:31]4625;4626; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_0:4627; GFX90A: ; %bb.0:4628; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4629; GFX90A-NEXT: ;;#ASMSTART4630; GFX90A-NEXT: ; def s[4:5]4631; GFX90A-NEXT: ;;#ASMEND4632; GFX90A-NEXT: ;;#ASMSTART4633; GFX90A-NEXT: ; def s[6:7]4634; GFX90A-NEXT: ;;#ASMEND4635; GFX90A-NEXT: s_lshr_b32 s5, s6, 164636; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44637; GFX90A-NEXT: ;;#ASMSTART4638; GFX90A-NEXT: ; use s84639; GFX90A-NEXT: ;;#ASMEND4640; GFX90A-NEXT: s_setpc_b64 s[30:31]4641;4642; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_0:4643; GFX942: ; %bb.0:4644; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4645; GFX942-NEXT: ;;#ASMSTART4646; GFX942-NEXT: ; def s[0:1]4647; GFX942-NEXT: ;;#ASMEND4648; GFX942-NEXT: ;;#ASMSTART4649; GFX942-NEXT: ; def s[2:3]4650; GFX942-NEXT: ;;#ASMEND4651; GFX942-NEXT: s_lshr_b32 s1, s2, 164652; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04653; GFX942-NEXT: ;;#ASMSTART4654; GFX942-NEXT: ; use s84655; GFX942-NEXT: ;;#ASMEND4656; GFX942-NEXT: s_setpc_b64 s[30:31]4657 %vec0 = call <4 x i16> asm "; def $0", "=s"()4658 %vec1 = call <4 x i16> asm "; def $0", "=s"()4659 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 0>4660 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4661 ret void4662}4663 4664define void @s_shuffle_v2i16_v4i16__6_0() {4665; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_0:4666; GFX900: ; %bb.0:4667; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4668; GFX900-NEXT: ;;#ASMSTART4669; GFX900-NEXT: ; def s[4:5]4670; GFX900-NEXT: ;;#ASMEND4671; GFX900-NEXT: ;;#ASMSTART4672; GFX900-NEXT: ; def s[6:7]4673; GFX900-NEXT: ;;#ASMEND4674; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s44675; GFX900-NEXT: ;;#ASMSTART4676; GFX900-NEXT: ; use s84677; GFX900-NEXT: ;;#ASMEND4678; GFX900-NEXT: s_setpc_b64 s[30:31]4679;4680; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_0:4681; GFX90A: ; %bb.0:4682; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4683; GFX90A-NEXT: ;;#ASMSTART4684; GFX90A-NEXT: ; def s[4:5]4685; GFX90A-NEXT: ;;#ASMEND4686; GFX90A-NEXT: ;;#ASMSTART4687; GFX90A-NEXT: ; def s[6:7]4688; GFX90A-NEXT: ;;#ASMEND4689; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s44690; GFX90A-NEXT: ;;#ASMSTART4691; GFX90A-NEXT: ; use s84692; GFX90A-NEXT: ;;#ASMEND4693; GFX90A-NEXT: s_setpc_b64 s[30:31]4694;4695; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_0:4696; GFX942: ; %bb.0:4697; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4698; GFX942-NEXT: ;;#ASMSTART4699; GFX942-NEXT: ; def s[0:1]4700; GFX942-NEXT: ;;#ASMEND4701; GFX942-NEXT: ;;#ASMSTART4702; GFX942-NEXT: ; def s[2:3]4703; GFX942-NEXT: ;;#ASMEND4704; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s04705; GFX942-NEXT: ;;#ASMSTART4706; GFX942-NEXT: ; use s84707; GFX942-NEXT: ;;#ASMEND4708; GFX942-NEXT: s_setpc_b64 s[30:31]4709 %vec0 = call <4 x i16> asm "; def $0", "=s"()4710 %vec1 = call <4 x i16> asm "; def $0", "=s"()4711 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 0>4712 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4713 ret void4714}4715 4716define void @s_shuffle_v2i16_v4i16__u_1() {4717; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_1:4718; GFX900: ; %bb.0:4719; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4720; GFX900-NEXT: ;;#ASMSTART4721; GFX900-NEXT: ; def s[8:9]4722; GFX900-NEXT: ;;#ASMEND4723; GFX900-NEXT: ;;#ASMSTART4724; GFX900-NEXT: ; use s84725; GFX900-NEXT: ;;#ASMEND4726; GFX900-NEXT: s_setpc_b64 s[30:31]4727;4728; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_1:4729; GFX90A: ; %bb.0:4730; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4731; GFX90A-NEXT: ;;#ASMSTART4732; GFX90A-NEXT: ; def s[8:9]4733; GFX90A-NEXT: ;;#ASMEND4734; GFX90A-NEXT: ;;#ASMSTART4735; GFX90A-NEXT: ; use s84736; GFX90A-NEXT: ;;#ASMEND4737; GFX90A-NEXT: s_setpc_b64 s[30:31]4738;4739; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_1:4740; GFX942: ; %bb.0:4741; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4742; GFX942-NEXT: ;;#ASMSTART4743; GFX942-NEXT: ; def s[8:9]4744; GFX942-NEXT: ;;#ASMEND4745; GFX942-NEXT: s_nop 04746; GFX942-NEXT: ;;#ASMSTART4747; GFX942-NEXT: ; use s84748; GFX942-NEXT: ;;#ASMEND4749; GFX942-NEXT: s_setpc_b64 s[30:31]4750 %vec0 = call <4 x i16> asm "; def $0", "=s"()4751 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 1>4752 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4753 ret void4754}4755 4756define void @s_shuffle_v2i16_v4i16__0_1() {4757; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_1:4758; GFX900: ; %bb.0:4759; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4760; GFX900-NEXT: ;;#ASMSTART4761; GFX900-NEXT: ; def s[8:9]4762; GFX900-NEXT: ;;#ASMEND4763; GFX900-NEXT: ;;#ASMSTART4764; GFX900-NEXT: ; use s84765; GFX900-NEXT: ;;#ASMEND4766; GFX900-NEXT: s_setpc_b64 s[30:31]4767;4768; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_1:4769; GFX90A: ; %bb.0:4770; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4771; GFX90A-NEXT: ;;#ASMSTART4772; GFX90A-NEXT: ; def s[8:9]4773; GFX90A-NEXT: ;;#ASMEND4774; GFX90A-NEXT: ;;#ASMSTART4775; GFX90A-NEXT: ; use s84776; GFX90A-NEXT: ;;#ASMEND4777; GFX90A-NEXT: s_setpc_b64 s[30:31]4778;4779; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_1:4780; GFX942: ; %bb.0:4781; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4782; GFX942-NEXT: ;;#ASMSTART4783; GFX942-NEXT: ; def s[8:9]4784; GFX942-NEXT: ;;#ASMEND4785; GFX942-NEXT: s_nop 04786; GFX942-NEXT: ;;#ASMSTART4787; GFX942-NEXT: ; use s84788; GFX942-NEXT: ;;#ASMEND4789; GFX942-NEXT: s_setpc_b64 s[30:31]4790 %vec0 = call <4 x i16> asm "; def $0", "=s"()4791 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 1>4792 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4793 ret void4794}4795 4796define void @s_shuffle_v2i16_v4i16__1_1() {4797; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_1:4798; GFX900: ; %bb.0:4799; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4800; GFX900-NEXT: ;;#ASMSTART4801; GFX900-NEXT: ; def s[4:5]4802; GFX900-NEXT: ;;#ASMEND4803; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s44804; GFX900-NEXT: ;;#ASMSTART4805; GFX900-NEXT: ; use s84806; GFX900-NEXT: ;;#ASMEND4807; GFX900-NEXT: s_setpc_b64 s[30:31]4808;4809; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_1:4810; GFX90A: ; %bb.0:4811; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4812; GFX90A-NEXT: ;;#ASMSTART4813; GFX90A-NEXT: ; def s[4:5]4814; GFX90A-NEXT: ;;#ASMEND4815; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s44816; GFX90A-NEXT: ;;#ASMSTART4817; GFX90A-NEXT: ; use s84818; GFX90A-NEXT: ;;#ASMEND4819; GFX90A-NEXT: s_setpc_b64 s[30:31]4820;4821; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_1:4822; GFX942: ; %bb.0:4823; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4824; GFX942-NEXT: ;;#ASMSTART4825; GFX942-NEXT: ; def s[0:1]4826; GFX942-NEXT: ;;#ASMEND4827; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s04828; GFX942-NEXT: ;;#ASMSTART4829; GFX942-NEXT: ; use s84830; GFX942-NEXT: ;;#ASMEND4831; GFX942-NEXT: s_setpc_b64 s[30:31]4832 %vec0 = call <4 x i16> asm "; def $0", "=s"()4833 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 1>4834 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4835 ret void4836}4837 4838define void @s_shuffle_v2i16_v4i16__2_1() {4839; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_1:4840; GFX900: ; %bb.0:4841; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4842; GFX900-NEXT: ;;#ASMSTART4843; GFX900-NEXT: ; def s[4:5]4844; GFX900-NEXT: ;;#ASMEND4845; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s44846; GFX900-NEXT: ;;#ASMSTART4847; GFX900-NEXT: ; use s84848; GFX900-NEXT: ;;#ASMEND4849; GFX900-NEXT: s_setpc_b64 s[30:31]4850;4851; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_1:4852; GFX90A: ; %bb.0:4853; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4854; GFX90A-NEXT: ;;#ASMSTART4855; GFX90A-NEXT: ; def s[4:5]4856; GFX90A-NEXT: ;;#ASMEND4857; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s44858; GFX90A-NEXT: ;;#ASMSTART4859; GFX90A-NEXT: ; use s84860; GFX90A-NEXT: ;;#ASMEND4861; GFX90A-NEXT: s_setpc_b64 s[30:31]4862;4863; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_1:4864; GFX942: ; %bb.0:4865; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4866; GFX942-NEXT: ;;#ASMSTART4867; GFX942-NEXT: ; def s[0:1]4868; GFX942-NEXT: ;;#ASMEND4869; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s04870; GFX942-NEXT: ;;#ASMSTART4871; GFX942-NEXT: ; use s84872; GFX942-NEXT: ;;#ASMEND4873; GFX942-NEXT: s_setpc_b64 s[30:31]4874 %vec0 = call <4 x i16> asm "; def $0", "=s"()4875 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 1>4876 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4877 ret void4878}4879 4880define void @s_shuffle_v2i16_v4i16__3_1() {4881; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_1:4882; GFX900: ; %bb.0:4883; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4884; GFX900-NEXT: ;;#ASMSTART4885; GFX900-NEXT: ; def s[4:5]4886; GFX900-NEXT: ;;#ASMEND4887; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s44888; GFX900-NEXT: ;;#ASMSTART4889; GFX900-NEXT: ; use s84890; GFX900-NEXT: ;;#ASMEND4891; GFX900-NEXT: s_setpc_b64 s[30:31]4892;4893; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_1:4894; GFX90A: ; %bb.0:4895; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4896; GFX90A-NEXT: ;;#ASMSTART4897; GFX90A-NEXT: ; def s[4:5]4898; GFX90A-NEXT: ;;#ASMEND4899; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s44900; GFX90A-NEXT: ;;#ASMSTART4901; GFX90A-NEXT: ; use s84902; GFX90A-NEXT: ;;#ASMEND4903; GFX90A-NEXT: s_setpc_b64 s[30:31]4904;4905; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_1:4906; GFX942: ; %bb.0:4907; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4908; GFX942-NEXT: ;;#ASMSTART4909; GFX942-NEXT: ; def s[0:1]4910; GFX942-NEXT: ;;#ASMEND4911; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s04912; GFX942-NEXT: ;;#ASMSTART4913; GFX942-NEXT: ; use s84914; GFX942-NEXT: ;;#ASMEND4915; GFX942-NEXT: s_setpc_b64 s[30:31]4916 %vec0 = call <4 x i16> asm "; def $0", "=s"()4917 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 1>4918 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4919 ret void4920}4921 4922define void @s_shuffle_v2i16_v4i16__4_1() {4923; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_1:4924; GFX900: ; %bb.0:4925; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4926; GFX900-NEXT: ;;#ASMSTART4927; GFX900-NEXT: ; def s[8:9]4928; GFX900-NEXT: ;;#ASMEND4929; GFX900-NEXT: ;;#ASMSTART4930; GFX900-NEXT: ; use s84931; GFX900-NEXT: ;;#ASMEND4932; GFX900-NEXT: s_setpc_b64 s[30:31]4933;4934; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_1:4935; GFX90A: ; %bb.0:4936; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4937; GFX90A-NEXT: ;;#ASMSTART4938; GFX90A-NEXT: ; def s[8:9]4939; GFX90A-NEXT: ;;#ASMEND4940; GFX90A-NEXT: ;;#ASMSTART4941; GFX90A-NEXT: ; use s84942; GFX90A-NEXT: ;;#ASMEND4943; GFX90A-NEXT: s_setpc_b64 s[30:31]4944;4945; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_1:4946; GFX942: ; %bb.0:4947; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4948; GFX942-NEXT: ;;#ASMSTART4949; GFX942-NEXT: ; def s[8:9]4950; GFX942-NEXT: ;;#ASMEND4951; GFX942-NEXT: s_nop 04952; GFX942-NEXT: ;;#ASMSTART4953; GFX942-NEXT: ; use s84954; GFX942-NEXT: ;;#ASMEND4955; GFX942-NEXT: s_setpc_b64 s[30:31]4956 %vec0 = call <4 x i16> asm "; def $0", "=s"()4957 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 1>4958 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)4959 ret void4960}4961 4962define void @s_shuffle_v2i16_v4i16__5_1() {4963; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_1:4964; GFX900: ; %bb.0:4965; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4966; GFX900-NEXT: ;;#ASMSTART4967; GFX900-NEXT: ; def s[4:5]4968; GFX900-NEXT: ;;#ASMEND4969; GFX900-NEXT: ;;#ASMSTART4970; GFX900-NEXT: ; def s[6:7]4971; GFX900-NEXT: ;;#ASMEND4972; GFX900-NEXT: s_pack_hh_b32_b16 s8, s6, s44973; GFX900-NEXT: ;;#ASMSTART4974; GFX900-NEXT: ; use s84975; GFX900-NEXT: ;;#ASMEND4976; GFX900-NEXT: s_setpc_b64 s[30:31]4977;4978; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_1:4979; GFX90A: ; %bb.0:4980; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4981; GFX90A-NEXT: ;;#ASMSTART4982; GFX90A-NEXT: ; def s[4:5]4983; GFX90A-NEXT: ;;#ASMEND4984; GFX90A-NEXT: ;;#ASMSTART4985; GFX90A-NEXT: ; def s[6:7]4986; GFX90A-NEXT: ;;#ASMEND4987; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s6, s44988; GFX90A-NEXT: ;;#ASMSTART4989; GFX90A-NEXT: ; use s84990; GFX90A-NEXT: ;;#ASMEND4991; GFX90A-NEXT: s_setpc_b64 s[30:31]4992;4993; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_1:4994; GFX942: ; %bb.0:4995; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4996; GFX942-NEXT: ;;#ASMSTART4997; GFX942-NEXT: ; def s[0:1]4998; GFX942-NEXT: ;;#ASMEND4999; GFX942-NEXT: ;;#ASMSTART5000; GFX942-NEXT: ; def s[2:3]5001; GFX942-NEXT: ;;#ASMEND5002; GFX942-NEXT: s_pack_hh_b32_b16 s8, s2, s05003; GFX942-NEXT: ;;#ASMSTART5004; GFX942-NEXT: ; use s85005; GFX942-NEXT: ;;#ASMEND5006; GFX942-NEXT: s_setpc_b64 s[30:31]5007 %vec0 = call <4 x i16> asm "; def $0", "=s"()5008 %vec1 = call <4 x i16> asm "; def $0", "=s"()5009 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 1>5010 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5011 ret void5012}5013 5014define void @s_shuffle_v2i16_v4i16__6_1() {5015; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_1:5016; GFX900: ; %bb.0:5017; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5018; GFX900-NEXT: ;;#ASMSTART5019; GFX900-NEXT: ; def s[4:5]5020; GFX900-NEXT: ;;#ASMEND5021; GFX900-NEXT: ;;#ASMSTART5022; GFX900-NEXT: ; def s[6:7]5023; GFX900-NEXT: ;;#ASMEND5024; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s45025; GFX900-NEXT: ;;#ASMSTART5026; GFX900-NEXT: ; use s85027; GFX900-NEXT: ;;#ASMEND5028; GFX900-NEXT: s_setpc_b64 s[30:31]5029;5030; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_1:5031; GFX90A: ; %bb.0:5032; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5033; GFX90A-NEXT: ;;#ASMSTART5034; GFX90A-NEXT: ; def s[4:5]5035; GFX90A-NEXT: ;;#ASMEND5036; GFX90A-NEXT: ;;#ASMSTART5037; GFX90A-NEXT: ; def s[6:7]5038; GFX90A-NEXT: ;;#ASMEND5039; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s45040; GFX90A-NEXT: ;;#ASMSTART5041; GFX90A-NEXT: ; use s85042; GFX90A-NEXT: ;;#ASMEND5043; GFX90A-NEXT: s_setpc_b64 s[30:31]5044;5045; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_1:5046; GFX942: ; %bb.0:5047; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5048; GFX942-NEXT: ;;#ASMSTART5049; GFX942-NEXT: ; def s[0:1]5050; GFX942-NEXT: ;;#ASMEND5051; GFX942-NEXT: ;;#ASMSTART5052; GFX942-NEXT: ; def s[2:3]5053; GFX942-NEXT: ;;#ASMEND5054; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s05055; GFX942-NEXT: ;;#ASMSTART5056; GFX942-NEXT: ; use s85057; GFX942-NEXT: ;;#ASMEND5058; GFX942-NEXT: s_setpc_b64 s[30:31]5059 %vec0 = call <4 x i16> asm "; def $0", "=s"()5060 %vec1 = call <4 x i16> asm "; def $0", "=s"()5061 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 1>5062 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5063 ret void5064}5065 5066define void @s_shuffle_v2i16_v4i16__u_2() {5067; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_2:5068; GFX900: ; %bb.0:5069; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5070; GFX900-NEXT: ;;#ASMSTART5071; GFX900-NEXT: ; def s[4:5]5072; GFX900-NEXT: ;;#ASMEND5073; GFX900-NEXT: s_lshl_b32 s8, s5, 165074; GFX900-NEXT: ;;#ASMSTART5075; GFX900-NEXT: ; use s85076; GFX900-NEXT: ;;#ASMEND5077; GFX900-NEXT: s_setpc_b64 s[30:31]5078;5079; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_2:5080; GFX90A: ; %bb.0:5081; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5082; GFX90A-NEXT: ;;#ASMSTART5083; GFX90A-NEXT: ; def s[4:5]5084; GFX90A-NEXT: ;;#ASMEND5085; GFX90A-NEXT: s_lshl_b32 s8, s5, 165086; GFX90A-NEXT: ;;#ASMSTART5087; GFX90A-NEXT: ; use s85088; GFX90A-NEXT: ;;#ASMEND5089; GFX90A-NEXT: s_setpc_b64 s[30:31]5090;5091; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_2:5092; GFX942: ; %bb.0:5093; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5094; GFX942-NEXT: ;;#ASMSTART5095; GFX942-NEXT: ; def s[0:1]5096; GFX942-NEXT: ;;#ASMEND5097; GFX942-NEXT: s_lshl_b32 s8, s1, 165098; GFX942-NEXT: ;;#ASMSTART5099; GFX942-NEXT: ; use s85100; GFX942-NEXT: ;;#ASMEND5101; GFX942-NEXT: s_setpc_b64 s[30:31]5102 %vec0 = call <4 x i16> asm "; def $0", "=s"()5103 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 2>5104 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5105 ret void5106}5107 5108define void @s_shuffle_v2i16_v4i16__0_2() {5109; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_2:5110; GFX900: ; %bb.0:5111; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5112; GFX900-NEXT: ;;#ASMSTART5113; GFX900-NEXT: ; def s[4:5]5114; GFX900-NEXT: ;;#ASMEND5115; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55116; GFX900-NEXT: ;;#ASMSTART5117; GFX900-NEXT: ; use s85118; GFX900-NEXT: ;;#ASMEND5119; GFX900-NEXT: s_setpc_b64 s[30:31]5120;5121; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_2:5122; GFX90A: ; %bb.0:5123; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5124; GFX90A-NEXT: ;;#ASMSTART5125; GFX90A-NEXT: ; def s[4:5]5126; GFX90A-NEXT: ;;#ASMEND5127; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55128; GFX90A-NEXT: ;;#ASMSTART5129; GFX90A-NEXT: ; use s85130; GFX90A-NEXT: ;;#ASMEND5131; GFX90A-NEXT: s_setpc_b64 s[30:31]5132;5133; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_2:5134; GFX942: ; %bb.0:5135; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5136; GFX942-NEXT: ;;#ASMSTART5137; GFX942-NEXT: ; def s[0:1]5138; GFX942-NEXT: ;;#ASMEND5139; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15140; GFX942-NEXT: ;;#ASMSTART5141; GFX942-NEXT: ; use s85142; GFX942-NEXT: ;;#ASMEND5143; GFX942-NEXT: s_setpc_b64 s[30:31]5144 %vec0 = call <4 x i16> asm "; def $0", "=s"()5145 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 2>5146 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5147 ret void5148}5149 5150define void @s_shuffle_v2i16_v4i16__1_2() {5151; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_2:5152; GFX900: ; %bb.0:5153; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5154; GFX900-NEXT: ;;#ASMSTART5155; GFX900-NEXT: ; def s[4:5]5156; GFX900-NEXT: ;;#ASMEND5157; GFX900-NEXT: s_lshr_b32 s4, s4, 165158; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55159; GFX900-NEXT: ;;#ASMSTART5160; GFX900-NEXT: ; use s85161; GFX900-NEXT: ;;#ASMEND5162; GFX900-NEXT: s_setpc_b64 s[30:31]5163;5164; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_2:5165; GFX90A: ; %bb.0:5166; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5167; GFX90A-NEXT: ;;#ASMSTART5168; GFX90A-NEXT: ; def s[4:5]5169; GFX90A-NEXT: ;;#ASMEND5170; GFX90A-NEXT: s_lshr_b32 s4, s4, 165171; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55172; GFX90A-NEXT: ;;#ASMSTART5173; GFX90A-NEXT: ; use s85174; GFX90A-NEXT: ;;#ASMEND5175; GFX90A-NEXT: s_setpc_b64 s[30:31]5176;5177; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_2:5178; GFX942: ; %bb.0:5179; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5180; GFX942-NEXT: ;;#ASMSTART5181; GFX942-NEXT: ; def s[0:1]5182; GFX942-NEXT: ;;#ASMEND5183; GFX942-NEXT: s_lshr_b32 s0, s0, 165184; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15185; GFX942-NEXT: ;;#ASMSTART5186; GFX942-NEXT: ; use s85187; GFX942-NEXT: ;;#ASMEND5188; GFX942-NEXT: s_setpc_b64 s[30:31]5189 %vec0 = call <4 x i16> asm "; def $0", "=s"()5190 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 2>5191 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5192 ret void5193}5194 5195define void @s_shuffle_v2i16_v4i16__2_2() {5196; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_2:5197; GFX900: ; %bb.0:5198; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5199; GFX900-NEXT: ;;#ASMSTART5200; GFX900-NEXT: ; def s[4:5]5201; GFX900-NEXT: ;;#ASMEND5202; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55203; GFX900-NEXT: ;;#ASMSTART5204; GFX900-NEXT: ; use s85205; GFX900-NEXT: ;;#ASMEND5206; GFX900-NEXT: s_setpc_b64 s[30:31]5207;5208; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_2:5209; GFX90A: ; %bb.0:5210; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5211; GFX90A-NEXT: ;;#ASMSTART5212; GFX90A-NEXT: ; def s[4:5]5213; GFX90A-NEXT: ;;#ASMEND5214; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55215; GFX90A-NEXT: ;;#ASMSTART5216; GFX90A-NEXT: ; use s85217; GFX90A-NEXT: ;;#ASMEND5218; GFX90A-NEXT: s_setpc_b64 s[30:31]5219;5220; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_2:5221; GFX942: ; %bb.0:5222; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5223; GFX942-NEXT: ;;#ASMSTART5224; GFX942-NEXT: ; def s[0:1]5225; GFX942-NEXT: ;;#ASMEND5226; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15227; GFX942-NEXT: ;;#ASMSTART5228; GFX942-NEXT: ; use s85229; GFX942-NEXT: ;;#ASMEND5230; GFX942-NEXT: s_setpc_b64 s[30:31]5231 %vec0 = call <4 x i16> asm "; def $0", "=s"()5232 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 2>5233 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5234 ret void5235}5236 5237define void @s_shuffle_v2i16_v4i16__3_2() {5238; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_2:5239; GFX900: ; %bb.0:5240; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5241; GFX900-NEXT: ;;#ASMSTART5242; GFX900-NEXT: ; def s[4:5]5243; GFX900-NEXT: ;;#ASMEND5244; GFX900-NEXT: s_lshr_b32 s4, s5, 165245; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55246; GFX900-NEXT: ;;#ASMSTART5247; GFX900-NEXT: ; use s85248; GFX900-NEXT: ;;#ASMEND5249; GFX900-NEXT: s_setpc_b64 s[30:31]5250;5251; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_2:5252; GFX90A: ; %bb.0:5253; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5254; GFX90A-NEXT: ;;#ASMSTART5255; GFX90A-NEXT: ; def s[4:5]5256; GFX90A-NEXT: ;;#ASMEND5257; GFX90A-NEXT: s_lshr_b32 s4, s5, 165258; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55259; GFX90A-NEXT: ;;#ASMSTART5260; GFX90A-NEXT: ; use s85261; GFX90A-NEXT: ;;#ASMEND5262; GFX90A-NEXT: s_setpc_b64 s[30:31]5263;5264; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_2:5265; GFX942: ; %bb.0:5266; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5267; GFX942-NEXT: ;;#ASMSTART5268; GFX942-NEXT: ; def s[0:1]5269; GFX942-NEXT: ;;#ASMEND5270; GFX942-NEXT: s_lshr_b32 s0, s1, 165271; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15272; GFX942-NEXT: ;;#ASMSTART5273; GFX942-NEXT: ; use s85274; GFX942-NEXT: ;;#ASMEND5275; GFX942-NEXT: s_setpc_b64 s[30:31]5276 %vec0 = call <4 x i16> asm "; def $0", "=s"()5277 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 2>5278 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5279 ret void5280}5281 5282define void @s_shuffle_v2i16_v4i16__4_2() {5283; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_2:5284; GFX900: ; %bb.0:5285; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5286; GFX900-NEXT: ;;#ASMSTART5287; GFX900-NEXT: ; def s[4:5]5288; GFX900-NEXT: ;;#ASMEND5289; GFX900-NEXT: s_lshl_b32 s8, s5, 165290; GFX900-NEXT: ;;#ASMSTART5291; GFX900-NEXT: ; use s85292; GFX900-NEXT: ;;#ASMEND5293; GFX900-NEXT: s_setpc_b64 s[30:31]5294;5295; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_2:5296; GFX90A: ; %bb.0:5297; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5298; GFX90A-NEXT: ;;#ASMSTART5299; GFX90A-NEXT: ; def s[4:5]5300; GFX90A-NEXT: ;;#ASMEND5301; GFX90A-NEXT: s_lshl_b32 s8, s5, 165302; GFX90A-NEXT: ;;#ASMSTART5303; GFX90A-NEXT: ; use s85304; GFX90A-NEXT: ;;#ASMEND5305; GFX90A-NEXT: s_setpc_b64 s[30:31]5306;5307; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_2:5308; GFX942: ; %bb.0:5309; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5310; GFX942-NEXT: ;;#ASMSTART5311; GFX942-NEXT: ; def s[0:1]5312; GFX942-NEXT: ;;#ASMEND5313; GFX942-NEXT: s_lshl_b32 s8, s1, 165314; GFX942-NEXT: ;;#ASMSTART5315; GFX942-NEXT: ; use s85316; GFX942-NEXT: ;;#ASMEND5317; GFX942-NEXT: s_setpc_b64 s[30:31]5318 %vec0 = call <4 x i16> asm "; def $0", "=s"()5319 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 2>5320 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5321 ret void5322}5323 5324define void @s_shuffle_v2i16_v4i16__5_2() {5325; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_2:5326; GFX900: ; %bb.0:5327; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5328; GFX900-NEXT: ;;#ASMSTART5329; GFX900-NEXT: ; def s[4:5]5330; GFX900-NEXT: ;;#ASMEND5331; GFX900-NEXT: ;;#ASMSTART5332; GFX900-NEXT: ; def s[6:7]5333; GFX900-NEXT: ;;#ASMEND5334; GFX900-NEXT: s_lshr_b32 s4, s6, 165335; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55336; GFX900-NEXT: ;;#ASMSTART5337; GFX900-NEXT: ; use s85338; GFX900-NEXT: ;;#ASMEND5339; GFX900-NEXT: s_setpc_b64 s[30:31]5340;5341; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_2:5342; GFX90A: ; %bb.0:5343; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5344; GFX90A-NEXT: ;;#ASMSTART5345; GFX90A-NEXT: ; def s[4:5]5346; GFX90A-NEXT: ;;#ASMEND5347; GFX90A-NEXT: ;;#ASMSTART5348; GFX90A-NEXT: ; def s[6:7]5349; GFX90A-NEXT: ;;#ASMEND5350; GFX90A-NEXT: s_lshr_b32 s4, s6, 165351; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55352; GFX90A-NEXT: ;;#ASMSTART5353; GFX90A-NEXT: ; use s85354; GFX90A-NEXT: ;;#ASMEND5355; GFX90A-NEXT: s_setpc_b64 s[30:31]5356;5357; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_2:5358; GFX942: ; %bb.0:5359; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5360; GFX942-NEXT: ;;#ASMSTART5361; GFX942-NEXT: ; def s[0:1]5362; GFX942-NEXT: ;;#ASMEND5363; GFX942-NEXT: ;;#ASMSTART5364; GFX942-NEXT: ; def s[2:3]5365; GFX942-NEXT: ;;#ASMEND5366; GFX942-NEXT: s_lshr_b32 s0, s2, 165367; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15368; GFX942-NEXT: ;;#ASMSTART5369; GFX942-NEXT: ; use s85370; GFX942-NEXT: ;;#ASMEND5371; GFX942-NEXT: s_setpc_b64 s[30:31]5372 %vec0 = call <4 x i16> asm "; def $0", "=s"()5373 %vec1 = call <4 x i16> asm "; def $0", "=s"()5374 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 2>5375 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5376 ret void5377}5378 5379define void @s_shuffle_v2i16_v4i16__6_2() {5380; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_2:5381; GFX900: ; %bb.0:5382; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5383; GFX900-NEXT: ;;#ASMSTART5384; GFX900-NEXT: ; def s[4:5]5385; GFX900-NEXT: ;;#ASMEND5386; GFX900-NEXT: ;;#ASMSTART5387; GFX900-NEXT: ; def s[6:7]5388; GFX900-NEXT: ;;#ASMEND5389; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s55390; GFX900-NEXT: ;;#ASMSTART5391; GFX900-NEXT: ; use s85392; GFX900-NEXT: ;;#ASMEND5393; GFX900-NEXT: s_setpc_b64 s[30:31]5394;5395; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_2:5396; GFX90A: ; %bb.0:5397; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5398; GFX90A-NEXT: ;;#ASMSTART5399; GFX90A-NEXT: ; def s[4:5]5400; GFX90A-NEXT: ;;#ASMEND5401; GFX90A-NEXT: ;;#ASMSTART5402; GFX90A-NEXT: ; def s[6:7]5403; GFX90A-NEXT: ;;#ASMEND5404; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s55405; GFX90A-NEXT: ;;#ASMSTART5406; GFX90A-NEXT: ; use s85407; GFX90A-NEXT: ;;#ASMEND5408; GFX90A-NEXT: s_setpc_b64 s[30:31]5409;5410; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_2:5411; GFX942: ; %bb.0:5412; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5413; GFX942-NEXT: ;;#ASMSTART5414; GFX942-NEXT: ; def s[0:1]5415; GFX942-NEXT: ;;#ASMEND5416; GFX942-NEXT: ;;#ASMSTART5417; GFX942-NEXT: ; def s[2:3]5418; GFX942-NEXT: ;;#ASMEND5419; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s15420; GFX942-NEXT: ;;#ASMSTART5421; GFX942-NEXT: ; use s85422; GFX942-NEXT: ;;#ASMEND5423; GFX942-NEXT: s_setpc_b64 s[30:31]5424 %vec0 = call <4 x i16> asm "; def $0", "=s"()5425 %vec1 = call <4 x i16> asm "; def $0", "=s"()5426 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 2>5427 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5428 ret void5429}5430 5431define void @s_shuffle_v2i16_v4i16__u_3() {5432; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_3:5433; GFX900: ; %bb.0:5434; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5435; GFX900-NEXT: ;;#ASMSTART5436; GFX900-NEXT: ; def s[4:5]5437; GFX900-NEXT: ;;#ASMEND5438; GFX900-NEXT: s_mov_b32 s8, s55439; GFX900-NEXT: ;;#ASMSTART5440; GFX900-NEXT: ; use s85441; GFX900-NEXT: ;;#ASMEND5442; GFX900-NEXT: s_setpc_b64 s[30:31]5443;5444; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_3:5445; GFX90A: ; %bb.0:5446; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5447; GFX90A-NEXT: ;;#ASMSTART5448; GFX90A-NEXT: ; def s[4:5]5449; GFX90A-NEXT: ;;#ASMEND5450; GFX90A-NEXT: s_mov_b32 s8, s55451; GFX90A-NEXT: ;;#ASMSTART5452; GFX90A-NEXT: ; use s85453; GFX90A-NEXT: ;;#ASMEND5454; GFX90A-NEXT: s_setpc_b64 s[30:31]5455;5456; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_3:5457; GFX942: ; %bb.0:5458; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5459; GFX942-NEXT: ;;#ASMSTART5460; GFX942-NEXT: ; def s[0:1]5461; GFX942-NEXT: ;;#ASMEND5462; GFX942-NEXT: s_mov_b32 s8, s15463; GFX942-NEXT: ;;#ASMSTART5464; GFX942-NEXT: ; use s85465; GFX942-NEXT: ;;#ASMEND5466; GFX942-NEXT: s_setpc_b64 s[30:31]5467 %vec0 = call <4 x i16> asm "; def $0", "=s"()5468 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 3>5469 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5470 ret void5471}5472 5473define void @s_shuffle_v2i16_v4i16__0_3() {5474; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_3:5475; GFX900: ; %bb.0:5476; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5477; GFX900-NEXT: ;;#ASMSTART5478; GFX900-NEXT: ; def s[4:5]5479; GFX900-NEXT: ;;#ASMEND5480; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s55481; GFX900-NEXT: ;;#ASMSTART5482; GFX900-NEXT: ; use s85483; GFX900-NEXT: ;;#ASMEND5484; GFX900-NEXT: s_setpc_b64 s[30:31]5485;5486; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_3:5487; GFX90A: ; %bb.0:5488; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5489; GFX90A-NEXT: ;;#ASMSTART5490; GFX90A-NEXT: ; def s[4:5]5491; GFX90A-NEXT: ;;#ASMEND5492; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s55493; GFX90A-NEXT: ;;#ASMSTART5494; GFX90A-NEXT: ; use s85495; GFX90A-NEXT: ;;#ASMEND5496; GFX90A-NEXT: s_setpc_b64 s[30:31]5497;5498; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_3:5499; GFX942: ; %bb.0:5500; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5501; GFX942-NEXT: ;;#ASMSTART5502; GFX942-NEXT: ; def s[0:1]5503; GFX942-NEXT: ;;#ASMEND5504; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s15505; GFX942-NEXT: ;;#ASMSTART5506; GFX942-NEXT: ; use s85507; GFX942-NEXT: ;;#ASMEND5508; GFX942-NEXT: s_setpc_b64 s[30:31]5509 %vec0 = call <4 x i16> asm "; def $0", "=s"()5510 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 3>5511 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5512 ret void5513}5514 5515define void @s_shuffle_v2i16_v4i16__1_3() {5516; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_3:5517; GFX900: ; %bb.0:5518; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5519; GFX900-NEXT: ;;#ASMSTART5520; GFX900-NEXT: ; def s[4:5]5521; GFX900-NEXT: ;;#ASMEND5522; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s55523; GFX900-NEXT: ;;#ASMSTART5524; GFX900-NEXT: ; use s85525; GFX900-NEXT: ;;#ASMEND5526; GFX900-NEXT: s_setpc_b64 s[30:31]5527;5528; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_3:5529; GFX90A: ; %bb.0:5530; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5531; GFX90A-NEXT: ;;#ASMSTART5532; GFX90A-NEXT: ; def s[4:5]5533; GFX90A-NEXT: ;;#ASMEND5534; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s55535; GFX90A-NEXT: ;;#ASMSTART5536; GFX90A-NEXT: ; use s85537; GFX90A-NEXT: ;;#ASMEND5538; GFX90A-NEXT: s_setpc_b64 s[30:31]5539;5540; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_3:5541; GFX942: ; %bb.0:5542; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5543; GFX942-NEXT: ;;#ASMSTART5544; GFX942-NEXT: ; def s[0:1]5545; GFX942-NEXT: ;;#ASMEND5546; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s15547; GFX942-NEXT: ;;#ASMSTART5548; GFX942-NEXT: ; use s85549; GFX942-NEXT: ;;#ASMEND5550; GFX942-NEXT: s_setpc_b64 s[30:31]5551 %vec0 = call <4 x i16> asm "; def $0", "=s"()5552 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 3>5553 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5554 ret void5555}5556 5557define void @s_shuffle_v2i16_v4i16__2_3() {5558; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_3:5559; GFX900: ; %bb.0:5560; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5561; GFX900-NEXT: ;;#ASMSTART5562; GFX900-NEXT: ; def s[4:5]5563; GFX900-NEXT: ;;#ASMEND5564; GFX900-NEXT: s_mov_b32 s8, s55565; GFX900-NEXT: ;;#ASMSTART5566; GFX900-NEXT: ; use s85567; GFX900-NEXT: ;;#ASMEND5568; GFX900-NEXT: s_setpc_b64 s[30:31]5569;5570; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_3:5571; GFX90A: ; %bb.0:5572; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5573; GFX90A-NEXT: ;;#ASMSTART5574; GFX90A-NEXT: ; def s[4:5]5575; GFX90A-NEXT: ;;#ASMEND5576; GFX90A-NEXT: s_mov_b32 s8, s55577; GFX90A-NEXT: ;;#ASMSTART5578; GFX90A-NEXT: ; use s85579; GFX90A-NEXT: ;;#ASMEND5580; GFX90A-NEXT: s_setpc_b64 s[30:31]5581;5582; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_3:5583; GFX942: ; %bb.0:5584; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5585; GFX942-NEXT: ;;#ASMSTART5586; GFX942-NEXT: ; def s[0:1]5587; GFX942-NEXT: ;;#ASMEND5588; GFX942-NEXT: s_mov_b32 s8, s15589; GFX942-NEXT: ;;#ASMSTART5590; GFX942-NEXT: ; use s85591; GFX942-NEXT: ;;#ASMEND5592; GFX942-NEXT: s_setpc_b64 s[30:31]5593 %vec0 = call <4 x i16> asm "; def $0", "=s"()5594 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 3>5595 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5596 ret void5597}5598 5599define void @s_shuffle_v2i16_v4i16__3_3() {5600; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_3:5601; GFX900: ; %bb.0:5602; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5603; GFX900-NEXT: ;;#ASMSTART5604; GFX900-NEXT: ; def s[4:5]5605; GFX900-NEXT: ;;#ASMEND5606; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s55607; GFX900-NEXT: ;;#ASMSTART5608; GFX900-NEXT: ; use s85609; GFX900-NEXT: ;;#ASMEND5610; GFX900-NEXT: s_setpc_b64 s[30:31]5611;5612; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_3:5613; GFX90A: ; %bb.0:5614; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5615; GFX90A-NEXT: ;;#ASMSTART5616; GFX90A-NEXT: ; def s[4:5]5617; GFX90A-NEXT: ;;#ASMEND5618; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s55619; GFX90A-NEXT: ;;#ASMSTART5620; GFX90A-NEXT: ; use s85621; GFX90A-NEXT: ;;#ASMEND5622; GFX90A-NEXT: s_setpc_b64 s[30:31]5623;5624; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_3:5625; GFX942: ; %bb.0:5626; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5627; GFX942-NEXT: ;;#ASMSTART5628; GFX942-NEXT: ; def s[0:1]5629; GFX942-NEXT: ;;#ASMEND5630; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s15631; GFX942-NEXT: ;;#ASMSTART5632; GFX942-NEXT: ; use s85633; GFX942-NEXT: ;;#ASMEND5634; GFX942-NEXT: s_setpc_b64 s[30:31]5635 %vec0 = call <4 x i16> asm "; def $0", "=s"()5636 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 3>5637 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5638 ret void5639}5640 5641define void @s_shuffle_v2i16_v4i16__4_3() {5642; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_3:5643; GFX900: ; %bb.0:5644; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5645; GFX900-NEXT: ;;#ASMSTART5646; GFX900-NEXT: ; def s[4:5]5647; GFX900-NEXT: ;;#ASMEND5648; GFX900-NEXT: s_mov_b32 s8, s55649; GFX900-NEXT: ;;#ASMSTART5650; GFX900-NEXT: ; use s85651; GFX900-NEXT: ;;#ASMEND5652; GFX900-NEXT: s_setpc_b64 s[30:31]5653;5654; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_3:5655; GFX90A: ; %bb.0:5656; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5657; GFX90A-NEXT: ;;#ASMSTART5658; GFX90A-NEXT: ; def s[4:5]5659; GFX90A-NEXT: ;;#ASMEND5660; GFX90A-NEXT: s_mov_b32 s8, s55661; GFX90A-NEXT: ;;#ASMSTART5662; GFX90A-NEXT: ; use s85663; GFX90A-NEXT: ;;#ASMEND5664; GFX90A-NEXT: s_setpc_b64 s[30:31]5665;5666; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_3:5667; GFX942: ; %bb.0:5668; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5669; GFX942-NEXT: ;;#ASMSTART5670; GFX942-NEXT: ; def s[0:1]5671; GFX942-NEXT: ;;#ASMEND5672; GFX942-NEXT: s_mov_b32 s8, s15673; GFX942-NEXT: ;;#ASMSTART5674; GFX942-NEXT: ; use s85675; GFX942-NEXT: ;;#ASMEND5676; GFX942-NEXT: s_setpc_b64 s[30:31]5677 %vec0 = call <4 x i16> asm "; def $0", "=s"()5678 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 3>5679 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5680 ret void5681}5682 5683define void @s_shuffle_v2i16_v4i16__5_3() {5684; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_3:5685; GFX900: ; %bb.0:5686; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5687; GFX900-NEXT: ;;#ASMSTART5688; GFX900-NEXT: ; def s[4:5]5689; GFX900-NEXT: ;;#ASMEND5690; GFX900-NEXT: ;;#ASMSTART5691; GFX900-NEXT: ; def s[6:7]5692; GFX900-NEXT: ;;#ASMEND5693; GFX900-NEXT: s_pack_hh_b32_b16 s8, s6, s55694; GFX900-NEXT: ;;#ASMSTART5695; GFX900-NEXT: ; use s85696; GFX900-NEXT: ;;#ASMEND5697; GFX900-NEXT: s_setpc_b64 s[30:31]5698;5699; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_3:5700; GFX90A: ; %bb.0:5701; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5702; GFX90A-NEXT: ;;#ASMSTART5703; GFX90A-NEXT: ; def s[4:5]5704; GFX90A-NEXT: ;;#ASMEND5705; GFX90A-NEXT: ;;#ASMSTART5706; GFX90A-NEXT: ; def s[6:7]5707; GFX90A-NEXT: ;;#ASMEND5708; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s6, s55709; GFX90A-NEXT: ;;#ASMSTART5710; GFX90A-NEXT: ; use s85711; GFX90A-NEXT: ;;#ASMEND5712; GFX90A-NEXT: s_setpc_b64 s[30:31]5713;5714; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_3:5715; GFX942: ; %bb.0:5716; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5717; GFX942-NEXT: ;;#ASMSTART5718; GFX942-NEXT: ; def s[0:1]5719; GFX942-NEXT: ;;#ASMEND5720; GFX942-NEXT: ;;#ASMSTART5721; GFX942-NEXT: ; def s[2:3]5722; GFX942-NEXT: ;;#ASMEND5723; GFX942-NEXT: s_pack_hh_b32_b16 s8, s2, s15724; GFX942-NEXT: ;;#ASMSTART5725; GFX942-NEXT: ; use s85726; GFX942-NEXT: ;;#ASMEND5727; GFX942-NEXT: s_setpc_b64 s[30:31]5728 %vec0 = call <4 x i16> asm "; def $0", "=s"()5729 %vec1 = call <4 x i16> asm "; def $0", "=s"()5730 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 3>5731 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5732 ret void5733}5734 5735define void @s_shuffle_v2i16_v4i16__6_3() {5736; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_3:5737; GFX900: ; %bb.0:5738; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5739; GFX900-NEXT: ;;#ASMSTART5740; GFX900-NEXT: ; def s[4:5]5741; GFX900-NEXT: ;;#ASMEND5742; GFX900-NEXT: ;;#ASMSTART5743; GFX900-NEXT: ; def s[6:7]5744; GFX900-NEXT: ;;#ASMEND5745; GFX900-NEXT: s_pack_lh_b32_b16 s8, s7, s55746; GFX900-NEXT: ;;#ASMSTART5747; GFX900-NEXT: ; use s85748; GFX900-NEXT: ;;#ASMEND5749; GFX900-NEXT: s_setpc_b64 s[30:31]5750;5751; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_3:5752; GFX90A: ; %bb.0:5753; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5754; GFX90A-NEXT: ;;#ASMSTART5755; GFX90A-NEXT: ; def s[4:5]5756; GFX90A-NEXT: ;;#ASMEND5757; GFX90A-NEXT: ;;#ASMSTART5758; GFX90A-NEXT: ; def s[6:7]5759; GFX90A-NEXT: ;;#ASMEND5760; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s7, s55761; GFX90A-NEXT: ;;#ASMSTART5762; GFX90A-NEXT: ; use s85763; GFX90A-NEXT: ;;#ASMEND5764; GFX90A-NEXT: s_setpc_b64 s[30:31]5765;5766; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_3:5767; GFX942: ; %bb.0:5768; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5769; GFX942-NEXT: ;;#ASMSTART5770; GFX942-NEXT: ; def s[0:1]5771; GFX942-NEXT: ;;#ASMEND5772; GFX942-NEXT: ;;#ASMSTART5773; GFX942-NEXT: ; def s[2:3]5774; GFX942-NEXT: ;;#ASMEND5775; GFX942-NEXT: s_pack_lh_b32_b16 s8, s3, s15776; GFX942-NEXT: ;;#ASMSTART5777; GFX942-NEXT: ; use s85778; GFX942-NEXT: ;;#ASMEND5779; GFX942-NEXT: s_setpc_b64 s[30:31]5780 %vec0 = call <4 x i16> asm "; def $0", "=s"()5781 %vec1 = call <4 x i16> asm "; def $0", "=s"()5782 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 3>5783 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5784 ret void5785}5786 5787define void @s_shuffle_v2i16_v4i16__u_4() {5788; GFX9-LABEL: s_shuffle_v2i16_v4i16__u_4:5789; GFX9: ; %bb.0:5790; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5791; GFX9-NEXT: ;;#ASMSTART5792; GFX9-NEXT: ; use s85793; GFX9-NEXT: ;;#ASMEND5794; GFX9-NEXT: s_setpc_b64 s[30:31]5795 %vec0 = call <4 x i16> asm "; def $0", "=s"()5796 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 poison, i32 4>5797 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5798 ret void5799}5800 5801define void @s_shuffle_v2i16_v4i16__0_4() {5802; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_4:5803; GFX900: ; %bb.0:5804; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5805; GFX900-NEXT: ;;#ASMSTART5806; GFX900-NEXT: ; def s[8:9]5807; GFX900-NEXT: ;;#ASMEND5808; GFX900-NEXT: ;;#ASMSTART5809; GFX900-NEXT: ; use s85810; GFX900-NEXT: ;;#ASMEND5811; GFX900-NEXT: s_setpc_b64 s[30:31]5812;5813; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_4:5814; GFX90A: ; %bb.0:5815; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5816; GFX90A-NEXT: ;;#ASMSTART5817; GFX90A-NEXT: ; def s[8:9]5818; GFX90A-NEXT: ;;#ASMEND5819; GFX90A-NEXT: ;;#ASMSTART5820; GFX90A-NEXT: ; use s85821; GFX90A-NEXT: ;;#ASMEND5822; GFX90A-NEXT: s_setpc_b64 s[30:31]5823;5824; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_4:5825; GFX942: ; %bb.0:5826; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5827; GFX942-NEXT: ;;#ASMSTART5828; GFX942-NEXT: ; def s[8:9]5829; GFX942-NEXT: ;;#ASMEND5830; GFX942-NEXT: s_nop 05831; GFX942-NEXT: ;;#ASMSTART5832; GFX942-NEXT: ; use s85833; GFX942-NEXT: ;;#ASMEND5834; GFX942-NEXT: s_setpc_b64 s[30:31]5835 %vec0 = call <4 x i16> asm "; def $0", "=s"()5836 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 0, i32 4>5837 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5838 ret void5839}5840 5841define void @s_shuffle_v2i16_v4i16__1_4() {5842; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_4:5843; GFX900: ; %bb.0:5844; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5845; GFX900-NEXT: ;;#ASMSTART5846; GFX900-NEXT: ; def s[4:5]5847; GFX900-NEXT: ;;#ASMEND5848; GFX900-NEXT: s_lshr_b32 s8, s4, 165849; GFX900-NEXT: ;;#ASMSTART5850; GFX900-NEXT: ; use s85851; GFX900-NEXT: ;;#ASMEND5852; GFX900-NEXT: s_setpc_b64 s[30:31]5853;5854; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_4:5855; GFX90A: ; %bb.0:5856; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5857; GFX90A-NEXT: ;;#ASMSTART5858; GFX90A-NEXT: ; def s[4:5]5859; GFX90A-NEXT: ;;#ASMEND5860; GFX90A-NEXT: s_lshr_b32 s8, s4, 165861; GFX90A-NEXT: ;;#ASMSTART5862; GFX90A-NEXT: ; use s85863; GFX90A-NEXT: ;;#ASMEND5864; GFX90A-NEXT: s_setpc_b64 s[30:31]5865;5866; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_4:5867; GFX942: ; %bb.0:5868; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5869; GFX942-NEXT: ;;#ASMSTART5870; GFX942-NEXT: ; def s[0:1]5871; GFX942-NEXT: ;;#ASMEND5872; GFX942-NEXT: s_lshr_b32 s8, s0, 165873; GFX942-NEXT: ;;#ASMSTART5874; GFX942-NEXT: ; use s85875; GFX942-NEXT: ;;#ASMEND5876; GFX942-NEXT: s_setpc_b64 s[30:31]5877 %vec0 = call <4 x i16> asm "; def $0", "=s"()5878 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 1, i32 4>5879 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5880 ret void5881}5882 5883define void @s_shuffle_v2i16_v4i16__2_4() {5884; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_4:5885; GFX900: ; %bb.0:5886; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5887; GFX900-NEXT: ;;#ASMSTART5888; GFX900-NEXT: ; def s[4:5]5889; GFX900-NEXT: ;;#ASMEND5890; GFX900-NEXT: s_mov_b32 s8, s55891; GFX900-NEXT: ;;#ASMSTART5892; GFX900-NEXT: ; use s85893; GFX900-NEXT: ;;#ASMEND5894; GFX900-NEXT: s_setpc_b64 s[30:31]5895;5896; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_4:5897; GFX90A: ; %bb.0:5898; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5899; GFX90A-NEXT: ;;#ASMSTART5900; GFX90A-NEXT: ; def s[4:5]5901; GFX90A-NEXT: ;;#ASMEND5902; GFX90A-NEXT: s_mov_b32 s8, s55903; GFX90A-NEXT: ;;#ASMSTART5904; GFX90A-NEXT: ; use s85905; GFX90A-NEXT: ;;#ASMEND5906; GFX90A-NEXT: s_setpc_b64 s[30:31]5907;5908; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_4:5909; GFX942: ; %bb.0:5910; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5911; GFX942-NEXT: ;;#ASMSTART5912; GFX942-NEXT: ; def s[0:1]5913; GFX942-NEXT: ;;#ASMEND5914; GFX942-NEXT: s_mov_b32 s8, s15915; GFX942-NEXT: ;;#ASMSTART5916; GFX942-NEXT: ; use s85917; GFX942-NEXT: ;;#ASMEND5918; GFX942-NEXT: s_setpc_b64 s[30:31]5919 %vec0 = call <4 x i16> asm "; def $0", "=s"()5920 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 2, i32 4>5921 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5922 ret void5923}5924 5925define void @s_shuffle_v2i16_v4i16__3_4() {5926; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_4:5927; GFX900: ; %bb.0:5928; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5929; GFX900-NEXT: ;;#ASMSTART5930; GFX900-NEXT: ; def s[4:5]5931; GFX900-NEXT: ;;#ASMEND5932; GFX900-NEXT: s_lshr_b32 s8, s5, 165933; GFX900-NEXT: ;;#ASMSTART5934; GFX900-NEXT: ; use s85935; GFX900-NEXT: ;;#ASMEND5936; GFX900-NEXT: s_setpc_b64 s[30:31]5937;5938; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_4:5939; GFX90A: ; %bb.0:5940; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5941; GFX90A-NEXT: ;;#ASMSTART5942; GFX90A-NEXT: ; def s[4:5]5943; GFX90A-NEXT: ;;#ASMEND5944; GFX90A-NEXT: s_lshr_b32 s8, s5, 165945; GFX90A-NEXT: ;;#ASMSTART5946; GFX90A-NEXT: ; use s85947; GFX90A-NEXT: ;;#ASMEND5948; GFX90A-NEXT: s_setpc_b64 s[30:31]5949;5950; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_4:5951; GFX942: ; %bb.0:5952; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5953; GFX942-NEXT: ;;#ASMSTART5954; GFX942-NEXT: ; def s[0:1]5955; GFX942-NEXT: ;;#ASMEND5956; GFX942-NEXT: s_lshr_b32 s8, s1, 165957; GFX942-NEXT: ;;#ASMSTART5958; GFX942-NEXT: ; use s85959; GFX942-NEXT: ;;#ASMEND5960; GFX942-NEXT: s_setpc_b64 s[30:31]5961 %vec0 = call <4 x i16> asm "; def $0", "=s"()5962 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 3, i32 4>5963 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5964 ret void5965}5966 5967define void @s_shuffle_v2i16_v4i16__4_4() {5968; GFX9-LABEL: s_shuffle_v2i16_v4i16__4_4:5969; GFX9: ; %bb.0:5970; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5971; GFX9-NEXT: ;;#ASMSTART5972; GFX9-NEXT: ; use s85973; GFX9-NEXT: ;;#ASMEND5974; GFX9-NEXT: s_setpc_b64 s[30:31]5975 %vec0 = call <4 x i16> asm "; def $0", "=s"()5976 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> poison, <2 x i32> <i32 4, i32 4>5977 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)5978 ret void5979}5980 5981define void @s_shuffle_v2i16_v4i16__5_4() {5982; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_4:5983; GFX900: ; %bb.0:5984; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5985; GFX900-NEXT: ;;#ASMSTART5986; GFX900-NEXT: ; def s[4:5]5987; GFX900-NEXT: ;;#ASMEND5988; GFX900-NEXT: s_lshr_b32 s5, s4, 165989; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45990; GFX900-NEXT: ;;#ASMSTART5991; GFX900-NEXT: ; use s85992; GFX900-NEXT: ;;#ASMEND5993; GFX900-NEXT: s_setpc_b64 s[30:31]5994;5995; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_4:5996; GFX90A: ; %bb.0:5997; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5998; GFX90A-NEXT: ;;#ASMSTART5999; GFX90A-NEXT: ; def s[4:5]6000; GFX90A-NEXT: ;;#ASMEND6001; GFX90A-NEXT: s_lshr_b32 s5, s4, 166002; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46003; GFX90A-NEXT: ;;#ASMSTART6004; GFX90A-NEXT: ; use s86005; GFX90A-NEXT: ;;#ASMEND6006; GFX90A-NEXT: s_setpc_b64 s[30:31]6007;6008; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_4:6009; GFX942: ; %bb.0:6010; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6011; GFX942-NEXT: ;;#ASMSTART6012; GFX942-NEXT: ; def s[0:1]6013; GFX942-NEXT: ;;#ASMEND6014; GFX942-NEXT: s_lshr_b32 s1, s0, 166015; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06016; GFX942-NEXT: ;;#ASMSTART6017; GFX942-NEXT: ; use s86018; GFX942-NEXT: ;;#ASMEND6019; GFX942-NEXT: s_setpc_b64 s[30:31]6020 %vec0 = call <4 x i16> asm "; def $0", "=s"()6021 %vec1 = call <4 x i16> asm "; def $0", "=s"()6022 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 4>6023 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6024 ret void6025}6026 6027define void @s_shuffle_v2i16_v4i16__6_4() {6028; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_4:6029; GFX900: ; %bb.0:6030; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6031; GFX900-NEXT: ;;#ASMSTART6032; GFX900-NEXT: ; def s[4:5]6033; GFX900-NEXT: ;;#ASMEND6034; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46035; GFX900-NEXT: ;;#ASMSTART6036; GFX900-NEXT: ; use s86037; GFX900-NEXT: ;;#ASMEND6038; GFX900-NEXT: s_setpc_b64 s[30:31]6039;6040; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_4:6041; GFX90A: ; %bb.0:6042; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6043; GFX90A-NEXT: ;;#ASMSTART6044; GFX90A-NEXT: ; def s[4:5]6045; GFX90A-NEXT: ;;#ASMEND6046; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46047; GFX90A-NEXT: ;;#ASMSTART6048; GFX90A-NEXT: ; use s86049; GFX90A-NEXT: ;;#ASMEND6050; GFX90A-NEXT: s_setpc_b64 s[30:31]6051;6052; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_4:6053; GFX942: ; %bb.0:6054; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6055; GFX942-NEXT: ;;#ASMSTART6056; GFX942-NEXT: ; def s[0:1]6057; GFX942-NEXT: ;;#ASMEND6058; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06059; GFX942-NEXT: ;;#ASMSTART6060; GFX942-NEXT: ; use s86061; GFX942-NEXT: ;;#ASMEND6062; GFX942-NEXT: s_setpc_b64 s[30:31]6063 %vec0 = call <4 x i16> asm "; def $0", "=s"()6064 %vec1 = call <4 x i16> asm "; def $0", "=s"()6065 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 4>6066 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6067 ret void6068}6069 6070define void @s_shuffle_v2i16_v4i16__u_5() {6071; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_5:6072; GFX900: ; %bb.0:6073; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6074; GFX900-NEXT: ;;#ASMSTART6075; GFX900-NEXT: ; def s[8:9]6076; GFX900-NEXT: ;;#ASMEND6077; GFX900-NEXT: ;;#ASMSTART6078; GFX900-NEXT: ; use s86079; GFX900-NEXT: ;;#ASMEND6080; GFX900-NEXT: s_setpc_b64 s[30:31]6081;6082; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_5:6083; GFX90A: ; %bb.0:6084; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6085; GFX90A-NEXT: ;;#ASMSTART6086; GFX90A-NEXT: ; def s[8:9]6087; GFX90A-NEXT: ;;#ASMEND6088; GFX90A-NEXT: ;;#ASMSTART6089; GFX90A-NEXT: ; use s86090; GFX90A-NEXT: ;;#ASMEND6091; GFX90A-NEXT: s_setpc_b64 s[30:31]6092;6093; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_5:6094; GFX942: ; %bb.0:6095; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6096; GFX942-NEXT: ;;#ASMSTART6097; GFX942-NEXT: ; def s[8:9]6098; GFX942-NEXT: ;;#ASMEND6099; GFX942-NEXT: s_nop 06100; GFX942-NEXT: ;;#ASMSTART6101; GFX942-NEXT: ; use s86102; GFX942-NEXT: ;;#ASMEND6103; GFX942-NEXT: s_setpc_b64 s[30:31]6104 %vec0 = call <4 x i16> asm "; def $0", "=s"()6105 %vec1 = call <4 x i16> asm "; def $0", "=s"()6106 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 poison, i32 5>6107 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6108 ret void6109}6110 6111define void @s_shuffle_v2i16_v4i16__0_5() {6112; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_5:6113; GFX900: ; %bb.0:6114; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6115; GFX900-NEXT: ;;#ASMSTART6116; GFX900-NEXT: ; def s[4:5]6117; GFX900-NEXT: ;;#ASMEND6118; GFX900-NEXT: ;;#ASMSTART6119; GFX900-NEXT: ; def s[6:7]6120; GFX900-NEXT: ;;#ASMEND6121; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s66122; GFX900-NEXT: ;;#ASMSTART6123; GFX900-NEXT: ; use s86124; GFX900-NEXT: ;;#ASMEND6125; GFX900-NEXT: s_setpc_b64 s[30:31]6126;6127; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_5:6128; GFX90A: ; %bb.0:6129; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6130; GFX90A-NEXT: ;;#ASMSTART6131; GFX90A-NEXT: ; def s[4:5]6132; GFX90A-NEXT: ;;#ASMEND6133; GFX90A-NEXT: ;;#ASMSTART6134; GFX90A-NEXT: ; def s[6:7]6135; GFX90A-NEXT: ;;#ASMEND6136; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s66137; GFX90A-NEXT: ;;#ASMSTART6138; GFX90A-NEXT: ; use s86139; GFX90A-NEXT: ;;#ASMEND6140; GFX90A-NEXT: s_setpc_b64 s[30:31]6141;6142; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_5:6143; GFX942: ; %bb.0:6144; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6145; GFX942-NEXT: ;;#ASMSTART6146; GFX942-NEXT: ; def s[0:1]6147; GFX942-NEXT: ;;#ASMEND6148; GFX942-NEXT: ;;#ASMSTART6149; GFX942-NEXT: ; def s[2:3]6150; GFX942-NEXT: ;;#ASMEND6151; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s26152; GFX942-NEXT: ;;#ASMSTART6153; GFX942-NEXT: ; use s86154; GFX942-NEXT: ;;#ASMEND6155; GFX942-NEXT: s_setpc_b64 s[30:31]6156 %vec0 = call <4 x i16> asm "; def $0", "=s"()6157 %vec1 = call <4 x i16> asm "; def $0", "=s"()6158 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 0, i32 5>6159 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6160 ret void6161}6162 6163define void @s_shuffle_v2i16_v4i16__1_5() {6164; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_5:6165; GFX900: ; %bb.0:6166; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6167; GFX900-NEXT: ;;#ASMSTART6168; GFX900-NEXT: ; def s[4:5]6169; GFX900-NEXT: ;;#ASMEND6170; GFX900-NEXT: ;;#ASMSTART6171; GFX900-NEXT: ; def s[6:7]6172; GFX900-NEXT: ;;#ASMEND6173; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s66174; GFX900-NEXT: ;;#ASMSTART6175; GFX900-NEXT: ; use s86176; GFX900-NEXT: ;;#ASMEND6177; GFX900-NEXT: s_setpc_b64 s[30:31]6178;6179; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_5:6180; GFX90A: ; %bb.0:6181; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6182; GFX90A-NEXT: ;;#ASMSTART6183; GFX90A-NEXT: ; def s[4:5]6184; GFX90A-NEXT: ;;#ASMEND6185; GFX90A-NEXT: ;;#ASMSTART6186; GFX90A-NEXT: ; def s[6:7]6187; GFX90A-NEXT: ;;#ASMEND6188; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s66189; GFX90A-NEXT: ;;#ASMSTART6190; GFX90A-NEXT: ; use s86191; GFX90A-NEXT: ;;#ASMEND6192; GFX90A-NEXT: s_setpc_b64 s[30:31]6193;6194; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_5:6195; GFX942: ; %bb.0:6196; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6197; GFX942-NEXT: ;;#ASMSTART6198; GFX942-NEXT: ; def s[0:1]6199; GFX942-NEXT: ;;#ASMEND6200; GFX942-NEXT: ;;#ASMSTART6201; GFX942-NEXT: ; def s[2:3]6202; GFX942-NEXT: ;;#ASMEND6203; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s26204; GFX942-NEXT: ;;#ASMSTART6205; GFX942-NEXT: ; use s86206; GFX942-NEXT: ;;#ASMEND6207; GFX942-NEXT: s_setpc_b64 s[30:31]6208 %vec0 = call <4 x i16> asm "; def $0", "=s"()6209 %vec1 = call <4 x i16> asm "; def $0", "=s"()6210 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 1, i32 5>6211 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6212 ret void6213}6214 6215define void @s_shuffle_v2i16_v4i16__2_5() {6216; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_5:6217; GFX900: ; %bb.0:6218; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6219; GFX900-NEXT: ;;#ASMSTART6220; GFX900-NEXT: ; def s[4:5]6221; GFX900-NEXT: ;;#ASMEND6222; GFX900-NEXT: ;;#ASMSTART6223; GFX900-NEXT: ; def s[6:7]6224; GFX900-NEXT: ;;#ASMEND6225; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s66226; GFX900-NEXT: ;;#ASMSTART6227; GFX900-NEXT: ; use s86228; GFX900-NEXT: ;;#ASMEND6229; GFX900-NEXT: s_setpc_b64 s[30:31]6230;6231; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_5:6232; GFX90A: ; %bb.0:6233; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6234; GFX90A-NEXT: ;;#ASMSTART6235; GFX90A-NEXT: ; def s[4:5]6236; GFX90A-NEXT: ;;#ASMEND6237; GFX90A-NEXT: ;;#ASMSTART6238; GFX90A-NEXT: ; def s[6:7]6239; GFX90A-NEXT: ;;#ASMEND6240; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s66241; GFX90A-NEXT: ;;#ASMSTART6242; GFX90A-NEXT: ; use s86243; GFX90A-NEXT: ;;#ASMEND6244; GFX90A-NEXT: s_setpc_b64 s[30:31]6245;6246; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_5:6247; GFX942: ; %bb.0:6248; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6249; GFX942-NEXT: ;;#ASMSTART6250; GFX942-NEXT: ; def s[0:1]6251; GFX942-NEXT: ;;#ASMEND6252; GFX942-NEXT: ;;#ASMSTART6253; GFX942-NEXT: ; def s[2:3]6254; GFX942-NEXT: ;;#ASMEND6255; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s26256; GFX942-NEXT: ;;#ASMSTART6257; GFX942-NEXT: ; use s86258; GFX942-NEXT: ;;#ASMEND6259; GFX942-NEXT: s_setpc_b64 s[30:31]6260 %vec0 = call <4 x i16> asm "; def $0", "=s"()6261 %vec1 = call <4 x i16> asm "; def $0", "=s"()6262 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 2, i32 5>6263 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6264 ret void6265}6266 6267define void @s_shuffle_v2i16_v4i16__3_5() {6268; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_5:6269; GFX900: ; %bb.0:6270; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6271; GFX900-NEXT: ;;#ASMSTART6272; GFX900-NEXT: ; def s[4:5]6273; GFX900-NEXT: ;;#ASMEND6274; GFX900-NEXT: ;;#ASMSTART6275; GFX900-NEXT: ; def s[6:7]6276; GFX900-NEXT: ;;#ASMEND6277; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s66278; GFX900-NEXT: ;;#ASMSTART6279; GFX900-NEXT: ; use s86280; GFX900-NEXT: ;;#ASMEND6281; GFX900-NEXT: s_setpc_b64 s[30:31]6282;6283; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_5:6284; GFX90A: ; %bb.0:6285; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6286; GFX90A-NEXT: ;;#ASMSTART6287; GFX90A-NEXT: ; def s[4:5]6288; GFX90A-NEXT: ;;#ASMEND6289; GFX90A-NEXT: ;;#ASMSTART6290; GFX90A-NEXT: ; def s[6:7]6291; GFX90A-NEXT: ;;#ASMEND6292; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s66293; GFX90A-NEXT: ;;#ASMSTART6294; GFX90A-NEXT: ; use s86295; GFX90A-NEXT: ;;#ASMEND6296; GFX90A-NEXT: s_setpc_b64 s[30:31]6297;6298; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_5:6299; GFX942: ; %bb.0:6300; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6301; GFX942-NEXT: ;;#ASMSTART6302; GFX942-NEXT: ; def s[0:1]6303; GFX942-NEXT: ;;#ASMEND6304; GFX942-NEXT: ;;#ASMSTART6305; GFX942-NEXT: ; def s[2:3]6306; GFX942-NEXT: ;;#ASMEND6307; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s26308; GFX942-NEXT: ;;#ASMSTART6309; GFX942-NEXT: ; use s86310; GFX942-NEXT: ;;#ASMEND6311; GFX942-NEXT: s_setpc_b64 s[30:31]6312 %vec0 = call <4 x i16> asm "; def $0", "=s"()6313 %vec1 = call <4 x i16> asm "; def $0", "=s"()6314 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 3, i32 5>6315 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6316 ret void6317}6318 6319define void @s_shuffle_v2i16_v4i16__4_5() {6320; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_5:6321; GFX900: ; %bb.0:6322; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6323; GFX900-NEXT: ;;#ASMSTART6324; GFX900-NEXT: ; def s[8:9]6325; GFX900-NEXT: ;;#ASMEND6326; GFX900-NEXT: ;;#ASMSTART6327; GFX900-NEXT: ; use s86328; GFX900-NEXT: ;;#ASMEND6329; GFX900-NEXT: s_setpc_b64 s[30:31]6330;6331; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_5:6332; GFX90A: ; %bb.0:6333; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6334; GFX90A-NEXT: ;;#ASMSTART6335; GFX90A-NEXT: ; def s[8:9]6336; GFX90A-NEXT: ;;#ASMEND6337; GFX90A-NEXT: ;;#ASMSTART6338; GFX90A-NEXT: ; use s86339; GFX90A-NEXT: ;;#ASMEND6340; GFX90A-NEXT: s_setpc_b64 s[30:31]6341;6342; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_5:6343; GFX942: ; %bb.0:6344; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6345; GFX942-NEXT: ;;#ASMSTART6346; GFX942-NEXT: ; def s[8:9]6347; GFX942-NEXT: ;;#ASMEND6348; GFX942-NEXT: s_nop 06349; GFX942-NEXT: ;;#ASMSTART6350; GFX942-NEXT: ; use s86351; GFX942-NEXT: ;;#ASMEND6352; GFX942-NEXT: s_setpc_b64 s[30:31]6353 %vec0 = call <4 x i16> asm "; def $0", "=s"()6354 %vec1 = call <4 x i16> asm "; def $0", "=s"()6355 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 4, i32 5>6356 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6357 ret void6358}6359 6360define void @s_shuffle_v2i16_v4i16__5_5() {6361; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_5:6362; GFX900: ; %bb.0:6363; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6364; GFX900-NEXT: ;;#ASMSTART6365; GFX900-NEXT: ; def s[4:5]6366; GFX900-NEXT: ;;#ASMEND6367; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s46368; GFX900-NEXT: ;;#ASMSTART6369; GFX900-NEXT: ; use s86370; GFX900-NEXT: ;;#ASMEND6371; GFX900-NEXT: s_setpc_b64 s[30:31]6372;6373; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_5:6374; GFX90A: ; %bb.0:6375; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6376; GFX90A-NEXT: ;;#ASMSTART6377; GFX90A-NEXT: ; def s[4:5]6378; GFX90A-NEXT: ;;#ASMEND6379; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s46380; GFX90A-NEXT: ;;#ASMSTART6381; GFX90A-NEXT: ; use s86382; GFX90A-NEXT: ;;#ASMEND6383; GFX90A-NEXT: s_setpc_b64 s[30:31]6384;6385; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_5:6386; GFX942: ; %bb.0:6387; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6388; GFX942-NEXT: ;;#ASMSTART6389; GFX942-NEXT: ; def s[0:1]6390; GFX942-NEXT: ;;#ASMEND6391; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s06392; GFX942-NEXT: ;;#ASMSTART6393; GFX942-NEXT: ; use s86394; GFX942-NEXT: ;;#ASMEND6395; GFX942-NEXT: s_setpc_b64 s[30:31]6396 %vec0 = call <4 x i16> asm "; def $0", "=s"()6397 %vec1 = call <4 x i16> asm "; def $0", "=s"()6398 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 5>6399 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6400 ret void6401}6402 6403define void @s_shuffle_v2i16_v4i16__6_5() {6404; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_5:6405; GFX900: ; %bb.0:6406; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6407; GFX900-NEXT: ;;#ASMSTART6408; GFX900-NEXT: ; def s[4:5]6409; GFX900-NEXT: ;;#ASMEND6410; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s46411; GFX900-NEXT: ;;#ASMSTART6412; GFX900-NEXT: ; use s86413; GFX900-NEXT: ;;#ASMEND6414; GFX900-NEXT: s_setpc_b64 s[30:31]6415;6416; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_5:6417; GFX90A: ; %bb.0:6418; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6419; GFX90A-NEXT: ;;#ASMSTART6420; GFX90A-NEXT: ; def s[4:5]6421; GFX90A-NEXT: ;;#ASMEND6422; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s46423; GFX90A-NEXT: ;;#ASMSTART6424; GFX90A-NEXT: ; use s86425; GFX90A-NEXT: ;;#ASMEND6426; GFX90A-NEXT: s_setpc_b64 s[30:31]6427;6428; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_5:6429; GFX942: ; %bb.0:6430; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6431; GFX942-NEXT: ;;#ASMSTART6432; GFX942-NEXT: ; def s[0:1]6433; GFX942-NEXT: ;;#ASMEND6434; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s06435; GFX942-NEXT: ;;#ASMSTART6436; GFX942-NEXT: ; use s86437; GFX942-NEXT: ;;#ASMEND6438; GFX942-NEXT: s_setpc_b64 s[30:31]6439 %vec0 = call <4 x i16> asm "; def $0", "=s"()6440 %vec1 = call <4 x i16> asm "; def $0", "=s"()6441 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 5>6442 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6443 ret void6444}6445 6446define void @s_shuffle_v2i16_v4i16__u_6() {6447; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_6:6448; GFX900: ; %bb.0:6449; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6450; GFX900-NEXT: ;;#ASMSTART6451; GFX900-NEXT: ; def s[4:5]6452; GFX900-NEXT: ;;#ASMEND6453; GFX900-NEXT: s_lshl_b32 s8, s5, 166454; GFX900-NEXT: ;;#ASMSTART6455; GFX900-NEXT: ; use s86456; GFX900-NEXT: ;;#ASMEND6457; GFX900-NEXT: s_setpc_b64 s[30:31]6458;6459; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_6:6460; GFX90A: ; %bb.0:6461; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6462; GFX90A-NEXT: ;;#ASMSTART6463; GFX90A-NEXT: ; def s[4:5]6464; GFX90A-NEXT: ;;#ASMEND6465; GFX90A-NEXT: s_lshl_b32 s8, s5, 166466; GFX90A-NEXT: ;;#ASMSTART6467; GFX90A-NEXT: ; use s86468; GFX90A-NEXT: ;;#ASMEND6469; GFX90A-NEXT: s_setpc_b64 s[30:31]6470;6471; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_6:6472; GFX942: ; %bb.0:6473; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6474; GFX942-NEXT: ;;#ASMSTART6475; GFX942-NEXT: ; def s[0:1]6476; GFX942-NEXT: ;;#ASMEND6477; GFX942-NEXT: s_lshl_b32 s8, s1, 166478; GFX942-NEXT: ;;#ASMSTART6479; GFX942-NEXT: ; use s86480; GFX942-NEXT: ;;#ASMEND6481; GFX942-NEXT: s_setpc_b64 s[30:31]6482 %vec0 = call <4 x i16> asm "; def $0", "=s"()6483 %vec1 = call <4 x i16> asm "; def $0", "=s"()6484 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 poison, i32 6>6485 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6486 ret void6487}6488 6489define void @s_shuffle_v2i16_v4i16__0_6() {6490; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_6:6491; GFX900: ; %bb.0:6492; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6493; GFX900-NEXT: ;;#ASMSTART6494; GFX900-NEXT: ; def s[4:5]6495; GFX900-NEXT: ;;#ASMEND6496; GFX900-NEXT: ;;#ASMSTART6497; GFX900-NEXT: ; def s[6:7]6498; GFX900-NEXT: ;;#ASMEND6499; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s76500; GFX900-NEXT: ;;#ASMSTART6501; GFX900-NEXT: ; use s86502; GFX900-NEXT: ;;#ASMEND6503; GFX900-NEXT: s_setpc_b64 s[30:31]6504;6505; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_6:6506; GFX90A: ; %bb.0:6507; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6508; GFX90A-NEXT: ;;#ASMSTART6509; GFX90A-NEXT: ; def s[4:5]6510; GFX90A-NEXT: ;;#ASMEND6511; GFX90A-NEXT: ;;#ASMSTART6512; GFX90A-NEXT: ; def s[6:7]6513; GFX90A-NEXT: ;;#ASMEND6514; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s76515; GFX90A-NEXT: ;;#ASMSTART6516; GFX90A-NEXT: ; use s86517; GFX90A-NEXT: ;;#ASMEND6518; GFX90A-NEXT: s_setpc_b64 s[30:31]6519;6520; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_6:6521; GFX942: ; %bb.0:6522; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6523; GFX942-NEXT: ;;#ASMSTART6524; GFX942-NEXT: ; def s[0:1]6525; GFX942-NEXT: ;;#ASMEND6526; GFX942-NEXT: ;;#ASMSTART6527; GFX942-NEXT: ; def s[2:3]6528; GFX942-NEXT: ;;#ASMEND6529; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s36530; GFX942-NEXT: ;;#ASMSTART6531; GFX942-NEXT: ; use s86532; GFX942-NEXT: ;;#ASMEND6533; GFX942-NEXT: s_setpc_b64 s[30:31]6534 %vec0 = call <4 x i16> asm "; def $0", "=s"()6535 %vec1 = call <4 x i16> asm "; def $0", "=s"()6536 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 0, i32 6>6537 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6538 ret void6539}6540 6541define void @s_shuffle_v2i16_v4i16__1_6() {6542; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_6:6543; GFX900: ; %bb.0:6544; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6545; GFX900-NEXT: ;;#ASMSTART6546; GFX900-NEXT: ; def s[4:5]6547; GFX900-NEXT: ;;#ASMEND6548; GFX900-NEXT: s_lshr_b32 s4, s4, 166549; GFX900-NEXT: ;;#ASMSTART6550; GFX900-NEXT: ; def s[6:7]6551; GFX900-NEXT: ;;#ASMEND6552; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s76553; GFX900-NEXT: ;;#ASMSTART6554; GFX900-NEXT: ; use s86555; GFX900-NEXT: ;;#ASMEND6556; GFX900-NEXT: s_setpc_b64 s[30:31]6557;6558; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_6:6559; GFX90A: ; %bb.0:6560; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6561; GFX90A-NEXT: ;;#ASMSTART6562; GFX90A-NEXT: ; def s[4:5]6563; GFX90A-NEXT: ;;#ASMEND6564; GFX90A-NEXT: s_lshr_b32 s4, s4, 166565; GFX90A-NEXT: ;;#ASMSTART6566; GFX90A-NEXT: ; def s[6:7]6567; GFX90A-NEXT: ;;#ASMEND6568; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s76569; GFX90A-NEXT: ;;#ASMSTART6570; GFX90A-NEXT: ; use s86571; GFX90A-NEXT: ;;#ASMEND6572; GFX90A-NEXT: s_setpc_b64 s[30:31]6573;6574; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_6:6575; GFX942: ; %bb.0:6576; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6577; GFX942-NEXT: ;;#ASMSTART6578; GFX942-NEXT: ; def s[0:1]6579; GFX942-NEXT: ;;#ASMEND6580; GFX942-NEXT: s_lshr_b32 s0, s0, 166581; GFX942-NEXT: ;;#ASMSTART6582; GFX942-NEXT: ; def s[2:3]6583; GFX942-NEXT: ;;#ASMEND6584; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s36585; GFX942-NEXT: ;;#ASMSTART6586; GFX942-NEXT: ; use s86587; GFX942-NEXT: ;;#ASMEND6588; GFX942-NEXT: s_setpc_b64 s[30:31]6589 %vec0 = call <4 x i16> asm "; def $0", "=s"()6590 %vec1 = call <4 x i16> asm "; def $0", "=s"()6591 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 1, i32 6>6592 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6593 ret void6594}6595 6596define void @s_shuffle_v2i16_v4i16__2_6() {6597; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_6:6598; GFX900: ; %bb.0:6599; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6600; GFX900-NEXT: ;;#ASMSTART6601; GFX900-NEXT: ; def s[4:5]6602; GFX900-NEXT: ;;#ASMEND6603; GFX900-NEXT: ;;#ASMSTART6604; GFX900-NEXT: ; def s[6:7]6605; GFX900-NEXT: ;;#ASMEND6606; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s76607; GFX900-NEXT: ;;#ASMSTART6608; GFX900-NEXT: ; use s86609; GFX900-NEXT: ;;#ASMEND6610; GFX900-NEXT: s_setpc_b64 s[30:31]6611;6612; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_6:6613; GFX90A: ; %bb.0:6614; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6615; GFX90A-NEXT: ;;#ASMSTART6616; GFX90A-NEXT: ; def s[4:5]6617; GFX90A-NEXT: ;;#ASMEND6618; GFX90A-NEXT: ;;#ASMSTART6619; GFX90A-NEXT: ; def s[6:7]6620; GFX90A-NEXT: ;;#ASMEND6621; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s76622; GFX90A-NEXT: ;;#ASMSTART6623; GFX90A-NEXT: ; use s86624; GFX90A-NEXT: ;;#ASMEND6625; GFX90A-NEXT: s_setpc_b64 s[30:31]6626;6627; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_6:6628; GFX942: ; %bb.0:6629; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6630; GFX942-NEXT: ;;#ASMSTART6631; GFX942-NEXT: ; def s[0:1]6632; GFX942-NEXT: ;;#ASMEND6633; GFX942-NEXT: ;;#ASMSTART6634; GFX942-NEXT: ; def s[2:3]6635; GFX942-NEXT: ;;#ASMEND6636; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s36637; GFX942-NEXT: ;;#ASMSTART6638; GFX942-NEXT: ; use s86639; GFX942-NEXT: ;;#ASMEND6640; GFX942-NEXT: s_setpc_b64 s[30:31]6641 %vec0 = call <4 x i16> asm "; def $0", "=s"()6642 %vec1 = call <4 x i16> asm "; def $0", "=s"()6643 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 2, i32 6>6644 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6645 ret void6646}6647 6648define void @s_shuffle_v2i16_v4i16__3_6() {6649; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_6:6650; GFX900: ; %bb.0:6651; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6652; GFX900-NEXT: ;;#ASMSTART6653; GFX900-NEXT: ; def s[4:5]6654; GFX900-NEXT: ;;#ASMEND6655; GFX900-NEXT: s_lshr_b32 s4, s5, 166656; GFX900-NEXT: ;;#ASMSTART6657; GFX900-NEXT: ; def s[6:7]6658; GFX900-NEXT: ;;#ASMEND6659; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s76660; GFX900-NEXT: ;;#ASMSTART6661; GFX900-NEXT: ; use s86662; GFX900-NEXT: ;;#ASMEND6663; GFX900-NEXT: s_setpc_b64 s[30:31]6664;6665; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_6:6666; GFX90A: ; %bb.0:6667; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6668; GFX90A-NEXT: ;;#ASMSTART6669; GFX90A-NEXT: ; def s[4:5]6670; GFX90A-NEXT: ;;#ASMEND6671; GFX90A-NEXT: s_lshr_b32 s4, s5, 166672; GFX90A-NEXT: ;;#ASMSTART6673; GFX90A-NEXT: ; def s[6:7]6674; GFX90A-NEXT: ;;#ASMEND6675; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s76676; GFX90A-NEXT: ;;#ASMSTART6677; GFX90A-NEXT: ; use s86678; GFX90A-NEXT: ;;#ASMEND6679; GFX90A-NEXT: s_setpc_b64 s[30:31]6680;6681; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_6:6682; GFX942: ; %bb.0:6683; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6684; GFX942-NEXT: ;;#ASMSTART6685; GFX942-NEXT: ; def s[0:1]6686; GFX942-NEXT: ;;#ASMEND6687; GFX942-NEXT: s_lshr_b32 s0, s1, 166688; GFX942-NEXT: ;;#ASMSTART6689; GFX942-NEXT: ; def s[2:3]6690; GFX942-NEXT: ;;#ASMEND6691; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s36692; GFX942-NEXT: ;;#ASMSTART6693; GFX942-NEXT: ; use s86694; GFX942-NEXT: ;;#ASMEND6695; GFX942-NEXT: s_setpc_b64 s[30:31]6696 %vec0 = call <4 x i16> asm "; def $0", "=s"()6697 %vec1 = call <4 x i16> asm "; def $0", "=s"()6698 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 3, i32 6>6699 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6700 ret void6701}6702 6703define void @s_shuffle_v2i16_v4i16__4_6() {6704; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_6:6705; GFX900: ; %bb.0:6706; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6707; GFX900-NEXT: ;;#ASMSTART6708; GFX900-NEXT: ; def s[4:5]6709; GFX900-NEXT: ;;#ASMEND6710; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56711; GFX900-NEXT: ;;#ASMSTART6712; GFX900-NEXT: ; use s86713; GFX900-NEXT: ;;#ASMEND6714; GFX900-NEXT: s_setpc_b64 s[30:31]6715;6716; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_6:6717; GFX90A: ; %bb.0:6718; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6719; GFX90A-NEXT: ;;#ASMSTART6720; GFX90A-NEXT: ; def s[4:5]6721; GFX90A-NEXT: ;;#ASMEND6722; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56723; GFX90A-NEXT: ;;#ASMSTART6724; GFX90A-NEXT: ; use s86725; GFX90A-NEXT: ;;#ASMEND6726; GFX90A-NEXT: s_setpc_b64 s[30:31]6727;6728; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_6:6729; GFX942: ; %bb.0:6730; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6731; GFX942-NEXT: ;;#ASMSTART6732; GFX942-NEXT: ; def s[0:1]6733; GFX942-NEXT: ;;#ASMEND6734; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16735; GFX942-NEXT: ;;#ASMSTART6736; GFX942-NEXT: ; use s86737; GFX942-NEXT: ;;#ASMEND6738; GFX942-NEXT: s_setpc_b64 s[30:31]6739 %vec0 = call <4 x i16> asm "; def $0", "=s"()6740 %vec1 = call <4 x i16> asm "; def $0", "=s"()6741 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 4, i32 6>6742 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6743 ret void6744}6745 6746define void @s_shuffle_v2i16_v4i16__5_6() {6747; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_6:6748; GFX900: ; %bb.0:6749; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6750; GFX900-NEXT: ;;#ASMSTART6751; GFX900-NEXT: ; def s[4:5]6752; GFX900-NEXT: ;;#ASMEND6753; GFX900-NEXT: s_lshr_b32 s4, s4, 166754; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56755; GFX900-NEXT: ;;#ASMSTART6756; GFX900-NEXT: ; use s86757; GFX900-NEXT: ;;#ASMEND6758; GFX900-NEXT: s_setpc_b64 s[30:31]6759;6760; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_6:6761; GFX90A: ; %bb.0:6762; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6763; GFX90A-NEXT: ;;#ASMSTART6764; GFX90A-NEXT: ; def s[4:5]6765; GFX90A-NEXT: ;;#ASMEND6766; GFX90A-NEXT: s_lshr_b32 s4, s4, 166767; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56768; GFX90A-NEXT: ;;#ASMSTART6769; GFX90A-NEXT: ; use s86770; GFX90A-NEXT: ;;#ASMEND6771; GFX90A-NEXT: s_setpc_b64 s[30:31]6772;6773; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_6:6774; GFX942: ; %bb.0:6775; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6776; GFX942-NEXT: ;;#ASMSTART6777; GFX942-NEXT: ; def s[0:1]6778; GFX942-NEXT: ;;#ASMEND6779; GFX942-NEXT: s_lshr_b32 s0, s0, 166780; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16781; GFX942-NEXT: ;;#ASMSTART6782; GFX942-NEXT: ; use s86783; GFX942-NEXT: ;;#ASMEND6784; GFX942-NEXT: s_setpc_b64 s[30:31]6785 %vec0 = call <4 x i16> asm "; def $0", "=s"()6786 %vec1 = call <4 x i16> asm "; def $0", "=s"()6787 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 6>6788 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6789 ret void6790}6791 6792define void @s_shuffle_v2i16_v4i16__6_6() {6793; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_6:6794; GFX900: ; %bb.0:6795; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6796; GFX900-NEXT: ;;#ASMSTART6797; GFX900-NEXT: ; def s[4:5]6798; GFX900-NEXT: ;;#ASMEND6799; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s56800; GFX900-NEXT: ;;#ASMSTART6801; GFX900-NEXT: ; use s86802; GFX900-NEXT: ;;#ASMEND6803; GFX900-NEXT: s_setpc_b64 s[30:31]6804;6805; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_6:6806; GFX90A: ; %bb.0:6807; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6808; GFX90A-NEXT: ;;#ASMSTART6809; GFX90A-NEXT: ; def s[4:5]6810; GFX90A-NEXT: ;;#ASMEND6811; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s56812; GFX90A-NEXT: ;;#ASMSTART6813; GFX90A-NEXT: ; use s86814; GFX90A-NEXT: ;;#ASMEND6815; GFX90A-NEXT: s_setpc_b64 s[30:31]6816;6817; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_6:6818; GFX942: ; %bb.0:6819; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6820; GFX942-NEXT: ;;#ASMSTART6821; GFX942-NEXT: ; def s[0:1]6822; GFX942-NEXT: ;;#ASMEND6823; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s16824; GFX942-NEXT: ;;#ASMSTART6825; GFX942-NEXT: ; use s86826; GFX942-NEXT: ;;#ASMEND6827; GFX942-NEXT: s_setpc_b64 s[30:31]6828 %vec0 = call <4 x i16> asm "; def $0", "=s"()6829 %vec1 = call <4 x i16> asm "; def $0", "=s"()6830 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 6>6831 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6832 ret void6833}6834 6835define void @s_shuffle_v2i16_v4i16__u_7() {6836; GFX900-LABEL: s_shuffle_v2i16_v4i16__u_7:6837; GFX900: ; %bb.0:6838; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6839; GFX900-NEXT: ;;#ASMSTART6840; GFX900-NEXT: ; def s[4:5]6841; GFX900-NEXT: ;;#ASMEND6842; GFX900-NEXT: s_mov_b32 s8, s56843; GFX900-NEXT: ;;#ASMSTART6844; GFX900-NEXT: ; use s86845; GFX900-NEXT: ;;#ASMEND6846; GFX900-NEXT: s_setpc_b64 s[30:31]6847;6848; GFX90A-LABEL: s_shuffle_v2i16_v4i16__u_7:6849; GFX90A: ; %bb.0:6850; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6851; GFX90A-NEXT: ;;#ASMSTART6852; GFX90A-NEXT: ; def s[4:5]6853; GFX90A-NEXT: ;;#ASMEND6854; GFX90A-NEXT: s_mov_b32 s8, s56855; GFX90A-NEXT: ;;#ASMSTART6856; GFX90A-NEXT: ; use s86857; GFX90A-NEXT: ;;#ASMEND6858; GFX90A-NEXT: s_setpc_b64 s[30:31]6859;6860; GFX942-LABEL: s_shuffle_v2i16_v4i16__u_7:6861; GFX942: ; %bb.0:6862; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6863; GFX942-NEXT: ;;#ASMSTART6864; GFX942-NEXT: ; def s[0:1]6865; GFX942-NEXT: ;;#ASMEND6866; GFX942-NEXT: s_mov_b32 s8, s16867; GFX942-NEXT: ;;#ASMSTART6868; GFX942-NEXT: ; use s86869; GFX942-NEXT: ;;#ASMEND6870; GFX942-NEXT: s_setpc_b64 s[30:31]6871 %vec0 = call <4 x i16> asm "; def $0", "=s"()6872 %vec1 = call <4 x i16> asm "; def $0", "=s"()6873 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 poison, i32 7>6874 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6875 ret void6876}6877 6878define void @s_shuffle_v2i16_v4i16__0_7() {6879; GFX900-LABEL: s_shuffle_v2i16_v4i16__0_7:6880; GFX900: ; %bb.0:6881; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6882; GFX900-NEXT: ;;#ASMSTART6883; GFX900-NEXT: ; def s[4:5]6884; GFX900-NEXT: ;;#ASMEND6885; GFX900-NEXT: ;;#ASMSTART6886; GFX900-NEXT: ; def s[6:7]6887; GFX900-NEXT: ;;#ASMEND6888; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s76889; GFX900-NEXT: ;;#ASMSTART6890; GFX900-NEXT: ; use s86891; GFX900-NEXT: ;;#ASMEND6892; GFX900-NEXT: s_setpc_b64 s[30:31]6893;6894; GFX90A-LABEL: s_shuffle_v2i16_v4i16__0_7:6895; GFX90A: ; %bb.0:6896; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6897; GFX90A-NEXT: ;;#ASMSTART6898; GFX90A-NEXT: ; def s[4:5]6899; GFX90A-NEXT: ;;#ASMEND6900; GFX90A-NEXT: ;;#ASMSTART6901; GFX90A-NEXT: ; def s[6:7]6902; GFX90A-NEXT: ;;#ASMEND6903; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s76904; GFX90A-NEXT: ;;#ASMSTART6905; GFX90A-NEXT: ; use s86906; GFX90A-NEXT: ;;#ASMEND6907; GFX90A-NEXT: s_setpc_b64 s[30:31]6908;6909; GFX942-LABEL: s_shuffle_v2i16_v4i16__0_7:6910; GFX942: ; %bb.0:6911; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6912; GFX942-NEXT: ;;#ASMSTART6913; GFX942-NEXT: ; def s[0:1]6914; GFX942-NEXT: ;;#ASMEND6915; GFX942-NEXT: ;;#ASMSTART6916; GFX942-NEXT: ; def s[2:3]6917; GFX942-NEXT: ;;#ASMEND6918; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s36919; GFX942-NEXT: ;;#ASMSTART6920; GFX942-NEXT: ; use s86921; GFX942-NEXT: ;;#ASMEND6922; GFX942-NEXT: s_setpc_b64 s[30:31]6923 %vec0 = call <4 x i16> asm "; def $0", "=s"()6924 %vec1 = call <4 x i16> asm "; def $0", "=s"()6925 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 0, i32 7>6926 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6927 ret void6928}6929 6930define void @s_shuffle_v2i16_v4i16__1_7() {6931; GFX900-LABEL: s_shuffle_v2i16_v4i16__1_7:6932; GFX900: ; %bb.0:6933; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6934; GFX900-NEXT: ;;#ASMSTART6935; GFX900-NEXT: ; def s[4:5]6936; GFX900-NEXT: ;;#ASMEND6937; GFX900-NEXT: ;;#ASMSTART6938; GFX900-NEXT: ; def s[6:7]6939; GFX900-NEXT: ;;#ASMEND6940; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s76941; GFX900-NEXT: ;;#ASMSTART6942; GFX900-NEXT: ; use s86943; GFX900-NEXT: ;;#ASMEND6944; GFX900-NEXT: s_setpc_b64 s[30:31]6945;6946; GFX90A-LABEL: s_shuffle_v2i16_v4i16__1_7:6947; GFX90A: ; %bb.0:6948; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6949; GFX90A-NEXT: ;;#ASMSTART6950; GFX90A-NEXT: ; def s[4:5]6951; GFX90A-NEXT: ;;#ASMEND6952; GFX90A-NEXT: ;;#ASMSTART6953; GFX90A-NEXT: ; def s[6:7]6954; GFX90A-NEXT: ;;#ASMEND6955; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s76956; GFX90A-NEXT: ;;#ASMSTART6957; GFX90A-NEXT: ; use s86958; GFX90A-NEXT: ;;#ASMEND6959; GFX90A-NEXT: s_setpc_b64 s[30:31]6960;6961; GFX942-LABEL: s_shuffle_v2i16_v4i16__1_7:6962; GFX942: ; %bb.0:6963; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6964; GFX942-NEXT: ;;#ASMSTART6965; GFX942-NEXT: ; def s[0:1]6966; GFX942-NEXT: ;;#ASMEND6967; GFX942-NEXT: ;;#ASMSTART6968; GFX942-NEXT: ; def s[2:3]6969; GFX942-NEXT: ;;#ASMEND6970; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s36971; GFX942-NEXT: ;;#ASMSTART6972; GFX942-NEXT: ; use s86973; GFX942-NEXT: ;;#ASMEND6974; GFX942-NEXT: s_setpc_b64 s[30:31]6975 %vec0 = call <4 x i16> asm "; def $0", "=s"()6976 %vec1 = call <4 x i16> asm "; def $0", "=s"()6977 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 1, i32 7>6978 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)6979 ret void6980}6981 6982define void @s_shuffle_v2i16_v4i16__2_7() {6983; GFX900-LABEL: s_shuffle_v2i16_v4i16__2_7:6984; GFX900: ; %bb.0:6985; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6986; GFX900-NEXT: ;;#ASMSTART6987; GFX900-NEXT: ; def s[4:5]6988; GFX900-NEXT: ;;#ASMEND6989; GFX900-NEXT: ;;#ASMSTART6990; GFX900-NEXT: ; def s[6:7]6991; GFX900-NEXT: ;;#ASMEND6992; GFX900-NEXT: s_pack_lh_b32_b16 s8, s5, s76993; GFX900-NEXT: ;;#ASMSTART6994; GFX900-NEXT: ; use s86995; GFX900-NEXT: ;;#ASMEND6996; GFX900-NEXT: s_setpc_b64 s[30:31]6997;6998; GFX90A-LABEL: s_shuffle_v2i16_v4i16__2_7:6999; GFX90A: ; %bb.0:7000; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7001; GFX90A-NEXT: ;;#ASMSTART7002; GFX90A-NEXT: ; def s[4:5]7003; GFX90A-NEXT: ;;#ASMEND7004; GFX90A-NEXT: ;;#ASMSTART7005; GFX90A-NEXT: ; def s[6:7]7006; GFX90A-NEXT: ;;#ASMEND7007; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s5, s77008; GFX90A-NEXT: ;;#ASMSTART7009; GFX90A-NEXT: ; use s87010; GFX90A-NEXT: ;;#ASMEND7011; GFX90A-NEXT: s_setpc_b64 s[30:31]7012;7013; GFX942-LABEL: s_shuffle_v2i16_v4i16__2_7:7014; GFX942: ; %bb.0:7015; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7016; GFX942-NEXT: ;;#ASMSTART7017; GFX942-NEXT: ; def s[0:1]7018; GFX942-NEXT: ;;#ASMEND7019; GFX942-NEXT: ;;#ASMSTART7020; GFX942-NEXT: ; def s[2:3]7021; GFX942-NEXT: ;;#ASMEND7022; GFX942-NEXT: s_pack_lh_b32_b16 s8, s1, s37023; GFX942-NEXT: ;;#ASMSTART7024; GFX942-NEXT: ; use s87025; GFX942-NEXT: ;;#ASMEND7026; GFX942-NEXT: s_setpc_b64 s[30:31]7027 %vec0 = call <4 x i16> asm "; def $0", "=s"()7028 %vec1 = call <4 x i16> asm "; def $0", "=s"()7029 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 2, i32 7>7030 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)7031 ret void7032}7033 7034define void @s_shuffle_v2i16_v4i16__3_7() {7035; GFX900-LABEL: s_shuffle_v2i16_v4i16__3_7:7036; GFX900: ; %bb.0:7037; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7038; GFX900-NEXT: ;;#ASMSTART7039; GFX900-NEXT: ; def s[4:5]7040; GFX900-NEXT: ;;#ASMEND7041; GFX900-NEXT: ;;#ASMSTART7042; GFX900-NEXT: ; def s[6:7]7043; GFX900-NEXT: ;;#ASMEND7044; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s77045; GFX900-NEXT: ;;#ASMSTART7046; GFX900-NEXT: ; use s87047; GFX900-NEXT: ;;#ASMEND7048; GFX900-NEXT: s_setpc_b64 s[30:31]7049;7050; GFX90A-LABEL: s_shuffle_v2i16_v4i16__3_7:7051; GFX90A: ; %bb.0:7052; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7053; GFX90A-NEXT: ;;#ASMSTART7054; GFX90A-NEXT: ; def s[4:5]7055; GFX90A-NEXT: ;;#ASMEND7056; GFX90A-NEXT: ;;#ASMSTART7057; GFX90A-NEXT: ; def s[6:7]7058; GFX90A-NEXT: ;;#ASMEND7059; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s77060; GFX90A-NEXT: ;;#ASMSTART7061; GFX90A-NEXT: ; use s87062; GFX90A-NEXT: ;;#ASMEND7063; GFX90A-NEXT: s_setpc_b64 s[30:31]7064;7065; GFX942-LABEL: s_shuffle_v2i16_v4i16__3_7:7066; GFX942: ; %bb.0:7067; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7068; GFX942-NEXT: ;;#ASMSTART7069; GFX942-NEXT: ; def s[0:1]7070; GFX942-NEXT: ;;#ASMEND7071; GFX942-NEXT: ;;#ASMSTART7072; GFX942-NEXT: ; def s[2:3]7073; GFX942-NEXT: ;;#ASMEND7074; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s37075; GFX942-NEXT: ;;#ASMSTART7076; GFX942-NEXT: ; use s87077; GFX942-NEXT: ;;#ASMEND7078; GFX942-NEXT: s_setpc_b64 s[30:31]7079 %vec0 = call <4 x i16> asm "; def $0", "=s"()7080 %vec1 = call <4 x i16> asm "; def $0", "=s"()7081 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 3, i32 7>7082 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)7083 ret void7084}7085 7086define void @s_shuffle_v2i16_v4i16__4_7() {7087; GFX900-LABEL: s_shuffle_v2i16_v4i16__4_7:7088; GFX900: ; %bb.0:7089; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7090; GFX900-NEXT: ;;#ASMSTART7091; GFX900-NEXT: ; def s[4:5]7092; GFX900-NEXT: ;;#ASMEND7093; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s57094; GFX900-NEXT: ;;#ASMSTART7095; GFX900-NEXT: ; use s87096; GFX900-NEXT: ;;#ASMEND7097; GFX900-NEXT: s_setpc_b64 s[30:31]7098;7099; GFX90A-LABEL: s_shuffle_v2i16_v4i16__4_7:7100; GFX90A: ; %bb.0:7101; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7102; GFX90A-NEXT: ;;#ASMSTART7103; GFX90A-NEXT: ; def s[4:5]7104; GFX90A-NEXT: ;;#ASMEND7105; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s57106; GFX90A-NEXT: ;;#ASMSTART7107; GFX90A-NEXT: ; use s87108; GFX90A-NEXT: ;;#ASMEND7109; GFX90A-NEXT: s_setpc_b64 s[30:31]7110;7111; GFX942-LABEL: s_shuffle_v2i16_v4i16__4_7:7112; GFX942: ; %bb.0:7113; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7114; GFX942-NEXT: ;;#ASMSTART7115; GFX942-NEXT: ; def s[0:1]7116; GFX942-NEXT: ;;#ASMEND7117; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s17118; GFX942-NEXT: ;;#ASMSTART7119; GFX942-NEXT: ; use s87120; GFX942-NEXT: ;;#ASMEND7121; GFX942-NEXT: s_setpc_b64 s[30:31]7122 %vec0 = call <4 x i16> asm "; def $0", "=s"()7123 %vec1 = call <4 x i16> asm "; def $0", "=s"()7124 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 4, i32 7>7125 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)7126 ret void7127}7128 7129define void @s_shuffle_v2i16_v4i16__5_7() {7130; GFX900-LABEL: s_shuffle_v2i16_v4i16__5_7:7131; GFX900: ; %bb.0:7132; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7133; GFX900-NEXT: ;;#ASMSTART7134; GFX900-NEXT: ; def s[4:5]7135; GFX900-NEXT: ;;#ASMEND7136; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s57137; GFX900-NEXT: ;;#ASMSTART7138; GFX900-NEXT: ; use s87139; GFX900-NEXT: ;;#ASMEND7140; GFX900-NEXT: s_setpc_b64 s[30:31]7141;7142; GFX90A-LABEL: s_shuffle_v2i16_v4i16__5_7:7143; GFX90A: ; %bb.0:7144; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7145; GFX90A-NEXT: ;;#ASMSTART7146; GFX90A-NEXT: ; def s[4:5]7147; GFX90A-NEXT: ;;#ASMEND7148; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s57149; GFX90A-NEXT: ;;#ASMSTART7150; GFX90A-NEXT: ; use s87151; GFX90A-NEXT: ;;#ASMEND7152; GFX90A-NEXT: s_setpc_b64 s[30:31]7153;7154; GFX942-LABEL: s_shuffle_v2i16_v4i16__5_7:7155; GFX942: ; %bb.0:7156; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7157; GFX942-NEXT: ;;#ASMSTART7158; GFX942-NEXT: ; def s[0:1]7159; GFX942-NEXT: ;;#ASMEND7160; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s17161; GFX942-NEXT: ;;#ASMSTART7162; GFX942-NEXT: ; use s87163; GFX942-NEXT: ;;#ASMEND7164; GFX942-NEXT: s_setpc_b64 s[30:31]7165 %vec0 = call <4 x i16> asm "; def $0", "=s"()7166 %vec1 = call <4 x i16> asm "; def $0", "=s"()7167 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 5, i32 7>7168 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)7169 ret void7170}7171 7172define void @s_shuffle_v2i16_v4i16__6_7() {7173; GFX900-LABEL: s_shuffle_v2i16_v4i16__6_7:7174; GFX900: ; %bb.0:7175; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7176; GFX900-NEXT: ;;#ASMSTART7177; GFX900-NEXT: ; def s[4:5]7178; GFX900-NEXT: ;;#ASMEND7179; GFX900-NEXT: s_mov_b32 s8, s57180; GFX900-NEXT: ;;#ASMSTART7181; GFX900-NEXT: ; use s87182; GFX900-NEXT: ;;#ASMEND7183; GFX900-NEXT: s_setpc_b64 s[30:31]7184;7185; GFX90A-LABEL: s_shuffle_v2i16_v4i16__6_7:7186; GFX90A: ; %bb.0:7187; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7188; GFX90A-NEXT: ;;#ASMSTART7189; GFX90A-NEXT: ; def s[4:5]7190; GFX90A-NEXT: ;;#ASMEND7191; GFX90A-NEXT: s_mov_b32 s8, s57192; GFX90A-NEXT: ;;#ASMSTART7193; GFX90A-NEXT: ; use s87194; GFX90A-NEXT: ;;#ASMEND7195; GFX90A-NEXT: s_setpc_b64 s[30:31]7196;7197; GFX942-LABEL: s_shuffle_v2i16_v4i16__6_7:7198; GFX942: ; %bb.0:7199; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7200; GFX942-NEXT: ;;#ASMSTART7201; GFX942-NEXT: ; def s[0:1]7202; GFX942-NEXT: ;;#ASMEND7203; GFX942-NEXT: s_mov_b32 s8, s17204; GFX942-NEXT: ;;#ASMSTART7205; GFX942-NEXT: ; use s87206; GFX942-NEXT: ;;#ASMEND7207; GFX942-NEXT: s_setpc_b64 s[30:31]7208 %vec0 = call <4 x i16> asm "; def $0", "=s"()7209 %vec1 = call <4 x i16> asm "; def $0", "=s"()7210 %shuf = shufflevector <4 x i16> %vec0, <4 x i16> %vec1, <2 x i32> <i32 6, i32 7>7211 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)7212 ret void7213}7214;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:7215; GFX90APLUS: {{.*}}7216