3965 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_v3i16_v2i16__u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v3i16_v2i16__u_u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <2 x i16> asm "; def $0", "=v"()13 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> poison14 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 815 ret void16}17 18define void @v_shuffle_v3i16_v2i16__0_u_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_u_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v0, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v125; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dword v0, v1, 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_v3i16_v2i16__0_u_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v0, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v136; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dword v0, v1, 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_v3i16_v2i16__0_u_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v0, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v147; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dword v0, v1, s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <2 x i16> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 poison, i32 poison>53 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 854 ret void55}56 57define void @v_shuffle_v3i16_v2i16__1_u_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_u_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: ;;#ASMSTART62; GFX900-NEXT: ; def v163; GFX900-NEXT: ;;#ASMEND64; GFX900-NEXT: v_mov_b32_e32 v0, 065; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 1666; GFX900-NEXT: global_store_dword v0, v1, 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_v3i16_v2i16__1_u_u:71; GFX90A: ; %bb.0:72; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; GFX90A-NEXT: ;;#ASMSTART74; GFX90A-NEXT: ; def v175; GFX90A-NEXT: ;;#ASMEND76; GFX90A-NEXT: v_mov_b32_e32 v0, 077; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 1678; GFX90A-NEXT: global_store_dword v0, v1, 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_v3i16_v2i16__1_u_u:83; GFX942: ; %bb.0:84; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX942-NEXT: ;;#ASMSTART86; GFX942-NEXT: ; def v187; GFX942-NEXT: ;;#ASMEND88; GFX942-NEXT: v_mov_b32_e32 v0, 089; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 1690; GFX942-NEXT: global_store_dword v0, v1, s[0:1]91; GFX942-NEXT: s_waitcnt vmcnt(0)92; GFX942-NEXT: s_setpc_b64 s[30:31]93 %vec0 = call <2 x i16> asm "; def $0", "=v"()94 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 poison, i32 poison>95 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 896 ret void97}98 99define void @v_shuffle_v3i16_v2i16__2_u_u(ptr addrspace(1) inreg %ptr) {100; GFX9-LABEL: v_shuffle_v3i16_v2i16__2_u_u:101; GFX9: ; %bb.0:102; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX9-NEXT: s_setpc_b64 s[30:31]104 %vec0 = call <2 x i16> asm "; def $0", "=v"()105 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 poison, i32 poison>106 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8107 ret void108}109 110define void @v_shuffle_v3i16_v2i16__3_u_u(ptr addrspace(1) inreg %ptr) {111; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_u:112; GFX900: ; %bb.0:113; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX900-NEXT: ;;#ASMSTART115; GFX900-NEXT: ; def v1116; GFX900-NEXT: ;;#ASMEND117; GFX900-NEXT: v_mov_b32_e32 v0, 0118; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 16119; GFX900-NEXT: global_store_dword v0, v1, s[16:17]120; GFX900-NEXT: s_waitcnt vmcnt(0)121; GFX900-NEXT: s_setpc_b64 s[30:31]122;123; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_u:124; GFX90A: ; %bb.0:125; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)126; GFX90A-NEXT: ;;#ASMSTART127; GFX90A-NEXT: ; def v1128; GFX90A-NEXT: ;;#ASMEND129; GFX90A-NEXT: v_mov_b32_e32 v0, 0130; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 16131; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]132; GFX90A-NEXT: s_waitcnt vmcnt(0)133; GFX90A-NEXT: s_setpc_b64 s[30:31]134;135; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_u_u:136; GFX942: ; %bb.0:137; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX942-NEXT: ;;#ASMSTART139; GFX942-NEXT: ; def v1140; GFX942-NEXT: ;;#ASMEND141; GFX942-NEXT: v_mov_b32_e32 v0, 0142; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 16143; GFX942-NEXT: global_store_dword v0, v1, s[0:1]144; GFX942-NEXT: s_waitcnt vmcnt(0)145; GFX942-NEXT: s_setpc_b64 s[30:31]146 %vec0 = call <2 x i16> asm "; def $0", "=v"()147 %vec1 = call <2 x i16> asm "; def $0", "=v"()148 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>149 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8150 ret void151}152 153define void @v_shuffle_v3i16_v2i16__3_0_u(ptr addrspace(1) inreg %ptr) {154; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_u:155; GFX900: ; %bb.0:156; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)157; GFX900-NEXT: ;;#ASMSTART158; GFX900-NEXT: ; def v1159; GFX900-NEXT: ;;#ASMEND160; GFX900-NEXT: v_mov_b32_e32 v0, 0161; GFX900-NEXT: ;;#ASMSTART162; GFX900-NEXT: ; def v2163; GFX900-NEXT: ;;#ASMEND164; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 16165; GFX900-NEXT: global_store_dword v0, v1, s[16:17]166; GFX900-NEXT: s_waitcnt vmcnt(0)167; GFX900-NEXT: s_setpc_b64 s[30:31]168;169; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_u:170; GFX90A: ; %bb.0:171; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; GFX90A-NEXT: ;;#ASMSTART173; GFX90A-NEXT: ; def v1174; GFX90A-NEXT: ;;#ASMEND175; GFX90A-NEXT: v_mov_b32_e32 v0, 0176; GFX90A-NEXT: ;;#ASMSTART177; GFX90A-NEXT: ; def v2178; GFX90A-NEXT: ;;#ASMEND179; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 16180; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]181; GFX90A-NEXT: s_waitcnt vmcnt(0)182; GFX90A-NEXT: s_setpc_b64 s[30:31]183;184; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_0_u:185; GFX942: ; %bb.0:186; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX942-NEXT: ;;#ASMSTART188; GFX942-NEXT: ; def v1189; GFX942-NEXT: ;;#ASMEND190; GFX942-NEXT: v_mov_b32_e32 v0, 0191; GFX942-NEXT: ;;#ASMSTART192; GFX942-NEXT: ; def v2193; GFX942-NEXT: ;;#ASMEND194; GFX942-NEXT: s_nop 0195; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 16196; GFX942-NEXT: global_store_dword v0, v1, s[0:1]197; GFX942-NEXT: s_waitcnt vmcnt(0)198; GFX942-NEXT: s_setpc_b64 s[30:31]199 %vec0 = call <2 x i16> asm "; def $0", "=v"()200 %vec1 = call <2 x i16> asm "; def $0", "=v"()201 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>202 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8203 ret void204}205 206define void @v_shuffle_v3i16_v2i16__3_1_u(ptr addrspace(1) inreg %ptr) {207; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_u:208; GFX900: ; %bb.0:209; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)210; GFX900-NEXT: ;;#ASMSTART211; GFX900-NEXT: ; def v1212; GFX900-NEXT: ;;#ASMEND213; GFX900-NEXT: s_mov_b32 s4, 0x7060302214; GFX900-NEXT: v_mov_b32_e32 v0, 0215; GFX900-NEXT: ;;#ASMSTART216; GFX900-NEXT: ; def v2217; GFX900-NEXT: ;;#ASMEND218; GFX900-NEXT: v_perm_b32 v1, v1, v2, s4219; GFX900-NEXT: global_store_dword v0, v1, s[16:17]220; GFX900-NEXT: s_waitcnt vmcnt(0)221; GFX900-NEXT: s_setpc_b64 s[30:31]222;223; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_u:224; GFX90A: ; %bb.0:225; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GFX90A-NEXT: ;;#ASMSTART227; GFX90A-NEXT: ; def v1228; GFX90A-NEXT: ;;#ASMEND229; GFX90A-NEXT: s_mov_b32 s4, 0x7060302230; GFX90A-NEXT: v_mov_b32_e32 v0, 0231; GFX90A-NEXT: ;;#ASMSTART232; GFX90A-NEXT: ; def v2233; GFX90A-NEXT: ;;#ASMEND234; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s4235; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]236; GFX90A-NEXT: s_waitcnt vmcnt(0)237; GFX90A-NEXT: s_setpc_b64 s[30:31]238;239; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_1_u:240; GFX942: ; %bb.0:241; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX942-NEXT: ;;#ASMSTART243; GFX942-NEXT: ; def v1244; GFX942-NEXT: ;;#ASMEND245; GFX942-NEXT: s_mov_b32 s2, 0x7060302246; GFX942-NEXT: v_mov_b32_e32 v0, 0247; GFX942-NEXT: ;;#ASMSTART248; GFX942-NEXT: ; def v2249; GFX942-NEXT: ;;#ASMEND250; GFX942-NEXT: s_nop 0251; GFX942-NEXT: v_perm_b32 v1, v1, v2, s2252; GFX942-NEXT: global_store_dword v0, v1, s[0:1]253; GFX942-NEXT: s_waitcnt vmcnt(0)254; GFX942-NEXT: s_setpc_b64 s[30:31]255 %vec0 = call <2 x i16> asm "; def $0", "=v"()256 %vec1 = call <2 x i16> asm "; def $0", "=v"()257 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>258 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8259 ret void260}261 262define void @v_shuffle_v3i16_v2i16__3_2_u(ptr addrspace(1) inreg %ptr) {263; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_u:264; GFX900: ; %bb.0:265; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)266; GFX900-NEXT: ;;#ASMSTART267; GFX900-NEXT: ; def v1268; GFX900-NEXT: ;;#ASMEND269; GFX900-NEXT: v_mov_b32_e32 v0, 0270; GFX900-NEXT: v_alignbit_b32 v1, v1, v1, 16271; GFX900-NEXT: global_store_dword v0, v1, s[16:17]272; GFX900-NEXT: s_waitcnt vmcnt(0)273; GFX900-NEXT: s_setpc_b64 s[30:31]274;275; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_u:276; GFX90A: ; %bb.0:277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX90A-NEXT: ;;#ASMSTART279; GFX90A-NEXT: ; def v1280; GFX90A-NEXT: ;;#ASMEND281; GFX90A-NEXT: v_mov_b32_e32 v0, 0282; GFX90A-NEXT: v_alignbit_b32 v1, v1, v1, 16283; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]284; GFX90A-NEXT: s_waitcnt vmcnt(0)285; GFX90A-NEXT: s_setpc_b64 s[30:31]286;287; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_2_u:288; GFX942: ; %bb.0:289; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX942-NEXT: ;;#ASMSTART291; GFX942-NEXT: ; def v1292; GFX942-NEXT: ;;#ASMEND293; GFX942-NEXT: v_mov_b32_e32 v0, 0294; GFX942-NEXT: v_alignbit_b32 v1, v1, v1, 16295; GFX942-NEXT: global_store_dword v0, v1, s[0:1]296; GFX942-NEXT: s_waitcnt vmcnt(0)297; GFX942-NEXT: s_setpc_b64 s[30:31]298 %vec0 = call <2 x i16> asm "; def $0", "=v"()299 %vec1 = call <2 x i16> asm "; def $0", "=v"()300 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>301 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8302 ret void303}304 305define void @v_shuffle_v3i16_v2i16__3_3_u(ptr addrspace(1) inreg %ptr) {306; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_u:307; GFX900: ; %bb.0:308; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX900-NEXT: ;;#ASMSTART310; GFX900-NEXT: ; def v1311; GFX900-NEXT: ;;#ASMEND312; GFX900-NEXT: s_mov_b32 s4, 0x7060302313; GFX900-NEXT: v_mov_b32_e32 v0, 0314; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4315; GFX900-NEXT: global_store_dword v0, v1, s[16:17]316; GFX900-NEXT: s_waitcnt vmcnt(0)317; GFX900-NEXT: s_setpc_b64 s[30:31]318;319; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_u:320; GFX90A: ; %bb.0:321; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX90A-NEXT: ;;#ASMSTART323; GFX90A-NEXT: ; def v1324; GFX90A-NEXT: ;;#ASMEND325; GFX90A-NEXT: s_mov_b32 s4, 0x7060302326; GFX90A-NEXT: v_mov_b32_e32 v0, 0327; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4328; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]329; GFX90A-NEXT: s_waitcnt vmcnt(0)330; GFX90A-NEXT: s_setpc_b64 s[30:31]331;332; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_3_u:333; GFX942: ; %bb.0:334; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)335; GFX942-NEXT: ;;#ASMSTART336; GFX942-NEXT: ; def v1337; GFX942-NEXT: ;;#ASMEND338; GFX942-NEXT: s_mov_b32 s2, 0x7060302339; GFX942-NEXT: v_mov_b32_e32 v0, 0340; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2341; GFX942-NEXT: global_store_dword v0, v1, s[0:1]342; GFX942-NEXT: s_waitcnt vmcnt(0)343; GFX942-NEXT: s_setpc_b64 s[30:31]344 %vec0 = call <2 x i16> asm "; def $0", "=v"()345 %vec1 = call <2 x i16> asm "; def $0", "=v"()346 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>347 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8348 ret void349}350 351define void @v_shuffle_v3i16_v2i16__3_3_0(ptr addrspace(1) inreg %ptr) {352; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_0:353; GFX900: ; %bb.0:354; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX900-NEXT: v_mov_b32_e32 v0, 0356; GFX900-NEXT: ;;#ASMSTART357; GFX900-NEXT: ; def v1358; GFX900-NEXT: ;;#ASMEND359; GFX900-NEXT: ;;#ASMSTART360; GFX900-NEXT: ; def v2361; GFX900-NEXT: ;;#ASMEND362; GFX900-NEXT: s_mov_b32 s4, 0x7060302363; GFX900-NEXT: v_perm_b32 v2, v2, v2, s4364; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4365; GFX900-NEXT: global_store_dword v0, v2, s[16:17]366; GFX900-NEXT: s_waitcnt vmcnt(0)367; GFX900-NEXT: s_setpc_b64 s[30:31]368;369; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_0:370; GFX90A: ; %bb.0:371; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)372; GFX90A-NEXT: v_mov_b32_e32 v0, 0373; GFX90A-NEXT: ;;#ASMSTART374; GFX90A-NEXT: ; def v1375; GFX90A-NEXT: ;;#ASMEND376; GFX90A-NEXT: ;;#ASMSTART377; GFX90A-NEXT: ; def v2378; GFX90A-NEXT: ;;#ASMEND379; GFX90A-NEXT: s_mov_b32 s4, 0x7060302380; GFX90A-NEXT: v_perm_b32 v2, v2, v2, s4381; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4382; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]383; GFX90A-NEXT: s_waitcnt vmcnt(0)384; GFX90A-NEXT: s_setpc_b64 s[30:31]385;386; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_3_0:387; GFX942: ; %bb.0:388; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)389; GFX942-NEXT: v_mov_b32_e32 v0, 0390; GFX942-NEXT: ;;#ASMSTART391; GFX942-NEXT: ; def v1392; GFX942-NEXT: ;;#ASMEND393; GFX942-NEXT: ;;#ASMSTART394; GFX942-NEXT: ; def v2395; GFX942-NEXT: ;;#ASMEND396; GFX942-NEXT: s_mov_b32 s2, 0x7060302397; GFX942-NEXT: v_perm_b32 v2, v2, v2, s2398; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4399; GFX942-NEXT: global_store_dword v0, v2, s[0:1]400; GFX942-NEXT: s_waitcnt vmcnt(0)401; GFX942-NEXT: s_setpc_b64 s[30:31]402 %vec0 = call <2 x i16> asm "; def $0", "=v"()403 %vec1 = call <2 x i16> asm "; def $0", "=v"()404 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 0>405 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8406 ret void407}408 409define void @v_shuffle_v3i16_v2i16__3_3_1(ptr addrspace(1) inreg %ptr) {410; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_1:411; GFX900: ; %bb.0:412; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)413; GFX900-NEXT: v_mov_b32_e32 v0, 0414; GFX900-NEXT: ;;#ASMSTART415; GFX900-NEXT: ; def v1416; GFX900-NEXT: ;;#ASMEND417; GFX900-NEXT: ;;#ASMSTART418; GFX900-NEXT: ; def v2419; GFX900-NEXT: ;;#ASMEND420; GFX900-NEXT: s_mov_b32 s4, 0x7060302421; GFX900-NEXT: v_perm_b32 v2, v2, v2, s4422; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:4423; GFX900-NEXT: global_store_dword v0, v2, s[16:17]424; GFX900-NEXT: s_waitcnt vmcnt(0)425; GFX900-NEXT: s_setpc_b64 s[30:31]426;427; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_1:428; GFX90A: ; %bb.0:429; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)430; GFX90A-NEXT: v_mov_b32_e32 v0, 0431; GFX90A-NEXT: ;;#ASMSTART432; GFX90A-NEXT: ; def v1433; GFX90A-NEXT: ;;#ASMEND434; GFX90A-NEXT: ;;#ASMSTART435; GFX90A-NEXT: ; def v2436; GFX90A-NEXT: ;;#ASMEND437; GFX90A-NEXT: s_mov_b32 s4, 0x7060302438; GFX90A-NEXT: v_perm_b32 v2, v2, v2, s4439; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:4440; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]441; GFX90A-NEXT: s_waitcnt vmcnt(0)442; GFX90A-NEXT: s_setpc_b64 s[30:31]443;444; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_3_1:445; GFX942: ; %bb.0:446; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)447; GFX942-NEXT: v_mov_b32_e32 v0, 0448; GFX942-NEXT: ;;#ASMSTART449; GFX942-NEXT: ; def v1450; GFX942-NEXT: ;;#ASMEND451; GFX942-NEXT: ;;#ASMSTART452; GFX942-NEXT: ; def v2453; GFX942-NEXT: ;;#ASMEND454; GFX942-NEXT: s_mov_b32 s2, 0x7060302455; GFX942-NEXT: v_perm_b32 v2, v2, v2, s2456; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:4457; GFX942-NEXT: global_store_dword v0, v2, s[0:1]458; GFX942-NEXT: s_waitcnt vmcnt(0)459; GFX942-NEXT: s_setpc_b64 s[30:31]460 %vec0 = call <2 x i16> asm "; def $0", "=v"()461 %vec1 = call <2 x i16> asm "; def $0", "=v"()462 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 1>463 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8464 ret void465}466 467define void @v_shuffle_v3i16_v2i16__3_3_2(ptr addrspace(1) inreg %ptr) {468; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_2:469; GFX900: ; %bb.0:470; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)471; GFX900-NEXT: v_mov_b32_e32 v0, 0472; GFX900-NEXT: ;;#ASMSTART473; GFX900-NEXT: ; def v1474; GFX900-NEXT: ;;#ASMEND475; GFX900-NEXT: s_mov_b32 s4, 0x7060302476; GFX900-NEXT: v_perm_b32 v2, v1, v1, s4477; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4478; GFX900-NEXT: global_store_dword v0, v2, s[16:17]479; GFX900-NEXT: s_waitcnt vmcnt(0)480; GFX900-NEXT: s_setpc_b64 s[30:31]481;482; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_2:483; GFX90A: ; %bb.0:484; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)485; GFX90A-NEXT: v_mov_b32_e32 v0, 0486; GFX90A-NEXT: ;;#ASMSTART487; GFX90A-NEXT: ; def v1488; GFX90A-NEXT: ;;#ASMEND489; GFX90A-NEXT: s_mov_b32 s4, 0x7060302490; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4491; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4492; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]493; GFX90A-NEXT: s_waitcnt vmcnt(0)494; GFX90A-NEXT: s_setpc_b64 s[30:31]495;496; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_3_2:497; GFX942: ; %bb.0:498; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)499; GFX942-NEXT: v_mov_b32_e32 v0, 0500; GFX942-NEXT: ;;#ASMSTART501; GFX942-NEXT: ; def v1502; GFX942-NEXT: ;;#ASMEND503; GFX942-NEXT: s_mov_b32 s2, 0x7060302504; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2505; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4506; GFX942-NEXT: global_store_dword v0, v2, s[0:1]507; GFX942-NEXT: s_waitcnt vmcnt(0)508; GFX942-NEXT: s_setpc_b64 s[30:31]509 %vec0 = call <2 x i16> asm "; def $0", "=v"()510 %vec1 = call <2 x i16> asm "; def $0", "=v"()511 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 2>512 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8513 ret void514}515 516define void @v_shuffle_v3i16_v2i16__3_3_3(ptr addrspace(1) inreg %ptr) {517; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_3:518; GFX900: ; %bb.0:519; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)520; GFX900-NEXT: ;;#ASMSTART521; GFX900-NEXT: ; def v1522; GFX900-NEXT: ;;#ASMEND523; GFX900-NEXT: s_mov_b32 s4, 0x7060302524; GFX900-NEXT: v_mov_b32_e32 v0, 0525; GFX900-NEXT: v_perm_b32 v2, v1, v1, s4526; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v1527; GFX900-NEXT: global_store_dword v0, v2, s[16:17]528; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4529; GFX900-NEXT: s_waitcnt vmcnt(0)530; GFX900-NEXT: s_setpc_b64 s[30:31]531;532; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_3:533; GFX90A: ; %bb.0:534; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)535; GFX90A-NEXT: ;;#ASMSTART536; GFX90A-NEXT: ; def v1537; GFX90A-NEXT: ;;#ASMEND538; GFX90A-NEXT: s_mov_b32 s4, 0x7060302539; GFX90A-NEXT: v_mov_b32_e32 v0, 0540; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4541; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v1542; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]543; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4544; GFX90A-NEXT: s_waitcnt vmcnt(0)545; GFX90A-NEXT: s_setpc_b64 s[30:31]546;547; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_3_3:548; GFX942: ; %bb.0:549; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)550; GFX942-NEXT: ;;#ASMSTART551; GFX942-NEXT: ; def v1552; GFX942-NEXT: ;;#ASMEND553; GFX942-NEXT: s_mov_b32 s2, 0x7060302554; GFX942-NEXT: v_mov_b32_e32 v0, 0555; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2556; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v1557; GFX942-NEXT: global_store_dword v0, v2, s[0:1]558; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4559; GFX942-NEXT: s_waitcnt vmcnt(0)560; GFX942-NEXT: s_setpc_b64 s[30:31]561 %vec0 = call <2 x i16> asm "; def $0", "=v"()562 %vec1 = call <2 x i16> asm "; def $0", "=v"()563 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 3>564 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8565 ret void566}567 568define void @v_shuffle_v3i16_v2i16__u_0_0(ptr addrspace(1) inreg %ptr) {569; GFX900-LABEL: v_shuffle_v3i16_v2i16__u_0_0:570; GFX900: ; %bb.0:571; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)572; GFX900-NEXT: v_mov_b32_e32 v0, 0573; GFX900-NEXT: ;;#ASMSTART574; GFX900-NEXT: ; def v1575; GFX900-NEXT: ;;#ASMEND576; GFX900-NEXT: s_mov_b32 s4, 0x5040100577; GFX900-NEXT: v_perm_b32 v2, v1, v1, s4578; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4579; GFX900-NEXT: global_store_dword v0, v2, s[16:17]580; GFX900-NEXT: s_waitcnt vmcnt(0)581; GFX900-NEXT: s_setpc_b64 s[30:31]582;583; GFX90A-LABEL: v_shuffle_v3i16_v2i16__u_0_0:584; GFX90A: ; %bb.0:585; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)586; GFX90A-NEXT: v_mov_b32_e32 v0, 0587; GFX90A-NEXT: ;;#ASMSTART588; GFX90A-NEXT: ; def v1589; GFX90A-NEXT: ;;#ASMEND590; GFX90A-NEXT: s_mov_b32 s4, 0x5040100591; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4592; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4593; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]594; GFX90A-NEXT: s_waitcnt vmcnt(0)595; GFX90A-NEXT: s_setpc_b64 s[30:31]596;597; GFX942-LABEL: v_shuffle_v3i16_v2i16__u_0_0:598; GFX942: ; %bb.0:599; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)600; GFX942-NEXT: v_mov_b32_e32 v0, 0601; GFX942-NEXT: ;;#ASMSTART602; GFX942-NEXT: ; def v1603; GFX942-NEXT: ;;#ASMEND604; GFX942-NEXT: s_mov_b32 s2, 0x5040100605; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2606; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4607; GFX942-NEXT: global_store_dword v0, v2, s[0:1]608; GFX942-NEXT: s_waitcnt vmcnt(0)609; GFX942-NEXT: s_setpc_b64 s[30:31]610 %vec0 = call <2 x i16> asm "; def $0", "=v"()611 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 0, i32 0>612 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8613 ret void614}615 616define void @v_shuffle_v3i16_v2i16__0_0_0(ptr addrspace(1) inreg %ptr) {617; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_0_0:618; GFX900: ; %bb.0:619; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)620; GFX900-NEXT: v_mov_b32_e32 v0, 0621; GFX900-NEXT: ;;#ASMSTART622; GFX900-NEXT: ; def v1623; GFX900-NEXT: ;;#ASMEND624; GFX900-NEXT: s_mov_b32 s4, 0x5040100625; GFX900-NEXT: v_perm_b32 v2, v1, v1, s4626; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4627; GFX900-NEXT: global_store_dword v0, v2, s[16:17]628; GFX900-NEXT: s_waitcnt vmcnt(0)629; GFX900-NEXT: s_setpc_b64 s[30:31]630;631; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_0_0:632; GFX90A: ; %bb.0:633; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)634; GFX90A-NEXT: v_mov_b32_e32 v0, 0635; GFX90A-NEXT: ;;#ASMSTART636; GFX90A-NEXT: ; def v1637; GFX90A-NEXT: ;;#ASMEND638; GFX90A-NEXT: s_mov_b32 s4, 0x5040100639; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4640; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4641; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]642; GFX90A-NEXT: s_waitcnt vmcnt(0)643; GFX90A-NEXT: s_setpc_b64 s[30:31]644;645; GFX942-LABEL: v_shuffle_v3i16_v2i16__0_0_0:646; GFX942: ; %bb.0:647; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)648; GFX942-NEXT: v_mov_b32_e32 v0, 0649; GFX942-NEXT: ;;#ASMSTART650; GFX942-NEXT: ; def v1651; GFX942-NEXT: ;;#ASMEND652; GFX942-NEXT: s_mov_b32 s2, 0x5040100653; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2654; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4655; GFX942-NEXT: global_store_dword v0, v2, s[0:1]656; GFX942-NEXT: s_waitcnt vmcnt(0)657; GFX942-NEXT: s_setpc_b64 s[30:31]658 %vec0 = call <2 x i16> asm "; def $0", "=v"()659 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> zeroinitializer660 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8661 ret void662}663 664define void @v_shuffle_v3i16_v2i16__1_0_0(ptr addrspace(1) inreg %ptr) {665; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_0_0:666; GFX900: ; %bb.0:667; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)668; GFX900-NEXT: v_mov_b32_e32 v0, 0669; GFX900-NEXT: ;;#ASMSTART670; GFX900-NEXT: ; def v1671; GFX900-NEXT: ;;#ASMEND672; GFX900-NEXT: v_alignbit_b32 v2, v1, v1, 16673; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4674; GFX900-NEXT: global_store_dword v0, v2, s[16:17]675; GFX900-NEXT: s_waitcnt vmcnt(0)676; GFX900-NEXT: s_setpc_b64 s[30:31]677;678; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_0_0:679; GFX90A: ; %bb.0:680; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)681; GFX90A-NEXT: v_mov_b32_e32 v0, 0682; GFX90A-NEXT: ;;#ASMSTART683; GFX90A-NEXT: ; def v1684; GFX90A-NEXT: ;;#ASMEND685; GFX90A-NEXT: v_alignbit_b32 v2, v1, v1, 16686; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4687; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]688; GFX90A-NEXT: s_waitcnt vmcnt(0)689; GFX90A-NEXT: s_setpc_b64 s[30:31]690;691; GFX942-LABEL: v_shuffle_v3i16_v2i16__1_0_0:692; GFX942: ; %bb.0:693; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)694; GFX942-NEXT: v_mov_b32_e32 v0, 0695; GFX942-NEXT: ;;#ASMSTART696; GFX942-NEXT: ; def v1697; GFX942-NEXT: ;;#ASMEND698; GFX942-NEXT: s_nop 0699; GFX942-NEXT: v_alignbit_b32 v2, v1, v1, 16700; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4701; GFX942-NEXT: global_store_dword v0, v2, s[0:1]702; GFX942-NEXT: s_waitcnt vmcnt(0)703; GFX942-NEXT: s_setpc_b64 s[30:31]704 %vec0 = call <2 x i16> asm "; def $0", "=v"()705 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 0, i32 0>706 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8707 ret void708}709 710define void @v_shuffle_v3i16_v2i16__2_0_0(ptr addrspace(1) inreg %ptr) {711; GFX900-LABEL: v_shuffle_v3i16_v2i16__2_0_0:712; GFX900: ; %bb.0:713; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)714; GFX900-NEXT: v_mov_b32_e32 v0, 0715; GFX900-NEXT: ;;#ASMSTART716; GFX900-NEXT: ; def v1717; GFX900-NEXT: ;;#ASMEND718; GFX900-NEXT: s_mov_b32 s4, 0x5040100719; GFX900-NEXT: v_perm_b32 v2, v1, v1, s4720; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4721; GFX900-NEXT: global_store_dword v0, v2, s[16:17]722; GFX900-NEXT: s_waitcnt vmcnt(0)723; GFX900-NEXT: s_setpc_b64 s[30:31]724;725; GFX90A-LABEL: v_shuffle_v3i16_v2i16__2_0_0:726; GFX90A: ; %bb.0:727; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)728; GFX90A-NEXT: v_mov_b32_e32 v0, 0729; GFX90A-NEXT: ;;#ASMSTART730; GFX90A-NEXT: ; def v1731; GFX90A-NEXT: ;;#ASMEND732; GFX90A-NEXT: s_mov_b32 s4, 0x5040100733; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4734; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4735; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]736; GFX90A-NEXT: s_waitcnt vmcnt(0)737; GFX90A-NEXT: s_setpc_b64 s[30:31]738;739; GFX942-LABEL: v_shuffle_v3i16_v2i16__2_0_0:740; GFX942: ; %bb.0:741; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)742; GFX942-NEXT: v_mov_b32_e32 v0, 0743; GFX942-NEXT: ;;#ASMSTART744; GFX942-NEXT: ; def v1745; GFX942-NEXT: ;;#ASMEND746; GFX942-NEXT: s_mov_b32 s2, 0x5040100747; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2748; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4749; GFX942-NEXT: global_store_dword v0, v2, s[0:1]750; GFX942-NEXT: s_waitcnt vmcnt(0)751; GFX942-NEXT: s_setpc_b64 s[30:31]752 %vec0 = call <2 x i16> asm "; def $0", "=v"()753 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 0, i32 0>754 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8755 ret void756}757 758define void @v_shuffle_v3i16_v2i16__3_0_0(ptr addrspace(1) inreg %ptr) {759; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_0:760; GFX900: ; %bb.0:761; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)762; GFX900-NEXT: v_mov_b32_e32 v0, 0763; GFX900-NEXT: ;;#ASMSTART764; GFX900-NEXT: ; def v1765; GFX900-NEXT: ;;#ASMEND766; GFX900-NEXT: ;;#ASMSTART767; GFX900-NEXT: ; def v2768; GFX900-NEXT: ;;#ASMEND769; GFX900-NEXT: v_alignbit_b32 v2, v1, v2, 16770; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4771; GFX900-NEXT: global_store_dword v0, v2, s[16:17]772; GFX900-NEXT: s_waitcnt vmcnt(0)773; GFX900-NEXT: s_setpc_b64 s[30:31]774;775; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_0:776; GFX90A: ; %bb.0:777; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)778; GFX90A-NEXT: v_mov_b32_e32 v0, 0779; GFX90A-NEXT: ;;#ASMSTART780; GFX90A-NEXT: ; def v1781; GFX90A-NEXT: ;;#ASMEND782; GFX90A-NEXT: ;;#ASMSTART783; GFX90A-NEXT: ; def v2784; GFX90A-NEXT: ;;#ASMEND785; GFX90A-NEXT: v_alignbit_b32 v2, v1, v2, 16786; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4787; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]788; GFX90A-NEXT: s_waitcnt vmcnt(0)789; GFX90A-NEXT: s_setpc_b64 s[30:31]790;791; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_0_0:792; GFX942: ; %bb.0:793; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX942-NEXT: v_mov_b32_e32 v0, 0795; GFX942-NEXT: ;;#ASMSTART796; GFX942-NEXT: ; def v1797; GFX942-NEXT: ;;#ASMEND798; GFX942-NEXT: ;;#ASMSTART799; GFX942-NEXT: ; def v2800; GFX942-NEXT: ;;#ASMEND801; GFX942-NEXT: s_nop 0802; GFX942-NEXT: v_alignbit_b32 v2, v1, v2, 16803; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4804; GFX942-NEXT: global_store_dword v0, v2, s[0:1]805; GFX942-NEXT: s_waitcnt vmcnt(0)806; GFX942-NEXT: s_setpc_b64 s[30:31]807 %vec0 = call <2 x i16> asm "; def $0", "=v"()808 %vec1 = call <2 x i16> asm "; def $0", "=v"()809 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 0>810 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8811 ret void812}813 814define void @v_shuffle_v3i16_v2i16__3_u_0(ptr addrspace(1) inreg %ptr) {815; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_0:816; GFX900: ; %bb.0:817; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)818; GFX900-NEXT: v_mov_b32_e32 v0, 0819; GFX900-NEXT: ;;#ASMSTART820; GFX900-NEXT: ; def v1821; GFX900-NEXT: ;;#ASMEND822; GFX900-NEXT: ;;#ASMSTART823; GFX900-NEXT: ; def v2824; GFX900-NEXT: ;;#ASMEND825; GFX900-NEXT: v_alignbit_b32 v2, s4, v2, 16826; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4827; GFX900-NEXT: global_store_dword v0, v2, s[16:17]828; GFX900-NEXT: s_waitcnt vmcnt(0)829; GFX900-NEXT: s_setpc_b64 s[30:31]830;831; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_0:832; GFX90A: ; %bb.0:833; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)834; GFX90A-NEXT: v_mov_b32_e32 v0, 0835; GFX90A-NEXT: ;;#ASMSTART836; GFX90A-NEXT: ; def v1837; GFX90A-NEXT: ;;#ASMEND838; GFX90A-NEXT: ;;#ASMSTART839; GFX90A-NEXT: ; def v2840; GFX90A-NEXT: ;;#ASMEND841; GFX90A-NEXT: v_alignbit_b32 v2, s4, v2, 16842; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4843; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]844; GFX90A-NEXT: s_waitcnt vmcnt(0)845; GFX90A-NEXT: s_setpc_b64 s[30:31]846;847; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_u_0:848; GFX942: ; %bb.0:849; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)850; GFX942-NEXT: v_mov_b32_e32 v0, 0851; GFX942-NEXT: ;;#ASMSTART852; GFX942-NEXT: ; def v1853; GFX942-NEXT: ;;#ASMEND854; GFX942-NEXT: ;;#ASMSTART855; GFX942-NEXT: ; def v2856; GFX942-NEXT: ;;#ASMEND857; GFX942-NEXT: s_nop 0858; GFX942-NEXT: v_alignbit_b32 v2, s0, v2, 16859; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4860; GFX942-NEXT: global_store_dword v0, v2, s[0:1]861; GFX942-NEXT: s_waitcnt vmcnt(0)862; GFX942-NEXT: s_setpc_b64 s[30:31]863 %vec0 = call <2 x i16> asm "; def $0", "=v"()864 %vec1 = call <2 x i16> asm "; def $0", "=v"()865 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>866 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8867 ret void868}869 870define void @v_shuffle_v3i16_v2i16__3_1_0(ptr addrspace(1) inreg %ptr) {871; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_0:872; GFX900: ; %bb.0:873; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)874; GFX900-NEXT: v_mov_b32_e32 v0, 0875; GFX900-NEXT: ;;#ASMSTART876; GFX900-NEXT: ; def v1877; GFX900-NEXT: ;;#ASMEND878; GFX900-NEXT: ;;#ASMSTART879; GFX900-NEXT: ; def v2880; GFX900-NEXT: ;;#ASMEND881; GFX900-NEXT: s_mov_b32 s4, 0x7060302882; GFX900-NEXT: v_perm_b32 v2, v1, v2, s4883; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4884; GFX900-NEXT: global_store_dword v0, v2, s[16:17]885; GFX900-NEXT: s_waitcnt vmcnt(0)886; GFX900-NEXT: s_setpc_b64 s[30:31]887;888; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_0:889; GFX90A: ; %bb.0:890; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX90A-NEXT: v_mov_b32_e32 v0, 0892; GFX90A-NEXT: ;;#ASMSTART893; GFX90A-NEXT: ; def v1894; GFX90A-NEXT: ;;#ASMEND895; GFX90A-NEXT: ;;#ASMSTART896; GFX90A-NEXT: ; def v2897; GFX90A-NEXT: ;;#ASMEND898; GFX90A-NEXT: s_mov_b32 s4, 0x7060302899; GFX90A-NEXT: v_perm_b32 v2, v1, v2, s4900; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4901; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]902; GFX90A-NEXT: s_waitcnt vmcnt(0)903; GFX90A-NEXT: s_setpc_b64 s[30:31]904;905; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_1_0:906; GFX942: ; %bb.0:907; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)908; GFX942-NEXT: v_mov_b32_e32 v0, 0909; GFX942-NEXT: ;;#ASMSTART910; GFX942-NEXT: ; def v1911; GFX942-NEXT: ;;#ASMEND912; GFX942-NEXT: ;;#ASMSTART913; GFX942-NEXT: ; def v2914; GFX942-NEXT: ;;#ASMEND915; GFX942-NEXT: s_mov_b32 s2, 0x7060302916; GFX942-NEXT: v_perm_b32 v2, v1, v2, s2917; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4918; GFX942-NEXT: global_store_dword v0, v2, s[0:1]919; GFX942-NEXT: s_waitcnt vmcnt(0)920; GFX942-NEXT: s_setpc_b64 s[30:31]921 %vec0 = call <2 x i16> asm "; def $0", "=v"()922 %vec1 = call <2 x i16> asm "; def $0", "=v"()923 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 0>924 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8925 ret void926}927 928define void @v_shuffle_v3i16_v2i16__3_2_0(ptr addrspace(1) inreg %ptr) {929; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_0:930; GFX900: ; %bb.0:931; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)932; GFX900-NEXT: v_mov_b32_e32 v0, 0933; GFX900-NEXT: ;;#ASMSTART934; GFX900-NEXT: ; def v1935; GFX900-NEXT: ;;#ASMEND936; GFX900-NEXT: ;;#ASMSTART937; GFX900-NEXT: ; def v2938; GFX900-NEXT: ;;#ASMEND939; GFX900-NEXT: v_alignbit_b32 v2, v2, v2, 16940; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4941; GFX900-NEXT: global_store_dword v0, v2, s[16:17]942; GFX900-NEXT: s_waitcnt vmcnt(0)943; GFX900-NEXT: s_setpc_b64 s[30:31]944;945; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_0:946; GFX90A: ; %bb.0:947; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)948; GFX90A-NEXT: v_mov_b32_e32 v0, 0949; GFX90A-NEXT: ;;#ASMSTART950; GFX90A-NEXT: ; def v1951; GFX90A-NEXT: ;;#ASMEND952; GFX90A-NEXT: ;;#ASMSTART953; GFX90A-NEXT: ; def v2954; GFX90A-NEXT: ;;#ASMEND955; GFX90A-NEXT: v_alignbit_b32 v2, v2, v2, 16956; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4957; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]958; GFX90A-NEXT: s_waitcnt vmcnt(0)959; GFX90A-NEXT: s_setpc_b64 s[30:31]960;961; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_2_0:962; GFX942: ; %bb.0:963; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)964; GFX942-NEXT: v_mov_b32_e32 v0, 0965; GFX942-NEXT: ;;#ASMSTART966; GFX942-NEXT: ; def v1967; GFX942-NEXT: ;;#ASMEND968; GFX942-NEXT: ;;#ASMSTART969; GFX942-NEXT: ; def v2970; GFX942-NEXT: ;;#ASMEND971; GFX942-NEXT: s_nop 0972; GFX942-NEXT: v_alignbit_b32 v2, v2, v2, 16973; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4974; GFX942-NEXT: global_store_dword v0, v2, s[0:1]975; GFX942-NEXT: s_waitcnt vmcnt(0)976; GFX942-NEXT: s_setpc_b64 s[30:31]977 %vec0 = call <2 x i16> asm "; def $0", "=v"()978 %vec1 = call <2 x i16> asm "; def $0", "=v"()979 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 0>980 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8981 ret void982}983 984define void @v_shuffle_v3i16_v2i16__u_1_1(ptr addrspace(1) inreg %ptr) {985; GFX900-LABEL: v_shuffle_v3i16_v2i16__u_1_1:986; GFX900: ; %bb.0:987; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)988; GFX900-NEXT: v_mov_b32_e32 v0, 0989; GFX900-NEXT: ;;#ASMSTART990; GFX900-NEXT: ; def v1991; GFX900-NEXT: ;;#ASMEND992; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:4993; GFX900-NEXT: global_store_dword v0, v1, s[16:17]994; GFX900-NEXT: s_waitcnt vmcnt(0)995; GFX900-NEXT: s_setpc_b64 s[30:31]996;997; GFX90A-LABEL: v_shuffle_v3i16_v2i16__u_1_1:998; GFX90A: ; %bb.0:999; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1000; GFX90A-NEXT: v_mov_b32_e32 v0, 01001; GFX90A-NEXT: ;;#ASMSTART1002; GFX90A-NEXT: ; def v11003; GFX90A-NEXT: ;;#ASMEND1004; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41005; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1006; GFX90A-NEXT: s_waitcnt vmcnt(0)1007; GFX90A-NEXT: s_setpc_b64 s[30:31]1008;1009; GFX942-LABEL: v_shuffle_v3i16_v2i16__u_1_1:1010; GFX942: ; %bb.0:1011; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1012; GFX942-NEXT: v_mov_b32_e32 v0, 01013; GFX942-NEXT: ;;#ASMSTART1014; GFX942-NEXT: ; def v11015; GFX942-NEXT: ;;#ASMEND1016; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41017; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1018; GFX942-NEXT: s_waitcnt vmcnt(0)1019; GFX942-NEXT: s_setpc_b64 s[30:31]1020 %vec0 = call <2 x i16> asm "; def $0", "=v"()1021 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 1, i32 1>1022 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81023 ret void1024}1025 1026define void @v_shuffle_v3i16_v2i16__0_1_1(ptr addrspace(1) inreg %ptr) {1027; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_1_1:1028; GFX900: ; %bb.0:1029; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1030; GFX900-NEXT: v_mov_b32_e32 v0, 01031; GFX900-NEXT: ;;#ASMSTART1032; GFX900-NEXT: ; def v11033; GFX900-NEXT: ;;#ASMEND1034; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41035; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1036; GFX900-NEXT: s_waitcnt vmcnt(0)1037; GFX900-NEXT: s_setpc_b64 s[30:31]1038;1039; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_1_1:1040; GFX90A: ; %bb.0:1041; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1042; GFX90A-NEXT: v_mov_b32_e32 v0, 01043; GFX90A-NEXT: ;;#ASMSTART1044; GFX90A-NEXT: ; def v11045; GFX90A-NEXT: ;;#ASMEND1046; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41047; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1048; GFX90A-NEXT: s_waitcnt vmcnt(0)1049; GFX90A-NEXT: s_setpc_b64 s[30:31]1050;1051; GFX942-LABEL: v_shuffle_v3i16_v2i16__0_1_1:1052; GFX942: ; %bb.0:1053; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1054; GFX942-NEXT: v_mov_b32_e32 v0, 01055; GFX942-NEXT: ;;#ASMSTART1056; GFX942-NEXT: ; def v11057; GFX942-NEXT: ;;#ASMEND1058; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41059; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1060; GFX942-NEXT: s_waitcnt vmcnt(0)1061; GFX942-NEXT: s_setpc_b64 s[30:31]1062 %vec0 = call <2 x i16> asm "; def $0", "=v"()1063 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 1, i32 1>1064 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81065 ret void1066}1067 1068define void @v_shuffle_v3i16_v2i16__1_1_1(ptr addrspace(1) inreg %ptr) {1069; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_1_1:1070; GFX900: ; %bb.0:1071; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1072; GFX900-NEXT: ;;#ASMSTART1073; GFX900-NEXT: ; def v11074; GFX900-NEXT: ;;#ASMEND1075; GFX900-NEXT: s_mov_b32 s4, 0x70603021076; GFX900-NEXT: v_mov_b32_e32 v0, 01077; GFX900-NEXT: v_perm_b32 v2, v1, v1, s41078; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11079; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1080; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41081; GFX900-NEXT: s_waitcnt vmcnt(0)1082; GFX900-NEXT: s_setpc_b64 s[30:31]1083;1084; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_1_1:1085; GFX90A: ; %bb.0:1086; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1087; GFX90A-NEXT: ;;#ASMSTART1088; GFX90A-NEXT: ; def v11089; GFX90A-NEXT: ;;#ASMEND1090; GFX90A-NEXT: s_mov_b32 s4, 0x70603021091; GFX90A-NEXT: v_mov_b32_e32 v0, 01092; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s41093; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11094; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1095; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41096; GFX90A-NEXT: s_waitcnt vmcnt(0)1097; GFX90A-NEXT: s_setpc_b64 s[30:31]1098;1099; GFX942-LABEL: v_shuffle_v3i16_v2i16__1_1_1:1100; GFX942: ; %bb.0:1101; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1102; GFX942-NEXT: ;;#ASMSTART1103; GFX942-NEXT: ; def v11104; GFX942-NEXT: ;;#ASMEND1105; GFX942-NEXT: s_mov_b32 s2, 0x70603021106; GFX942-NEXT: v_mov_b32_e32 v0, 01107; GFX942-NEXT: v_perm_b32 v2, v1, v1, s21108; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11109; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1110; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41111; GFX942-NEXT: s_waitcnt vmcnt(0)1112; GFX942-NEXT: s_setpc_b64 s[30:31]1113 %vec0 = call <2 x i16> asm "; def $0", "=v"()1114 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 1, i32 1>1115 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81116 ret void1117}1118 1119define void @v_shuffle_v3i16_v2i16__2_1_1(ptr addrspace(1) inreg %ptr) {1120; GFX900-LABEL: v_shuffle_v3i16_v2i16__2_1_1:1121; GFX900: ; %bb.0:1122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1123; GFX900-NEXT: v_mov_b32_e32 v0, 01124; GFX900-NEXT: ;;#ASMSTART1125; GFX900-NEXT: ; def v11126; GFX900-NEXT: ;;#ASMEND1127; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41128; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1129; GFX900-NEXT: s_waitcnt vmcnt(0)1130; GFX900-NEXT: s_setpc_b64 s[30:31]1131;1132; GFX90A-LABEL: v_shuffle_v3i16_v2i16__2_1_1:1133; GFX90A: ; %bb.0:1134; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1135; GFX90A-NEXT: v_mov_b32_e32 v0, 01136; GFX90A-NEXT: ;;#ASMSTART1137; GFX90A-NEXT: ; def v11138; GFX90A-NEXT: ;;#ASMEND1139; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41140; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1141; GFX90A-NEXT: s_waitcnt vmcnt(0)1142; GFX90A-NEXT: s_setpc_b64 s[30:31]1143;1144; GFX942-LABEL: v_shuffle_v3i16_v2i16__2_1_1:1145; GFX942: ; %bb.0:1146; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1147; GFX942-NEXT: v_mov_b32_e32 v0, 01148; GFX942-NEXT: ;;#ASMSTART1149; GFX942-NEXT: ; def v11150; GFX942-NEXT: ;;#ASMEND1151; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41152; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1153; GFX942-NEXT: s_waitcnt vmcnt(0)1154; GFX942-NEXT: s_setpc_b64 s[30:31]1155 %vec0 = call <2 x i16> asm "; def $0", "=v"()1156 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 1, i32 1>1157 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81158 ret void1159}1160 1161define void @v_shuffle_v3i16_v2i16__3_1_1(ptr addrspace(1) inreg %ptr) {1162; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_1:1163; GFX900: ; %bb.0:1164; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1165; GFX900-NEXT: ;;#ASMSTART1166; GFX900-NEXT: ; def v11167; GFX900-NEXT: ;;#ASMEND1168; GFX900-NEXT: ;;#ASMSTART1169; GFX900-NEXT: ; def v21170; GFX900-NEXT: ;;#ASMEND1171; GFX900-NEXT: s_mov_b32 s4, 0x70603021172; GFX900-NEXT: v_mov_b32_e32 v0, 01173; GFX900-NEXT: v_perm_b32 v2, v1, v2, s41174; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11175; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1176; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41177; GFX900-NEXT: s_waitcnt vmcnt(0)1178; GFX900-NEXT: s_setpc_b64 s[30:31]1179;1180; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_1:1181; GFX90A: ; %bb.0:1182; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1183; GFX90A-NEXT: ;;#ASMSTART1184; GFX90A-NEXT: ; def v11185; GFX90A-NEXT: ;;#ASMEND1186; GFX90A-NEXT: ;;#ASMSTART1187; GFX90A-NEXT: ; def v21188; GFX90A-NEXT: ;;#ASMEND1189; GFX90A-NEXT: s_mov_b32 s4, 0x70603021190; GFX90A-NEXT: v_mov_b32_e32 v0, 01191; GFX90A-NEXT: v_perm_b32 v2, v1, v2, s41192; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11193; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1194; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41195; GFX90A-NEXT: s_waitcnt vmcnt(0)1196; GFX90A-NEXT: s_setpc_b64 s[30:31]1197;1198; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_1_1:1199; GFX942: ; %bb.0:1200; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1201; GFX942-NEXT: ;;#ASMSTART1202; GFX942-NEXT: ; def v11203; GFX942-NEXT: ;;#ASMEND1204; GFX942-NEXT: ;;#ASMSTART1205; GFX942-NEXT: ; def v21206; GFX942-NEXT: ;;#ASMEND1207; GFX942-NEXT: s_mov_b32 s2, 0x70603021208; GFX942-NEXT: v_mov_b32_e32 v0, 01209; GFX942-NEXT: v_perm_b32 v2, v1, v2, s21210; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11211; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1212; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41213; GFX942-NEXT: s_waitcnt vmcnt(0)1214; GFX942-NEXT: s_setpc_b64 s[30:31]1215 %vec0 = call <2 x i16> asm "; def $0", "=v"()1216 %vec1 = call <2 x i16> asm "; def $0", "=v"()1217 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 1>1218 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81219 ret void1220}1221 1222define void @v_shuffle_v3i16_v2i16__3_u_1(ptr addrspace(1) inreg %ptr) {1223; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_1:1224; GFX900: ; %bb.0:1225; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1226; GFX900-NEXT: v_mov_b32_e32 v0, 01227; GFX900-NEXT: ;;#ASMSTART1228; GFX900-NEXT: ; def v11229; GFX900-NEXT: ;;#ASMEND1230; GFX900-NEXT: ;;#ASMSTART1231; GFX900-NEXT: ; def v21232; GFX900-NEXT: ;;#ASMEND1233; GFX900-NEXT: v_alignbit_b32 v2, s4, v2, 161234; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41235; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1236; GFX900-NEXT: s_waitcnt vmcnt(0)1237; GFX900-NEXT: s_setpc_b64 s[30:31]1238;1239; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_1:1240; GFX90A: ; %bb.0:1241; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1242; GFX90A-NEXT: v_mov_b32_e32 v0, 01243; GFX90A-NEXT: ;;#ASMSTART1244; GFX90A-NEXT: ; def v11245; GFX90A-NEXT: ;;#ASMEND1246; GFX90A-NEXT: ;;#ASMSTART1247; GFX90A-NEXT: ; def v21248; GFX90A-NEXT: ;;#ASMEND1249; GFX90A-NEXT: v_alignbit_b32 v2, s4, v2, 161250; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41251; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1252; GFX90A-NEXT: s_waitcnt vmcnt(0)1253; GFX90A-NEXT: s_setpc_b64 s[30:31]1254;1255; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_u_1:1256; GFX942: ; %bb.0:1257; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1258; GFX942-NEXT: v_mov_b32_e32 v0, 01259; GFX942-NEXT: ;;#ASMSTART1260; GFX942-NEXT: ; def v11261; GFX942-NEXT: ;;#ASMEND1262; GFX942-NEXT: ;;#ASMSTART1263; GFX942-NEXT: ; def v21264; GFX942-NEXT: ;;#ASMEND1265; GFX942-NEXT: s_nop 01266; GFX942-NEXT: v_alignbit_b32 v2, s0, v2, 161267; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41268; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1269; GFX942-NEXT: s_waitcnt vmcnt(0)1270; GFX942-NEXT: s_setpc_b64 s[30:31]1271 %vec0 = call <2 x i16> asm "; def $0", "=v"()1272 %vec1 = call <2 x i16> asm "; def $0", "=v"()1273 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>1274 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81275 ret void1276}1277 1278define void @v_shuffle_v3i16_v2i16__3_0_1(ptr addrspace(1) inreg %ptr) {1279; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_1:1280; GFX900: ; %bb.0:1281; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1282; GFX900-NEXT: v_mov_b32_e32 v0, 01283; GFX900-NEXT: ;;#ASMSTART1284; GFX900-NEXT: ; def v11285; GFX900-NEXT: ;;#ASMEND1286; GFX900-NEXT: ;;#ASMSTART1287; GFX900-NEXT: ; def v21288; GFX900-NEXT: ;;#ASMEND1289; GFX900-NEXT: v_alignbit_b32 v2, v1, v2, 161290; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41291; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1292; GFX900-NEXT: s_waitcnt vmcnt(0)1293; GFX900-NEXT: s_setpc_b64 s[30:31]1294;1295; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_1:1296; GFX90A: ; %bb.0:1297; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1298; GFX90A-NEXT: v_mov_b32_e32 v0, 01299; GFX90A-NEXT: ;;#ASMSTART1300; GFX90A-NEXT: ; def v11301; GFX90A-NEXT: ;;#ASMEND1302; GFX90A-NEXT: ;;#ASMSTART1303; GFX90A-NEXT: ; def v21304; GFX90A-NEXT: ;;#ASMEND1305; GFX90A-NEXT: v_alignbit_b32 v2, v1, v2, 161306; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41307; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1308; GFX90A-NEXT: s_waitcnt vmcnt(0)1309; GFX90A-NEXT: s_setpc_b64 s[30:31]1310;1311; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_0_1:1312; GFX942: ; %bb.0:1313; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1314; GFX942-NEXT: v_mov_b32_e32 v0, 01315; GFX942-NEXT: ;;#ASMSTART1316; GFX942-NEXT: ; def v11317; GFX942-NEXT: ;;#ASMEND1318; GFX942-NEXT: ;;#ASMSTART1319; GFX942-NEXT: ; def v21320; GFX942-NEXT: ;;#ASMEND1321; GFX942-NEXT: s_nop 01322; GFX942-NEXT: v_alignbit_b32 v2, v1, v2, 161323; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41324; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1325; GFX942-NEXT: s_waitcnt vmcnt(0)1326; GFX942-NEXT: s_setpc_b64 s[30:31]1327 %vec0 = call <2 x i16> asm "; def $0", "=v"()1328 %vec1 = call <2 x i16> asm "; def $0", "=v"()1329 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 1>1330 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81331 ret void1332}1333 1334define void @v_shuffle_v3i16_v2i16__3_2_1(ptr addrspace(1) inreg %ptr) {1335; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_1:1336; GFX900: ; %bb.0:1337; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1338; GFX900-NEXT: v_mov_b32_e32 v0, 01339; GFX900-NEXT: ;;#ASMSTART1340; GFX900-NEXT: ; def v11341; GFX900-NEXT: ;;#ASMEND1342; GFX900-NEXT: ;;#ASMSTART1343; GFX900-NEXT: ; def v21344; GFX900-NEXT: ;;#ASMEND1345; GFX900-NEXT: v_alignbit_b32 v2, v2, v2, 161346; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41347; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1348; GFX900-NEXT: s_waitcnt vmcnt(0)1349; GFX900-NEXT: s_setpc_b64 s[30:31]1350;1351; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_1:1352; GFX90A: ; %bb.0:1353; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1354; GFX90A-NEXT: v_mov_b32_e32 v0, 01355; GFX90A-NEXT: ;;#ASMSTART1356; GFX90A-NEXT: ; def v11357; GFX90A-NEXT: ;;#ASMEND1358; GFX90A-NEXT: ;;#ASMSTART1359; GFX90A-NEXT: ; def v21360; GFX90A-NEXT: ;;#ASMEND1361; GFX90A-NEXT: v_alignbit_b32 v2, v2, v2, 161362; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41363; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1364; GFX90A-NEXT: s_waitcnt vmcnt(0)1365; GFX90A-NEXT: s_setpc_b64 s[30:31]1366;1367; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_2_1:1368; GFX942: ; %bb.0:1369; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1370; GFX942-NEXT: v_mov_b32_e32 v0, 01371; GFX942-NEXT: ;;#ASMSTART1372; GFX942-NEXT: ; def v11373; GFX942-NEXT: ;;#ASMEND1374; GFX942-NEXT: ;;#ASMSTART1375; GFX942-NEXT: ; def v21376; GFX942-NEXT: ;;#ASMEND1377; GFX942-NEXT: s_nop 01378; GFX942-NEXT: v_alignbit_b32 v2, v2, v2, 161379; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41380; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1381; GFX942-NEXT: s_waitcnt vmcnt(0)1382; GFX942-NEXT: s_setpc_b64 s[30:31]1383 %vec0 = call <2 x i16> asm "; def $0", "=v"()1384 %vec1 = call <2 x i16> asm "; def $0", "=v"()1385 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 1>1386 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81387 ret void1388}1389 1390define void @v_shuffle_v3i16_v2i16__u_2_2(ptr addrspace(1) inreg %ptr) {1391; GFX9-LABEL: v_shuffle_v3i16_v2i16__u_2_2:1392; GFX9: ; %bb.0:1393; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1394; GFX9-NEXT: s_setpc_b64 s[30:31]1395 %vec0 = call <2 x i16> asm "; def $0", "=v"()1396 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 2, i32 2>1397 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81398 ret void1399}1400 1401define void @v_shuffle_v3i16_v2i16__0_2_2(ptr addrspace(1) inreg %ptr) {1402; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_2_2:1403; GFX900: ; %bb.0:1404; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1405; GFX900-NEXT: v_mov_b32_e32 v0, 01406; GFX900-NEXT: ;;#ASMSTART1407; GFX900-NEXT: ; def v11408; GFX900-NEXT: ;;#ASMEND1409; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1410; GFX900-NEXT: s_waitcnt vmcnt(0)1411; GFX900-NEXT: s_setpc_b64 s[30:31]1412;1413; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_2_2:1414; GFX90A: ; %bb.0:1415; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1416; GFX90A-NEXT: v_mov_b32_e32 v0, 01417; GFX90A-NEXT: ;;#ASMSTART1418; GFX90A-NEXT: ; def v11419; GFX90A-NEXT: ;;#ASMEND1420; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1421; GFX90A-NEXT: s_waitcnt vmcnt(0)1422; GFX90A-NEXT: s_setpc_b64 s[30:31]1423;1424; GFX942-LABEL: v_shuffle_v3i16_v2i16__0_2_2:1425; GFX942: ; %bb.0:1426; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1427; GFX942-NEXT: v_mov_b32_e32 v0, 01428; GFX942-NEXT: ;;#ASMSTART1429; GFX942-NEXT: ; def v11430; GFX942-NEXT: ;;#ASMEND1431; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1432; GFX942-NEXT: s_waitcnt vmcnt(0)1433; GFX942-NEXT: s_setpc_b64 s[30:31]1434 %vec0 = call <2 x i16> asm "; def $0", "=v"()1435 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 2, i32 2>1436 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81437 ret void1438}1439 1440define void @v_shuffle_v3i16_v2i16__1_2_2(ptr addrspace(1) inreg %ptr) {1441; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_2_2:1442; GFX900: ; %bb.0:1443; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1444; GFX900-NEXT: ;;#ASMSTART1445; GFX900-NEXT: ; def v11446; GFX900-NEXT: ;;#ASMEND1447; GFX900-NEXT: v_mov_b32_e32 v0, 01448; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 161449; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1450; GFX900-NEXT: s_waitcnt vmcnt(0)1451; GFX900-NEXT: s_setpc_b64 s[30:31]1452;1453; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_2_2:1454; GFX90A: ; %bb.0:1455; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1456; GFX90A-NEXT: ;;#ASMSTART1457; GFX90A-NEXT: ; def v11458; GFX90A-NEXT: ;;#ASMEND1459; GFX90A-NEXT: v_mov_b32_e32 v0, 01460; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 161461; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1462; GFX90A-NEXT: s_waitcnt vmcnt(0)1463; GFX90A-NEXT: s_setpc_b64 s[30:31]1464;1465; GFX942-LABEL: v_shuffle_v3i16_v2i16__1_2_2:1466; GFX942: ; %bb.0:1467; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1468; GFX942-NEXT: ;;#ASMSTART1469; GFX942-NEXT: ; def v11470; GFX942-NEXT: ;;#ASMEND1471; GFX942-NEXT: v_mov_b32_e32 v0, 01472; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 161473; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1474; GFX942-NEXT: s_waitcnt vmcnt(0)1475; GFX942-NEXT: s_setpc_b64 s[30:31]1476 %vec0 = call <2 x i16> asm "; def $0", "=v"()1477 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 2, i32 2>1478 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81479 ret void1480}1481 1482define void @v_shuffle_v3i16_v2i16__2_2_2(ptr addrspace(1) inreg %ptr) {1483; GFX9-LABEL: v_shuffle_v3i16_v2i16__2_2_2:1484; GFX9: ; %bb.0:1485; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1486; GFX9-NEXT: s_setpc_b64 s[30:31]1487 %vec0 = call <2 x i16> asm "; def $0", "=v"()1488 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 2, i32 2>1489 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81490 ret void1491}1492 1493define void @v_shuffle_v3i16_v2i16__3_2_2(ptr addrspace(1) inreg %ptr) {1494; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_2:1495; GFX900: ; %bb.0:1496; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1497; GFX900-NEXT: v_mov_b32_e32 v0, 01498; GFX900-NEXT: ;;#ASMSTART1499; GFX900-NEXT: ; def v11500; GFX900-NEXT: ;;#ASMEND1501; GFX900-NEXT: v_alignbit_b32 v2, v1, v1, 161502; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41503; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1504; GFX900-NEXT: s_waitcnt vmcnt(0)1505; GFX900-NEXT: s_setpc_b64 s[30:31]1506;1507; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_2:1508; GFX90A: ; %bb.0:1509; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1510; GFX90A-NEXT: v_mov_b32_e32 v0, 01511; GFX90A-NEXT: ;;#ASMSTART1512; GFX90A-NEXT: ; def v11513; GFX90A-NEXT: ;;#ASMEND1514; GFX90A-NEXT: v_alignbit_b32 v2, v1, v1, 161515; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41516; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1517; GFX90A-NEXT: s_waitcnt vmcnt(0)1518; GFX90A-NEXT: s_setpc_b64 s[30:31]1519;1520; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_2_2:1521; GFX942: ; %bb.0:1522; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1523; GFX942-NEXT: v_mov_b32_e32 v0, 01524; GFX942-NEXT: ;;#ASMSTART1525; GFX942-NEXT: ; def v11526; GFX942-NEXT: ;;#ASMEND1527; GFX942-NEXT: s_nop 01528; GFX942-NEXT: v_alignbit_b32 v2, v1, v1, 161529; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41530; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1531; GFX942-NEXT: s_waitcnt vmcnt(0)1532; GFX942-NEXT: s_setpc_b64 s[30:31]1533 %vec0 = call <2 x i16> asm "; def $0", "=v"()1534 %vec1 = call <2 x i16> asm "; def $0", "=v"()1535 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 2>1536 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81537 ret void1538}1539 1540define void @v_shuffle_v3i16_v2i16__3_u_2(ptr addrspace(1) inreg %ptr) {1541; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_2:1542; GFX900: ; %bb.0:1543; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1544; GFX900-NEXT: v_mov_b32_e32 v0, 01545; GFX900-NEXT: ;;#ASMSTART1546; GFX900-NEXT: ; def v11547; GFX900-NEXT: ;;#ASMEND1548; GFX900-NEXT: v_alignbit_b32 v2, s4, v1, 161549; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41550; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1551; GFX900-NEXT: s_waitcnt vmcnt(0)1552; GFX900-NEXT: s_setpc_b64 s[30:31]1553;1554; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_2:1555; GFX90A: ; %bb.0:1556; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1557; GFX90A-NEXT: v_mov_b32_e32 v0, 01558; GFX90A-NEXT: ;;#ASMSTART1559; GFX90A-NEXT: ; def v11560; GFX90A-NEXT: ;;#ASMEND1561; GFX90A-NEXT: v_alignbit_b32 v2, s4, v1, 161562; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41563; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1564; GFX90A-NEXT: s_waitcnt vmcnt(0)1565; GFX90A-NEXT: s_setpc_b64 s[30:31]1566;1567; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_u_2:1568; GFX942: ; %bb.0:1569; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1570; GFX942-NEXT: v_mov_b32_e32 v0, 01571; GFX942-NEXT: ;;#ASMSTART1572; GFX942-NEXT: ; def v11573; GFX942-NEXT: ;;#ASMEND1574; GFX942-NEXT: s_nop 01575; GFX942-NEXT: v_alignbit_b32 v2, s0, v1, 161576; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41577; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1578; GFX942-NEXT: s_waitcnt vmcnt(0)1579; GFX942-NEXT: s_setpc_b64 s[30:31]1580 %vec0 = call <2 x i16> asm "; def $0", "=v"()1581 %vec1 = call <2 x i16> asm "; def $0", "=v"()1582 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>1583 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81584 ret void1585}1586 1587define void @v_shuffle_v3i16_v2i16__3_0_2(ptr addrspace(1) inreg %ptr) {1588; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_2:1589; GFX900: ; %bb.0:1590; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1591; GFX900-NEXT: v_mov_b32_e32 v0, 01592; GFX900-NEXT: ;;#ASMSTART1593; GFX900-NEXT: ; def v11594; GFX900-NEXT: ;;#ASMEND1595; GFX900-NEXT: ;;#ASMSTART1596; GFX900-NEXT: ; def v21597; GFX900-NEXT: ;;#ASMEND1598; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 161599; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41600; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1601; GFX900-NEXT: s_waitcnt vmcnt(0)1602; GFX900-NEXT: s_setpc_b64 s[30:31]1603;1604; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_2:1605; GFX90A: ; %bb.0:1606; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1607; GFX90A-NEXT: v_mov_b32_e32 v0, 01608; GFX90A-NEXT: ;;#ASMSTART1609; GFX90A-NEXT: ; def v11610; GFX90A-NEXT: ;;#ASMEND1611; GFX90A-NEXT: ;;#ASMSTART1612; GFX90A-NEXT: ; def v21613; GFX90A-NEXT: ;;#ASMEND1614; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 161615; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41616; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1617; GFX90A-NEXT: s_waitcnt vmcnt(0)1618; GFX90A-NEXT: s_setpc_b64 s[30:31]1619;1620; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_0_2:1621; GFX942: ; %bb.0:1622; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1623; GFX942-NEXT: v_mov_b32_e32 v0, 01624; GFX942-NEXT: ;;#ASMSTART1625; GFX942-NEXT: ; def v11626; GFX942-NEXT: ;;#ASMEND1627; GFX942-NEXT: ;;#ASMSTART1628; GFX942-NEXT: ; def v21629; GFX942-NEXT: ;;#ASMEND1630; GFX942-NEXT: s_nop 01631; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 161632; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:41633; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1634; GFX942-NEXT: s_waitcnt vmcnt(0)1635; GFX942-NEXT: s_setpc_b64 s[30:31]1636 %vec0 = call <2 x i16> asm "; def $0", "=v"()1637 %vec1 = call <2 x i16> asm "; def $0", "=v"()1638 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 2>1639 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81640 ret void1641}1642 1643define void @v_shuffle_v3i16_v2i16__3_1_2(ptr addrspace(1) inreg %ptr) {1644; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_2:1645; GFX900: ; %bb.0:1646; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1647; GFX900-NEXT: v_mov_b32_e32 v0, 01648; GFX900-NEXT: ;;#ASMSTART1649; GFX900-NEXT: ; def v11650; GFX900-NEXT: ;;#ASMEND1651; GFX900-NEXT: ;;#ASMSTART1652; GFX900-NEXT: ; def v21653; GFX900-NEXT: ;;#ASMEND1654; GFX900-NEXT: s_mov_b32 s4, 0x70603021655; GFX900-NEXT: v_perm_b32 v1, v1, v2, s41656; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41657; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1658; GFX900-NEXT: s_waitcnt vmcnt(0)1659; GFX900-NEXT: s_setpc_b64 s[30:31]1660;1661; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_2:1662; GFX90A: ; %bb.0:1663; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1664; GFX90A-NEXT: v_mov_b32_e32 v0, 01665; GFX90A-NEXT: ;;#ASMSTART1666; GFX90A-NEXT: ; def v11667; GFX90A-NEXT: ;;#ASMEND1668; GFX90A-NEXT: ;;#ASMSTART1669; GFX90A-NEXT: ; def v21670; GFX90A-NEXT: ;;#ASMEND1671; GFX90A-NEXT: s_mov_b32 s4, 0x70603021672; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s41673; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41674; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1675; GFX90A-NEXT: s_waitcnt vmcnt(0)1676; GFX90A-NEXT: s_setpc_b64 s[30:31]1677;1678; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_1_2:1679; GFX942: ; %bb.0:1680; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1681; GFX942-NEXT: v_mov_b32_e32 v0, 01682; GFX942-NEXT: ;;#ASMSTART1683; GFX942-NEXT: ; def v11684; GFX942-NEXT: ;;#ASMEND1685; GFX942-NEXT: ;;#ASMSTART1686; GFX942-NEXT: ; def v21687; GFX942-NEXT: ;;#ASMEND1688; GFX942-NEXT: s_mov_b32 s2, 0x70603021689; GFX942-NEXT: v_perm_b32 v1, v1, v2, s21690; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:41691; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1692; GFX942-NEXT: s_waitcnt vmcnt(0)1693; GFX942-NEXT: s_setpc_b64 s[30:31]1694 %vec0 = call <2 x i16> asm "; def $0", "=v"()1695 %vec1 = call <2 x i16> asm "; def $0", "=v"()1696 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 2>1697 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81698 ret void1699}1700 1701define void @v_shuffle_v3i16_v2i16__u_3_3(ptr addrspace(1) inreg %ptr) {1702; GFX900-LABEL: v_shuffle_v3i16_v2i16__u_3_3:1703; GFX900: ; %bb.0:1704; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1705; GFX900-NEXT: v_mov_b32_e32 v0, 01706; GFX900-NEXT: ;;#ASMSTART1707; GFX900-NEXT: ; def v11708; GFX900-NEXT: ;;#ASMEND1709; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41710; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1711; GFX900-NEXT: s_waitcnt vmcnt(0)1712; GFX900-NEXT: s_setpc_b64 s[30:31]1713;1714; GFX90A-LABEL: v_shuffle_v3i16_v2i16__u_3_3:1715; GFX90A: ; %bb.0:1716; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1717; GFX90A-NEXT: v_mov_b32_e32 v0, 01718; GFX90A-NEXT: ;;#ASMSTART1719; GFX90A-NEXT: ; def v11720; GFX90A-NEXT: ;;#ASMEND1721; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41722; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1723; GFX90A-NEXT: s_waitcnt vmcnt(0)1724; GFX90A-NEXT: s_setpc_b64 s[30:31]1725;1726; GFX942-LABEL: v_shuffle_v3i16_v2i16__u_3_3:1727; GFX942: ; %bb.0:1728; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1729; GFX942-NEXT: v_mov_b32_e32 v0, 01730; GFX942-NEXT: ;;#ASMSTART1731; GFX942-NEXT: ; def v11732; GFX942-NEXT: ;;#ASMEND1733; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41734; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1735; GFX942-NEXT: s_waitcnt vmcnt(0)1736; GFX942-NEXT: s_setpc_b64 s[30:31]1737 %vec0 = call <2 x i16> asm "; def $0", "=v"()1738 %vec1 = call <2 x i16> asm "; def $0", "=v"()1739 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>1740 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81741 ret void1742}1743 1744define void @v_shuffle_v3i16_v2i16__0_3_3(ptr addrspace(1) inreg %ptr) {1745; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_3_3:1746; GFX900: ; %bb.0:1747; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1748; GFX900-NEXT: ;;#ASMSTART1749; GFX900-NEXT: ; def v11750; GFX900-NEXT: ;;#ASMEND1751; GFX900-NEXT: ;;#ASMSTART1752; GFX900-NEXT: ; def v21753; GFX900-NEXT: ;;#ASMEND1754; GFX900-NEXT: s_mov_b32 s4, 0xffff1755; GFX900-NEXT: v_mov_b32_e32 v0, 01756; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v21757; GFX900-NEXT: v_lshrrev_b32_e32 v2, 16, v21758; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41759; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1760; GFX900-NEXT: s_waitcnt vmcnt(0)1761; GFX900-NEXT: s_setpc_b64 s[30:31]1762;1763; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_3_3:1764; GFX90A: ; %bb.0:1765; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1766; GFX90A-NEXT: ;;#ASMSTART1767; GFX90A-NEXT: ; def v11768; GFX90A-NEXT: ;;#ASMEND1769; GFX90A-NEXT: ;;#ASMSTART1770; GFX90A-NEXT: ; def v21771; GFX90A-NEXT: ;;#ASMEND1772; GFX90A-NEXT: s_mov_b32 s4, 0xffff1773; GFX90A-NEXT: v_mov_b32_e32 v0, 01774; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v21775; GFX90A-NEXT: v_lshrrev_b32_e32 v2, 16, v21776; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41777; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1778; GFX90A-NEXT: s_waitcnt vmcnt(0)1779; GFX90A-NEXT: s_setpc_b64 s[30:31]1780;1781; GFX942-LABEL: v_shuffle_v3i16_v2i16__0_3_3:1782; GFX942: ; %bb.0:1783; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1784; GFX942-NEXT: ;;#ASMSTART1785; GFX942-NEXT: ; def v11786; GFX942-NEXT: ;;#ASMEND1787; GFX942-NEXT: ;;#ASMSTART1788; GFX942-NEXT: ; def v21789; GFX942-NEXT: ;;#ASMEND1790; GFX942-NEXT: s_mov_b32 s2, 0xffff1791; GFX942-NEXT: v_mov_b32_e32 v0, 01792; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v21793; GFX942-NEXT: v_lshrrev_b32_e32 v2, 16, v21794; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:41795; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1796; GFX942-NEXT: s_waitcnt vmcnt(0)1797; GFX942-NEXT: s_setpc_b64 s[30:31]1798 %vec0 = call <2 x i16> asm "; def $0", "=v"()1799 %vec1 = call <2 x i16> asm "; def $0", "=v"()1800 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 0, i32 3, i32 3>1801 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81802 ret void1803}1804 1805define void @v_shuffle_v3i16_v2i16__1_3_3(ptr addrspace(1) inreg %ptr) {1806; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_3_3:1807; GFX900: ; %bb.0:1808; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1809; GFX900-NEXT: ;;#ASMSTART1810; GFX900-NEXT: ; def v11811; GFX900-NEXT: ;;#ASMEND1812; GFX900-NEXT: s_mov_b32 s4, 0x70603021813; GFX900-NEXT: v_mov_b32_e32 v0, 01814; GFX900-NEXT: ;;#ASMSTART1815; GFX900-NEXT: ; def v21816; GFX900-NEXT: ;;#ASMEND1817; GFX900-NEXT: v_perm_b32 v1, v2, v1, s41818; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1819; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v21820; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41821; GFX900-NEXT: s_waitcnt vmcnt(0)1822; GFX900-NEXT: s_setpc_b64 s[30:31]1823;1824; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_3_3:1825; GFX90A: ; %bb.0:1826; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1827; GFX90A-NEXT: ;;#ASMSTART1828; GFX90A-NEXT: ; def v11829; GFX90A-NEXT: ;;#ASMEND1830; GFX90A-NEXT: s_mov_b32 s4, 0x70603021831; GFX90A-NEXT: v_mov_b32_e32 v0, 01832; GFX90A-NEXT: ;;#ASMSTART1833; GFX90A-NEXT: ; def v21834; GFX90A-NEXT: ;;#ASMEND1835; GFX90A-NEXT: v_perm_b32 v1, v2, v1, s41836; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1837; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v21838; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41839; GFX90A-NEXT: s_waitcnt vmcnt(0)1840; GFX90A-NEXT: s_setpc_b64 s[30:31]1841;1842; GFX942-LABEL: v_shuffle_v3i16_v2i16__1_3_3:1843; GFX942: ; %bb.0:1844; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1845; GFX942-NEXT: ;;#ASMSTART1846; GFX942-NEXT: ; def v11847; GFX942-NEXT: ;;#ASMEND1848; GFX942-NEXT: s_mov_b32 s2, 0x70603021849; GFX942-NEXT: v_mov_b32_e32 v0, 01850; GFX942-NEXT: ;;#ASMSTART1851; GFX942-NEXT: ; def v21852; GFX942-NEXT: ;;#ASMEND1853; GFX942-NEXT: s_nop 01854; GFX942-NEXT: v_perm_b32 v1, v2, v1, s21855; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1856; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v21857; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41858; GFX942-NEXT: s_waitcnt vmcnt(0)1859; GFX942-NEXT: s_setpc_b64 s[30:31]1860 %vec0 = call <2 x i16> asm "; def $0", "=v"()1861 %vec1 = call <2 x i16> asm "; def $0", "=v"()1862 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 1, i32 3, i32 3>1863 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81864 ret void1865}1866 1867define void @v_shuffle_v3i16_v2i16__2_3_3(ptr addrspace(1) inreg %ptr) {1868; GFX900-LABEL: v_shuffle_v3i16_v2i16__2_3_3:1869; GFX900: ; %bb.0:1870; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1871; GFX900-NEXT: v_mov_b32_e32 v0, 01872; GFX900-NEXT: ;;#ASMSTART1873; GFX900-NEXT: ; def v11874; GFX900-NEXT: ;;#ASMEND1875; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41876; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1877; GFX900-NEXT: s_waitcnt vmcnt(0)1878; GFX900-NEXT: s_setpc_b64 s[30:31]1879;1880; GFX90A-LABEL: v_shuffle_v3i16_v2i16__2_3_3:1881; GFX90A: ; %bb.0:1882; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX90A-NEXT: v_mov_b32_e32 v0, 01884; GFX90A-NEXT: ;;#ASMSTART1885; GFX90A-NEXT: ; def v11886; GFX90A-NEXT: ;;#ASMEND1887; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41888; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1889; GFX90A-NEXT: s_waitcnt vmcnt(0)1890; GFX90A-NEXT: s_setpc_b64 s[30:31]1891;1892; GFX942-LABEL: v_shuffle_v3i16_v2i16__2_3_3:1893; GFX942: ; %bb.0:1894; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1895; GFX942-NEXT: v_mov_b32_e32 v0, 01896; GFX942-NEXT: ;;#ASMSTART1897; GFX942-NEXT: ; def v11898; GFX942-NEXT: ;;#ASMEND1899; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41900; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1901; GFX942-NEXT: s_waitcnt vmcnt(0)1902; GFX942-NEXT: s_setpc_b64 s[30:31]1903 %vec0 = call <2 x i16> asm "; def $0", "=v"()1904 %vec1 = call <2 x i16> asm "; def $0", "=v"()1905 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 2, i32 3, i32 3>1906 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81907 ret void1908}1909 1910define void @v_shuffle_v3i16_v2i16__3_u_3(ptr addrspace(1) inreg %ptr) {1911; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_3:1912; GFX900: ; %bb.0:1913; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1914; GFX900-NEXT: ;;#ASMSTART1915; GFX900-NEXT: ; def v11916; GFX900-NEXT: ;;#ASMEND1917; GFX900-NEXT: v_mov_b32_e32 v0, 01918; GFX900-NEXT: v_alignbit_b32 v2, s4, v1, 161919; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11920; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1921; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41922; GFX900-NEXT: s_waitcnt vmcnt(0)1923; GFX900-NEXT: s_setpc_b64 s[30:31]1924;1925; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_3:1926; GFX90A: ; %bb.0:1927; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1928; GFX90A-NEXT: ;;#ASMSTART1929; GFX90A-NEXT: ; def v11930; GFX90A-NEXT: ;;#ASMEND1931; GFX90A-NEXT: v_mov_b32_e32 v0, 01932; GFX90A-NEXT: v_alignbit_b32 v2, s4, v1, 161933; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11934; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1935; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41936; GFX90A-NEXT: s_waitcnt vmcnt(0)1937; GFX90A-NEXT: s_setpc_b64 s[30:31]1938;1939; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_u_3:1940; GFX942: ; %bb.0:1941; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1942; GFX942-NEXT: ;;#ASMSTART1943; GFX942-NEXT: ; def v11944; GFX942-NEXT: ;;#ASMEND1945; GFX942-NEXT: v_mov_b32_e32 v0, 01946; GFX942-NEXT: v_alignbit_b32 v2, s0, v1, 161947; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11948; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1949; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41950; GFX942-NEXT: s_waitcnt vmcnt(0)1951; GFX942-NEXT: s_setpc_b64 s[30:31]1952 %vec0 = call <2 x i16> asm "; def $0", "=v"()1953 %vec1 = call <2 x i16> asm "; def $0", "=v"()1954 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>1955 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 81956 ret void1957}1958 1959define void @v_shuffle_v3i16_v2i16__3_0_3(ptr addrspace(1) inreg %ptr) {1960; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_3:1961; GFX900: ; %bb.0:1962; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1963; GFX900-NEXT: ;;#ASMSTART1964; GFX900-NEXT: ; def v11965; GFX900-NEXT: ;;#ASMEND1966; GFX900-NEXT: ;;#ASMSTART1967; GFX900-NEXT: ; def v21968; GFX900-NEXT: ;;#ASMEND1969; GFX900-NEXT: v_mov_b32_e32 v0, 01970; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 161971; GFX900-NEXT: v_lshrrev_b32_e32 v2, 16, v21972; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41973; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1974; GFX900-NEXT: s_waitcnt vmcnt(0)1975; GFX900-NEXT: s_setpc_b64 s[30:31]1976;1977; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_3:1978; GFX90A: ; %bb.0:1979; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1980; GFX90A-NEXT: ;;#ASMSTART1981; GFX90A-NEXT: ; def v11982; GFX90A-NEXT: ;;#ASMEND1983; GFX90A-NEXT: ;;#ASMSTART1984; GFX90A-NEXT: ; def v21985; GFX90A-NEXT: ;;#ASMEND1986; GFX90A-NEXT: v_mov_b32_e32 v0, 01987; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 161988; GFX90A-NEXT: v_lshrrev_b32_e32 v2, 16, v21989; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41990; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1991; GFX90A-NEXT: s_waitcnt vmcnt(0)1992; GFX90A-NEXT: s_setpc_b64 s[30:31]1993;1994; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_0_3:1995; GFX942: ; %bb.0:1996; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1997; GFX942-NEXT: ;;#ASMSTART1998; GFX942-NEXT: ; def v11999; GFX942-NEXT: ;;#ASMEND2000; GFX942-NEXT: ;;#ASMSTART2001; GFX942-NEXT: ; def v22002; GFX942-NEXT: ;;#ASMEND2003; GFX942-NEXT: v_mov_b32_e32 v0, 02004; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 162005; GFX942-NEXT: v_lshrrev_b32_e32 v2, 16, v22006; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:42007; GFX942-NEXT: global_store_dword v0, v1, s[0:1]2008; GFX942-NEXT: s_waitcnt vmcnt(0)2009; GFX942-NEXT: s_setpc_b64 s[30:31]2010 %vec0 = call <2 x i16> asm "; def $0", "=v"()2011 %vec1 = call <2 x i16> asm "; def $0", "=v"()2012 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 3>2013 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82014 ret void2015}2016 2017define void @v_shuffle_v3i16_v2i16__3_1_3(ptr addrspace(1) inreg %ptr) {2018; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_3:2019; GFX900: ; %bb.0:2020; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2021; GFX900-NEXT: ;;#ASMSTART2022; GFX900-NEXT: ; def v12023; GFX900-NEXT: ;;#ASMEND2024; GFX900-NEXT: s_mov_b32 s4, 0x70603022025; GFX900-NEXT: v_mov_b32_e32 v0, 02026; GFX900-NEXT: ;;#ASMSTART2027; GFX900-NEXT: ; def v22028; GFX900-NEXT: ;;#ASMEND2029; GFX900-NEXT: v_perm_b32 v1, v1, v2, s42030; GFX900-NEXT: global_store_dword v0, v1, s[16:17]2031; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v22032; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:42033; GFX900-NEXT: s_waitcnt vmcnt(0)2034; GFX900-NEXT: s_setpc_b64 s[30:31]2035;2036; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_3:2037; GFX90A: ; %bb.0:2038; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2039; GFX90A-NEXT: ;;#ASMSTART2040; GFX90A-NEXT: ; def v12041; GFX90A-NEXT: ;;#ASMEND2042; GFX90A-NEXT: s_mov_b32 s4, 0x70603022043; GFX90A-NEXT: v_mov_b32_e32 v0, 02044; GFX90A-NEXT: ;;#ASMSTART2045; GFX90A-NEXT: ; def v22046; GFX90A-NEXT: ;;#ASMEND2047; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s42048; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]2049; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v22050; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:42051; GFX90A-NEXT: s_waitcnt vmcnt(0)2052; GFX90A-NEXT: s_setpc_b64 s[30:31]2053;2054; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_1_3:2055; GFX942: ; %bb.0:2056; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2057; GFX942-NEXT: ;;#ASMSTART2058; GFX942-NEXT: ; def v12059; GFX942-NEXT: ;;#ASMEND2060; GFX942-NEXT: s_mov_b32 s2, 0x70603022061; GFX942-NEXT: v_mov_b32_e32 v0, 02062; GFX942-NEXT: ;;#ASMSTART2063; GFX942-NEXT: ; def v22064; GFX942-NEXT: ;;#ASMEND2065; GFX942-NEXT: s_nop 02066; GFX942-NEXT: v_perm_b32 v1, v1, v2, s22067; GFX942-NEXT: global_store_dword v0, v1, s[0:1]2068; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v22069; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:42070; GFX942-NEXT: s_waitcnt vmcnt(0)2071; GFX942-NEXT: s_setpc_b64 s[30:31]2072 %vec0 = call <2 x i16> asm "; def $0", "=v"()2073 %vec1 = call <2 x i16> asm "; def $0", "=v"()2074 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 3>2075 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82076 ret void2077}2078 2079define void @v_shuffle_v3i16_v2i16__3_2_3(ptr addrspace(1) inreg %ptr) {2080; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_3:2081; GFX900: ; %bb.0:2082; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2083; GFX900-NEXT: ;;#ASMSTART2084; GFX900-NEXT: ; def v12085; GFX900-NEXT: ;;#ASMEND2086; GFX900-NEXT: v_mov_b32_e32 v0, 02087; GFX900-NEXT: v_alignbit_b32 v2, v1, v1, 162088; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v12089; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:42090; GFX900-NEXT: global_store_dword v0, v2, s[16:17]2091; GFX900-NEXT: s_waitcnt vmcnt(0)2092; GFX900-NEXT: s_setpc_b64 s[30:31]2093;2094; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_3:2095; GFX90A: ; %bb.0:2096; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2097; GFX90A-NEXT: ;;#ASMSTART2098; GFX90A-NEXT: ; def v12099; GFX90A-NEXT: ;;#ASMEND2100; GFX90A-NEXT: v_mov_b32_e32 v0, 02101; GFX90A-NEXT: v_alignbit_b32 v2, v1, v1, 162102; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v12103; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:42104; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]2105; GFX90A-NEXT: s_waitcnt vmcnt(0)2106; GFX90A-NEXT: s_setpc_b64 s[30:31]2107;2108; GFX942-LABEL: v_shuffle_v3i16_v2i16__3_2_3:2109; GFX942: ; %bb.0:2110; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2111; GFX942-NEXT: ;;#ASMSTART2112; GFX942-NEXT: ; def v12113; GFX942-NEXT: ;;#ASMEND2114; GFX942-NEXT: v_mov_b32_e32 v0, 02115; GFX942-NEXT: v_alignbit_b32 v2, v1, v1, 162116; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v12117; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:42118; GFX942-NEXT: global_store_dword v0, v2, s[0:1]2119; GFX942-NEXT: s_waitcnt vmcnt(0)2120; GFX942-NEXT: s_setpc_b64 s[30:31]2121 %vec0 = call <2 x i16> asm "; def $0", "=v"()2122 %vec1 = call <2 x i16> asm "; def $0", "=v"()2123 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 3>2124 store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 82125 ret void2126}2127 2128define void @s_shuffle_v3i16_v2i16__u_u_u() {2129; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_u_u:2130; GFX9: ; %bb.0:2131; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2132; GFX9-NEXT: ;;#ASMSTART2133; GFX9-NEXT: ; use s[8:9]2134; GFX9-NEXT: ;;#ASMEND2135; GFX9-NEXT: s_setpc_b64 s[30:31]2136 %vec0 = call <2 x i16> asm "; def $0", "=s"()2137 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> poison2138 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2139 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2140 ret void2141}2142 2143define void @s_shuffle_v3i16_v2i16__0_u_u() {2144; GFX900-LABEL: s_shuffle_v3i16_v2i16__0_u_u:2145; GFX900: ; %bb.0:2146; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2147; GFX900-NEXT: ;;#ASMSTART2148; GFX900-NEXT: ; def s82149; GFX900-NEXT: ;;#ASMEND2150; GFX900-NEXT: ;;#ASMSTART2151; GFX900-NEXT: ; use s[8:9]2152; GFX900-NEXT: ;;#ASMEND2153; GFX900-NEXT: s_setpc_b64 s[30:31]2154;2155; GFX90A-LABEL: s_shuffle_v3i16_v2i16__0_u_u:2156; GFX90A: ; %bb.0:2157; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2158; GFX90A-NEXT: ;;#ASMSTART2159; GFX90A-NEXT: ; def s82160; GFX90A-NEXT: ;;#ASMEND2161; GFX90A-NEXT: ;;#ASMSTART2162; GFX90A-NEXT: ; use s[8:9]2163; GFX90A-NEXT: ;;#ASMEND2164; GFX90A-NEXT: s_setpc_b64 s[30:31]2165;2166; GFX942-LABEL: s_shuffle_v3i16_v2i16__0_u_u:2167; GFX942: ; %bb.0:2168; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2169; GFX942-NEXT: ;;#ASMSTART2170; GFX942-NEXT: ; def s82171; GFX942-NEXT: ;;#ASMEND2172; GFX942-NEXT: s_nop 02173; GFX942-NEXT: ;;#ASMSTART2174; GFX942-NEXT: ; use s[8:9]2175; GFX942-NEXT: ;;#ASMEND2176; GFX942-NEXT: s_setpc_b64 s[30:31]2177 %vec0 = call <2 x i16> asm "; def $0", "=s"()2178 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 poison, i32 poison>2179 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2180 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2181 ret void2182}2183 2184define void @s_shuffle_v3i16_v2i16__1_u_u() {2185; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_u_u:2186; GFX900: ; %bb.0:2187; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2188; GFX900-NEXT: ;;#ASMSTART2189; GFX900-NEXT: ; def s42190; GFX900-NEXT: ;;#ASMEND2191; GFX900-NEXT: s_lshr_b32 s8, s4, 162192; GFX900-NEXT: ;;#ASMSTART2193; GFX900-NEXT: ; use s[8:9]2194; GFX900-NEXT: ;;#ASMEND2195; GFX900-NEXT: s_setpc_b64 s[30:31]2196;2197; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_u_u:2198; GFX90A: ; %bb.0:2199; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2200; GFX90A-NEXT: ;;#ASMSTART2201; GFX90A-NEXT: ; def s42202; GFX90A-NEXT: ;;#ASMEND2203; GFX90A-NEXT: s_lshr_b32 s8, s4, 162204; GFX90A-NEXT: ;;#ASMSTART2205; GFX90A-NEXT: ; use s[8:9]2206; GFX90A-NEXT: ;;#ASMEND2207; GFX90A-NEXT: s_setpc_b64 s[30:31]2208;2209; GFX942-LABEL: s_shuffle_v3i16_v2i16__1_u_u:2210; GFX942: ; %bb.0:2211; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX942-NEXT: ;;#ASMSTART2213; GFX942-NEXT: ; def s02214; GFX942-NEXT: ;;#ASMEND2215; GFX942-NEXT: s_lshr_b32 s8, s0, 162216; GFX942-NEXT: ;;#ASMSTART2217; GFX942-NEXT: ; use s[8:9]2218; GFX942-NEXT: ;;#ASMEND2219; GFX942-NEXT: s_setpc_b64 s[30:31]2220 %vec0 = call <2 x i16> asm "; def $0", "=s"()2221 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 poison, i32 poison>2222 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2223 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2224 ret void2225}2226 2227define void @s_shuffle_v3i16_v2i16__2_u_u() {2228; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_u_u:2229; GFX9: ; %bb.0:2230; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2231; GFX9-NEXT: ;;#ASMSTART2232; GFX9-NEXT: ; use s[8:9]2233; GFX9-NEXT: ;;#ASMEND2234; GFX9-NEXT: s_setpc_b64 s[30:31]2235 %vec0 = call <2 x i16> asm "; def $0", "=s"()2236 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 poison, i32 poison>2237 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2238 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2239 ret void2240}2241 2242define void @s_shuffle_v3i16_v2i16__3_u_u() {2243; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_u:2244; GFX900: ; %bb.0:2245; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2246; GFX900-NEXT: ;;#ASMSTART2247; GFX900-NEXT: ; def s42248; GFX900-NEXT: ;;#ASMEND2249; GFX900-NEXT: s_lshr_b32 s8, s4, 162250; GFX900-NEXT: ;;#ASMSTART2251; GFX900-NEXT: ; use s[8:9]2252; GFX900-NEXT: ;;#ASMEND2253; GFX900-NEXT: s_setpc_b64 s[30:31]2254;2255; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_u:2256; GFX90A: ; %bb.0:2257; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2258; GFX90A-NEXT: ;;#ASMSTART2259; GFX90A-NEXT: ; def s42260; GFX90A-NEXT: ;;#ASMEND2261; GFX90A-NEXT: s_lshr_b32 s8, s4, 162262; GFX90A-NEXT: ;;#ASMSTART2263; GFX90A-NEXT: ; use s[8:9]2264; GFX90A-NEXT: ;;#ASMEND2265; GFX90A-NEXT: s_setpc_b64 s[30:31]2266;2267; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_u_u:2268; GFX942: ; %bb.0:2269; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2270; GFX942-NEXT: ;;#ASMSTART2271; GFX942-NEXT: ; def s02272; GFX942-NEXT: ;;#ASMEND2273; GFX942-NEXT: s_lshr_b32 s8, s0, 162274; GFX942-NEXT: ;;#ASMSTART2275; GFX942-NEXT: ; use s[8:9]2276; GFX942-NEXT: ;;#ASMEND2277; GFX942-NEXT: s_setpc_b64 s[30:31]2278 %vec0 = call <2 x i16> asm "; def $0", "=s"()2279 %vec1 = call <2 x i16> asm "; def $0", "=s"()2280 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>2281 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2282 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2283 ret void2284}2285 2286define void @s_shuffle_v3i16_v2i16__3_0_u() {2287; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_u:2288; GFX900: ; %bb.0:2289; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2290; GFX900-NEXT: ;;#ASMSTART2291; GFX900-NEXT: ; def s52292; GFX900-NEXT: ;;#ASMEND2293; GFX900-NEXT: s_lshr_b32 s5, s5, 162294; GFX900-NEXT: ;;#ASMSTART2295; GFX900-NEXT: ; def s42296; GFX900-NEXT: ;;#ASMEND2297; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42298; GFX900-NEXT: ;;#ASMSTART2299; GFX900-NEXT: ; use s[8:9]2300; GFX900-NEXT: ;;#ASMEND2301; GFX900-NEXT: s_setpc_b64 s[30:31]2302;2303; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_u:2304; GFX90A: ; %bb.0:2305; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2306; GFX90A-NEXT: ;;#ASMSTART2307; GFX90A-NEXT: ; def s52308; GFX90A-NEXT: ;;#ASMEND2309; GFX90A-NEXT: s_lshr_b32 s5, s5, 162310; GFX90A-NEXT: ;;#ASMSTART2311; GFX90A-NEXT: ; def s42312; GFX90A-NEXT: ;;#ASMEND2313; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42314; GFX90A-NEXT: ;;#ASMSTART2315; GFX90A-NEXT: ; use s[8:9]2316; GFX90A-NEXT: ;;#ASMEND2317; GFX90A-NEXT: s_setpc_b64 s[30:31]2318;2319; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_0_u:2320; GFX942: ; %bb.0:2321; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2322; GFX942-NEXT: ;;#ASMSTART2323; GFX942-NEXT: ; def s12324; GFX942-NEXT: ;;#ASMEND2325; GFX942-NEXT: s_lshr_b32 s1, s1, 162326; GFX942-NEXT: ;;#ASMSTART2327; GFX942-NEXT: ; def s02328; GFX942-NEXT: ;;#ASMEND2329; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02330; GFX942-NEXT: ;;#ASMSTART2331; GFX942-NEXT: ; use s[8:9]2332; GFX942-NEXT: ;;#ASMEND2333; GFX942-NEXT: s_setpc_b64 s[30:31]2334 %vec0 = call <2 x i16> asm "; def $0", "=s"()2335 %vec1 = call <2 x i16> asm "; def $0", "=s"()2336 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>2337 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2338 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2339 ret void2340}2341 2342define void @s_shuffle_v3i16_v2i16__3_1_u() {2343; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_u:2344; GFX900: ; %bb.0:2345; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2346; GFX900-NEXT: ;;#ASMSTART2347; GFX900-NEXT: ; def s42348; GFX900-NEXT: ;;#ASMEND2349; GFX900-NEXT: ;;#ASMSTART2350; GFX900-NEXT: ; def s52351; GFX900-NEXT: ;;#ASMEND2352; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s42353; GFX900-NEXT: ;;#ASMSTART2354; GFX900-NEXT: ; use s[8:9]2355; GFX900-NEXT: ;;#ASMEND2356; GFX900-NEXT: s_setpc_b64 s[30:31]2357;2358; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_u:2359; GFX90A: ; %bb.0:2360; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2361; GFX90A-NEXT: ;;#ASMSTART2362; GFX90A-NEXT: ; def s42363; GFX90A-NEXT: ;;#ASMEND2364; GFX90A-NEXT: ;;#ASMSTART2365; GFX90A-NEXT: ; def s52366; GFX90A-NEXT: ;;#ASMEND2367; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s42368; GFX90A-NEXT: ;;#ASMSTART2369; GFX90A-NEXT: ; use s[8:9]2370; GFX90A-NEXT: ;;#ASMEND2371; GFX90A-NEXT: s_setpc_b64 s[30:31]2372;2373; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_1_u:2374; GFX942: ; %bb.0:2375; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2376; GFX942-NEXT: ;;#ASMSTART2377; GFX942-NEXT: ; def s02378; GFX942-NEXT: ;;#ASMEND2379; GFX942-NEXT: ;;#ASMSTART2380; GFX942-NEXT: ; def s12381; GFX942-NEXT: ;;#ASMEND2382; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s02383; GFX942-NEXT: ;;#ASMSTART2384; GFX942-NEXT: ; use s[8:9]2385; GFX942-NEXT: ;;#ASMEND2386; GFX942-NEXT: s_setpc_b64 s[30:31]2387 %vec0 = call <2 x i16> asm "; def $0", "=s"()2388 %vec1 = call <2 x i16> asm "; def $0", "=s"()2389 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>2390 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2391 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2392 ret void2393}2394 2395define void @s_shuffle_v3i16_v2i16__3_2_u() {2396; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_u:2397; GFX900: ; %bb.0:2398; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2399; GFX900-NEXT: ;;#ASMSTART2400; GFX900-NEXT: ; def s42401; GFX900-NEXT: ;;#ASMEND2402; GFX900-NEXT: s_lshr_b32 s5, s4, 162403; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42404; GFX900-NEXT: ;;#ASMSTART2405; GFX900-NEXT: ; use s[8:9]2406; GFX900-NEXT: ;;#ASMEND2407; GFX900-NEXT: s_setpc_b64 s[30:31]2408;2409; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_u:2410; GFX90A: ; %bb.0:2411; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2412; GFX90A-NEXT: ;;#ASMSTART2413; GFX90A-NEXT: ; def s42414; GFX90A-NEXT: ;;#ASMEND2415; GFX90A-NEXT: s_lshr_b32 s5, s4, 162416; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42417; GFX90A-NEXT: ;;#ASMSTART2418; GFX90A-NEXT: ; use s[8:9]2419; GFX90A-NEXT: ;;#ASMEND2420; GFX90A-NEXT: s_setpc_b64 s[30:31]2421;2422; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_2_u:2423; GFX942: ; %bb.0:2424; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2425; GFX942-NEXT: ;;#ASMSTART2426; GFX942-NEXT: ; def s02427; GFX942-NEXT: ;;#ASMEND2428; GFX942-NEXT: s_lshr_b32 s1, s0, 162429; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02430; GFX942-NEXT: ;;#ASMSTART2431; GFX942-NEXT: ; use s[8:9]2432; GFX942-NEXT: ;;#ASMEND2433; GFX942-NEXT: s_setpc_b64 s[30:31]2434 %vec0 = call <2 x i16> asm "; def $0", "=s"()2435 %vec1 = call <2 x i16> asm "; def $0", "=s"()2436 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>2437 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2438 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2439 ret void2440}2441 2442define void @s_shuffle_v3i16_v2i16__3_3_u() {2443; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_u:2444; GFX900: ; %bb.0:2445; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2446; GFX900-NEXT: ;;#ASMSTART2447; GFX900-NEXT: ; def s42448; GFX900-NEXT: ;;#ASMEND2449; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s42450; GFX900-NEXT: ;;#ASMSTART2451; GFX900-NEXT: ; use s[8:9]2452; GFX900-NEXT: ;;#ASMEND2453; GFX900-NEXT: s_setpc_b64 s[30:31]2454;2455; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_u:2456; GFX90A: ; %bb.0:2457; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2458; GFX90A-NEXT: ;;#ASMSTART2459; GFX90A-NEXT: ; def s42460; GFX90A-NEXT: ;;#ASMEND2461; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s42462; GFX90A-NEXT: ;;#ASMSTART2463; GFX90A-NEXT: ; use s[8:9]2464; GFX90A-NEXT: ;;#ASMEND2465; GFX90A-NEXT: s_setpc_b64 s[30:31]2466;2467; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_3_u:2468; GFX942: ; %bb.0:2469; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2470; GFX942-NEXT: ;;#ASMSTART2471; GFX942-NEXT: ; def s02472; GFX942-NEXT: ;;#ASMEND2473; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s02474; GFX942-NEXT: ;;#ASMSTART2475; GFX942-NEXT: ; use s[8:9]2476; GFX942-NEXT: ;;#ASMEND2477; GFX942-NEXT: s_setpc_b64 s[30:31]2478 %vec0 = call <2 x i16> asm "; def $0", "=s"()2479 %vec1 = call <2 x i16> asm "; def $0", "=s"()2480 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>2481 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2482 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2483 ret void2484}2485 2486define void @s_shuffle_v3i16_v2i16__3_3_0() {2487; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_0:2488; GFX900: ; %bb.0:2489; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2490; GFX900-NEXT: ;;#ASMSTART2491; GFX900-NEXT: ; def s92492; GFX900-NEXT: ;;#ASMEND2493; GFX900-NEXT: ;;#ASMSTART2494; GFX900-NEXT: ; def s42495; GFX900-NEXT: ;;#ASMEND2496; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s42497; GFX900-NEXT: ;;#ASMSTART2498; GFX900-NEXT: ; use s[8:9]2499; GFX900-NEXT: ;;#ASMEND2500; GFX900-NEXT: s_setpc_b64 s[30:31]2501;2502; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_0:2503; GFX90A: ; %bb.0:2504; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2505; GFX90A-NEXT: ;;#ASMSTART2506; GFX90A-NEXT: ; def s92507; GFX90A-NEXT: ;;#ASMEND2508; GFX90A-NEXT: ;;#ASMSTART2509; GFX90A-NEXT: ; def s42510; GFX90A-NEXT: ;;#ASMEND2511; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s42512; GFX90A-NEXT: ;;#ASMSTART2513; GFX90A-NEXT: ; use s[8:9]2514; GFX90A-NEXT: ;;#ASMEND2515; GFX90A-NEXT: s_setpc_b64 s[30:31]2516;2517; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_3_0:2518; GFX942: ; %bb.0:2519; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2520; GFX942-NEXT: ;;#ASMSTART2521; GFX942-NEXT: ; def s92522; GFX942-NEXT: ;;#ASMEND2523; GFX942-NEXT: ;;#ASMSTART2524; GFX942-NEXT: ; def s02525; GFX942-NEXT: ;;#ASMEND2526; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s02527; GFX942-NEXT: ;;#ASMSTART2528; GFX942-NEXT: ; use s[8:9]2529; GFX942-NEXT: ;;#ASMEND2530; GFX942-NEXT: s_setpc_b64 s[30:31]2531 %vec0 = call <2 x i16> asm "; def $0", "=s"()2532 %vec1 = call <2 x i16> asm "; def $0", "=s"()2533 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 0>2534 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2535 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2536 ret void2537}2538 2539define void @s_shuffle_v3i16_v2i16__3_3_1() {2540; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_1:2541; GFX900: ; %bb.0:2542; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2543; GFX900-NEXT: ;;#ASMSTART2544; GFX900-NEXT: ; def s42545; GFX900-NEXT: ;;#ASMEND2546; GFX900-NEXT: ;;#ASMSTART2547; GFX900-NEXT: ; def s52548; GFX900-NEXT: ;;#ASMEND2549; GFX900-NEXT: s_lshr_b32 s9, s4, 162550; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s52551; GFX900-NEXT: ;;#ASMSTART2552; GFX900-NEXT: ; use s[8:9]2553; GFX900-NEXT: ;;#ASMEND2554; GFX900-NEXT: s_setpc_b64 s[30:31]2555;2556; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_1:2557; GFX90A: ; %bb.0:2558; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2559; GFX90A-NEXT: ;;#ASMSTART2560; GFX90A-NEXT: ; def s42561; GFX90A-NEXT: ;;#ASMEND2562; GFX90A-NEXT: ;;#ASMSTART2563; GFX90A-NEXT: ; def s52564; GFX90A-NEXT: ;;#ASMEND2565; GFX90A-NEXT: s_lshr_b32 s9, s4, 162566; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s52567; GFX90A-NEXT: ;;#ASMSTART2568; GFX90A-NEXT: ; use s[8:9]2569; GFX90A-NEXT: ;;#ASMEND2570; GFX90A-NEXT: s_setpc_b64 s[30:31]2571;2572; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_3_1:2573; GFX942: ; %bb.0:2574; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2575; GFX942-NEXT: ;;#ASMSTART2576; GFX942-NEXT: ; def s02577; GFX942-NEXT: ;;#ASMEND2578; GFX942-NEXT: ;;#ASMSTART2579; GFX942-NEXT: ; def s12580; GFX942-NEXT: ;;#ASMEND2581; GFX942-NEXT: s_lshr_b32 s9, s0, 162582; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s12583; GFX942-NEXT: ;;#ASMSTART2584; GFX942-NEXT: ; use s[8:9]2585; GFX942-NEXT: ;;#ASMEND2586; GFX942-NEXT: s_setpc_b64 s[30:31]2587 %vec0 = call <2 x i16> asm "; def $0", "=s"()2588 %vec1 = call <2 x i16> asm "; def $0", "=s"()2589 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 1>2590 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2591 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2592 ret void2593}2594 2595define void @s_shuffle_v3i16_v2i16__3_3_2() {2596; GFX9-LABEL: s_shuffle_v3i16_v2i16__3_3_2:2597; GFX9: ; %bb.0:2598; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2599; GFX9-NEXT: ;;#ASMSTART2600; GFX9-NEXT: ; def s92601; GFX9-NEXT: ;;#ASMEND2602; GFX9-NEXT: s_pack_hh_b32_b16 s8, s9, s92603; GFX9-NEXT: ;;#ASMSTART2604; GFX9-NEXT: ; use s[8:9]2605; GFX9-NEXT: ;;#ASMEND2606; GFX9-NEXT: s_setpc_b64 s[30:31]2607 %vec0 = call <2 x i16> asm "; def $0", "=s"()2608 %vec1 = call <2 x i16> asm "; def $0", "=s"()2609 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 2>2610 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2611 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2612 ret void2613}2614 2615define void @s_shuffle_v3i16_v2i16__3_3_3() {2616; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_3:2617; GFX900: ; %bb.0:2618; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2619; GFX900-NEXT: ;;#ASMSTART2620; GFX900-NEXT: ; def s42621; GFX900-NEXT: ;;#ASMEND2622; GFX900-NEXT: s_lshr_b32 s9, s4, 162623; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s42624; GFX900-NEXT: ;;#ASMSTART2625; GFX900-NEXT: ; use s[8:9]2626; GFX900-NEXT: ;;#ASMEND2627; GFX900-NEXT: s_setpc_b64 s[30:31]2628;2629; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_3:2630; GFX90A: ; %bb.0:2631; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2632; GFX90A-NEXT: ;;#ASMSTART2633; GFX90A-NEXT: ; def s42634; GFX90A-NEXT: ;;#ASMEND2635; GFX90A-NEXT: s_lshr_b32 s9, s4, 162636; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s42637; GFX90A-NEXT: ;;#ASMSTART2638; GFX90A-NEXT: ; use s[8:9]2639; GFX90A-NEXT: ;;#ASMEND2640; GFX90A-NEXT: s_setpc_b64 s[30:31]2641;2642; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_3_3:2643; GFX942: ; %bb.0:2644; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2645; GFX942-NEXT: ;;#ASMSTART2646; GFX942-NEXT: ; def s02647; GFX942-NEXT: ;;#ASMEND2648; GFX942-NEXT: s_lshr_b32 s9, s0, 162649; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s02650; GFX942-NEXT: ;;#ASMSTART2651; GFX942-NEXT: ; use s[8:9]2652; GFX942-NEXT: ;;#ASMEND2653; GFX942-NEXT: s_setpc_b64 s[30:31]2654 %vec0 = call <2 x i16> asm "; def $0", "=s"()2655 %vec1 = call <2 x i16> asm "; def $0", "=s"()2656 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 3>2657 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2658 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2659 ret void2660}2661 2662define void @s_shuffle_v3i16_v2i16__u_0_0() {2663; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_0_0:2664; GFX9: ; %bb.0:2665; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2666; GFX9-NEXT: ;;#ASMSTART2667; GFX9-NEXT: ; def s92668; GFX9-NEXT: ;;#ASMEND2669; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s92670; GFX9-NEXT: ;;#ASMSTART2671; GFX9-NEXT: ; use s[8:9]2672; GFX9-NEXT: ;;#ASMEND2673; GFX9-NEXT: s_setpc_b64 s[30:31]2674 %vec0 = call <2 x i16> asm "; def $0", "=s"()2675 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 0, i32 0>2676 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2677 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2678 ret void2679}2680 2681define void @s_shuffle_v3i16_v2i16__0_0_0() {2682; GFX9-LABEL: s_shuffle_v3i16_v2i16__0_0_0:2683; GFX9: ; %bb.0:2684; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2685; GFX9-NEXT: ;;#ASMSTART2686; GFX9-NEXT: ; def s92687; GFX9-NEXT: ;;#ASMEND2688; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s92689; GFX9-NEXT: ;;#ASMSTART2690; GFX9-NEXT: ; use s[8:9]2691; GFX9-NEXT: ;;#ASMEND2692; GFX9-NEXT: s_setpc_b64 s[30:31]2693 %vec0 = call <2 x i16> asm "; def $0", "=s"()2694 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> zeroinitializer2695 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2696 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2697 ret void2698}2699 2700define void @s_shuffle_v3i16_v2i16__1_0_0() {2701; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_0_0:2702; GFX900: ; %bb.0:2703; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2704; GFX900-NEXT: ;;#ASMSTART2705; GFX900-NEXT: ; def s92706; GFX900-NEXT: ;;#ASMEND2707; GFX900-NEXT: s_lshr_b32 s4, s9, 162708; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s92709; GFX900-NEXT: ;;#ASMSTART2710; GFX900-NEXT: ; use s[8:9]2711; GFX900-NEXT: ;;#ASMEND2712; GFX900-NEXT: s_setpc_b64 s[30:31]2713;2714; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_0_0:2715; GFX90A: ; %bb.0:2716; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2717; GFX90A-NEXT: ;;#ASMSTART2718; GFX90A-NEXT: ; def s92719; GFX90A-NEXT: ;;#ASMEND2720; GFX90A-NEXT: s_lshr_b32 s4, s9, 162721; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s92722; GFX90A-NEXT: ;;#ASMSTART2723; GFX90A-NEXT: ; use s[8:9]2724; GFX90A-NEXT: ;;#ASMEND2725; GFX90A-NEXT: s_setpc_b64 s[30:31]2726;2727; GFX942-LABEL: s_shuffle_v3i16_v2i16__1_0_0:2728; GFX942: ; %bb.0:2729; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2730; GFX942-NEXT: ;;#ASMSTART2731; GFX942-NEXT: ; def s92732; GFX942-NEXT: ;;#ASMEND2733; GFX942-NEXT: s_lshr_b32 s0, s9, 162734; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s92735; GFX942-NEXT: ;;#ASMSTART2736; GFX942-NEXT: ; use s[8:9]2737; GFX942-NEXT: ;;#ASMEND2738; GFX942-NEXT: s_setpc_b64 s[30:31]2739 %vec0 = call <2 x i16> asm "; def $0", "=s"()2740 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 0, i32 0>2741 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2742 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2743 ret void2744}2745 2746define void @s_shuffle_v3i16_v2i16__2_0_0() {2747; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_0_0:2748; GFX9: ; %bb.0:2749; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2750; GFX9-NEXT: ;;#ASMSTART2751; GFX9-NEXT: ; def s92752; GFX9-NEXT: ;;#ASMEND2753; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s92754; GFX9-NEXT: ;;#ASMSTART2755; GFX9-NEXT: ; use s[8:9]2756; GFX9-NEXT: ;;#ASMEND2757; GFX9-NEXT: s_setpc_b64 s[30:31]2758 %vec0 = call <2 x i16> asm "; def $0", "=s"()2759 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 0, i32 0>2760 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2761 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2762 ret void2763}2764 2765define void @s_shuffle_v3i16_v2i16__3_0_0() {2766; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_0:2767; GFX900: ; %bb.0:2768; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX900-NEXT: ;;#ASMSTART2770; GFX900-NEXT: ; def s42771; GFX900-NEXT: ;;#ASMEND2772; GFX900-NEXT: s_lshr_b32 s4, s4, 162773; GFX900-NEXT: ;;#ASMSTART2774; GFX900-NEXT: ; def s92775; GFX900-NEXT: ;;#ASMEND2776; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s92777; GFX900-NEXT: ;;#ASMSTART2778; GFX900-NEXT: ; use s[8:9]2779; GFX900-NEXT: ;;#ASMEND2780; GFX900-NEXT: s_setpc_b64 s[30:31]2781;2782; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_0:2783; GFX90A: ; %bb.0:2784; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2785; GFX90A-NEXT: ;;#ASMSTART2786; GFX90A-NEXT: ; def s42787; GFX90A-NEXT: ;;#ASMEND2788; GFX90A-NEXT: s_lshr_b32 s4, s4, 162789; GFX90A-NEXT: ;;#ASMSTART2790; GFX90A-NEXT: ; def s92791; GFX90A-NEXT: ;;#ASMEND2792; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s92793; GFX90A-NEXT: ;;#ASMSTART2794; GFX90A-NEXT: ; use s[8:9]2795; GFX90A-NEXT: ;;#ASMEND2796; GFX90A-NEXT: s_setpc_b64 s[30:31]2797;2798; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_0_0:2799; GFX942: ; %bb.0:2800; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2801; GFX942-NEXT: ;;#ASMSTART2802; GFX942-NEXT: ; def s02803; GFX942-NEXT: ;;#ASMEND2804; GFX942-NEXT: s_lshr_b32 s0, s0, 162805; GFX942-NEXT: ;;#ASMSTART2806; GFX942-NEXT: ; def s92807; GFX942-NEXT: ;;#ASMEND2808; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s92809; GFX942-NEXT: ;;#ASMSTART2810; GFX942-NEXT: ; use s[8:9]2811; GFX942-NEXT: ;;#ASMEND2812; GFX942-NEXT: s_setpc_b64 s[30:31]2813 %vec0 = call <2 x i16> asm "; def $0", "=s"()2814 %vec1 = call <2 x i16> asm "; def $0", "=s"()2815 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 0>2816 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2817 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2818 ret void2819}2820 2821define void @s_shuffle_v3i16_v2i16__3_u_0() {2822; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_0:2823; GFX900: ; %bb.0:2824; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2825; GFX900-NEXT: ;;#ASMSTART2826; GFX900-NEXT: ; def s92827; GFX900-NEXT: ;;#ASMEND2828; GFX900-NEXT: ;;#ASMSTART2829; GFX900-NEXT: ; def s42830; GFX900-NEXT: ;;#ASMEND2831; GFX900-NEXT: s_lshr_b32 s8, s4, 162832; GFX900-NEXT: ;;#ASMSTART2833; GFX900-NEXT: ; use s[8:9]2834; GFX900-NEXT: ;;#ASMEND2835; GFX900-NEXT: s_setpc_b64 s[30:31]2836;2837; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_0:2838; GFX90A: ; %bb.0:2839; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2840; GFX90A-NEXT: ;;#ASMSTART2841; GFX90A-NEXT: ; def s92842; GFX90A-NEXT: ;;#ASMEND2843; GFX90A-NEXT: ;;#ASMSTART2844; GFX90A-NEXT: ; def s42845; GFX90A-NEXT: ;;#ASMEND2846; GFX90A-NEXT: s_lshr_b32 s8, s4, 162847; GFX90A-NEXT: ;;#ASMSTART2848; GFX90A-NEXT: ; use s[8:9]2849; GFX90A-NEXT: ;;#ASMEND2850; GFX90A-NEXT: s_setpc_b64 s[30:31]2851;2852; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_u_0:2853; GFX942: ; %bb.0:2854; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2855; GFX942-NEXT: ;;#ASMSTART2856; GFX942-NEXT: ; def s92857; GFX942-NEXT: ;;#ASMEND2858; GFX942-NEXT: ;;#ASMSTART2859; GFX942-NEXT: ; def s02860; GFX942-NEXT: ;;#ASMEND2861; GFX942-NEXT: s_lshr_b32 s8, s0, 162862; GFX942-NEXT: ;;#ASMSTART2863; GFX942-NEXT: ; use s[8:9]2864; GFX942-NEXT: ;;#ASMEND2865; GFX942-NEXT: s_setpc_b64 s[30:31]2866 %vec0 = call <2 x i16> asm "; def $0", "=s"()2867 %vec1 = call <2 x i16> asm "; def $0", "=s"()2868 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>2869 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2870 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2871 ret void2872}2873 2874define void @s_shuffle_v3i16_v2i16__3_1_0() {2875; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_0:2876; GFX900: ; %bb.0:2877; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2878; GFX900-NEXT: ;;#ASMSTART2879; GFX900-NEXT: ; def s92880; GFX900-NEXT: ;;#ASMEND2881; GFX900-NEXT: ;;#ASMSTART2882; GFX900-NEXT: ; def s42883; GFX900-NEXT: ;;#ASMEND2884; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s92885; GFX900-NEXT: ;;#ASMSTART2886; GFX900-NEXT: ; use s[8:9]2887; GFX900-NEXT: ;;#ASMEND2888; GFX900-NEXT: s_setpc_b64 s[30:31]2889;2890; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_0:2891; GFX90A: ; %bb.0:2892; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2893; GFX90A-NEXT: ;;#ASMSTART2894; GFX90A-NEXT: ; def s92895; GFX90A-NEXT: ;;#ASMEND2896; GFX90A-NEXT: ;;#ASMSTART2897; GFX90A-NEXT: ; def s42898; GFX90A-NEXT: ;;#ASMEND2899; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s92900; GFX90A-NEXT: ;;#ASMSTART2901; GFX90A-NEXT: ; use s[8:9]2902; GFX90A-NEXT: ;;#ASMEND2903; GFX90A-NEXT: s_setpc_b64 s[30:31]2904;2905; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_1_0:2906; GFX942: ; %bb.0:2907; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2908; GFX942-NEXT: ;;#ASMSTART2909; GFX942-NEXT: ; def s92910; GFX942-NEXT: ;;#ASMEND2911; GFX942-NEXT: ;;#ASMSTART2912; GFX942-NEXT: ; def s02913; GFX942-NEXT: ;;#ASMEND2914; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s92915; GFX942-NEXT: ;;#ASMSTART2916; GFX942-NEXT: ; use s[8:9]2917; GFX942-NEXT: ;;#ASMEND2918; GFX942-NEXT: s_setpc_b64 s[30:31]2919 %vec0 = call <2 x i16> asm "; def $0", "=s"()2920 %vec1 = call <2 x i16> asm "; def $0", "=s"()2921 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 0>2922 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2923 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2924 ret void2925}2926 2927define void @s_shuffle_v3i16_v2i16__3_2_0() {2928; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_0:2929; GFX900: ; %bb.0:2930; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2931; GFX900-NEXT: ;;#ASMSTART2932; GFX900-NEXT: ; def s42933; GFX900-NEXT: ;;#ASMEND2934; GFX900-NEXT: s_lshr_b32 s5, s4, 162935; GFX900-NEXT: ;;#ASMSTART2936; GFX900-NEXT: ; def s92937; GFX900-NEXT: ;;#ASMEND2938; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42939; GFX900-NEXT: ;;#ASMSTART2940; GFX900-NEXT: ; use s[8:9]2941; GFX900-NEXT: ;;#ASMEND2942; GFX900-NEXT: s_setpc_b64 s[30:31]2943;2944; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_0:2945; GFX90A: ; %bb.0:2946; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2947; GFX90A-NEXT: ;;#ASMSTART2948; GFX90A-NEXT: ; def s42949; GFX90A-NEXT: ;;#ASMEND2950; GFX90A-NEXT: s_lshr_b32 s5, s4, 162951; GFX90A-NEXT: ;;#ASMSTART2952; GFX90A-NEXT: ; def s92953; GFX90A-NEXT: ;;#ASMEND2954; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42955; GFX90A-NEXT: ;;#ASMSTART2956; GFX90A-NEXT: ; use s[8:9]2957; GFX90A-NEXT: ;;#ASMEND2958; GFX90A-NEXT: s_setpc_b64 s[30:31]2959;2960; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_2_0:2961; GFX942: ; %bb.0:2962; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2963; GFX942-NEXT: ;;#ASMSTART2964; GFX942-NEXT: ; def s02965; GFX942-NEXT: ;;#ASMEND2966; GFX942-NEXT: s_lshr_b32 s1, s0, 162967; GFX942-NEXT: ;;#ASMSTART2968; GFX942-NEXT: ; def s92969; GFX942-NEXT: ;;#ASMEND2970; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02971; GFX942-NEXT: ;;#ASMSTART2972; GFX942-NEXT: ; use s[8:9]2973; GFX942-NEXT: ;;#ASMEND2974; GFX942-NEXT: s_setpc_b64 s[30:31]2975 %vec0 = call <2 x i16> asm "; def $0", "=s"()2976 %vec1 = call <2 x i16> asm "; def $0", "=s"()2977 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 0>2978 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2979 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2980 ret void2981}2982 2983define void @s_shuffle_v3i16_v2i16__u_1_1() {2984; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_1_1:2985; GFX9: ; %bb.0:2986; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2987; GFX9-NEXT: ;;#ASMSTART2988; GFX9-NEXT: ; def s82989; GFX9-NEXT: ;;#ASMEND2990; GFX9-NEXT: s_lshr_b32 s9, s8, 162991; GFX9-NEXT: ;;#ASMSTART2992; GFX9-NEXT: ; use s[8:9]2993; GFX9-NEXT: ;;#ASMEND2994; GFX9-NEXT: s_setpc_b64 s[30:31]2995 %vec0 = call <2 x i16> asm "; def $0", "=s"()2996 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 1, i32 1>2997 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2998 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)2999 ret void3000}3001 3002define void @s_shuffle_v3i16_v2i16__0_1_1() {3003; GFX9-LABEL: s_shuffle_v3i16_v2i16__0_1_1:3004; GFX9: ; %bb.0:3005; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3006; GFX9-NEXT: ;;#ASMSTART3007; GFX9-NEXT: ; def s83008; GFX9-NEXT: ;;#ASMEND3009; GFX9-NEXT: s_lshr_b32 s9, s8, 163010; GFX9-NEXT: ;;#ASMSTART3011; GFX9-NEXT: ; use s[8:9]3012; GFX9-NEXT: ;;#ASMEND3013; GFX9-NEXT: s_setpc_b64 s[30:31]3014 %vec0 = call <2 x i16> asm "; def $0", "=s"()3015 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 1, i32 1>3016 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3017 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3018 ret void3019}3020 3021define void @s_shuffle_v3i16_v2i16__1_1_1() {3022; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_1_1:3023; GFX900: ; %bb.0:3024; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3025; GFX900-NEXT: ;;#ASMSTART3026; GFX900-NEXT: ; def s43027; GFX900-NEXT: ;;#ASMEND3028; GFX900-NEXT: s_lshr_b32 s9, s4, 163029; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s43030; GFX900-NEXT: ;;#ASMSTART3031; GFX900-NEXT: ; use s[8:9]3032; GFX900-NEXT: ;;#ASMEND3033; GFX900-NEXT: s_setpc_b64 s[30:31]3034;3035; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_1_1:3036; GFX90A: ; %bb.0:3037; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3038; GFX90A-NEXT: ;;#ASMSTART3039; GFX90A-NEXT: ; def s43040; GFX90A-NEXT: ;;#ASMEND3041; GFX90A-NEXT: s_lshr_b32 s9, s4, 163042; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s43043; GFX90A-NEXT: ;;#ASMSTART3044; GFX90A-NEXT: ; use s[8:9]3045; GFX90A-NEXT: ;;#ASMEND3046; GFX90A-NEXT: s_setpc_b64 s[30:31]3047;3048; GFX942-LABEL: s_shuffle_v3i16_v2i16__1_1_1:3049; GFX942: ; %bb.0:3050; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3051; GFX942-NEXT: ;;#ASMSTART3052; GFX942-NEXT: ; def s03053; GFX942-NEXT: ;;#ASMEND3054; GFX942-NEXT: s_lshr_b32 s9, s0, 163055; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s03056; GFX942-NEXT: ;;#ASMSTART3057; GFX942-NEXT: ; use s[8:9]3058; GFX942-NEXT: ;;#ASMEND3059; GFX942-NEXT: s_setpc_b64 s[30:31]3060 %vec0 = call <2 x i16> asm "; def $0", "=s"()3061 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 1, i32 1>3062 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3063 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3064 ret void3065}3066 3067define void @s_shuffle_v3i16_v2i16__2_1_1() {3068; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_1_1:3069; GFX9: ; %bb.0:3070; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3071; GFX9-NEXT: ;;#ASMSTART3072; GFX9-NEXT: ; def s83073; GFX9-NEXT: ;;#ASMEND3074; GFX9-NEXT: s_lshr_b32 s9, s8, 163075; GFX9-NEXT: ;;#ASMSTART3076; GFX9-NEXT: ; use s[8:9]3077; GFX9-NEXT: ;;#ASMEND3078; GFX9-NEXT: s_setpc_b64 s[30:31]3079 %vec0 = call <2 x i16> asm "; def $0", "=s"()3080 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 1, i32 1>3081 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3082 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3083 ret void3084}3085 3086define void @s_shuffle_v3i16_v2i16__3_1_1() {3087; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_1:3088; GFX900: ; %bb.0:3089; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3090; GFX900-NEXT: ;;#ASMSTART3091; GFX900-NEXT: ; def s43092; GFX900-NEXT: ;;#ASMEND3093; GFX900-NEXT: ;;#ASMSTART3094; GFX900-NEXT: ; def s53095; GFX900-NEXT: ;;#ASMEND3096; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s43097; GFX900-NEXT: s_lshr_b32 s9, s4, 163098; GFX900-NEXT: ;;#ASMSTART3099; GFX900-NEXT: ; use s[8:9]3100; GFX900-NEXT: ;;#ASMEND3101; GFX900-NEXT: s_setpc_b64 s[30:31]3102;3103; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_1:3104; GFX90A: ; %bb.0:3105; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3106; GFX90A-NEXT: ;;#ASMSTART3107; GFX90A-NEXT: ; def s43108; GFX90A-NEXT: ;;#ASMEND3109; GFX90A-NEXT: ;;#ASMSTART3110; GFX90A-NEXT: ; def s53111; GFX90A-NEXT: ;;#ASMEND3112; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s43113; GFX90A-NEXT: s_lshr_b32 s9, s4, 163114; GFX90A-NEXT: ;;#ASMSTART3115; GFX90A-NEXT: ; use s[8:9]3116; GFX90A-NEXT: ;;#ASMEND3117; GFX90A-NEXT: s_setpc_b64 s[30:31]3118;3119; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_1_1:3120; GFX942: ; %bb.0:3121; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; GFX942-NEXT: ;;#ASMSTART3123; GFX942-NEXT: ; def s03124; GFX942-NEXT: ;;#ASMEND3125; GFX942-NEXT: ;;#ASMSTART3126; GFX942-NEXT: ; def s13127; GFX942-NEXT: ;;#ASMEND3128; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s03129; GFX942-NEXT: s_lshr_b32 s9, s0, 163130; GFX942-NEXT: ;;#ASMSTART3131; GFX942-NEXT: ; use s[8:9]3132; GFX942-NEXT: ;;#ASMEND3133; GFX942-NEXT: s_setpc_b64 s[30:31]3134 %vec0 = call <2 x i16> asm "; def $0", "=s"()3135 %vec1 = call <2 x i16> asm "; def $0", "=s"()3136 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 1>3137 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3138 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3139 ret void3140}3141 3142define void @s_shuffle_v3i16_v2i16__3_u_1() {3143; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_1:3144; GFX900: ; %bb.0:3145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3146; GFX900-NEXT: ;;#ASMSTART3147; GFX900-NEXT: ; def s43148; GFX900-NEXT: ;;#ASMEND3149; GFX900-NEXT: ;;#ASMSTART3150; GFX900-NEXT: ; def s53151; GFX900-NEXT: ;;#ASMEND3152; GFX900-NEXT: s_lshr_b32 s9, s4, 163153; GFX900-NEXT: s_lshr_b32 s8, s5, 163154; GFX900-NEXT: ;;#ASMSTART3155; GFX900-NEXT: ; use s[8:9]3156; GFX900-NEXT: ;;#ASMEND3157; GFX900-NEXT: s_setpc_b64 s[30:31]3158;3159; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_1:3160; GFX90A: ; %bb.0:3161; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3162; GFX90A-NEXT: ;;#ASMSTART3163; GFX90A-NEXT: ; def s43164; GFX90A-NEXT: ;;#ASMEND3165; GFX90A-NEXT: ;;#ASMSTART3166; GFX90A-NEXT: ; def s53167; GFX90A-NEXT: ;;#ASMEND3168; GFX90A-NEXT: s_lshr_b32 s9, s4, 163169; GFX90A-NEXT: s_lshr_b32 s8, s5, 163170; GFX90A-NEXT: ;;#ASMSTART3171; GFX90A-NEXT: ; use s[8:9]3172; GFX90A-NEXT: ;;#ASMEND3173; GFX90A-NEXT: s_setpc_b64 s[30:31]3174;3175; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_u_1:3176; GFX942: ; %bb.0:3177; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3178; GFX942-NEXT: ;;#ASMSTART3179; GFX942-NEXT: ; def s03180; GFX942-NEXT: ;;#ASMEND3181; GFX942-NEXT: ;;#ASMSTART3182; GFX942-NEXT: ; def s13183; GFX942-NEXT: ;;#ASMEND3184; GFX942-NEXT: s_lshr_b32 s9, s0, 163185; GFX942-NEXT: s_lshr_b32 s8, s1, 163186; GFX942-NEXT: ;;#ASMSTART3187; GFX942-NEXT: ; use s[8:9]3188; GFX942-NEXT: ;;#ASMEND3189; GFX942-NEXT: s_setpc_b64 s[30:31]3190 %vec0 = call <2 x i16> asm "; def $0", "=s"()3191 %vec1 = call <2 x i16> asm "; def $0", "=s"()3192 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>3193 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3194 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3195 ret void3196}3197 3198define void @s_shuffle_v3i16_v2i16__3_0_1() {3199; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_1:3200; GFX900: ; %bb.0:3201; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3202; GFX900-NEXT: ;;#ASMSTART3203; GFX900-NEXT: ; def s53204; GFX900-NEXT: ;;#ASMEND3205; GFX900-NEXT: s_lshr_b32 s5, s5, 163206; GFX900-NEXT: ;;#ASMSTART3207; GFX900-NEXT: ; def s43208; GFX900-NEXT: ;;#ASMEND3209; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43210; GFX900-NEXT: s_lshr_b32 s9, s4, 163211; GFX900-NEXT: ;;#ASMSTART3212; GFX900-NEXT: ; use s[8:9]3213; GFX900-NEXT: ;;#ASMEND3214; GFX900-NEXT: s_setpc_b64 s[30:31]3215;3216; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_1:3217; GFX90A: ; %bb.0:3218; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3219; GFX90A-NEXT: ;;#ASMSTART3220; GFX90A-NEXT: ; def s53221; GFX90A-NEXT: ;;#ASMEND3222; GFX90A-NEXT: s_lshr_b32 s5, s5, 163223; GFX90A-NEXT: ;;#ASMSTART3224; GFX90A-NEXT: ; def s43225; GFX90A-NEXT: ;;#ASMEND3226; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43227; GFX90A-NEXT: s_lshr_b32 s9, s4, 163228; GFX90A-NEXT: ;;#ASMSTART3229; GFX90A-NEXT: ; use s[8:9]3230; GFX90A-NEXT: ;;#ASMEND3231; GFX90A-NEXT: s_setpc_b64 s[30:31]3232;3233; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_0_1:3234; GFX942: ; %bb.0:3235; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3236; GFX942-NEXT: ;;#ASMSTART3237; GFX942-NEXT: ; def s13238; GFX942-NEXT: ;;#ASMEND3239; GFX942-NEXT: s_lshr_b32 s1, s1, 163240; GFX942-NEXT: ;;#ASMSTART3241; GFX942-NEXT: ; def s03242; GFX942-NEXT: ;;#ASMEND3243; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03244; GFX942-NEXT: s_lshr_b32 s9, s0, 163245; GFX942-NEXT: ;;#ASMSTART3246; GFX942-NEXT: ; use s[8:9]3247; GFX942-NEXT: ;;#ASMEND3248; GFX942-NEXT: s_setpc_b64 s[30:31]3249 %vec0 = call <2 x i16> asm "; def $0", "=s"()3250 %vec1 = call <2 x i16> asm "; def $0", "=s"()3251 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 1>3252 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3253 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3254 ret void3255}3256 3257define void @s_shuffle_v3i16_v2i16__3_2_1() {3258; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_1:3259; GFX900: ; %bb.0:3260; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3261; GFX900-NEXT: ;;#ASMSTART3262; GFX900-NEXT: ; def s53263; GFX900-NEXT: ;;#ASMEND3264; GFX900-NEXT: s_lshr_b32 s6, s5, 163265; GFX900-NEXT: ;;#ASMSTART3266; GFX900-NEXT: ; def s43267; GFX900-NEXT: ;;#ASMEND3268; GFX900-NEXT: s_pack_ll_b32_b16 s8, s6, s53269; GFX900-NEXT: s_lshr_b32 s9, s4, 163270; GFX900-NEXT: ;;#ASMSTART3271; GFX900-NEXT: ; use s[8:9]3272; GFX900-NEXT: ;;#ASMEND3273; GFX900-NEXT: s_setpc_b64 s[30:31]3274;3275; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_1:3276; GFX90A: ; %bb.0:3277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3278; GFX90A-NEXT: ;;#ASMSTART3279; GFX90A-NEXT: ; def s53280; GFX90A-NEXT: ;;#ASMEND3281; GFX90A-NEXT: s_lshr_b32 s6, s5, 163282; GFX90A-NEXT: ;;#ASMSTART3283; GFX90A-NEXT: ; def s43284; GFX90A-NEXT: ;;#ASMEND3285; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s6, s53286; GFX90A-NEXT: s_lshr_b32 s9, s4, 163287; GFX90A-NEXT: ;;#ASMSTART3288; GFX90A-NEXT: ; use s[8:9]3289; GFX90A-NEXT: ;;#ASMEND3290; GFX90A-NEXT: s_setpc_b64 s[30:31]3291;3292; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_2_1:3293; GFX942: ; %bb.0:3294; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3295; GFX942-NEXT: ;;#ASMSTART3296; GFX942-NEXT: ; def s13297; GFX942-NEXT: ;;#ASMEND3298; GFX942-NEXT: s_lshr_b32 s2, s1, 163299; GFX942-NEXT: ;;#ASMSTART3300; GFX942-NEXT: ; def s03301; GFX942-NEXT: ;;#ASMEND3302; GFX942-NEXT: s_pack_ll_b32_b16 s8, s2, s13303; GFX942-NEXT: s_lshr_b32 s9, s0, 163304; GFX942-NEXT: ;;#ASMSTART3305; GFX942-NEXT: ; use s[8:9]3306; GFX942-NEXT: ;;#ASMEND3307; GFX942-NEXT: s_setpc_b64 s[30:31]3308 %vec0 = call <2 x i16> asm "; def $0", "=s"()3309 %vec1 = call <2 x i16> asm "; def $0", "=s"()3310 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 1>3311 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3312 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3313 ret void3314}3315 3316define void @s_shuffle_v3i16_v2i16__u_2_2() {3317; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_2_2:3318; GFX9: ; %bb.0:3319; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3320; GFX9-NEXT: ;;#ASMSTART3321; GFX9-NEXT: ; use s[8:9]3322; GFX9-NEXT: ;;#ASMEND3323; GFX9-NEXT: s_setpc_b64 s[30:31]3324 %vec0 = call <2 x i16> asm "; def $0", "=s"()3325 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 2, i32 2>3326 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3327 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3328 ret void3329}3330 3331define void @s_shuffle_v3i16_v2i16__0_2_2() {3332; GFX900-LABEL: s_shuffle_v3i16_v2i16__0_2_2:3333; GFX900: ; %bb.0:3334; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3335; GFX900-NEXT: ;;#ASMSTART3336; GFX900-NEXT: ; def s83337; GFX900-NEXT: ;;#ASMEND3338; GFX900-NEXT: ;;#ASMSTART3339; GFX900-NEXT: ; use s[8:9]3340; GFX900-NEXT: ;;#ASMEND3341; GFX900-NEXT: s_setpc_b64 s[30:31]3342;3343; GFX90A-LABEL: s_shuffle_v3i16_v2i16__0_2_2:3344; GFX90A: ; %bb.0:3345; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3346; GFX90A-NEXT: ;;#ASMSTART3347; GFX90A-NEXT: ; def s83348; GFX90A-NEXT: ;;#ASMEND3349; GFX90A-NEXT: ;;#ASMSTART3350; GFX90A-NEXT: ; use s[8:9]3351; GFX90A-NEXT: ;;#ASMEND3352; GFX90A-NEXT: s_setpc_b64 s[30:31]3353;3354; GFX942-LABEL: s_shuffle_v3i16_v2i16__0_2_2:3355; GFX942: ; %bb.0:3356; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3357; GFX942-NEXT: ;;#ASMSTART3358; GFX942-NEXT: ; def s83359; GFX942-NEXT: ;;#ASMEND3360; GFX942-NEXT: s_nop 03361; GFX942-NEXT: ;;#ASMSTART3362; GFX942-NEXT: ; use s[8:9]3363; GFX942-NEXT: ;;#ASMEND3364; GFX942-NEXT: s_setpc_b64 s[30:31]3365 %vec0 = call <2 x i16> asm "; def $0", "=s"()3366 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 2, i32 2>3367 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3368 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3369 ret void3370}3371 3372define void @s_shuffle_v3i16_v2i16__1_2_2() {3373; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_2_2:3374; GFX900: ; %bb.0:3375; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3376; GFX900-NEXT: ;;#ASMSTART3377; GFX900-NEXT: ; def s43378; GFX900-NEXT: ;;#ASMEND3379; GFX900-NEXT: s_lshr_b32 s8, s4, 163380; GFX900-NEXT: ;;#ASMSTART3381; GFX900-NEXT: ; use s[8:9]3382; GFX900-NEXT: ;;#ASMEND3383; GFX900-NEXT: s_setpc_b64 s[30:31]3384;3385; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_2_2:3386; GFX90A: ; %bb.0:3387; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3388; GFX90A-NEXT: ;;#ASMSTART3389; GFX90A-NEXT: ; def s43390; GFX90A-NEXT: ;;#ASMEND3391; GFX90A-NEXT: s_lshr_b32 s8, s4, 163392; GFX90A-NEXT: ;;#ASMSTART3393; GFX90A-NEXT: ; use s[8:9]3394; GFX90A-NEXT: ;;#ASMEND3395; GFX90A-NEXT: s_setpc_b64 s[30:31]3396;3397; GFX942-LABEL: s_shuffle_v3i16_v2i16__1_2_2:3398; GFX942: ; %bb.0:3399; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3400; GFX942-NEXT: ;;#ASMSTART3401; GFX942-NEXT: ; def s03402; GFX942-NEXT: ;;#ASMEND3403; GFX942-NEXT: s_lshr_b32 s8, s0, 163404; GFX942-NEXT: ;;#ASMSTART3405; GFX942-NEXT: ; use s[8:9]3406; GFX942-NEXT: ;;#ASMEND3407; GFX942-NEXT: s_setpc_b64 s[30:31]3408 %vec0 = call <2 x i16> asm "; def $0", "=s"()3409 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 2, i32 2>3410 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3411 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3412 ret void3413}3414 3415define void @s_shuffle_v3i16_v2i16__2_2_2() {3416; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_2_2:3417; GFX9: ; %bb.0:3418; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3419; GFX9-NEXT: ;;#ASMSTART3420; GFX9-NEXT: ; use s[8:9]3421; GFX9-NEXT: ;;#ASMEND3422; GFX9-NEXT: s_setpc_b64 s[30:31]3423 %vec0 = call <2 x i16> asm "; def $0", "=s"()3424 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 2, i32 2>3425 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3426 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3427 ret void3428}3429 3430define void @s_shuffle_v3i16_v2i16__3_2_2() {3431; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_2:3432; GFX900: ; %bb.0:3433; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3434; GFX900-NEXT: ;;#ASMSTART3435; GFX900-NEXT: ; def s93436; GFX900-NEXT: ;;#ASMEND3437; GFX900-NEXT: s_lshr_b32 s4, s9, 163438; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s93439; GFX900-NEXT: ;;#ASMSTART3440; GFX900-NEXT: ; use s[8:9]3441; GFX900-NEXT: ;;#ASMEND3442; GFX900-NEXT: s_setpc_b64 s[30:31]3443;3444; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_2:3445; GFX90A: ; %bb.0:3446; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3447; GFX90A-NEXT: ;;#ASMSTART3448; GFX90A-NEXT: ; def s93449; GFX90A-NEXT: ;;#ASMEND3450; GFX90A-NEXT: s_lshr_b32 s4, s9, 163451; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s93452; GFX90A-NEXT: ;;#ASMSTART3453; GFX90A-NEXT: ; use s[8:9]3454; GFX90A-NEXT: ;;#ASMEND3455; GFX90A-NEXT: s_setpc_b64 s[30:31]3456;3457; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_2_2:3458; GFX942: ; %bb.0:3459; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3460; GFX942-NEXT: ;;#ASMSTART3461; GFX942-NEXT: ; def s93462; GFX942-NEXT: ;;#ASMEND3463; GFX942-NEXT: s_lshr_b32 s0, s9, 163464; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s93465; GFX942-NEXT: ;;#ASMSTART3466; GFX942-NEXT: ; use s[8:9]3467; GFX942-NEXT: ;;#ASMEND3468; GFX942-NEXT: s_setpc_b64 s[30:31]3469 %vec0 = call <2 x i16> asm "; def $0", "=s"()3470 %vec1 = call <2 x i16> asm "; def $0", "=s"()3471 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 2>3472 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3473 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3474 ret void3475}3476 3477define void @s_shuffle_v3i16_v2i16__3_u_2() {3478; GFX9-LABEL: s_shuffle_v3i16_v2i16__3_u_2:3479; GFX9: ; %bb.0:3480; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3481; GFX9-NEXT: ;;#ASMSTART3482; GFX9-NEXT: ; def s93483; GFX9-NEXT: ;;#ASMEND3484; GFX9-NEXT: s_lshr_b32 s8, s9, 163485; GFX9-NEXT: ;;#ASMSTART3486; GFX9-NEXT: ; use s[8:9]3487; GFX9-NEXT: ;;#ASMEND3488; GFX9-NEXT: s_setpc_b64 s[30:31]3489 %vec0 = call <2 x i16> asm "; def $0", "=s"()3490 %vec1 = call <2 x i16> asm "; def $0", "=s"()3491 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>3492 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3493 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3494 ret void3495}3496 3497define void @s_shuffle_v3i16_v2i16__3_0_2() {3498; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_2:3499; GFX900: ; %bb.0:3500; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3501; GFX900-NEXT: ;;#ASMSTART3502; GFX900-NEXT: ; def s93503; GFX900-NEXT: ;;#ASMEND3504; GFX900-NEXT: s_lshr_b32 s5, s9, 163505; GFX900-NEXT: ;;#ASMSTART3506; GFX900-NEXT: ; def s43507; GFX900-NEXT: ;;#ASMEND3508; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43509; GFX900-NEXT: ;;#ASMSTART3510; GFX900-NEXT: ; use s[8:9]3511; GFX900-NEXT: ;;#ASMEND3512; GFX900-NEXT: s_setpc_b64 s[30:31]3513;3514; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_2:3515; GFX90A: ; %bb.0:3516; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3517; GFX90A-NEXT: ;;#ASMSTART3518; GFX90A-NEXT: ; def s93519; GFX90A-NEXT: ;;#ASMEND3520; GFX90A-NEXT: s_lshr_b32 s5, s9, 163521; GFX90A-NEXT: ;;#ASMSTART3522; GFX90A-NEXT: ; def s43523; GFX90A-NEXT: ;;#ASMEND3524; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43525; GFX90A-NEXT: ;;#ASMSTART3526; GFX90A-NEXT: ; use s[8:9]3527; GFX90A-NEXT: ;;#ASMEND3528; GFX90A-NEXT: s_setpc_b64 s[30:31]3529;3530; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_0_2:3531; GFX942: ; %bb.0:3532; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3533; GFX942-NEXT: ;;#ASMSTART3534; GFX942-NEXT: ; def s93535; GFX942-NEXT: ;;#ASMEND3536; GFX942-NEXT: s_lshr_b32 s1, s9, 163537; GFX942-NEXT: ;;#ASMSTART3538; GFX942-NEXT: ; def s03539; GFX942-NEXT: ;;#ASMEND3540; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03541; GFX942-NEXT: ;;#ASMSTART3542; GFX942-NEXT: ; use s[8:9]3543; GFX942-NEXT: ;;#ASMEND3544; GFX942-NEXT: s_setpc_b64 s[30:31]3545 %vec0 = call <2 x i16> asm "; def $0", "=s"()3546 %vec1 = call <2 x i16> asm "; def $0", "=s"()3547 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 2>3548 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3549 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3550 ret void3551}3552 3553define void @s_shuffle_v3i16_v2i16__3_1_2() {3554; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_2:3555; GFX900: ; %bb.0:3556; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3557; GFX900-NEXT: ;;#ASMSTART3558; GFX900-NEXT: ; def s43559; GFX900-NEXT: ;;#ASMEND3560; GFX900-NEXT: ;;#ASMSTART3561; GFX900-NEXT: ; def s93562; GFX900-NEXT: ;;#ASMEND3563; GFX900-NEXT: s_pack_hh_b32_b16 s8, s9, s43564; GFX900-NEXT: ;;#ASMSTART3565; GFX900-NEXT: ; use s[8:9]3566; GFX900-NEXT: ;;#ASMEND3567; GFX900-NEXT: s_setpc_b64 s[30:31]3568;3569; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_2:3570; GFX90A: ; %bb.0:3571; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3572; GFX90A-NEXT: ;;#ASMSTART3573; GFX90A-NEXT: ; def s43574; GFX90A-NEXT: ;;#ASMEND3575; GFX90A-NEXT: ;;#ASMSTART3576; GFX90A-NEXT: ; def s93577; GFX90A-NEXT: ;;#ASMEND3578; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s9, s43579; GFX90A-NEXT: ;;#ASMSTART3580; GFX90A-NEXT: ; use s[8:9]3581; GFX90A-NEXT: ;;#ASMEND3582; GFX90A-NEXT: s_setpc_b64 s[30:31]3583;3584; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_1_2:3585; GFX942: ; %bb.0:3586; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3587; GFX942-NEXT: ;;#ASMSTART3588; GFX942-NEXT: ; def s03589; GFX942-NEXT: ;;#ASMEND3590; GFX942-NEXT: ;;#ASMSTART3591; GFX942-NEXT: ; def s93592; GFX942-NEXT: ;;#ASMEND3593; GFX942-NEXT: s_pack_hh_b32_b16 s8, s9, s03594; GFX942-NEXT: ;;#ASMSTART3595; GFX942-NEXT: ; use s[8:9]3596; GFX942-NEXT: ;;#ASMEND3597; GFX942-NEXT: s_setpc_b64 s[30:31]3598 %vec0 = call <2 x i16> asm "; def $0", "=s"()3599 %vec1 = call <2 x i16> asm "; def $0", "=s"()3600 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 2>3601 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3602 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3603 ret void3604}3605 3606define void @s_shuffle_v3i16_v2i16__u_3_3() {3607; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_3_3:3608; GFX9: ; %bb.0:3609; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3610; GFX9-NEXT: ;;#ASMSTART3611; GFX9-NEXT: ; def s83612; GFX9-NEXT: ;;#ASMEND3613; GFX9-NEXT: s_lshr_b32 s9, s8, 163614; GFX9-NEXT: ;;#ASMSTART3615; GFX9-NEXT: ; use s[8:9]3616; GFX9-NEXT: ;;#ASMEND3617; GFX9-NEXT: s_setpc_b64 s[30:31]3618 %vec0 = call <2 x i16> asm "; def $0", "=s"()3619 %vec1 = call <2 x i16> asm "; def $0", "=s"()3620 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>3621 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3622 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3623 ret void3624}3625 3626define void @s_shuffle_v3i16_v2i16__0_3_3() {3627; GFX900-LABEL: s_shuffle_v3i16_v2i16__0_3_3:3628; GFX900: ; %bb.0:3629; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3630; GFX900-NEXT: ;;#ASMSTART3631; GFX900-NEXT: ; def s43632; GFX900-NEXT: ;;#ASMEND3633; GFX900-NEXT: ;;#ASMSTART3634; GFX900-NEXT: ; def s53635; GFX900-NEXT: ;;#ASMEND3636; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s53637; GFX900-NEXT: s_lshr_b32 s9, s5, 163638; GFX900-NEXT: ;;#ASMSTART3639; GFX900-NEXT: ; use s[8:9]3640; GFX900-NEXT: ;;#ASMEND3641; GFX900-NEXT: s_setpc_b64 s[30:31]3642;3643; GFX90A-LABEL: s_shuffle_v3i16_v2i16__0_3_3:3644; GFX90A: ; %bb.0:3645; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3646; GFX90A-NEXT: ;;#ASMSTART3647; GFX90A-NEXT: ; def s43648; GFX90A-NEXT: ;;#ASMEND3649; GFX90A-NEXT: ;;#ASMSTART3650; GFX90A-NEXT: ; def s53651; GFX90A-NEXT: ;;#ASMEND3652; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s53653; GFX90A-NEXT: s_lshr_b32 s9, s5, 163654; GFX90A-NEXT: ;;#ASMSTART3655; GFX90A-NEXT: ; use s[8:9]3656; GFX90A-NEXT: ;;#ASMEND3657; GFX90A-NEXT: s_setpc_b64 s[30:31]3658;3659; GFX942-LABEL: s_shuffle_v3i16_v2i16__0_3_3:3660; GFX942: ; %bb.0:3661; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3662; GFX942-NEXT: ;;#ASMSTART3663; GFX942-NEXT: ; def s03664; GFX942-NEXT: ;;#ASMEND3665; GFX942-NEXT: ;;#ASMSTART3666; GFX942-NEXT: ; def s13667; GFX942-NEXT: ;;#ASMEND3668; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s13669; GFX942-NEXT: s_lshr_b32 s9, s1, 163670; GFX942-NEXT: ;;#ASMSTART3671; GFX942-NEXT: ; use s[8:9]3672; GFX942-NEXT: ;;#ASMEND3673; GFX942-NEXT: s_setpc_b64 s[30:31]3674 %vec0 = call <2 x i16> asm "; def $0", "=s"()3675 %vec1 = call <2 x i16> asm "; def $0", "=s"()3676 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 0, i32 3, i32 3>3677 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3678 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3679 ret void3680}3681 3682define void @s_shuffle_v3i16_v2i16__1_3_3() {3683; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_3_3:3684; GFX900: ; %bb.0:3685; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3686; GFX900-NEXT: ;;#ASMSTART3687; GFX900-NEXT: ; def s43688; GFX900-NEXT: ;;#ASMEND3689; GFX900-NEXT: ;;#ASMSTART3690; GFX900-NEXT: ; def s53691; GFX900-NEXT: ;;#ASMEND3692; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s53693; GFX900-NEXT: s_lshr_b32 s9, s5, 163694; GFX900-NEXT: ;;#ASMSTART3695; GFX900-NEXT: ; use s[8:9]3696; GFX900-NEXT: ;;#ASMEND3697; GFX900-NEXT: s_setpc_b64 s[30:31]3698;3699; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_3_3:3700; GFX90A: ; %bb.0:3701; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3702; GFX90A-NEXT: ;;#ASMSTART3703; GFX90A-NEXT: ; def s43704; GFX90A-NEXT: ;;#ASMEND3705; GFX90A-NEXT: ;;#ASMSTART3706; GFX90A-NEXT: ; def s53707; GFX90A-NEXT: ;;#ASMEND3708; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s53709; GFX90A-NEXT: s_lshr_b32 s9, s5, 163710; GFX90A-NEXT: ;;#ASMSTART3711; GFX90A-NEXT: ; use s[8:9]3712; GFX90A-NEXT: ;;#ASMEND3713; GFX90A-NEXT: s_setpc_b64 s[30:31]3714;3715; GFX942-LABEL: s_shuffle_v3i16_v2i16__1_3_3:3716; GFX942: ; %bb.0:3717; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3718; GFX942-NEXT: ;;#ASMSTART3719; GFX942-NEXT: ; def s03720; GFX942-NEXT: ;;#ASMEND3721; GFX942-NEXT: ;;#ASMSTART3722; GFX942-NEXT: ; def s13723; GFX942-NEXT: ;;#ASMEND3724; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s13725; GFX942-NEXT: s_lshr_b32 s9, s1, 163726; GFX942-NEXT: ;;#ASMSTART3727; GFX942-NEXT: ; use s[8:9]3728; GFX942-NEXT: ;;#ASMEND3729; GFX942-NEXT: s_setpc_b64 s[30:31]3730 %vec0 = call <2 x i16> asm "; def $0", "=s"()3731 %vec1 = call <2 x i16> asm "; def $0", "=s"()3732 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 1, i32 3, i32 3>3733 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3734 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3735 ret void3736}3737 3738define void @s_shuffle_v3i16_v2i16__2_3_3() {3739; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_3_3:3740; GFX9: ; %bb.0:3741; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3742; GFX9-NEXT: ;;#ASMSTART3743; GFX9-NEXT: ; def s83744; GFX9-NEXT: ;;#ASMEND3745; GFX9-NEXT: s_lshr_b32 s9, s8, 163746; GFX9-NEXT: ;;#ASMSTART3747; GFX9-NEXT: ; use s[8:9]3748; GFX9-NEXT: ;;#ASMEND3749; GFX9-NEXT: s_setpc_b64 s[30:31]3750 %vec0 = call <2 x i16> asm "; def $0", "=s"()3751 %vec1 = call <2 x i16> asm "; def $0", "=s"()3752 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 2, i32 3, i32 3>3753 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3754 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3755 ret void3756}3757 3758define void @s_shuffle_v3i16_v2i16__3_u_3() {3759; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_3:3760; GFX900: ; %bb.0:3761; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3762; GFX900-NEXT: ;;#ASMSTART3763; GFX900-NEXT: ; def s43764; GFX900-NEXT: ;;#ASMEND3765; GFX900-NEXT: s_lshr_b32 s8, s4, 163766; GFX900-NEXT: s_mov_b32 s9, s83767; GFX900-NEXT: ;;#ASMSTART3768; GFX900-NEXT: ; use s[8:9]3769; GFX900-NEXT: ;;#ASMEND3770; GFX900-NEXT: s_setpc_b64 s[30:31]3771;3772; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_3:3773; GFX90A: ; %bb.0:3774; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3775; GFX90A-NEXT: ;;#ASMSTART3776; GFX90A-NEXT: ; def s43777; GFX90A-NEXT: ;;#ASMEND3778; GFX90A-NEXT: s_lshr_b32 s8, s4, 163779; GFX90A-NEXT: s_mov_b32 s9, s83780; GFX90A-NEXT: ;;#ASMSTART3781; GFX90A-NEXT: ; use s[8:9]3782; GFX90A-NEXT: ;;#ASMEND3783; GFX90A-NEXT: s_setpc_b64 s[30:31]3784;3785; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_u_3:3786; GFX942: ; %bb.0:3787; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3788; GFX942-NEXT: ;;#ASMSTART3789; GFX942-NEXT: ; def s03790; GFX942-NEXT: ;;#ASMEND3791; GFX942-NEXT: s_lshr_b32 s8, s0, 163792; GFX942-NEXT: s_mov_b32 s9, s83793; GFX942-NEXT: ;;#ASMSTART3794; GFX942-NEXT: ; use s[8:9]3795; GFX942-NEXT: ;;#ASMEND3796; GFX942-NEXT: s_setpc_b64 s[30:31]3797 %vec0 = call <2 x i16> asm "; def $0", "=s"()3798 %vec1 = call <2 x i16> asm "; def $0", "=s"()3799 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>3800 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3801 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3802 ret void3803}3804 3805define void @s_shuffle_v3i16_v2i16__3_0_3() {3806; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_3:3807; GFX900: ; %bb.0:3808; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3809; GFX900-NEXT: ;;#ASMSTART3810; GFX900-NEXT: ; def s53811; GFX900-NEXT: ;;#ASMEND3812; GFX900-NEXT: s_lshr_b32 s9, s5, 163813; GFX900-NEXT: ;;#ASMSTART3814; GFX900-NEXT: ; def s43815; GFX900-NEXT: ;;#ASMEND3816; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s43817; GFX900-NEXT: ;;#ASMSTART3818; GFX900-NEXT: ; use s[8:9]3819; GFX900-NEXT: ;;#ASMEND3820; GFX900-NEXT: s_setpc_b64 s[30:31]3821;3822; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_3:3823; GFX90A: ; %bb.0:3824; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3825; GFX90A-NEXT: ;;#ASMSTART3826; GFX90A-NEXT: ; def s53827; GFX90A-NEXT: ;;#ASMEND3828; GFX90A-NEXT: s_lshr_b32 s9, s5, 163829; GFX90A-NEXT: ;;#ASMSTART3830; GFX90A-NEXT: ; def s43831; GFX90A-NEXT: ;;#ASMEND3832; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s43833; GFX90A-NEXT: ;;#ASMSTART3834; GFX90A-NEXT: ; use s[8:9]3835; GFX90A-NEXT: ;;#ASMEND3836; GFX90A-NEXT: s_setpc_b64 s[30:31]3837;3838; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_0_3:3839; GFX942: ; %bb.0:3840; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3841; GFX942-NEXT: ;;#ASMSTART3842; GFX942-NEXT: ; def s13843; GFX942-NEXT: ;;#ASMEND3844; GFX942-NEXT: s_lshr_b32 s9, s1, 163845; GFX942-NEXT: ;;#ASMSTART3846; GFX942-NEXT: ; def s03847; GFX942-NEXT: ;;#ASMEND3848; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s03849; GFX942-NEXT: ;;#ASMSTART3850; GFX942-NEXT: ; use s[8:9]3851; GFX942-NEXT: ;;#ASMEND3852; GFX942-NEXT: s_setpc_b64 s[30:31]3853 %vec0 = call <2 x i16> asm "; def $0", "=s"()3854 %vec1 = call <2 x i16> asm "; def $0", "=s"()3855 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 3>3856 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3857 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3858 ret void3859}3860 3861define void @s_shuffle_v3i16_v2i16__3_1_3() {3862; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_3:3863; GFX900: ; %bb.0:3864; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3865; GFX900-NEXT: ;;#ASMSTART3866; GFX900-NEXT: ; def s43867; GFX900-NEXT: ;;#ASMEND3868; GFX900-NEXT: ;;#ASMSTART3869; GFX900-NEXT: ; def s53870; GFX900-NEXT: ;;#ASMEND3871; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s43872; GFX900-NEXT: s_lshr_b32 s9, s5, 163873; GFX900-NEXT: ;;#ASMSTART3874; GFX900-NEXT: ; use s[8:9]3875; GFX900-NEXT: ;;#ASMEND3876; GFX900-NEXT: s_setpc_b64 s[30:31]3877;3878; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_3:3879; GFX90A: ; %bb.0:3880; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3881; GFX90A-NEXT: ;;#ASMSTART3882; GFX90A-NEXT: ; def s43883; GFX90A-NEXT: ;;#ASMEND3884; GFX90A-NEXT: ;;#ASMSTART3885; GFX90A-NEXT: ; def s53886; GFX90A-NEXT: ;;#ASMEND3887; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s43888; GFX90A-NEXT: s_lshr_b32 s9, s5, 163889; GFX90A-NEXT: ;;#ASMSTART3890; GFX90A-NEXT: ; use s[8:9]3891; GFX90A-NEXT: ;;#ASMEND3892; GFX90A-NEXT: s_setpc_b64 s[30:31]3893;3894; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_1_3:3895; GFX942: ; %bb.0:3896; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3897; GFX942-NEXT: ;;#ASMSTART3898; GFX942-NEXT: ; def s03899; GFX942-NEXT: ;;#ASMEND3900; GFX942-NEXT: ;;#ASMSTART3901; GFX942-NEXT: ; def s13902; GFX942-NEXT: ;;#ASMEND3903; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s03904; GFX942-NEXT: s_lshr_b32 s9, s1, 163905; GFX942-NEXT: ;;#ASMSTART3906; GFX942-NEXT: ; use s[8:9]3907; GFX942-NEXT: ;;#ASMEND3908; GFX942-NEXT: s_setpc_b64 s[30:31]3909 %vec0 = call <2 x i16> asm "; def $0", "=s"()3910 %vec1 = call <2 x i16> asm "; def $0", "=s"()3911 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 3>3912 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3913 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3914 ret void3915}3916 3917define void @s_shuffle_v3i16_v2i16__3_2_3() {3918; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_3:3919; GFX900: ; %bb.0:3920; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3921; GFX900-NEXT: ;;#ASMSTART3922; GFX900-NEXT: ; def s43923; GFX900-NEXT: ;;#ASMEND3924; GFX900-NEXT: s_lshr_b32 s9, s4, 163925; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s43926; GFX900-NEXT: ;;#ASMSTART3927; GFX900-NEXT: ; use s[8:9]3928; GFX900-NEXT: ;;#ASMEND3929; GFX900-NEXT: s_setpc_b64 s[30:31]3930;3931; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_3:3932; GFX90A: ; %bb.0:3933; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3934; GFX90A-NEXT: ;;#ASMSTART3935; GFX90A-NEXT: ; def s43936; GFX90A-NEXT: ;;#ASMEND3937; GFX90A-NEXT: s_lshr_b32 s9, s4, 163938; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s43939; GFX90A-NEXT: ;;#ASMSTART3940; GFX90A-NEXT: ; use s[8:9]3941; GFX90A-NEXT: ;;#ASMEND3942; GFX90A-NEXT: s_setpc_b64 s[30:31]3943;3944; GFX942-LABEL: s_shuffle_v3i16_v2i16__3_2_3:3945; GFX942: ; %bb.0:3946; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3947; GFX942-NEXT: ;;#ASMSTART3948; GFX942-NEXT: ; def s03949; GFX942-NEXT: ;;#ASMEND3950; GFX942-NEXT: s_lshr_b32 s9, s0, 163951; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s03952; GFX942-NEXT: ;;#ASMSTART3953; GFX942-NEXT: ; use s[8:9]3954; GFX942-NEXT: ;;#ASMEND3955; GFX942-NEXT: s_setpc_b64 s[30:31]3956 %vec0 = call <2 x i16> asm "; def $0", "=s"()3957 %vec1 = call <2 x i16> asm "; def $0", "=s"()3958 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 3>3959 %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3960 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)3961 ret void3962}3963;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:3964; GFX90APLUS: {{.*}}3965