1958 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s5 6 7define void @v_shuffle_v2i16_v2i16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2i16_v2i16__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, <2 x i32> poison14 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 415 ret void16}17 18define void @v_shuffle_v2i16_v2i16__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2i16_v2i16__0_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_v2i16_v2i16__0_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_v2i16_v2i16__0_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, <2 x i32> <i32 0, i32 poison>53 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 454 ret void55}56 57define void @v_shuffle_v2i16_v2i16__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2i16_v2i16__1_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_v2i16_v2i16__1_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_v2i16_v2i16__1_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, <2 x i32> <i32 1, i32 poison>95 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 496 ret void97}98 99define void @v_shuffle_v2i16_v2i16__2_u(ptr addrspace(1) inreg %ptr) {100; GFX9-LABEL: v_shuffle_v2i16_v2i16__2_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, <2 x i32> <i32 2, i32 poison>106 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4107 ret void108}109 110define void @v_shuffle_v2i16_v2i16__3_u(ptr addrspace(1) inreg %ptr) {111; GFX900-LABEL: v_shuffle_v2i16_v2i16__3_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_v2i16_v2i16__3_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_v2i16_v2i16__3_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, <2 x i32> <i32 3, i32 poison>149 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4150 ret void151}152 153define void @v_shuffle_v2i16_v2i16__3_0(ptr addrspace(1) inreg %ptr) {154; GFX900-LABEL: v_shuffle_v2i16_v2i16__3_0: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_v2i16_v2i16__3_0: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_v2i16_v2i16__3_0: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, <2 x i32> <i32 3, i32 0>202 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4203 ret void204}205 206define void @v_shuffle_v2i16_v2i16__3_1(ptr addrspace(1) inreg %ptr) {207; GFX900-LABEL: v_shuffle_v2i16_v2i16__3_1: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_v2i16_v2i16__3_1: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_v2i16_v2i16__3_1: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, <2 x i32> <i32 3, i32 1>258 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4259 ret void260}261 262define void @v_shuffle_v2i16_v2i16__3_2(ptr addrspace(1) inreg %ptr) {263; GFX900-LABEL: v_shuffle_v2i16_v2i16__3_2: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_v2i16_v2i16__3_2: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_v2i16_v2i16__3_2: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, <2 x i32> <i32 3, i32 2>301 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4302 ret void303}304 305define void @v_shuffle_v2i16_v2i16__3_3(ptr addrspace(1) inreg %ptr) {306; GFX900-LABEL: v_shuffle_v2i16_v2i16__3_3: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_v2i16_v2i16__3_3: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_v2i16_v2i16__3_3: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, <2 x i32> <i32 3, i32 3>347 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4348 ret void349}350 351define void @v_shuffle_v2i16_v2i16__u_0(ptr addrspace(1) inreg %ptr) {352; GFX900-LABEL: v_shuffle_v2i16_v2i16__u_0:353; GFX900: ; %bb.0:354; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX900-NEXT: ;;#ASMSTART356; GFX900-NEXT: ; def v1357; GFX900-NEXT: ;;#ASMEND358; GFX900-NEXT: v_mov_b32_e32 v0, 0359; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v1360; GFX900-NEXT: global_store_dword v0, v1, s[16:17]361; GFX900-NEXT: s_waitcnt vmcnt(0)362; GFX900-NEXT: s_setpc_b64 s[30:31]363;364; GFX90A-LABEL: v_shuffle_v2i16_v2i16__u_0:365; GFX90A: ; %bb.0:366; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; GFX90A-NEXT: ;;#ASMSTART368; GFX90A-NEXT: ; def v1369; GFX90A-NEXT: ;;#ASMEND370; GFX90A-NEXT: v_mov_b32_e32 v0, 0371; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v1372; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]373; GFX90A-NEXT: s_waitcnt vmcnt(0)374; GFX90A-NEXT: s_setpc_b64 s[30:31]375;376; GFX942-LABEL: v_shuffle_v2i16_v2i16__u_0:377; GFX942: ; %bb.0:378; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)379; GFX942-NEXT: ;;#ASMSTART380; GFX942-NEXT: ; def v1381; GFX942-NEXT: ;;#ASMEND382; GFX942-NEXT: v_mov_b32_e32 v0, 0383; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v1384; GFX942-NEXT: global_store_dword v0, v1, s[0:1]385; GFX942-NEXT: s_waitcnt vmcnt(0)386; GFX942-NEXT: s_setpc_b64 s[30:31]387 %vec0 = call <2 x i16> asm "; def $0", "=v"()388 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 poison, i32 0>389 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4390 ret void391}392 393define void @v_shuffle_v2i16_v2i16__0_0(ptr addrspace(1) inreg %ptr) {394; GFX900-LABEL: v_shuffle_v2i16_v2i16__0_0:395; GFX900: ; %bb.0:396; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; GFX900-NEXT: ;;#ASMSTART398; GFX900-NEXT: ; def v1399; GFX900-NEXT: ;;#ASMEND400; GFX900-NEXT: s_mov_b32 s4, 0x5040100401; GFX900-NEXT: v_mov_b32_e32 v0, 0402; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4403; GFX900-NEXT: global_store_dword v0, v1, s[16:17]404; GFX900-NEXT: s_waitcnt vmcnt(0)405; GFX900-NEXT: s_setpc_b64 s[30:31]406;407; GFX90A-LABEL: v_shuffle_v2i16_v2i16__0_0:408; GFX90A: ; %bb.0:409; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)410; GFX90A-NEXT: ;;#ASMSTART411; GFX90A-NEXT: ; def v1412; GFX90A-NEXT: ;;#ASMEND413; GFX90A-NEXT: s_mov_b32 s4, 0x5040100414; GFX90A-NEXT: v_mov_b32_e32 v0, 0415; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4416; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]417; GFX90A-NEXT: s_waitcnt vmcnt(0)418; GFX90A-NEXT: s_setpc_b64 s[30:31]419;420; GFX942-LABEL: v_shuffle_v2i16_v2i16__0_0:421; GFX942: ; %bb.0:422; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; GFX942-NEXT: ;;#ASMSTART424; GFX942-NEXT: ; def v1425; GFX942-NEXT: ;;#ASMEND426; GFX942-NEXT: s_mov_b32 s2, 0x5040100427; GFX942-NEXT: v_mov_b32_e32 v0, 0428; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2429; GFX942-NEXT: global_store_dword v0, v1, s[0:1]430; GFX942-NEXT: s_waitcnt vmcnt(0)431; GFX942-NEXT: s_setpc_b64 s[30:31]432 %vec0 = call <2 x i16> asm "; def $0", "=v"()433 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> zeroinitializer434 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4435 ret void436}437 438define void @v_shuffle_v2i16_v2i16__1_0(ptr addrspace(1) inreg %ptr) {439; GFX900-LABEL: v_shuffle_v2i16_v2i16__1_0:440; GFX900: ; %bb.0:441; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)442; GFX900-NEXT: ;;#ASMSTART443; GFX900-NEXT: ; def v1444; GFX900-NEXT: ;;#ASMEND445; GFX900-NEXT: v_mov_b32_e32 v0, 0446; GFX900-NEXT: v_alignbit_b32 v1, v1, v1, 16447; GFX900-NEXT: global_store_dword v0, v1, s[16:17]448; GFX900-NEXT: s_waitcnt vmcnt(0)449; GFX900-NEXT: s_setpc_b64 s[30:31]450;451; GFX90A-LABEL: v_shuffle_v2i16_v2i16__1_0:452; GFX90A: ; %bb.0:453; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX90A-NEXT: ;;#ASMSTART455; GFX90A-NEXT: ; def v1456; GFX90A-NEXT: ;;#ASMEND457; GFX90A-NEXT: v_mov_b32_e32 v0, 0458; GFX90A-NEXT: v_alignbit_b32 v1, v1, v1, 16459; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]460; GFX90A-NEXT: s_waitcnt vmcnt(0)461; GFX90A-NEXT: s_setpc_b64 s[30:31]462;463; GFX942-LABEL: v_shuffle_v2i16_v2i16__1_0:464; GFX942: ; %bb.0:465; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)466; GFX942-NEXT: ;;#ASMSTART467; GFX942-NEXT: ; def v1468; GFX942-NEXT: ;;#ASMEND469; GFX942-NEXT: v_mov_b32_e32 v0, 0470; GFX942-NEXT: v_alignbit_b32 v1, v1, v1, 16471; GFX942-NEXT: global_store_dword v0, v1, s[0:1]472; GFX942-NEXT: s_waitcnt vmcnt(0)473; GFX942-NEXT: s_setpc_b64 s[30:31]474 %vec0 = call <2 x i16> asm "; def $0", "=v"()475 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 0>476 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4477 ret void478}479 480define void @v_shuffle_v2i16_v2i16__2_0(ptr addrspace(1) inreg %ptr) {481; GFX900-LABEL: v_shuffle_v2i16_v2i16__2_0:482; GFX900: ; %bb.0:483; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX900-NEXT: ;;#ASMSTART485; GFX900-NEXT: ; def v1486; GFX900-NEXT: ;;#ASMEND487; GFX900-NEXT: v_mov_b32_e32 v0, 0488; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v1489; GFX900-NEXT: global_store_dword v0, v1, s[16:17]490; GFX900-NEXT: s_waitcnt vmcnt(0)491; GFX900-NEXT: s_setpc_b64 s[30:31]492;493; GFX90A-LABEL: v_shuffle_v2i16_v2i16__2_0:494; GFX90A: ; %bb.0:495; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX90A-NEXT: ;;#ASMSTART497; GFX90A-NEXT: ; def v1498; GFX90A-NEXT: ;;#ASMEND499; GFX90A-NEXT: v_mov_b32_e32 v0, 0500; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v1501; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]502; GFX90A-NEXT: s_waitcnt vmcnt(0)503; GFX90A-NEXT: s_setpc_b64 s[30:31]504;505; GFX942-LABEL: v_shuffle_v2i16_v2i16__2_0:506; GFX942: ; %bb.0:507; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)508; GFX942-NEXT: ;;#ASMSTART509; GFX942-NEXT: ; def v1510; GFX942-NEXT: ;;#ASMEND511; GFX942-NEXT: v_mov_b32_e32 v0, 0512; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v1513; GFX942-NEXT: global_store_dword v0, v1, s[0:1]514; GFX942-NEXT: s_waitcnt vmcnt(0)515; GFX942-NEXT: s_setpc_b64 s[30:31]516 %vec0 = call <2 x i16> asm "; def $0", "=v"()517 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 0>518 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4519 ret void520}521 522define void @v_shuffle_v2i16_v2i16__u_1(ptr addrspace(1) inreg %ptr) {523; GFX900-LABEL: v_shuffle_v2i16_v2i16__u_1:524; GFX900: ; %bb.0:525; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)526; GFX900-NEXT: v_mov_b32_e32 v0, 0527; GFX900-NEXT: ;;#ASMSTART528; GFX900-NEXT: ; def v1529; GFX900-NEXT: ;;#ASMEND530; GFX900-NEXT: global_store_dword v0, v1, s[16:17]531; GFX900-NEXT: s_waitcnt vmcnt(0)532; GFX900-NEXT: s_setpc_b64 s[30:31]533;534; GFX90A-LABEL: v_shuffle_v2i16_v2i16__u_1:535; GFX90A: ; %bb.0:536; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX90A-NEXT: v_mov_b32_e32 v0, 0538; GFX90A-NEXT: ;;#ASMSTART539; GFX90A-NEXT: ; def v1540; GFX90A-NEXT: ;;#ASMEND541; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]542; GFX90A-NEXT: s_waitcnt vmcnt(0)543; GFX90A-NEXT: s_setpc_b64 s[30:31]544;545; GFX942-LABEL: v_shuffle_v2i16_v2i16__u_1:546; GFX942: ; %bb.0:547; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)548; GFX942-NEXT: v_mov_b32_e32 v0, 0549; GFX942-NEXT: ;;#ASMSTART550; GFX942-NEXT: ; def v1551; GFX942-NEXT: ;;#ASMEND552; GFX942-NEXT: global_store_dword v0, v1, s[0:1]553; GFX942-NEXT: s_waitcnt vmcnt(0)554; GFX942-NEXT: s_setpc_b64 s[30:31]555 %vec0 = call <2 x i16> asm "; def $0", "=v"()556 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 poison, i32 1>557 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4558 ret void559}560 561define void @v_shuffle_v2i16_v2i16__0_1(ptr addrspace(1) inreg %ptr) {562; GFX900-LABEL: v_shuffle_v2i16_v2i16__0_1:563; GFX900: ; %bb.0:564; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)565; GFX900-NEXT: v_mov_b32_e32 v0, 0566; GFX900-NEXT: ;;#ASMSTART567; GFX900-NEXT: ; def v1568; GFX900-NEXT: ;;#ASMEND569; GFX900-NEXT: global_store_dword v0, v1, s[16:17]570; GFX900-NEXT: s_waitcnt vmcnt(0)571; GFX900-NEXT: s_setpc_b64 s[30:31]572;573; GFX90A-LABEL: v_shuffle_v2i16_v2i16__0_1:574; GFX90A: ; %bb.0:575; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)576; GFX90A-NEXT: v_mov_b32_e32 v0, 0577; GFX90A-NEXT: ;;#ASMSTART578; GFX90A-NEXT: ; def v1579; GFX90A-NEXT: ;;#ASMEND580; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]581; GFX90A-NEXT: s_waitcnt vmcnt(0)582; GFX90A-NEXT: s_setpc_b64 s[30:31]583;584; GFX942-LABEL: v_shuffle_v2i16_v2i16__0_1:585; GFX942: ; %bb.0:586; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GFX942-NEXT: v_mov_b32_e32 v0, 0588; GFX942-NEXT: ;;#ASMSTART589; GFX942-NEXT: ; def v1590; GFX942-NEXT: ;;#ASMEND591; GFX942-NEXT: global_store_dword v0, v1, s[0:1]592; GFX942-NEXT: s_waitcnt vmcnt(0)593; GFX942-NEXT: s_setpc_b64 s[30:31]594 %vec0 = call <2 x i16> asm "; def $0", "=v"()595 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 0, i32 1>596 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4597 ret void598}599 600define void @v_shuffle_v2i16_v2i16__1_1(ptr addrspace(1) inreg %ptr) {601; GFX900-LABEL: v_shuffle_v2i16_v2i16__1_1:602; GFX900: ; %bb.0:603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)604; GFX900-NEXT: ;;#ASMSTART605; GFX900-NEXT: ; def v1606; GFX900-NEXT: ;;#ASMEND607; GFX900-NEXT: s_mov_b32 s4, 0x7060302608; GFX900-NEXT: v_mov_b32_e32 v0, 0609; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4610; GFX900-NEXT: global_store_dword v0, v1, s[16:17]611; GFX900-NEXT: s_waitcnt vmcnt(0)612; GFX900-NEXT: s_setpc_b64 s[30:31]613;614; GFX90A-LABEL: v_shuffle_v2i16_v2i16__1_1:615; GFX90A: ; %bb.0:616; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)617; GFX90A-NEXT: ;;#ASMSTART618; GFX90A-NEXT: ; def v1619; GFX90A-NEXT: ;;#ASMEND620; GFX90A-NEXT: s_mov_b32 s4, 0x7060302621; GFX90A-NEXT: v_mov_b32_e32 v0, 0622; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4623; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]624; GFX90A-NEXT: s_waitcnt vmcnt(0)625; GFX90A-NEXT: s_setpc_b64 s[30:31]626;627; GFX942-LABEL: v_shuffle_v2i16_v2i16__1_1:628; GFX942: ; %bb.0:629; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)630; GFX942-NEXT: ;;#ASMSTART631; GFX942-NEXT: ; def v1632; GFX942-NEXT: ;;#ASMEND633; GFX942-NEXT: s_mov_b32 s2, 0x7060302634; GFX942-NEXT: v_mov_b32_e32 v0, 0635; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2636; GFX942-NEXT: global_store_dword v0, v1, s[0:1]637; GFX942-NEXT: s_waitcnt vmcnt(0)638; GFX942-NEXT: s_setpc_b64 s[30:31]639 %vec0 = call <2 x i16> asm "; def $0", "=v"()640 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 1>641 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4642 ret void643}644 645define void @v_shuffle_v2i16_v2i16__2_1(ptr addrspace(1) inreg %ptr) {646; GFX900-LABEL: v_shuffle_v2i16_v2i16__2_1:647; GFX900: ; %bb.0:648; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)649; GFX900-NEXT: v_mov_b32_e32 v0, 0650; GFX900-NEXT: ;;#ASMSTART651; GFX900-NEXT: ; def v1652; GFX900-NEXT: ;;#ASMEND653; GFX900-NEXT: global_store_dword v0, v1, s[16:17]654; GFX900-NEXT: s_waitcnt vmcnt(0)655; GFX900-NEXT: s_setpc_b64 s[30:31]656;657; GFX90A-LABEL: v_shuffle_v2i16_v2i16__2_1:658; GFX90A: ; %bb.0:659; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)660; GFX90A-NEXT: v_mov_b32_e32 v0, 0661; GFX90A-NEXT: ;;#ASMSTART662; GFX90A-NEXT: ; def v1663; GFX90A-NEXT: ;;#ASMEND664; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]665; GFX90A-NEXT: s_waitcnt vmcnt(0)666; GFX90A-NEXT: s_setpc_b64 s[30:31]667;668; GFX942-LABEL: v_shuffle_v2i16_v2i16__2_1:669; GFX942: ; %bb.0:670; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX942-NEXT: v_mov_b32_e32 v0, 0672; GFX942-NEXT: ;;#ASMSTART673; GFX942-NEXT: ; def v1674; GFX942-NEXT: ;;#ASMEND675; GFX942-NEXT: global_store_dword v0, v1, s[0:1]676; GFX942-NEXT: s_waitcnt vmcnt(0)677; GFX942-NEXT: s_setpc_b64 s[30:31]678 %vec0 = call <2 x i16> asm "; def $0", "=v"()679 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 1>680 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4681 ret void682}683 684define void @v_shuffle_v2i16_v2i16__u_2(ptr addrspace(1) inreg %ptr) {685; GFX9-LABEL: v_shuffle_v2i16_v2i16__u_2:686; GFX9: ; %bb.0:687; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)688; GFX9-NEXT: s_setpc_b64 s[30:31]689 %vec0 = call <2 x i16> asm "; def $0", "=v"()690 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 poison, i32 2>691 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4692 ret void693}694 695define void @v_shuffle_v2i16_v2i16__0_2(ptr addrspace(1) inreg %ptr) {696; GFX900-LABEL: v_shuffle_v2i16_v2i16__0_2:697; GFX900: ; %bb.0:698; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)699; GFX900-NEXT: v_mov_b32_e32 v0, 0700; GFX900-NEXT: ;;#ASMSTART701; GFX900-NEXT: ; def v1702; GFX900-NEXT: ;;#ASMEND703; GFX900-NEXT: global_store_dword v0, v1, s[16:17]704; GFX900-NEXT: s_waitcnt vmcnt(0)705; GFX900-NEXT: s_setpc_b64 s[30:31]706;707; GFX90A-LABEL: v_shuffle_v2i16_v2i16__0_2:708; GFX90A: ; %bb.0:709; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)710; GFX90A-NEXT: v_mov_b32_e32 v0, 0711; GFX90A-NEXT: ;;#ASMSTART712; GFX90A-NEXT: ; def v1713; GFX90A-NEXT: ;;#ASMEND714; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]715; GFX90A-NEXT: s_waitcnt vmcnt(0)716; GFX90A-NEXT: s_setpc_b64 s[30:31]717;718; GFX942-LABEL: v_shuffle_v2i16_v2i16__0_2:719; GFX942: ; %bb.0:720; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)721; GFX942-NEXT: v_mov_b32_e32 v0, 0722; GFX942-NEXT: ;;#ASMSTART723; GFX942-NEXT: ; def v1724; GFX942-NEXT: ;;#ASMEND725; GFX942-NEXT: global_store_dword v0, v1, s[0:1]726; GFX942-NEXT: s_waitcnt vmcnt(0)727; GFX942-NEXT: s_setpc_b64 s[30:31]728 %vec0 = call <2 x i16> asm "; def $0", "=v"()729 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 0, i32 2>730 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4731 ret void732}733 734define void @v_shuffle_v2i16_v2i16__1_2(ptr addrspace(1) inreg %ptr) {735; GFX900-LABEL: v_shuffle_v2i16_v2i16__1_2:736; GFX900: ; %bb.0:737; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)738; GFX900-NEXT: ;;#ASMSTART739; GFX900-NEXT: ; def v1740; GFX900-NEXT: ;;#ASMEND741; GFX900-NEXT: v_mov_b32_e32 v0, 0742; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 16743; GFX900-NEXT: global_store_dword v0, v1, s[16:17]744; GFX900-NEXT: s_waitcnt vmcnt(0)745; GFX900-NEXT: s_setpc_b64 s[30:31]746;747; GFX90A-LABEL: v_shuffle_v2i16_v2i16__1_2:748; GFX90A: ; %bb.0:749; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)750; GFX90A-NEXT: ;;#ASMSTART751; GFX90A-NEXT: ; def v1752; GFX90A-NEXT: ;;#ASMEND753; GFX90A-NEXT: v_mov_b32_e32 v0, 0754; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 16755; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]756; GFX90A-NEXT: s_waitcnt vmcnt(0)757; GFX90A-NEXT: s_setpc_b64 s[30:31]758;759; GFX942-LABEL: v_shuffle_v2i16_v2i16__1_2:760; GFX942: ; %bb.0:761; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)762; GFX942-NEXT: ;;#ASMSTART763; GFX942-NEXT: ; def v1764; GFX942-NEXT: ;;#ASMEND765; GFX942-NEXT: v_mov_b32_e32 v0, 0766; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 16767; GFX942-NEXT: global_store_dword v0, v1, s[0:1]768; GFX942-NEXT: s_waitcnt vmcnt(0)769; GFX942-NEXT: s_setpc_b64 s[30:31]770 %vec0 = call <2 x i16> asm "; def $0", "=v"()771 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 2>772 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4773 ret void774}775 776define void @v_shuffle_v2i16_v2i16__2_2(ptr addrspace(1) inreg %ptr) {777; GFX9-LABEL: v_shuffle_v2i16_v2i16__2_2:778; GFX9: ; %bb.0:779; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)780; GFX9-NEXT: s_setpc_b64 s[30:31]781 %vec0 = call <2 x i16> asm "; def $0", "=v"()782 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 2>783 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4784 ret void785}786 787define void @v_shuffle_v2i16_v2i16__u_3(ptr addrspace(1) inreg %ptr) {788; GFX900-LABEL: v_shuffle_v2i16_v2i16__u_3:789; GFX900: ; %bb.0:790; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)791; GFX900-NEXT: v_mov_b32_e32 v0, 0792; GFX900-NEXT: ;;#ASMSTART793; GFX900-NEXT: ; def v1794; GFX900-NEXT: ;;#ASMEND795; GFX900-NEXT: global_store_dword v0, v1, s[16:17]796; GFX900-NEXT: s_waitcnt vmcnt(0)797; GFX900-NEXT: s_setpc_b64 s[30:31]798;799; GFX90A-LABEL: v_shuffle_v2i16_v2i16__u_3:800; GFX90A: ; %bb.0:801; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)802; GFX90A-NEXT: v_mov_b32_e32 v0, 0803; GFX90A-NEXT: ;;#ASMSTART804; GFX90A-NEXT: ; def v1805; GFX90A-NEXT: ;;#ASMEND806; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]807; GFX90A-NEXT: s_waitcnt vmcnt(0)808; GFX90A-NEXT: s_setpc_b64 s[30:31]809;810; GFX942-LABEL: v_shuffle_v2i16_v2i16__u_3:811; GFX942: ; %bb.0:812; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)813; GFX942-NEXT: v_mov_b32_e32 v0, 0814; GFX942-NEXT: ;;#ASMSTART815; GFX942-NEXT: ; def v1816; GFX942-NEXT: ;;#ASMEND817; GFX942-NEXT: global_store_dword v0, v1, s[0:1]818; GFX942-NEXT: s_waitcnt vmcnt(0)819; GFX942-NEXT: s_setpc_b64 s[30:31]820 %vec0 = call <2 x i16> asm "; def $0", "=v"()821 %vec1 = call <2 x i16> asm "; def $0", "=v"()822 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 poison, i32 3>823 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4824 ret void825}826 827define void @v_shuffle_v2i16_v2i16__0_3(ptr addrspace(1) inreg %ptr) {828; GFX900-LABEL: v_shuffle_v2i16_v2i16__0_3:829; GFX900: ; %bb.0:830; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)831; GFX900-NEXT: ;;#ASMSTART832; GFX900-NEXT: ; def v1833; GFX900-NEXT: ;;#ASMEND834; GFX900-NEXT: s_mov_b32 s4, 0xffff835; GFX900-NEXT: v_mov_b32_e32 v0, 0836; GFX900-NEXT: ;;#ASMSTART837; GFX900-NEXT: ; def v2838; GFX900-NEXT: ;;#ASMEND839; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v2840; GFX900-NEXT: global_store_dword v0, v1, s[16:17]841; GFX900-NEXT: s_waitcnt vmcnt(0)842; GFX900-NEXT: s_setpc_b64 s[30:31]843;844; GFX90A-LABEL: v_shuffle_v2i16_v2i16__0_3:845; GFX90A: ; %bb.0:846; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)847; GFX90A-NEXT: ;;#ASMSTART848; GFX90A-NEXT: ; def v1849; GFX90A-NEXT: ;;#ASMEND850; GFX90A-NEXT: s_mov_b32 s4, 0xffff851; GFX90A-NEXT: v_mov_b32_e32 v0, 0852; GFX90A-NEXT: ;;#ASMSTART853; GFX90A-NEXT: ; def v2854; GFX90A-NEXT: ;;#ASMEND855; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v2856; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]857; GFX90A-NEXT: s_waitcnt vmcnt(0)858; GFX90A-NEXT: s_setpc_b64 s[30:31]859;860; GFX942-LABEL: v_shuffle_v2i16_v2i16__0_3:861; GFX942: ; %bb.0:862; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)863; GFX942-NEXT: ;;#ASMSTART864; GFX942-NEXT: ; def v1865; GFX942-NEXT: ;;#ASMEND866; GFX942-NEXT: s_mov_b32 s2, 0xffff867; GFX942-NEXT: v_mov_b32_e32 v0, 0868; GFX942-NEXT: ;;#ASMSTART869; GFX942-NEXT: ; def v2870; GFX942-NEXT: ;;#ASMEND871; GFX942-NEXT: s_nop 0872; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v2873; GFX942-NEXT: global_store_dword v0, v1, s[0:1]874; GFX942-NEXT: s_waitcnt vmcnt(0)875; GFX942-NEXT: s_setpc_b64 s[30:31]876 %vec0 = call <2 x i16> asm "; def $0", "=v"()877 %vec1 = call <2 x i16> asm "; def $0", "=v"()878 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 0, i32 3>879 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4880 ret void881}882 883define void @v_shuffle_v2i16_v2i16__1_3(ptr addrspace(1) inreg %ptr) {884; GFX900-LABEL: v_shuffle_v2i16_v2i16__1_3:885; GFX900: ; %bb.0:886; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)887; GFX900-NEXT: ;;#ASMSTART888; GFX900-NEXT: ; def v1889; GFX900-NEXT: ;;#ASMEND890; GFX900-NEXT: s_mov_b32 s4, 0x7060302891; GFX900-NEXT: v_mov_b32_e32 v0, 0892; GFX900-NEXT: ;;#ASMSTART893; GFX900-NEXT: ; def v2894; GFX900-NEXT: ;;#ASMEND895; GFX900-NEXT: v_perm_b32 v1, v2, v1, s4896; GFX900-NEXT: global_store_dword v0, v1, s[16:17]897; GFX900-NEXT: s_waitcnt vmcnt(0)898; GFX900-NEXT: s_setpc_b64 s[30:31]899;900; GFX90A-LABEL: v_shuffle_v2i16_v2i16__1_3:901; GFX90A: ; %bb.0:902; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)903; GFX90A-NEXT: ;;#ASMSTART904; GFX90A-NEXT: ; def v1905; GFX90A-NEXT: ;;#ASMEND906; GFX90A-NEXT: s_mov_b32 s4, 0x7060302907; GFX90A-NEXT: v_mov_b32_e32 v0, 0908; GFX90A-NEXT: ;;#ASMSTART909; GFX90A-NEXT: ; def v2910; GFX90A-NEXT: ;;#ASMEND911; GFX90A-NEXT: v_perm_b32 v1, v2, v1, s4912; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]913; GFX90A-NEXT: s_waitcnt vmcnt(0)914; GFX90A-NEXT: s_setpc_b64 s[30:31]915;916; GFX942-LABEL: v_shuffle_v2i16_v2i16__1_3:917; GFX942: ; %bb.0:918; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)919; GFX942-NEXT: ;;#ASMSTART920; GFX942-NEXT: ; def v1921; GFX942-NEXT: ;;#ASMEND922; GFX942-NEXT: s_mov_b32 s2, 0x7060302923; GFX942-NEXT: v_mov_b32_e32 v0, 0924; GFX942-NEXT: ;;#ASMSTART925; GFX942-NEXT: ; def v2926; GFX942-NEXT: ;;#ASMEND927; GFX942-NEXT: s_nop 0928; GFX942-NEXT: v_perm_b32 v1, v2, v1, s2929; GFX942-NEXT: global_store_dword v0, v1, s[0:1]930; GFX942-NEXT: s_waitcnt vmcnt(0)931; GFX942-NEXT: s_setpc_b64 s[30:31]932 %vec0 = call <2 x i16> asm "; def $0", "=v"()933 %vec1 = call <2 x i16> asm "; def $0", "=v"()934 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 1, i32 3>935 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4936 ret void937}938 939define void @v_shuffle_v2i16_v2i16__2_3(ptr addrspace(1) inreg %ptr) {940; GFX900-LABEL: v_shuffle_v2i16_v2i16__2_3:941; GFX900: ; %bb.0:942; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)943; GFX900-NEXT: v_mov_b32_e32 v0, 0944; GFX900-NEXT: ;;#ASMSTART945; GFX900-NEXT: ; def v1946; GFX900-NEXT: ;;#ASMEND947; GFX900-NEXT: global_store_dword v0, v1, s[16:17]948; GFX900-NEXT: s_waitcnt vmcnt(0)949; GFX900-NEXT: s_setpc_b64 s[30:31]950;951; GFX90A-LABEL: v_shuffle_v2i16_v2i16__2_3:952; GFX90A: ; %bb.0:953; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)954; GFX90A-NEXT: v_mov_b32_e32 v0, 0955; GFX90A-NEXT: ;;#ASMSTART956; GFX90A-NEXT: ; def v1957; GFX90A-NEXT: ;;#ASMEND958; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]959; GFX90A-NEXT: s_waitcnt vmcnt(0)960; GFX90A-NEXT: s_setpc_b64 s[30:31]961;962; GFX942-LABEL: v_shuffle_v2i16_v2i16__2_3:963; GFX942: ; %bb.0:964; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GFX942-NEXT: v_mov_b32_e32 v0, 0966; GFX942-NEXT: ;;#ASMSTART967; GFX942-NEXT: ; def v1968; GFX942-NEXT: ;;#ASMEND969; GFX942-NEXT: global_store_dword v0, v1, s[0:1]970; GFX942-NEXT: s_waitcnt vmcnt(0)971; GFX942-NEXT: s_setpc_b64 s[30:31]972 %vec0 = call <2 x i16> asm "; def $0", "=v"()973 %vec1 = call <2 x i16> asm "; def $0", "=v"()974 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 2, i32 3>975 store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4976 ret void977}978 979define void @s_shuffle_v2i16_v2i16__u_u() {980; GFX9-LABEL: s_shuffle_v2i16_v2i16__u_u:981; GFX9: ; %bb.0:982; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)983; GFX9-NEXT: ;;#ASMSTART984; GFX9-NEXT: ; use s8985; GFX9-NEXT: ;;#ASMEND986; GFX9-NEXT: s_setpc_b64 s[30:31]987 %vec0 = call <2 x i16> asm "; def $0", "=s"()988 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> poison989 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)990 ret void991}992 993define void @s_shuffle_v2i16_v2i16__0_u() {994; GFX900-LABEL: s_shuffle_v2i16_v2i16__0_u:995; GFX900: ; %bb.0:996; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)997; GFX900-NEXT: ;;#ASMSTART998; GFX900-NEXT: ; def s8999; GFX900-NEXT: ;;#ASMEND1000; GFX900-NEXT: ;;#ASMSTART1001; GFX900-NEXT: ; use s81002; GFX900-NEXT: ;;#ASMEND1003; GFX900-NEXT: s_setpc_b64 s[30:31]1004;1005; GFX90A-LABEL: s_shuffle_v2i16_v2i16__0_u:1006; GFX90A: ; %bb.0:1007; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1008; GFX90A-NEXT: ;;#ASMSTART1009; GFX90A-NEXT: ; def s81010; GFX90A-NEXT: ;;#ASMEND1011; GFX90A-NEXT: ;;#ASMSTART1012; GFX90A-NEXT: ; use s81013; GFX90A-NEXT: ;;#ASMEND1014; GFX90A-NEXT: s_setpc_b64 s[30:31]1015;1016; GFX942-LABEL: s_shuffle_v2i16_v2i16__0_u:1017; GFX942: ; %bb.0:1018; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX942-NEXT: ;;#ASMSTART1020; GFX942-NEXT: ; def s81021; GFX942-NEXT: ;;#ASMEND1022; GFX942-NEXT: s_nop 01023; GFX942-NEXT: ;;#ASMSTART1024; GFX942-NEXT: ; use s81025; GFX942-NEXT: ;;#ASMEND1026; GFX942-NEXT: s_setpc_b64 s[30:31]1027 %vec0 = call <2 x i16> asm "; def $0", "=s"()1028 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 0, i32 poison>1029 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1030 ret void1031}1032 1033define void @s_shuffle_v2i16_v2i16__1_u() {1034; GFX900-LABEL: s_shuffle_v2i16_v2i16__1_u:1035; GFX900: ; %bb.0:1036; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1037; GFX900-NEXT: ;;#ASMSTART1038; GFX900-NEXT: ; def s41039; GFX900-NEXT: ;;#ASMEND1040; GFX900-NEXT: s_lshr_b32 s8, s4, 161041; GFX900-NEXT: ;;#ASMSTART1042; GFX900-NEXT: ; use s81043; GFX900-NEXT: ;;#ASMEND1044; GFX900-NEXT: s_setpc_b64 s[30:31]1045;1046; GFX90A-LABEL: s_shuffle_v2i16_v2i16__1_u:1047; GFX90A: ; %bb.0:1048; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1049; GFX90A-NEXT: ;;#ASMSTART1050; GFX90A-NEXT: ; def s41051; GFX90A-NEXT: ;;#ASMEND1052; GFX90A-NEXT: s_lshr_b32 s8, s4, 161053; GFX90A-NEXT: ;;#ASMSTART1054; GFX90A-NEXT: ; use s81055; GFX90A-NEXT: ;;#ASMEND1056; GFX90A-NEXT: s_setpc_b64 s[30:31]1057;1058; GFX942-LABEL: s_shuffle_v2i16_v2i16__1_u:1059; GFX942: ; %bb.0:1060; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1061; GFX942-NEXT: ;;#ASMSTART1062; GFX942-NEXT: ; def s01063; GFX942-NEXT: ;;#ASMEND1064; GFX942-NEXT: s_lshr_b32 s8, s0, 161065; GFX942-NEXT: ;;#ASMSTART1066; GFX942-NEXT: ; use s81067; GFX942-NEXT: ;;#ASMEND1068; GFX942-NEXT: s_setpc_b64 s[30:31]1069 %vec0 = call <2 x i16> asm "; def $0", "=s"()1070 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 poison>1071 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1072 ret void1073}1074 1075define void @s_shuffle_v2i16_v2i16__2_u() {1076; GFX9-LABEL: s_shuffle_v2i16_v2i16__2_u:1077; GFX9: ; %bb.0:1078; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GFX9-NEXT: ;;#ASMSTART1080; GFX9-NEXT: ; use s81081; GFX9-NEXT: ;;#ASMEND1082; GFX9-NEXT: s_setpc_b64 s[30:31]1083 %vec0 = call <2 x i16> asm "; def $0", "=s"()1084 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 poison>1085 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1086 ret void1087}1088 1089define void @s_shuffle_v2i16_v2i16__3_u() {1090; GFX900-LABEL: s_shuffle_v2i16_v2i16__3_u:1091; GFX900: ; %bb.0:1092; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1093; GFX900-NEXT: ;;#ASMSTART1094; GFX900-NEXT: ; def s41095; GFX900-NEXT: ;;#ASMEND1096; GFX900-NEXT: s_lshr_b32 s8, s4, 161097; GFX900-NEXT: ;;#ASMSTART1098; GFX900-NEXT: ; use s81099; GFX900-NEXT: ;;#ASMEND1100; GFX900-NEXT: s_setpc_b64 s[30:31]1101;1102; GFX90A-LABEL: s_shuffle_v2i16_v2i16__3_u:1103; GFX90A: ; %bb.0:1104; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1105; GFX90A-NEXT: ;;#ASMSTART1106; GFX90A-NEXT: ; def s41107; GFX90A-NEXT: ;;#ASMEND1108; GFX90A-NEXT: s_lshr_b32 s8, s4, 161109; GFX90A-NEXT: ;;#ASMSTART1110; GFX90A-NEXT: ; use s81111; GFX90A-NEXT: ;;#ASMEND1112; GFX90A-NEXT: s_setpc_b64 s[30:31]1113;1114; GFX942-LABEL: s_shuffle_v2i16_v2i16__3_u:1115; GFX942: ; %bb.0:1116; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1117; GFX942-NEXT: ;;#ASMSTART1118; GFX942-NEXT: ; def s01119; GFX942-NEXT: ;;#ASMEND1120; GFX942-NEXT: s_lshr_b32 s8, s0, 161121; GFX942-NEXT: ;;#ASMSTART1122; GFX942-NEXT: ; use s81123; GFX942-NEXT: ;;#ASMEND1124; GFX942-NEXT: s_setpc_b64 s[30:31]1125 %vec0 = call <2 x i16> asm "; def $0", "=s"()1126 %vec1 = call <2 x i16> asm "; def $0", "=s"()1127 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 3, i32 poison>1128 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1129 ret void1130}1131 1132define void @s_shuffle_v2i16_v2i16__3_0() {1133; GFX900-LABEL: s_shuffle_v2i16_v2i16__3_0:1134; GFX900: ; %bb.0:1135; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1136; GFX900-NEXT: ;;#ASMSTART1137; GFX900-NEXT: ; def s51138; GFX900-NEXT: ;;#ASMEND1139; GFX900-NEXT: s_lshr_b32 s5, s5, 161140; GFX900-NEXT: ;;#ASMSTART1141; GFX900-NEXT: ; def s41142; GFX900-NEXT: ;;#ASMEND1143; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41144; GFX900-NEXT: ;;#ASMSTART1145; GFX900-NEXT: ; use s81146; GFX900-NEXT: ;;#ASMEND1147; GFX900-NEXT: s_setpc_b64 s[30:31]1148;1149; GFX90A-LABEL: s_shuffle_v2i16_v2i16__3_0:1150; GFX90A: ; %bb.0:1151; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1152; GFX90A-NEXT: ;;#ASMSTART1153; GFX90A-NEXT: ; def s51154; GFX90A-NEXT: ;;#ASMEND1155; GFX90A-NEXT: s_lshr_b32 s5, s5, 161156; GFX90A-NEXT: ;;#ASMSTART1157; GFX90A-NEXT: ; def s41158; GFX90A-NEXT: ;;#ASMEND1159; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41160; GFX90A-NEXT: ;;#ASMSTART1161; GFX90A-NEXT: ; use s81162; GFX90A-NEXT: ;;#ASMEND1163; GFX90A-NEXT: s_setpc_b64 s[30:31]1164;1165; GFX942-LABEL: s_shuffle_v2i16_v2i16__3_0:1166; GFX942: ; %bb.0:1167; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1168; GFX942-NEXT: ;;#ASMSTART1169; GFX942-NEXT: ; def s11170; GFX942-NEXT: ;;#ASMEND1171; GFX942-NEXT: s_lshr_b32 s1, s1, 161172; GFX942-NEXT: ;;#ASMSTART1173; GFX942-NEXT: ; def s01174; GFX942-NEXT: ;;#ASMEND1175; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01176; GFX942-NEXT: ;;#ASMSTART1177; GFX942-NEXT: ; use s81178; GFX942-NEXT: ;;#ASMEND1179; GFX942-NEXT: s_setpc_b64 s[30:31]1180 %vec0 = call <2 x i16> asm "; def $0", "=s"()1181 %vec1 = call <2 x i16> asm "; def $0", "=s"()1182 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 3, i32 0>1183 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1184 ret void1185}1186 1187define void @s_shuffle_v2i16_v2i16__3_1() {1188; GFX900-LABEL: s_shuffle_v2i16_v2i16__3_1:1189; GFX900: ; %bb.0:1190; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1191; GFX900-NEXT: ;;#ASMSTART1192; GFX900-NEXT: ; def s41193; GFX900-NEXT: ;;#ASMEND1194; GFX900-NEXT: ;;#ASMSTART1195; GFX900-NEXT: ; def s51196; GFX900-NEXT: ;;#ASMEND1197; GFX900-NEXT: s_pack_hh_b32_b16 s8, s5, s41198; GFX900-NEXT: ;;#ASMSTART1199; GFX900-NEXT: ; use s81200; GFX900-NEXT: ;;#ASMEND1201; GFX900-NEXT: s_setpc_b64 s[30:31]1202;1203; GFX90A-LABEL: s_shuffle_v2i16_v2i16__3_1:1204; GFX90A: ; %bb.0:1205; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1206; GFX90A-NEXT: ;;#ASMSTART1207; GFX90A-NEXT: ; def s41208; GFX90A-NEXT: ;;#ASMEND1209; GFX90A-NEXT: ;;#ASMSTART1210; GFX90A-NEXT: ; def s51211; GFX90A-NEXT: ;;#ASMEND1212; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s5, s41213; GFX90A-NEXT: ;;#ASMSTART1214; GFX90A-NEXT: ; use s81215; GFX90A-NEXT: ;;#ASMEND1216; GFX90A-NEXT: s_setpc_b64 s[30:31]1217;1218; GFX942-LABEL: s_shuffle_v2i16_v2i16__3_1:1219; GFX942: ; %bb.0:1220; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1221; GFX942-NEXT: ;;#ASMSTART1222; GFX942-NEXT: ; def s01223; GFX942-NEXT: ;;#ASMEND1224; GFX942-NEXT: ;;#ASMSTART1225; GFX942-NEXT: ; def s11226; GFX942-NEXT: ;;#ASMEND1227; GFX942-NEXT: s_pack_hh_b32_b16 s8, s1, s01228; GFX942-NEXT: ;;#ASMSTART1229; GFX942-NEXT: ; use s81230; GFX942-NEXT: ;;#ASMEND1231; GFX942-NEXT: s_setpc_b64 s[30:31]1232 %vec0 = call <2 x i16> asm "; def $0", "=s"()1233 %vec1 = call <2 x i16> asm "; def $0", "=s"()1234 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 3, i32 1>1235 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1236 ret void1237}1238 1239define void @s_shuffle_v2i16_v2i16__3_2() {1240; GFX900-LABEL: s_shuffle_v2i16_v2i16__3_2:1241; GFX900: ; %bb.0:1242; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1243; GFX900-NEXT: ;;#ASMSTART1244; GFX900-NEXT: ; def s41245; GFX900-NEXT: ;;#ASMEND1246; GFX900-NEXT: s_lshr_b32 s5, s4, 161247; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41248; GFX900-NEXT: ;;#ASMSTART1249; GFX900-NEXT: ; use s81250; GFX900-NEXT: ;;#ASMEND1251; GFX900-NEXT: s_setpc_b64 s[30:31]1252;1253; GFX90A-LABEL: s_shuffle_v2i16_v2i16__3_2:1254; GFX90A: ; %bb.0:1255; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1256; GFX90A-NEXT: ;;#ASMSTART1257; GFX90A-NEXT: ; def s41258; GFX90A-NEXT: ;;#ASMEND1259; GFX90A-NEXT: s_lshr_b32 s5, s4, 161260; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41261; GFX90A-NEXT: ;;#ASMSTART1262; GFX90A-NEXT: ; use s81263; GFX90A-NEXT: ;;#ASMEND1264; GFX90A-NEXT: s_setpc_b64 s[30:31]1265;1266; GFX942-LABEL: s_shuffle_v2i16_v2i16__3_2:1267; GFX942: ; %bb.0:1268; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1269; GFX942-NEXT: ;;#ASMSTART1270; GFX942-NEXT: ; def s01271; GFX942-NEXT: ;;#ASMEND1272; GFX942-NEXT: s_lshr_b32 s1, s0, 161273; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01274; GFX942-NEXT: ;;#ASMSTART1275; GFX942-NEXT: ; use s81276; GFX942-NEXT: ;;#ASMEND1277; GFX942-NEXT: s_setpc_b64 s[30:31]1278 %vec0 = call <2 x i16> asm "; def $0", "=s"()1279 %vec1 = call <2 x i16> asm "; def $0", "=s"()1280 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 3, i32 2>1281 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1282 ret void1283}1284 1285define void @s_shuffle_v2i16_v2i16__3_3() {1286; GFX900-LABEL: s_shuffle_v2i16_v2i16__3_3:1287; GFX900: ; %bb.0:1288; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1289; GFX900-NEXT: ;;#ASMSTART1290; GFX900-NEXT: ; def s41291; GFX900-NEXT: ;;#ASMEND1292; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s41293; GFX900-NEXT: ;;#ASMSTART1294; GFX900-NEXT: ; use s81295; GFX900-NEXT: ;;#ASMEND1296; GFX900-NEXT: s_setpc_b64 s[30:31]1297;1298; GFX90A-LABEL: s_shuffle_v2i16_v2i16__3_3:1299; GFX90A: ; %bb.0:1300; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1301; GFX90A-NEXT: ;;#ASMSTART1302; GFX90A-NEXT: ; def s41303; GFX90A-NEXT: ;;#ASMEND1304; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s41305; GFX90A-NEXT: ;;#ASMSTART1306; GFX90A-NEXT: ; use s81307; GFX90A-NEXT: ;;#ASMEND1308; GFX90A-NEXT: s_setpc_b64 s[30:31]1309;1310; GFX942-LABEL: s_shuffle_v2i16_v2i16__3_3:1311; GFX942: ; %bb.0:1312; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1313; GFX942-NEXT: ;;#ASMSTART1314; GFX942-NEXT: ; def s01315; GFX942-NEXT: ;;#ASMEND1316; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s01317; GFX942-NEXT: ;;#ASMSTART1318; GFX942-NEXT: ; use s81319; GFX942-NEXT: ;;#ASMEND1320; GFX942-NEXT: s_setpc_b64 s[30:31]1321 %vec0 = call <2 x i16> asm "; def $0", "=s"()1322 %vec1 = call <2 x i16> asm "; def $0", "=s"()1323 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 3, i32 3>1324 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1325 ret void1326}1327 1328define void @s_shuffle_v2i16_v2i16__u_0() {1329; GFX900-LABEL: s_shuffle_v2i16_v2i16__u_0:1330; GFX900: ; %bb.0:1331; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1332; GFX900-NEXT: ;;#ASMSTART1333; GFX900-NEXT: ; def s41334; GFX900-NEXT: ;;#ASMEND1335; GFX900-NEXT: s_lshl_b32 s8, s4, 161336; GFX900-NEXT: ;;#ASMSTART1337; GFX900-NEXT: ; use s81338; GFX900-NEXT: ;;#ASMEND1339; GFX900-NEXT: s_setpc_b64 s[30:31]1340;1341; GFX90A-LABEL: s_shuffle_v2i16_v2i16__u_0:1342; GFX90A: ; %bb.0:1343; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1344; GFX90A-NEXT: ;;#ASMSTART1345; GFX90A-NEXT: ; def s41346; GFX90A-NEXT: ;;#ASMEND1347; GFX90A-NEXT: s_lshl_b32 s8, s4, 161348; GFX90A-NEXT: ;;#ASMSTART1349; GFX90A-NEXT: ; use s81350; GFX90A-NEXT: ;;#ASMEND1351; GFX90A-NEXT: s_setpc_b64 s[30:31]1352;1353; GFX942-LABEL: s_shuffle_v2i16_v2i16__u_0:1354; GFX942: ; %bb.0:1355; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1356; GFX942-NEXT: ;;#ASMSTART1357; GFX942-NEXT: ; def s01358; GFX942-NEXT: ;;#ASMEND1359; GFX942-NEXT: s_lshl_b32 s8, s0, 161360; GFX942-NEXT: ;;#ASMSTART1361; GFX942-NEXT: ; use s81362; GFX942-NEXT: ;;#ASMEND1363; GFX942-NEXT: s_setpc_b64 s[30:31]1364 %vec0 = call <2 x i16> asm "; def $0", "=s"()1365 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 poison, i32 0>1366 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1367 ret void1368}1369 1370define void @s_shuffle_v2i16_v2i16__0_0() {1371; GFX900-LABEL: s_shuffle_v2i16_v2i16__0_0:1372; GFX900: ; %bb.0:1373; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1374; GFX900-NEXT: ;;#ASMSTART1375; GFX900-NEXT: ; def s41376; GFX900-NEXT: ;;#ASMEND1377; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s41378; GFX900-NEXT: ;;#ASMSTART1379; GFX900-NEXT: ; use s81380; GFX900-NEXT: ;;#ASMEND1381; GFX900-NEXT: s_setpc_b64 s[30:31]1382;1383; GFX90A-LABEL: s_shuffle_v2i16_v2i16__0_0:1384; GFX90A: ; %bb.0:1385; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1386; GFX90A-NEXT: ;;#ASMSTART1387; GFX90A-NEXT: ; def s41388; GFX90A-NEXT: ;;#ASMEND1389; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s41390; GFX90A-NEXT: ;;#ASMSTART1391; GFX90A-NEXT: ; use s81392; GFX90A-NEXT: ;;#ASMEND1393; GFX90A-NEXT: s_setpc_b64 s[30:31]1394;1395; GFX942-LABEL: s_shuffle_v2i16_v2i16__0_0:1396; GFX942: ; %bb.0:1397; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1398; GFX942-NEXT: ;;#ASMSTART1399; GFX942-NEXT: ; def s01400; GFX942-NEXT: ;;#ASMEND1401; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s01402; GFX942-NEXT: ;;#ASMSTART1403; GFX942-NEXT: ; use s81404; GFX942-NEXT: ;;#ASMEND1405; GFX942-NEXT: s_setpc_b64 s[30:31]1406 %vec0 = call <2 x i16> asm "; def $0", "=s"()1407 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> zeroinitializer1408 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1409 ret void1410}1411 1412define void @s_shuffle_v2i16_v2i16__1_0() {1413; GFX900-LABEL: s_shuffle_v2i16_v2i16__1_0:1414; GFX900: ; %bb.0:1415; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1416; GFX900-NEXT: ;;#ASMSTART1417; GFX900-NEXT: ; def s41418; GFX900-NEXT: ;;#ASMEND1419; GFX900-NEXT: s_lshr_b32 s5, s4, 161420; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41421; GFX900-NEXT: ;;#ASMSTART1422; GFX900-NEXT: ; use s81423; GFX900-NEXT: ;;#ASMEND1424; GFX900-NEXT: s_setpc_b64 s[30:31]1425;1426; GFX90A-LABEL: s_shuffle_v2i16_v2i16__1_0:1427; GFX90A: ; %bb.0:1428; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1429; GFX90A-NEXT: ;;#ASMSTART1430; GFX90A-NEXT: ; def s41431; GFX90A-NEXT: ;;#ASMEND1432; GFX90A-NEXT: s_lshr_b32 s5, s4, 161433; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41434; GFX90A-NEXT: ;;#ASMSTART1435; GFX90A-NEXT: ; use s81436; GFX90A-NEXT: ;;#ASMEND1437; GFX90A-NEXT: s_setpc_b64 s[30:31]1438;1439; GFX942-LABEL: s_shuffle_v2i16_v2i16__1_0:1440; GFX942: ; %bb.0:1441; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1442; GFX942-NEXT: ;;#ASMSTART1443; GFX942-NEXT: ; def s01444; GFX942-NEXT: ;;#ASMEND1445; GFX942-NEXT: s_lshr_b32 s1, s0, 161446; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01447; GFX942-NEXT: ;;#ASMSTART1448; GFX942-NEXT: ; use s81449; GFX942-NEXT: ;;#ASMEND1450; GFX942-NEXT: s_setpc_b64 s[30:31]1451 %vec0 = call <2 x i16> asm "; def $0", "=s"()1452 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 0>1453 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1454 ret void1455}1456 1457define void @s_shuffle_v2i16_v2i16__2_0() {1458; GFX900-LABEL: s_shuffle_v2i16_v2i16__2_0:1459; GFX900: ; %bb.0:1460; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1461; GFX900-NEXT: ;;#ASMSTART1462; GFX900-NEXT: ; def s41463; GFX900-NEXT: ;;#ASMEND1464; GFX900-NEXT: s_lshl_b32 s8, s4, 161465; GFX900-NEXT: ;;#ASMSTART1466; GFX900-NEXT: ; use s81467; GFX900-NEXT: ;;#ASMEND1468; GFX900-NEXT: s_setpc_b64 s[30:31]1469;1470; GFX90A-LABEL: s_shuffle_v2i16_v2i16__2_0:1471; GFX90A: ; %bb.0:1472; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1473; GFX90A-NEXT: ;;#ASMSTART1474; GFX90A-NEXT: ; def s41475; GFX90A-NEXT: ;;#ASMEND1476; GFX90A-NEXT: s_lshl_b32 s8, s4, 161477; GFX90A-NEXT: ;;#ASMSTART1478; GFX90A-NEXT: ; use s81479; GFX90A-NEXT: ;;#ASMEND1480; GFX90A-NEXT: s_setpc_b64 s[30:31]1481;1482; GFX942-LABEL: s_shuffle_v2i16_v2i16__2_0:1483; GFX942: ; %bb.0:1484; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1485; GFX942-NEXT: ;;#ASMSTART1486; GFX942-NEXT: ; def s01487; GFX942-NEXT: ;;#ASMEND1488; GFX942-NEXT: s_lshl_b32 s8, s0, 161489; GFX942-NEXT: ;;#ASMSTART1490; GFX942-NEXT: ; use s81491; GFX942-NEXT: ;;#ASMEND1492; GFX942-NEXT: s_setpc_b64 s[30:31]1493 %vec0 = call <2 x i16> asm "; def $0", "=s"()1494 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 0>1495 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1496 ret void1497}1498 1499define void @s_shuffle_v2i16_v2i16__u_1() {1500; GFX900-LABEL: s_shuffle_v2i16_v2i16__u_1:1501; GFX900: ; %bb.0:1502; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1503; GFX900-NEXT: ;;#ASMSTART1504; GFX900-NEXT: ; def s81505; GFX900-NEXT: ;;#ASMEND1506; GFX900-NEXT: ;;#ASMSTART1507; GFX900-NEXT: ; use s81508; GFX900-NEXT: ;;#ASMEND1509; GFX900-NEXT: s_setpc_b64 s[30:31]1510;1511; GFX90A-LABEL: s_shuffle_v2i16_v2i16__u_1:1512; GFX90A: ; %bb.0:1513; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1514; GFX90A-NEXT: ;;#ASMSTART1515; GFX90A-NEXT: ; def s81516; GFX90A-NEXT: ;;#ASMEND1517; GFX90A-NEXT: ;;#ASMSTART1518; GFX90A-NEXT: ; use s81519; GFX90A-NEXT: ;;#ASMEND1520; GFX90A-NEXT: s_setpc_b64 s[30:31]1521;1522; GFX942-LABEL: s_shuffle_v2i16_v2i16__u_1:1523; GFX942: ; %bb.0:1524; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1525; GFX942-NEXT: ;;#ASMSTART1526; GFX942-NEXT: ; def s81527; GFX942-NEXT: ;;#ASMEND1528; GFX942-NEXT: s_nop 01529; GFX942-NEXT: ;;#ASMSTART1530; GFX942-NEXT: ; use s81531; GFX942-NEXT: ;;#ASMEND1532; GFX942-NEXT: s_setpc_b64 s[30:31]1533 %vec0 = call <2 x i16> asm "; def $0", "=s"()1534 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 poison, i32 1>1535 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1536 ret void1537}1538 1539define void @s_shuffle_v2i16_v2i16__0_1() {1540; GFX900-LABEL: s_shuffle_v2i16_v2i16__0_1:1541; GFX900: ; %bb.0:1542; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1543; GFX900-NEXT: ;;#ASMSTART1544; GFX900-NEXT: ; def s81545; GFX900-NEXT: ;;#ASMEND1546; GFX900-NEXT: ;;#ASMSTART1547; GFX900-NEXT: ; use s81548; GFX900-NEXT: ;;#ASMEND1549; GFX900-NEXT: s_setpc_b64 s[30:31]1550;1551; GFX90A-LABEL: s_shuffle_v2i16_v2i16__0_1:1552; GFX90A: ; %bb.0:1553; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1554; GFX90A-NEXT: ;;#ASMSTART1555; GFX90A-NEXT: ; def s81556; GFX90A-NEXT: ;;#ASMEND1557; GFX90A-NEXT: ;;#ASMSTART1558; GFX90A-NEXT: ; use s81559; GFX90A-NEXT: ;;#ASMEND1560; GFX90A-NEXT: s_setpc_b64 s[30:31]1561;1562; GFX942-LABEL: s_shuffle_v2i16_v2i16__0_1:1563; GFX942: ; %bb.0:1564; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1565; GFX942-NEXT: ;;#ASMSTART1566; GFX942-NEXT: ; def s81567; GFX942-NEXT: ;;#ASMEND1568; GFX942-NEXT: s_nop 01569; GFX942-NEXT: ;;#ASMSTART1570; GFX942-NEXT: ; use s81571; GFX942-NEXT: ;;#ASMEND1572; GFX942-NEXT: s_setpc_b64 s[30:31]1573 %vec0 = call <2 x i16> asm "; def $0", "=s"()1574 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 0, i32 1>1575 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1576 ret void1577}1578 1579define void @s_shuffle_v2i16_v2i16__1_1() {1580; GFX900-LABEL: s_shuffle_v2i16_v2i16__1_1:1581; GFX900: ; %bb.0:1582; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1583; GFX900-NEXT: ;;#ASMSTART1584; GFX900-NEXT: ; def s41585; GFX900-NEXT: ;;#ASMEND1586; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s41587; GFX900-NEXT: ;;#ASMSTART1588; GFX900-NEXT: ; use s81589; GFX900-NEXT: ;;#ASMEND1590; GFX900-NEXT: s_setpc_b64 s[30:31]1591;1592; GFX90A-LABEL: s_shuffle_v2i16_v2i16__1_1:1593; GFX90A: ; %bb.0:1594; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1595; GFX90A-NEXT: ;;#ASMSTART1596; GFX90A-NEXT: ; def s41597; GFX90A-NEXT: ;;#ASMEND1598; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s41599; GFX90A-NEXT: ;;#ASMSTART1600; GFX90A-NEXT: ; use s81601; GFX90A-NEXT: ;;#ASMEND1602; GFX90A-NEXT: s_setpc_b64 s[30:31]1603;1604; GFX942-LABEL: s_shuffle_v2i16_v2i16__1_1:1605; GFX942: ; %bb.0:1606; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1607; GFX942-NEXT: ;;#ASMSTART1608; GFX942-NEXT: ; def s01609; GFX942-NEXT: ;;#ASMEND1610; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s01611; GFX942-NEXT: ;;#ASMSTART1612; GFX942-NEXT: ; use s81613; GFX942-NEXT: ;;#ASMEND1614; GFX942-NEXT: s_setpc_b64 s[30:31]1615 %vec0 = call <2 x i16> asm "; def $0", "=s"()1616 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 1>1617 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1618 ret void1619}1620 1621define void @s_shuffle_v2i16_v2i16__2_1() {1622; GFX900-LABEL: s_shuffle_v2i16_v2i16__2_1:1623; GFX900: ; %bb.0:1624; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1625; GFX900-NEXT: ;;#ASMSTART1626; GFX900-NEXT: ; def s81627; GFX900-NEXT: ;;#ASMEND1628; GFX900-NEXT: ;;#ASMSTART1629; GFX900-NEXT: ; use s81630; GFX900-NEXT: ;;#ASMEND1631; GFX900-NEXT: s_setpc_b64 s[30:31]1632;1633; GFX90A-LABEL: s_shuffle_v2i16_v2i16__2_1:1634; GFX90A: ; %bb.0:1635; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1636; GFX90A-NEXT: ;;#ASMSTART1637; GFX90A-NEXT: ; def s81638; GFX90A-NEXT: ;;#ASMEND1639; GFX90A-NEXT: ;;#ASMSTART1640; GFX90A-NEXT: ; use s81641; GFX90A-NEXT: ;;#ASMEND1642; GFX90A-NEXT: s_setpc_b64 s[30:31]1643;1644; GFX942-LABEL: s_shuffle_v2i16_v2i16__2_1:1645; GFX942: ; %bb.0:1646; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1647; GFX942-NEXT: ;;#ASMSTART1648; GFX942-NEXT: ; def s81649; GFX942-NEXT: ;;#ASMEND1650; GFX942-NEXT: s_nop 01651; GFX942-NEXT: ;;#ASMSTART1652; GFX942-NEXT: ; use s81653; GFX942-NEXT: ;;#ASMEND1654; GFX942-NEXT: s_setpc_b64 s[30:31]1655 %vec0 = call <2 x i16> asm "; def $0", "=s"()1656 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 1>1657 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1658 ret void1659}1660 1661define void @s_shuffle_v2i16_v2i16__u_2() {1662; GFX9-LABEL: s_shuffle_v2i16_v2i16__u_2:1663; GFX9: ; %bb.0:1664; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1665; GFX9-NEXT: ;;#ASMSTART1666; GFX9-NEXT: ; use s81667; GFX9-NEXT: ;;#ASMEND1668; GFX9-NEXT: s_setpc_b64 s[30:31]1669 %vec0 = call <2 x i16> asm "; def $0", "=s"()1670 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 poison, i32 2>1671 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1672 ret void1673}1674 1675define void @s_shuffle_v2i16_v2i16__0_2() {1676; GFX900-LABEL: s_shuffle_v2i16_v2i16__0_2:1677; GFX900: ; %bb.0:1678; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1679; GFX900-NEXT: ;;#ASMSTART1680; GFX900-NEXT: ; def s81681; GFX900-NEXT: ;;#ASMEND1682; GFX900-NEXT: ;;#ASMSTART1683; GFX900-NEXT: ; use s81684; GFX900-NEXT: ;;#ASMEND1685; GFX900-NEXT: s_setpc_b64 s[30:31]1686;1687; GFX90A-LABEL: s_shuffle_v2i16_v2i16__0_2:1688; GFX90A: ; %bb.0:1689; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1690; GFX90A-NEXT: ;;#ASMSTART1691; GFX90A-NEXT: ; def s81692; GFX90A-NEXT: ;;#ASMEND1693; GFX90A-NEXT: ;;#ASMSTART1694; GFX90A-NEXT: ; use s81695; GFX90A-NEXT: ;;#ASMEND1696; GFX90A-NEXT: s_setpc_b64 s[30:31]1697;1698; GFX942-LABEL: s_shuffle_v2i16_v2i16__0_2:1699; GFX942: ; %bb.0:1700; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1701; GFX942-NEXT: ;;#ASMSTART1702; GFX942-NEXT: ; def s81703; GFX942-NEXT: ;;#ASMEND1704; GFX942-NEXT: s_nop 01705; GFX942-NEXT: ;;#ASMSTART1706; GFX942-NEXT: ; use s81707; GFX942-NEXT: ;;#ASMEND1708; GFX942-NEXT: s_setpc_b64 s[30:31]1709 %vec0 = call <2 x i16> asm "; def $0", "=s"()1710 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 0, i32 2>1711 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1712 ret void1713}1714 1715define void @s_shuffle_v2i16_v2i16__1_2() {1716; GFX900-LABEL: s_shuffle_v2i16_v2i16__1_2:1717; GFX900: ; %bb.0:1718; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1719; GFX900-NEXT: ;;#ASMSTART1720; GFX900-NEXT: ; def s41721; GFX900-NEXT: ;;#ASMEND1722; GFX900-NEXT: s_lshr_b32 s8, s4, 161723; GFX900-NEXT: ;;#ASMSTART1724; GFX900-NEXT: ; use s81725; GFX900-NEXT: ;;#ASMEND1726; GFX900-NEXT: s_setpc_b64 s[30:31]1727;1728; GFX90A-LABEL: s_shuffle_v2i16_v2i16__1_2:1729; GFX90A: ; %bb.0:1730; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1731; GFX90A-NEXT: ;;#ASMSTART1732; GFX90A-NEXT: ; def s41733; GFX90A-NEXT: ;;#ASMEND1734; GFX90A-NEXT: s_lshr_b32 s8, s4, 161735; GFX90A-NEXT: ;;#ASMSTART1736; GFX90A-NEXT: ; use s81737; GFX90A-NEXT: ;;#ASMEND1738; GFX90A-NEXT: s_setpc_b64 s[30:31]1739;1740; GFX942-LABEL: s_shuffle_v2i16_v2i16__1_2:1741; GFX942: ; %bb.0:1742; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1743; GFX942-NEXT: ;;#ASMSTART1744; GFX942-NEXT: ; def s01745; GFX942-NEXT: ;;#ASMEND1746; GFX942-NEXT: s_lshr_b32 s8, s0, 161747; GFX942-NEXT: ;;#ASMSTART1748; GFX942-NEXT: ; use s81749; GFX942-NEXT: ;;#ASMEND1750; GFX942-NEXT: s_setpc_b64 s[30:31]1751 %vec0 = call <2 x i16> asm "; def $0", "=s"()1752 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 1, i32 2>1753 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1754 ret void1755}1756 1757define void @s_shuffle_v2i16_v2i16__2_2() {1758; GFX9-LABEL: s_shuffle_v2i16_v2i16__2_2:1759; GFX9: ; %bb.0:1760; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1761; GFX9-NEXT: ;;#ASMSTART1762; GFX9-NEXT: ; use s81763; GFX9-NEXT: ;;#ASMEND1764; GFX9-NEXT: s_setpc_b64 s[30:31]1765 %vec0 = call <2 x i16> asm "; def $0", "=s"()1766 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <2 x i32> <i32 2, i32 2>1767 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1768 ret void1769}1770 1771define void @s_shuffle_v2i16_v2i16__u_3() {1772; GFX900-LABEL: s_shuffle_v2i16_v2i16__u_3:1773; GFX900: ; %bb.0:1774; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1775; GFX900-NEXT: ;;#ASMSTART1776; GFX900-NEXT: ; def s81777; GFX900-NEXT: ;;#ASMEND1778; GFX900-NEXT: ;;#ASMSTART1779; GFX900-NEXT: ; use s81780; GFX900-NEXT: ;;#ASMEND1781; GFX900-NEXT: s_setpc_b64 s[30:31]1782;1783; GFX90A-LABEL: s_shuffle_v2i16_v2i16__u_3:1784; GFX90A: ; %bb.0:1785; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1786; GFX90A-NEXT: ;;#ASMSTART1787; GFX90A-NEXT: ; def s81788; GFX90A-NEXT: ;;#ASMEND1789; GFX90A-NEXT: ;;#ASMSTART1790; GFX90A-NEXT: ; use s81791; GFX90A-NEXT: ;;#ASMEND1792; GFX90A-NEXT: s_setpc_b64 s[30:31]1793;1794; GFX942-LABEL: s_shuffle_v2i16_v2i16__u_3:1795; GFX942: ; %bb.0:1796; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1797; GFX942-NEXT: ;;#ASMSTART1798; GFX942-NEXT: ; def s81799; GFX942-NEXT: ;;#ASMEND1800; GFX942-NEXT: s_nop 01801; GFX942-NEXT: ;;#ASMSTART1802; GFX942-NEXT: ; use s81803; GFX942-NEXT: ;;#ASMEND1804; GFX942-NEXT: s_setpc_b64 s[30:31]1805 %vec0 = call <2 x i16> asm "; def $0", "=s"()1806 %vec1 = call <2 x i16> asm "; def $0", "=s"()1807 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 poison, i32 3>1808 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1809 ret void1810}1811 1812define void @s_shuffle_v2i16_v2i16__0_3() {1813; GFX900-LABEL: s_shuffle_v2i16_v2i16__0_3:1814; GFX900: ; %bb.0:1815; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1816; GFX900-NEXT: ;;#ASMSTART1817; GFX900-NEXT: ; def s41818; GFX900-NEXT: ;;#ASMEND1819; GFX900-NEXT: ;;#ASMSTART1820; GFX900-NEXT: ; def s51821; GFX900-NEXT: ;;#ASMEND1822; GFX900-NEXT: s_pack_lh_b32_b16 s8, s4, s51823; GFX900-NEXT: ;;#ASMSTART1824; GFX900-NEXT: ; use s81825; GFX900-NEXT: ;;#ASMEND1826; GFX900-NEXT: s_setpc_b64 s[30:31]1827;1828; GFX90A-LABEL: s_shuffle_v2i16_v2i16__0_3:1829; GFX90A: ; %bb.0:1830; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1831; GFX90A-NEXT: ;;#ASMSTART1832; GFX90A-NEXT: ; def s41833; GFX90A-NEXT: ;;#ASMEND1834; GFX90A-NEXT: ;;#ASMSTART1835; GFX90A-NEXT: ; def s51836; GFX90A-NEXT: ;;#ASMEND1837; GFX90A-NEXT: s_pack_lh_b32_b16 s8, s4, s51838; GFX90A-NEXT: ;;#ASMSTART1839; GFX90A-NEXT: ; use s81840; GFX90A-NEXT: ;;#ASMEND1841; GFX90A-NEXT: s_setpc_b64 s[30:31]1842;1843; GFX942-LABEL: s_shuffle_v2i16_v2i16__0_3:1844; GFX942: ; %bb.0:1845; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1846; GFX942-NEXT: ;;#ASMSTART1847; GFX942-NEXT: ; def s01848; GFX942-NEXT: ;;#ASMEND1849; GFX942-NEXT: ;;#ASMSTART1850; GFX942-NEXT: ; def s11851; GFX942-NEXT: ;;#ASMEND1852; GFX942-NEXT: s_pack_lh_b32_b16 s8, s0, s11853; GFX942-NEXT: ;;#ASMSTART1854; GFX942-NEXT: ; use s81855; GFX942-NEXT: ;;#ASMEND1856; GFX942-NEXT: s_setpc_b64 s[30:31]1857 %vec0 = call <2 x i16> asm "; def $0", "=s"()1858 %vec1 = call <2 x i16> asm "; def $0", "=s"()1859 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 0, i32 3>1860 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1861 ret void1862}1863 1864define void @s_shuffle_v2i16_v2i16__1_3() {1865; GFX900-LABEL: s_shuffle_v2i16_v2i16__1_3:1866; GFX900: ; %bb.0:1867; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1868; GFX900-NEXT: ;;#ASMSTART1869; GFX900-NEXT: ; def s41870; GFX900-NEXT: ;;#ASMEND1871; GFX900-NEXT: ;;#ASMSTART1872; GFX900-NEXT: ; def s51873; GFX900-NEXT: ;;#ASMEND1874; GFX900-NEXT: s_pack_hh_b32_b16 s8, s4, s51875; GFX900-NEXT: ;;#ASMSTART1876; GFX900-NEXT: ; use s81877; GFX900-NEXT: ;;#ASMEND1878; GFX900-NEXT: s_setpc_b64 s[30:31]1879;1880; GFX90A-LABEL: s_shuffle_v2i16_v2i16__1_3:1881; GFX90A: ; %bb.0:1882; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX90A-NEXT: ;;#ASMSTART1884; GFX90A-NEXT: ; def s41885; GFX90A-NEXT: ;;#ASMEND1886; GFX90A-NEXT: ;;#ASMSTART1887; GFX90A-NEXT: ; def s51888; GFX90A-NEXT: ;;#ASMEND1889; GFX90A-NEXT: s_pack_hh_b32_b16 s8, s4, s51890; GFX90A-NEXT: ;;#ASMSTART1891; GFX90A-NEXT: ; use s81892; GFX90A-NEXT: ;;#ASMEND1893; GFX90A-NEXT: s_setpc_b64 s[30:31]1894;1895; GFX942-LABEL: s_shuffle_v2i16_v2i16__1_3:1896; GFX942: ; %bb.0:1897; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1898; GFX942-NEXT: ;;#ASMSTART1899; GFX942-NEXT: ; def s01900; GFX942-NEXT: ;;#ASMEND1901; GFX942-NEXT: ;;#ASMSTART1902; GFX942-NEXT: ; def s11903; GFX942-NEXT: ;;#ASMEND1904; GFX942-NEXT: s_pack_hh_b32_b16 s8, s0, s11905; GFX942-NEXT: ;;#ASMSTART1906; GFX942-NEXT: ; use s81907; GFX942-NEXT: ;;#ASMEND1908; GFX942-NEXT: s_setpc_b64 s[30:31]1909 %vec0 = call <2 x i16> asm "; def $0", "=s"()1910 %vec1 = call <2 x i16> asm "; def $0", "=s"()1911 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 1, i32 3>1912 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1913 ret void1914}1915 1916define void @s_shuffle_v2i16_v2i16__2_3() {1917; GFX900-LABEL: s_shuffle_v2i16_v2i16__2_3:1918; GFX900: ; %bb.0:1919; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1920; GFX900-NEXT: ;;#ASMSTART1921; GFX900-NEXT: ; def s81922; GFX900-NEXT: ;;#ASMEND1923; GFX900-NEXT: ;;#ASMSTART1924; GFX900-NEXT: ; use s81925; GFX900-NEXT: ;;#ASMEND1926; GFX900-NEXT: s_setpc_b64 s[30:31]1927;1928; GFX90A-LABEL: s_shuffle_v2i16_v2i16__2_3:1929; GFX90A: ; %bb.0:1930; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1931; GFX90A-NEXT: ;;#ASMSTART1932; GFX90A-NEXT: ; def s81933; GFX90A-NEXT: ;;#ASMEND1934; GFX90A-NEXT: ;;#ASMSTART1935; GFX90A-NEXT: ; use s81936; GFX90A-NEXT: ;;#ASMEND1937; GFX90A-NEXT: s_setpc_b64 s[30:31]1938;1939; GFX942-LABEL: s_shuffle_v2i16_v2i16__2_3:1940; GFX942: ; %bb.0:1941; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1942; GFX942-NEXT: ;;#ASMSTART1943; GFX942-NEXT: ; def s81944; GFX942-NEXT: ;;#ASMEND1945; GFX942-NEXT: s_nop 01946; GFX942-NEXT: ;;#ASMSTART1947; GFX942-NEXT: ; use s81948; GFX942-NEXT: ;;#ASMEND1949; GFX942-NEXT: s_setpc_b64 s[30:31]1950 %vec0 = call <2 x i16> asm "; def $0", "=s"()1951 %vec1 = call <2 x i16> asm "; def $0", "=s"()1952 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 2, i32 3>1953 call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)1954 ret void1955}1956;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1957; GFX90APLUS: {{.*}}1958