4041 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_v3f16_v2f16__u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v3f16_v2f16__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 half> asm "; def $0", "=v"()13 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> poison14 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 815 ret void16}17 18define void @v_shuffle_v3f16_v2f16__0_u_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 0, i32 poison, i32 poison>53 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 854 ret void55}56 57define void @v_shuffle_v3f16_v2f16__1_u_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()94 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 poison, i32 poison>95 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 896 ret void97}98 99define void @v_shuffle_v3f16_v2f16__2_u_u(ptr addrspace(1) inreg %ptr) {100; GFX9-LABEL: v_shuffle_v3f16_v2f16__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 half> asm "; def $0", "=v"()105 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 poison, i32 poison>106 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8107 ret void108}109 110define void @v_shuffle_v3f16_v2f16__3_u_u(ptr addrspace(1) inreg %ptr) {111; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()147 %vec1 = call <2 x half> asm "; def $0", "=v"()148 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>149 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8150 ret void151}152 153define void @v_shuffle_v3f16_v2f16__3_0_u(ptr addrspace(1) inreg %ptr) {154; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()200 %vec1 = call <2 x half> asm "; def $0", "=v"()201 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>202 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8203 ret void204}205 206define void @v_shuffle_v3f16_v2f16__3_1_u(ptr addrspace(1) inreg %ptr) {207; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()256 %vec1 = call <2 x half> asm "; def $0", "=v"()257 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>258 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8259 ret void260}261 262define void @v_shuffle_v3f16_v2f16__3_2_u(ptr addrspace(1) inreg %ptr) {263; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()299 %vec1 = call <2 x half> asm "; def $0", "=v"()300 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>301 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8302 ret void303}304 305define void @v_shuffle_v3f16_v2f16__3_3_u(ptr addrspace(1) inreg %ptr) {306; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()345 %vec1 = call <2 x half> asm "; def $0", "=v"()346 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>347 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8348 ret void349}350 351define void @v_shuffle_v3f16_v2f16__3_3_0(ptr addrspace(1) inreg %ptr) {352; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()403 %vec1 = call <2 x half> asm "; def $0", "=v"()404 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 0>405 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8406 ret void407}408 409define void @v_shuffle_v3f16_v2f16__3_3_1(ptr addrspace(1) inreg %ptr) {410; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()461 %vec1 = call <2 x half> asm "; def $0", "=v"()462 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 1>463 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8464 ret void465}466 467define void @v_shuffle_v3f16_v2f16__3_3_2(ptr addrspace(1) inreg %ptr) {468; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()510 %vec1 = call <2 x half> asm "; def $0", "=v"()511 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 2>512 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8513 ret void514}515 516define void @v_shuffle_v3f16_v2f16__3_3_3(ptr addrspace(1) inreg %ptr) {517; GFX900-LABEL: v_shuffle_v3f16_v2f16__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_v3f16_v2f16__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_v3f16_v2f16__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 half> asm "; def $0", "=v"()562 %vec1 = call <2 x half> asm "; def $0", "=v"()563 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 3>564 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8565 ret void566}567 568define void @v_shuffle_v3f16_v2f16__u_0_0(ptr addrspace(1) inreg %ptr) {569; GFX900-LABEL: v_shuffle_v3f16_v2f16__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: v_lshlrev_b32_e32 v2, 16, v1577; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4578; GFX900-NEXT: global_store_dword v0, v2, s[16:17]579; GFX900-NEXT: s_waitcnt vmcnt(0)580; GFX900-NEXT: s_setpc_b64 s[30:31]581;582; GFX90A-LABEL: v_shuffle_v3f16_v2f16__u_0_0:583; GFX90A: ; %bb.0:584; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)585; GFX90A-NEXT: v_mov_b32_e32 v0, 0586; GFX90A-NEXT: ;;#ASMSTART587; GFX90A-NEXT: ; def v1588; GFX90A-NEXT: ;;#ASMEND589; GFX90A-NEXT: v_lshlrev_b32_e32 v2, 16, v1590; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4591; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]592; GFX90A-NEXT: s_waitcnt vmcnt(0)593; GFX90A-NEXT: s_setpc_b64 s[30:31]594;595; GFX942-LABEL: v_shuffle_v3f16_v2f16__u_0_0:596; GFX942: ; %bb.0:597; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)598; GFX942-NEXT: v_mov_b32_e32 v0, 0599; GFX942-NEXT: ;;#ASMSTART600; GFX942-NEXT: ; def v1601; GFX942-NEXT: ;;#ASMEND602; GFX942-NEXT: s_nop 0603; GFX942-NEXT: v_lshlrev_b32_e32 v2, 16, v1604; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4605; GFX942-NEXT: global_store_dword v0, v2, s[0:1]606; GFX942-NEXT: s_waitcnt vmcnt(0)607; GFX942-NEXT: s_setpc_b64 s[30:31]608 %vec0 = call <2 x half> asm "; def $0", "=v"()609 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 poison, i32 0, i32 0>610 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8611 ret void612}613 614define void @v_shuffle_v3f16_v2f16__0_0_0(ptr addrspace(1) inreg %ptr) {615; GFX900-LABEL: v_shuffle_v3f16_v2f16__0_0_0:616; GFX900: ; %bb.0:617; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)618; GFX900-NEXT: v_mov_b32_e32 v0, 0619; GFX900-NEXT: ;;#ASMSTART620; GFX900-NEXT: ; def v1621; GFX900-NEXT: ;;#ASMEND622; GFX900-NEXT: s_mov_b32 s4, 0x5040100623; GFX900-NEXT: v_perm_b32 v2, v1, v1, s4624; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4625; GFX900-NEXT: global_store_dword v0, v2, s[16:17]626; GFX900-NEXT: s_waitcnt vmcnt(0)627; GFX900-NEXT: s_setpc_b64 s[30:31]628;629; GFX90A-LABEL: v_shuffle_v3f16_v2f16__0_0_0:630; GFX90A: ; %bb.0:631; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)632; GFX90A-NEXT: v_mov_b32_e32 v0, 0633; GFX90A-NEXT: ;;#ASMSTART634; GFX90A-NEXT: ; def v1635; GFX90A-NEXT: ;;#ASMEND636; GFX90A-NEXT: s_mov_b32 s4, 0x5040100637; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s4638; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4639; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]640; GFX90A-NEXT: s_waitcnt vmcnt(0)641; GFX90A-NEXT: s_setpc_b64 s[30:31]642;643; GFX942-LABEL: v_shuffle_v3f16_v2f16__0_0_0:644; GFX942: ; %bb.0:645; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)646; GFX942-NEXT: v_mov_b32_e32 v0, 0647; GFX942-NEXT: ;;#ASMSTART648; GFX942-NEXT: ; def v1649; GFX942-NEXT: ;;#ASMEND650; GFX942-NEXT: s_mov_b32 s2, 0x5040100651; GFX942-NEXT: v_perm_b32 v2, v1, v1, s2652; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4653; GFX942-NEXT: global_store_dword v0, v2, s[0:1]654; GFX942-NEXT: s_waitcnt vmcnt(0)655; GFX942-NEXT: s_setpc_b64 s[30:31]656 %vec0 = call <2 x half> asm "; def $0", "=v"()657 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> zeroinitializer658 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8659 ret void660}661 662define void @v_shuffle_v3f16_v2f16__1_0_0(ptr addrspace(1) inreg %ptr) {663; GFX900-LABEL: v_shuffle_v3f16_v2f16__1_0_0:664; GFX900: ; %bb.0:665; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)666; GFX900-NEXT: v_mov_b32_e32 v0, 0667; GFX900-NEXT: ;;#ASMSTART668; GFX900-NEXT: ; def v1669; GFX900-NEXT: ;;#ASMEND670; GFX900-NEXT: v_alignbit_b32 v2, v1, v1, 16671; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4672; GFX900-NEXT: global_store_dword v0, v2, s[16:17]673; GFX900-NEXT: s_waitcnt vmcnt(0)674; GFX900-NEXT: s_setpc_b64 s[30:31]675;676; GFX90A-LABEL: v_shuffle_v3f16_v2f16__1_0_0:677; GFX90A: ; %bb.0:678; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)679; GFX90A-NEXT: v_mov_b32_e32 v0, 0680; GFX90A-NEXT: ;;#ASMSTART681; GFX90A-NEXT: ; def v1682; GFX90A-NEXT: ;;#ASMEND683; GFX90A-NEXT: v_alignbit_b32 v2, v1, v1, 16684; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4685; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]686; GFX90A-NEXT: s_waitcnt vmcnt(0)687; GFX90A-NEXT: s_setpc_b64 s[30:31]688;689; GFX942-LABEL: v_shuffle_v3f16_v2f16__1_0_0:690; GFX942: ; %bb.0:691; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)692; GFX942-NEXT: v_mov_b32_e32 v0, 0693; GFX942-NEXT: ;;#ASMSTART694; GFX942-NEXT: ; def v1695; GFX942-NEXT: ;;#ASMEND696; GFX942-NEXT: s_nop 0697; GFX942-NEXT: v_alignbit_b32 v2, v1, v1, 16698; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4699; GFX942-NEXT: global_store_dword v0, v2, s[0:1]700; GFX942-NEXT: s_waitcnt vmcnt(0)701; GFX942-NEXT: s_setpc_b64 s[30:31]702 %vec0 = call <2 x half> asm "; def $0", "=v"()703 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 0, i32 0>704 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8705 ret void706}707 708define void @v_shuffle_v3f16_v2f16__2_0_0(ptr addrspace(1) inreg %ptr) {709; GFX900-LABEL: v_shuffle_v3f16_v2f16__2_0_0:710; GFX900: ; %bb.0:711; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)712; GFX900-NEXT: v_mov_b32_e32 v0, 0713; GFX900-NEXT: ;;#ASMSTART714; GFX900-NEXT: ; def v1715; GFX900-NEXT: ;;#ASMEND716; GFX900-NEXT: v_lshlrev_b32_e32 v2, 16, v1717; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4718; GFX900-NEXT: global_store_dword v0, v2, s[16:17]719; GFX900-NEXT: s_waitcnt vmcnt(0)720; GFX900-NEXT: s_setpc_b64 s[30:31]721;722; GFX90A-LABEL: v_shuffle_v3f16_v2f16__2_0_0:723; GFX90A: ; %bb.0:724; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)725; GFX90A-NEXT: v_mov_b32_e32 v0, 0726; GFX90A-NEXT: ;;#ASMSTART727; GFX90A-NEXT: ; def v1728; GFX90A-NEXT: ;;#ASMEND729; GFX90A-NEXT: v_lshlrev_b32_e32 v2, 16, v1730; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4731; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]732; GFX90A-NEXT: s_waitcnt vmcnt(0)733; GFX90A-NEXT: s_setpc_b64 s[30:31]734;735; GFX942-LABEL: v_shuffle_v3f16_v2f16__2_0_0:736; GFX942: ; %bb.0:737; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)738; GFX942-NEXT: v_mov_b32_e32 v0, 0739; GFX942-NEXT: ;;#ASMSTART740; GFX942-NEXT: ; def v1741; GFX942-NEXT: ;;#ASMEND742; GFX942-NEXT: s_nop 0743; GFX942-NEXT: v_lshlrev_b32_e32 v2, 16, v1744; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4745; GFX942-NEXT: global_store_dword v0, v2, s[0:1]746; GFX942-NEXT: s_waitcnt vmcnt(0)747; GFX942-NEXT: s_setpc_b64 s[30:31]748 %vec0 = call <2 x half> asm "; def $0", "=v"()749 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 0, i32 0>750 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8751 ret void752}753 754define void @v_shuffle_v3f16_v2f16__3_0_0(ptr addrspace(1) inreg %ptr) {755; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_0_0:756; GFX900: ; %bb.0:757; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)758; GFX900-NEXT: v_mov_b32_e32 v0, 0759; GFX900-NEXT: ;;#ASMSTART760; GFX900-NEXT: ; def v1761; GFX900-NEXT: ;;#ASMEND762; GFX900-NEXT: ;;#ASMSTART763; GFX900-NEXT: ; def v2764; GFX900-NEXT: ;;#ASMEND765; GFX900-NEXT: v_alignbit_b32 v2, v1, v2, 16766; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4767; GFX900-NEXT: global_store_dword v0, v2, s[16:17]768; GFX900-NEXT: s_waitcnt vmcnt(0)769; GFX900-NEXT: s_setpc_b64 s[30:31]770;771; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_0_0:772; GFX90A: ; %bb.0:773; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)774; GFX90A-NEXT: v_mov_b32_e32 v0, 0775; GFX90A-NEXT: ;;#ASMSTART776; GFX90A-NEXT: ; def v1777; GFX90A-NEXT: ;;#ASMEND778; GFX90A-NEXT: ;;#ASMSTART779; GFX90A-NEXT: ; def v2780; GFX90A-NEXT: ;;#ASMEND781; GFX90A-NEXT: v_alignbit_b32 v2, v1, v2, 16782; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4783; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]784; GFX90A-NEXT: s_waitcnt vmcnt(0)785; GFX90A-NEXT: s_setpc_b64 s[30:31]786;787; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_0_0:788; GFX942: ; %bb.0:789; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)790; GFX942-NEXT: v_mov_b32_e32 v0, 0791; GFX942-NEXT: ;;#ASMSTART792; GFX942-NEXT: ; def v1793; GFX942-NEXT: ;;#ASMEND794; GFX942-NEXT: ;;#ASMSTART795; GFX942-NEXT: ; def v2796; GFX942-NEXT: ;;#ASMEND797; GFX942-NEXT: s_nop 0798; GFX942-NEXT: v_alignbit_b32 v2, v1, v2, 16799; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4800; GFX942-NEXT: global_store_dword v0, v2, s[0:1]801; GFX942-NEXT: s_waitcnt vmcnt(0)802; GFX942-NEXT: s_setpc_b64 s[30:31]803 %vec0 = call <2 x half> asm "; def $0", "=v"()804 %vec1 = call <2 x half> asm "; def $0", "=v"()805 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 0>806 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8807 ret void808}809 810define void @v_shuffle_v3f16_v2f16__3_u_0(ptr addrspace(1) inreg %ptr) {811; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_u_0:812; GFX900: ; %bb.0:813; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)814; GFX900-NEXT: v_mov_b32_e32 v0, 0815; GFX900-NEXT: ;;#ASMSTART816; GFX900-NEXT: ; def v1817; GFX900-NEXT: ;;#ASMEND818; GFX900-NEXT: ;;#ASMSTART819; GFX900-NEXT: ; def v2820; GFX900-NEXT: ;;#ASMEND821; GFX900-NEXT: v_alignbit_b32 v2, s4, v2, 16822; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4823; GFX900-NEXT: global_store_dword v0, v2, s[16:17]824; GFX900-NEXT: s_waitcnt vmcnt(0)825; GFX900-NEXT: s_setpc_b64 s[30:31]826;827; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_u_0:828; GFX90A: ; %bb.0:829; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)830; GFX90A-NEXT: v_mov_b32_e32 v0, 0831; GFX90A-NEXT: ;;#ASMSTART832; GFX90A-NEXT: ; def v1833; GFX90A-NEXT: ;;#ASMEND834; GFX90A-NEXT: ;;#ASMSTART835; GFX90A-NEXT: ; def v2836; GFX90A-NEXT: ;;#ASMEND837; GFX90A-NEXT: v_alignbit_b32 v2, s4, v2, 16838; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4839; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]840; GFX90A-NEXT: s_waitcnt vmcnt(0)841; GFX90A-NEXT: s_setpc_b64 s[30:31]842;843; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_u_0:844; GFX942: ; %bb.0:845; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)846; GFX942-NEXT: v_mov_b32_e32 v0, 0847; GFX942-NEXT: ;;#ASMSTART848; GFX942-NEXT: ; def v1849; GFX942-NEXT: ;;#ASMEND850; GFX942-NEXT: ;;#ASMSTART851; GFX942-NEXT: ; def v2852; GFX942-NEXT: ;;#ASMEND853; GFX942-NEXT: s_nop 0854; GFX942-NEXT: v_alignbit_b32 v2, s0, v2, 16855; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4856; GFX942-NEXT: global_store_dword v0, v2, s[0:1]857; GFX942-NEXT: s_waitcnt vmcnt(0)858; GFX942-NEXT: s_setpc_b64 s[30:31]859 %vec0 = call <2 x half> asm "; def $0", "=v"()860 %vec1 = call <2 x half> asm "; def $0", "=v"()861 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>862 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8863 ret void864}865 866define void @v_shuffle_v3f16_v2f16__3_1_0(ptr addrspace(1) inreg %ptr) {867; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_1_0:868; GFX900: ; %bb.0:869; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)870; GFX900-NEXT: v_mov_b32_e32 v0, 0871; GFX900-NEXT: ;;#ASMSTART872; GFX900-NEXT: ; def v1873; GFX900-NEXT: ;;#ASMEND874; GFX900-NEXT: ;;#ASMSTART875; GFX900-NEXT: ; def v2876; GFX900-NEXT: ;;#ASMEND877; GFX900-NEXT: s_mov_b32 s4, 0x7060302878; GFX900-NEXT: v_perm_b32 v2, v1, v2, s4879; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4880; GFX900-NEXT: global_store_dword v0, v2, s[16:17]881; GFX900-NEXT: s_waitcnt vmcnt(0)882; GFX900-NEXT: s_setpc_b64 s[30:31]883;884; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_1_0:885; GFX90A: ; %bb.0:886; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)887; GFX90A-NEXT: v_mov_b32_e32 v0, 0888; GFX90A-NEXT: ;;#ASMSTART889; GFX90A-NEXT: ; def v1890; GFX90A-NEXT: ;;#ASMEND891; GFX90A-NEXT: ;;#ASMSTART892; GFX90A-NEXT: ; def v2893; GFX90A-NEXT: ;;#ASMEND894; GFX90A-NEXT: s_mov_b32 s4, 0x7060302895; GFX90A-NEXT: v_perm_b32 v2, v1, v2, s4896; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4897; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]898; GFX90A-NEXT: s_waitcnt vmcnt(0)899; GFX90A-NEXT: s_setpc_b64 s[30:31]900;901; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_1_0:902; GFX942: ; %bb.0:903; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)904; GFX942-NEXT: v_mov_b32_e32 v0, 0905; GFX942-NEXT: ;;#ASMSTART906; GFX942-NEXT: ; def v1907; GFX942-NEXT: ;;#ASMEND908; GFX942-NEXT: ;;#ASMSTART909; GFX942-NEXT: ; def v2910; GFX942-NEXT: ;;#ASMEND911; GFX942-NEXT: s_mov_b32 s2, 0x7060302912; GFX942-NEXT: v_perm_b32 v2, v1, v2, s2913; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4914; GFX942-NEXT: global_store_dword v0, v2, s[0:1]915; GFX942-NEXT: s_waitcnt vmcnt(0)916; GFX942-NEXT: s_setpc_b64 s[30:31]917 %vec0 = call <2 x half> asm "; def $0", "=v"()918 %vec1 = call <2 x half> asm "; def $0", "=v"()919 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 0>920 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8921 ret void922}923 924define void @v_shuffle_v3f16_v2f16__3_2_0(ptr addrspace(1) inreg %ptr) {925; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_2_0:926; GFX900: ; %bb.0:927; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)928; GFX900-NEXT: v_mov_b32_e32 v0, 0929; GFX900-NEXT: ;;#ASMSTART930; GFX900-NEXT: ; def v1931; GFX900-NEXT: ;;#ASMEND932; GFX900-NEXT: ;;#ASMSTART933; GFX900-NEXT: ; def v2934; GFX900-NEXT: ;;#ASMEND935; GFX900-NEXT: v_alignbit_b32 v2, v2, v2, 16936; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4937; GFX900-NEXT: global_store_dword v0, v2, s[16:17]938; GFX900-NEXT: s_waitcnt vmcnt(0)939; GFX900-NEXT: s_setpc_b64 s[30:31]940;941; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_2_0:942; GFX90A: ; %bb.0:943; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)944; GFX90A-NEXT: v_mov_b32_e32 v0, 0945; GFX90A-NEXT: ;;#ASMSTART946; GFX90A-NEXT: ; def v1947; GFX90A-NEXT: ;;#ASMEND948; GFX90A-NEXT: ;;#ASMSTART949; GFX90A-NEXT: ; def v2950; GFX90A-NEXT: ;;#ASMEND951; GFX90A-NEXT: v_alignbit_b32 v2, v2, v2, 16952; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:4953; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]954; GFX90A-NEXT: s_waitcnt vmcnt(0)955; GFX90A-NEXT: s_setpc_b64 s[30:31]956;957; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_2_0:958; GFX942: ; %bb.0:959; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)960; GFX942-NEXT: v_mov_b32_e32 v0, 0961; GFX942-NEXT: ;;#ASMSTART962; GFX942-NEXT: ; def v1963; GFX942-NEXT: ;;#ASMEND964; GFX942-NEXT: ;;#ASMSTART965; GFX942-NEXT: ; def v2966; GFX942-NEXT: ;;#ASMEND967; GFX942-NEXT: s_nop 0968; GFX942-NEXT: v_alignbit_b32 v2, v2, v2, 16969; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:4970; GFX942-NEXT: global_store_dword v0, v2, s[0:1]971; GFX942-NEXT: s_waitcnt vmcnt(0)972; GFX942-NEXT: s_setpc_b64 s[30:31]973 %vec0 = call <2 x half> asm "; def $0", "=v"()974 %vec1 = call <2 x half> asm "; def $0", "=v"()975 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 0>976 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 8977 ret void978}979 980define void @v_shuffle_v3f16_v2f16__u_1_1(ptr addrspace(1) inreg %ptr) {981; GFX900-LABEL: v_shuffle_v3f16_v2f16__u_1_1:982; GFX900: ; %bb.0:983; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)984; GFX900-NEXT: v_mov_b32_e32 v0, 0985; GFX900-NEXT: ;;#ASMSTART986; GFX900-NEXT: ; def v1987; GFX900-NEXT: ;;#ASMEND988; GFX900-NEXT: global_store_dword v0, v1, s[16:17]989; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v1990; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:4991; GFX900-NEXT: s_waitcnt vmcnt(0)992; GFX900-NEXT: s_setpc_b64 s[30:31]993;994; GFX90A-LABEL: v_shuffle_v3f16_v2f16__u_1_1:995; GFX90A: ; %bb.0:996; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)997; GFX90A-NEXT: v_mov_b32_e32 v0, 0998; GFX90A-NEXT: ;;#ASMSTART999; GFX90A-NEXT: ; def v11000; GFX90A-NEXT: ;;#ASMEND1001; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1002; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11003; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41004; GFX90A-NEXT: s_waitcnt vmcnt(0)1005; GFX90A-NEXT: s_setpc_b64 s[30:31]1006;1007; GFX942-LABEL: v_shuffle_v3f16_v2f16__u_1_1:1008; GFX942: ; %bb.0:1009; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1010; GFX942-NEXT: v_mov_b32_e32 v0, 01011; GFX942-NEXT: ;;#ASMSTART1012; GFX942-NEXT: ; def v11013; GFX942-NEXT: ;;#ASMEND1014; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1015; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11016; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41017; GFX942-NEXT: s_waitcnt vmcnt(0)1018; GFX942-NEXT: s_setpc_b64 s[30:31]1019 %vec0 = call <2 x half> asm "; def $0", "=v"()1020 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 poison, i32 1, i32 1>1021 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81022 ret void1023}1024 1025define void @v_shuffle_v3f16_v2f16__0_1_1(ptr addrspace(1) inreg %ptr) {1026; GFX900-LABEL: v_shuffle_v3f16_v2f16__0_1_1:1027; GFX900: ; %bb.0:1028; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1029; GFX900-NEXT: v_mov_b32_e32 v0, 01030; GFX900-NEXT: ;;#ASMSTART1031; GFX900-NEXT: ; def v11032; GFX900-NEXT: ;;#ASMEND1033; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1034; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11035; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41036; GFX900-NEXT: s_waitcnt vmcnt(0)1037; GFX900-NEXT: s_setpc_b64 s[30:31]1038;1039; GFX90A-LABEL: v_shuffle_v3f16_v2f16__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_dword v0, v1, s[16:17]1047; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11048; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41049; GFX90A-NEXT: s_waitcnt vmcnt(0)1050; GFX90A-NEXT: s_setpc_b64 s[30:31]1051;1052; GFX942-LABEL: v_shuffle_v3f16_v2f16__0_1_1:1053; GFX942: ; %bb.0:1054; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1055; GFX942-NEXT: v_mov_b32_e32 v0, 01056; GFX942-NEXT: ;;#ASMSTART1057; GFX942-NEXT: ; def v11058; GFX942-NEXT: ;;#ASMEND1059; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1060; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11061; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41062; GFX942-NEXT: s_waitcnt vmcnt(0)1063; GFX942-NEXT: s_setpc_b64 s[30:31]1064 %vec0 = call <2 x half> asm "; def $0", "=v"()1065 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 0, i32 1, i32 1>1066 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81067 ret void1068}1069 1070define void @v_shuffle_v3f16_v2f16__1_1_1(ptr addrspace(1) inreg %ptr) {1071; GFX900-LABEL: v_shuffle_v3f16_v2f16__1_1_1:1072; GFX900: ; %bb.0:1073; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1074; GFX900-NEXT: ;;#ASMSTART1075; GFX900-NEXT: ; def v11076; GFX900-NEXT: ;;#ASMEND1077; GFX900-NEXT: s_mov_b32 s4, 0x70603021078; GFX900-NEXT: v_mov_b32_e32 v0, 01079; GFX900-NEXT: v_perm_b32 v2, v1, v1, s41080; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11081; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1082; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41083; GFX900-NEXT: s_waitcnt vmcnt(0)1084; GFX900-NEXT: s_setpc_b64 s[30:31]1085;1086; GFX90A-LABEL: v_shuffle_v3f16_v2f16__1_1_1:1087; GFX90A: ; %bb.0:1088; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1089; GFX90A-NEXT: ;;#ASMSTART1090; GFX90A-NEXT: ; def v11091; GFX90A-NEXT: ;;#ASMEND1092; GFX90A-NEXT: s_mov_b32 s4, 0x70603021093; GFX90A-NEXT: v_mov_b32_e32 v0, 01094; GFX90A-NEXT: v_perm_b32 v2, v1, v1, s41095; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11096; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1097; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41098; GFX90A-NEXT: s_waitcnt vmcnt(0)1099; GFX90A-NEXT: s_setpc_b64 s[30:31]1100;1101; GFX942-LABEL: v_shuffle_v3f16_v2f16__1_1_1:1102; GFX942: ; %bb.0:1103; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1104; GFX942-NEXT: ;;#ASMSTART1105; GFX942-NEXT: ; def v11106; GFX942-NEXT: ;;#ASMEND1107; GFX942-NEXT: s_mov_b32 s2, 0x70603021108; GFX942-NEXT: v_mov_b32_e32 v0, 01109; GFX942-NEXT: v_perm_b32 v2, v1, v1, s21110; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11111; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1112; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41113; GFX942-NEXT: s_waitcnt vmcnt(0)1114; GFX942-NEXT: s_setpc_b64 s[30:31]1115 %vec0 = call <2 x half> asm "; def $0", "=v"()1116 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 1, i32 1>1117 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81118 ret void1119}1120 1121define void @v_shuffle_v3f16_v2f16__2_1_1(ptr addrspace(1) inreg %ptr) {1122; GFX900-LABEL: v_shuffle_v3f16_v2f16__2_1_1:1123; GFX900: ; %bb.0:1124; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1125; GFX900-NEXT: v_mov_b32_e32 v0, 01126; GFX900-NEXT: ;;#ASMSTART1127; GFX900-NEXT: ; def v11128; GFX900-NEXT: ;;#ASMEND1129; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1130; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11131; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41132; GFX900-NEXT: s_waitcnt vmcnt(0)1133; GFX900-NEXT: s_setpc_b64 s[30:31]1134;1135; GFX90A-LABEL: v_shuffle_v3f16_v2f16__2_1_1:1136; GFX90A: ; %bb.0:1137; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1138; GFX90A-NEXT: v_mov_b32_e32 v0, 01139; GFX90A-NEXT: ;;#ASMSTART1140; GFX90A-NEXT: ; def v11141; GFX90A-NEXT: ;;#ASMEND1142; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1143; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11144; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41145; GFX90A-NEXT: s_waitcnt vmcnt(0)1146; GFX90A-NEXT: s_setpc_b64 s[30:31]1147;1148; GFX942-LABEL: v_shuffle_v3f16_v2f16__2_1_1:1149; GFX942: ; %bb.0:1150; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1151; GFX942-NEXT: v_mov_b32_e32 v0, 01152; GFX942-NEXT: ;;#ASMSTART1153; GFX942-NEXT: ; def v11154; GFX942-NEXT: ;;#ASMEND1155; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1156; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11157; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41158; GFX942-NEXT: s_waitcnt vmcnt(0)1159; GFX942-NEXT: s_setpc_b64 s[30:31]1160 %vec0 = call <2 x half> asm "; def $0", "=v"()1161 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 1, i32 1>1162 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81163 ret void1164}1165 1166define void @v_shuffle_v3f16_v2f16__3_1_1(ptr addrspace(1) inreg %ptr) {1167; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_1_1:1168; GFX900: ; %bb.0:1169; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1170; GFX900-NEXT: ;;#ASMSTART1171; GFX900-NEXT: ; def v11172; GFX900-NEXT: ;;#ASMEND1173; GFX900-NEXT: ;;#ASMSTART1174; GFX900-NEXT: ; def v21175; GFX900-NEXT: ;;#ASMEND1176; GFX900-NEXT: s_mov_b32 s4, 0x70603021177; GFX900-NEXT: v_mov_b32_e32 v0, 01178; GFX900-NEXT: v_perm_b32 v2, v1, v2, s41179; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11180; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1181; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41182; GFX900-NEXT: s_waitcnt vmcnt(0)1183; GFX900-NEXT: s_setpc_b64 s[30:31]1184;1185; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_1_1:1186; GFX90A: ; %bb.0:1187; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1188; GFX90A-NEXT: ;;#ASMSTART1189; GFX90A-NEXT: ; def v11190; GFX90A-NEXT: ;;#ASMEND1191; GFX90A-NEXT: ;;#ASMSTART1192; GFX90A-NEXT: ; def v21193; GFX90A-NEXT: ;;#ASMEND1194; GFX90A-NEXT: s_mov_b32 s4, 0x70603021195; GFX90A-NEXT: v_mov_b32_e32 v0, 01196; GFX90A-NEXT: v_perm_b32 v2, v1, v2, s41197; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11198; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1199; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41200; GFX90A-NEXT: s_waitcnt vmcnt(0)1201; GFX90A-NEXT: s_setpc_b64 s[30:31]1202;1203; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_1_1:1204; GFX942: ; %bb.0:1205; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1206; GFX942-NEXT: ;;#ASMSTART1207; GFX942-NEXT: ; def v11208; GFX942-NEXT: ;;#ASMEND1209; GFX942-NEXT: ;;#ASMSTART1210; GFX942-NEXT: ; def v21211; GFX942-NEXT: ;;#ASMEND1212; GFX942-NEXT: s_mov_b32 s2, 0x70603021213; GFX942-NEXT: v_mov_b32_e32 v0, 01214; GFX942-NEXT: v_perm_b32 v2, v1, v2, s21215; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11216; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1217; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41218; GFX942-NEXT: s_waitcnt vmcnt(0)1219; GFX942-NEXT: s_setpc_b64 s[30:31]1220 %vec0 = call <2 x half> asm "; def $0", "=v"()1221 %vec1 = call <2 x half> asm "; def $0", "=v"()1222 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 1>1223 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81224 ret void1225}1226 1227define void @v_shuffle_v3f16_v2f16__3_u_1(ptr addrspace(1) inreg %ptr) {1228; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_u_1:1229; GFX900: ; %bb.0:1230; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1231; GFX900-NEXT: v_mov_b32_e32 v0, 01232; GFX900-NEXT: ;;#ASMSTART1233; GFX900-NEXT: ; def v11234; GFX900-NEXT: ;;#ASMEND1235; GFX900-NEXT: ;;#ASMSTART1236; GFX900-NEXT: ; def v21237; GFX900-NEXT: ;;#ASMEND1238; GFX900-NEXT: v_alignbit_b32 v2, s4, v2, 161239; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41240; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1241; GFX900-NEXT: s_waitcnt vmcnt(0)1242; GFX900-NEXT: s_setpc_b64 s[30:31]1243;1244; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_u_1:1245; GFX90A: ; %bb.0:1246; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1247; GFX90A-NEXT: v_mov_b32_e32 v0, 01248; GFX90A-NEXT: ;;#ASMSTART1249; GFX90A-NEXT: ; def v11250; GFX90A-NEXT: ;;#ASMEND1251; GFX90A-NEXT: ;;#ASMSTART1252; GFX90A-NEXT: ; def v21253; GFX90A-NEXT: ;;#ASMEND1254; GFX90A-NEXT: v_alignbit_b32 v2, s4, v2, 161255; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41256; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1257; GFX90A-NEXT: s_waitcnt vmcnt(0)1258; GFX90A-NEXT: s_setpc_b64 s[30:31]1259;1260; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_u_1:1261; GFX942: ; %bb.0:1262; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1263; GFX942-NEXT: v_mov_b32_e32 v0, 01264; GFX942-NEXT: ;;#ASMSTART1265; GFX942-NEXT: ; def v11266; GFX942-NEXT: ;;#ASMEND1267; GFX942-NEXT: ;;#ASMSTART1268; GFX942-NEXT: ; def v21269; GFX942-NEXT: ;;#ASMEND1270; GFX942-NEXT: s_nop 01271; GFX942-NEXT: v_alignbit_b32 v2, s0, v2, 161272; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41273; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1274; GFX942-NEXT: s_waitcnt vmcnt(0)1275; GFX942-NEXT: s_setpc_b64 s[30:31]1276 %vec0 = call <2 x half> asm "; def $0", "=v"()1277 %vec1 = call <2 x half> asm "; def $0", "=v"()1278 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>1279 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81280 ret void1281}1282 1283define void @v_shuffle_v3f16_v2f16__3_0_1(ptr addrspace(1) inreg %ptr) {1284; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_0_1:1285; GFX900: ; %bb.0:1286; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1287; GFX900-NEXT: ;;#ASMSTART1288; GFX900-NEXT: ; def v11289; GFX900-NEXT: ;;#ASMEND1290; GFX900-NEXT: ;;#ASMSTART1291; GFX900-NEXT: ; def v21292; GFX900-NEXT: ;;#ASMEND1293; GFX900-NEXT: v_mov_b32_e32 v0, 01294; GFX900-NEXT: v_alignbit_b32 v2, v1, v2, 161295; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11296; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41297; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1298; GFX900-NEXT: s_waitcnt vmcnt(0)1299; GFX900-NEXT: s_setpc_b64 s[30:31]1300;1301; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_0_1:1302; GFX90A: ; %bb.0:1303; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1304; GFX90A-NEXT: ;;#ASMSTART1305; GFX90A-NEXT: ; def v11306; GFX90A-NEXT: ;;#ASMEND1307; GFX90A-NEXT: ;;#ASMSTART1308; GFX90A-NEXT: ; def v21309; GFX90A-NEXT: ;;#ASMEND1310; GFX90A-NEXT: v_mov_b32_e32 v0, 01311; GFX90A-NEXT: v_alignbit_b32 v2, v1, v2, 161312; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11313; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41314; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1315; GFX90A-NEXT: s_waitcnt vmcnt(0)1316; GFX90A-NEXT: s_setpc_b64 s[30:31]1317;1318; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_0_1:1319; GFX942: ; %bb.0:1320; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1321; GFX942-NEXT: ;;#ASMSTART1322; GFX942-NEXT: ; def v11323; GFX942-NEXT: ;;#ASMEND1324; GFX942-NEXT: ;;#ASMSTART1325; GFX942-NEXT: ; def v21326; GFX942-NEXT: ;;#ASMEND1327; GFX942-NEXT: v_mov_b32_e32 v0, 01328; GFX942-NEXT: v_alignbit_b32 v2, v1, v2, 161329; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11330; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41331; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1332; GFX942-NEXT: s_waitcnt vmcnt(0)1333; GFX942-NEXT: s_setpc_b64 s[30:31]1334 %vec0 = call <2 x half> asm "; def $0", "=v"()1335 %vec1 = call <2 x half> asm "; def $0", "=v"()1336 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 1>1337 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81338 ret void1339}1340 1341define void @v_shuffle_v3f16_v2f16__3_2_1(ptr addrspace(1) inreg %ptr) {1342; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_2_1:1343; GFX900: ; %bb.0:1344; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1345; GFX900-NEXT: v_mov_b32_e32 v0, 01346; GFX900-NEXT: ;;#ASMSTART1347; GFX900-NEXT: ; def v11348; GFX900-NEXT: ;;#ASMEND1349; GFX900-NEXT: ;;#ASMSTART1350; GFX900-NEXT: ; def v21351; GFX900-NEXT: ;;#ASMEND1352; GFX900-NEXT: v_alignbit_b32 v2, v2, v2, 161353; GFX900-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41354; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1355; GFX900-NEXT: s_waitcnt vmcnt(0)1356; GFX900-NEXT: s_setpc_b64 s[30:31]1357;1358; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_2_1:1359; GFX90A: ; %bb.0:1360; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1361; GFX90A-NEXT: v_mov_b32_e32 v0, 01362; GFX90A-NEXT: ;;#ASMSTART1363; GFX90A-NEXT: ; def v11364; GFX90A-NEXT: ;;#ASMEND1365; GFX90A-NEXT: ;;#ASMSTART1366; GFX90A-NEXT: ; def v21367; GFX90A-NEXT: ;;#ASMEND1368; GFX90A-NEXT: v_alignbit_b32 v2, v2, v2, 161369; GFX90A-NEXT: global_store_short_d16_hi v0, v1, s[16:17] offset:41370; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1371; GFX90A-NEXT: s_waitcnt vmcnt(0)1372; GFX90A-NEXT: s_setpc_b64 s[30:31]1373;1374; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_2_1:1375; GFX942: ; %bb.0:1376; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1377; GFX942-NEXT: v_mov_b32_e32 v0, 01378; GFX942-NEXT: ;;#ASMSTART1379; GFX942-NEXT: ; def v11380; GFX942-NEXT: ;;#ASMEND1381; GFX942-NEXT: ;;#ASMSTART1382; GFX942-NEXT: ; def v21383; GFX942-NEXT: ;;#ASMEND1384; GFX942-NEXT: s_nop 01385; GFX942-NEXT: v_alignbit_b32 v2, v2, v2, 161386; GFX942-NEXT: global_store_short_d16_hi v0, v1, s[0:1] offset:41387; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1388; GFX942-NEXT: s_waitcnt vmcnt(0)1389; GFX942-NEXT: s_setpc_b64 s[30:31]1390 %vec0 = call <2 x half> asm "; def $0", "=v"()1391 %vec1 = call <2 x half> asm "; def $0", "=v"()1392 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 1>1393 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81394 ret void1395}1396 1397define void @v_shuffle_v3f16_v2f16__u_2_2(ptr addrspace(1) inreg %ptr) {1398; GFX9-LABEL: v_shuffle_v3f16_v2f16__u_2_2:1399; GFX9: ; %bb.0:1400; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1401; GFX9-NEXT: s_setpc_b64 s[30:31]1402 %vec0 = call <2 x half> asm "; def $0", "=v"()1403 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 poison, i32 2, i32 2>1404 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81405 ret void1406}1407 1408define void @v_shuffle_v3f16_v2f16__0_2_2(ptr addrspace(1) inreg %ptr) {1409; GFX900-LABEL: v_shuffle_v3f16_v2f16__0_2_2:1410; GFX900: ; %bb.0:1411; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1412; GFX900-NEXT: v_mov_b32_e32 v0, 01413; GFX900-NEXT: ;;#ASMSTART1414; GFX900-NEXT: ; def v11415; GFX900-NEXT: ;;#ASMEND1416; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1417; GFX900-NEXT: s_waitcnt vmcnt(0)1418; GFX900-NEXT: s_setpc_b64 s[30:31]1419;1420; GFX90A-LABEL: v_shuffle_v3f16_v2f16__0_2_2:1421; GFX90A: ; %bb.0:1422; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1423; GFX90A-NEXT: v_mov_b32_e32 v0, 01424; GFX90A-NEXT: ;;#ASMSTART1425; GFX90A-NEXT: ; def v11426; GFX90A-NEXT: ;;#ASMEND1427; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1428; GFX90A-NEXT: s_waitcnt vmcnt(0)1429; GFX90A-NEXT: s_setpc_b64 s[30:31]1430;1431; GFX942-LABEL: v_shuffle_v3f16_v2f16__0_2_2:1432; GFX942: ; %bb.0:1433; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1434; GFX942-NEXT: v_mov_b32_e32 v0, 01435; GFX942-NEXT: ;;#ASMSTART1436; GFX942-NEXT: ; def v11437; GFX942-NEXT: ;;#ASMEND1438; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1439; GFX942-NEXT: s_waitcnt vmcnt(0)1440; GFX942-NEXT: s_setpc_b64 s[30:31]1441 %vec0 = call <2 x half> asm "; def $0", "=v"()1442 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 0, i32 2, i32 2>1443 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81444 ret void1445}1446 1447define void @v_shuffle_v3f16_v2f16__1_2_2(ptr addrspace(1) inreg %ptr) {1448; GFX900-LABEL: v_shuffle_v3f16_v2f16__1_2_2:1449; GFX900: ; %bb.0:1450; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1451; GFX900-NEXT: ;;#ASMSTART1452; GFX900-NEXT: ; def v11453; GFX900-NEXT: ;;#ASMEND1454; GFX900-NEXT: v_mov_b32_e32 v0, 01455; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 161456; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1457; GFX900-NEXT: s_waitcnt vmcnt(0)1458; GFX900-NEXT: s_setpc_b64 s[30:31]1459;1460; GFX90A-LABEL: v_shuffle_v3f16_v2f16__1_2_2:1461; GFX90A: ; %bb.0:1462; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1463; GFX90A-NEXT: ;;#ASMSTART1464; GFX90A-NEXT: ; def v11465; GFX90A-NEXT: ;;#ASMEND1466; GFX90A-NEXT: v_mov_b32_e32 v0, 01467; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 161468; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1469; GFX90A-NEXT: s_waitcnt vmcnt(0)1470; GFX90A-NEXT: s_setpc_b64 s[30:31]1471;1472; GFX942-LABEL: v_shuffle_v3f16_v2f16__1_2_2:1473; GFX942: ; %bb.0:1474; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1475; GFX942-NEXT: ;;#ASMSTART1476; GFX942-NEXT: ; def v11477; GFX942-NEXT: ;;#ASMEND1478; GFX942-NEXT: v_mov_b32_e32 v0, 01479; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 161480; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1481; GFX942-NEXT: s_waitcnt vmcnt(0)1482; GFX942-NEXT: s_setpc_b64 s[30:31]1483 %vec0 = call <2 x half> asm "; def $0", "=v"()1484 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 2, i32 2>1485 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81486 ret void1487}1488 1489define void @v_shuffle_v3f16_v2f16__2_2_2(ptr addrspace(1) inreg %ptr) {1490; GFX9-LABEL: v_shuffle_v3f16_v2f16__2_2_2:1491; GFX9: ; %bb.0:1492; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1493; GFX9-NEXT: s_setpc_b64 s[30:31]1494 %vec0 = call <2 x half> asm "; def $0", "=v"()1495 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 2, i32 2>1496 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81497 ret void1498}1499 1500define void @v_shuffle_v3f16_v2f16__3_2_2(ptr addrspace(1) inreg %ptr) {1501; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_2_2:1502; GFX900: ; %bb.0:1503; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1504; GFX900-NEXT: v_mov_b32_e32 v0, 01505; GFX900-NEXT: ;;#ASMSTART1506; GFX900-NEXT: ; def v11507; GFX900-NEXT: ;;#ASMEND1508; GFX900-NEXT: v_alignbit_b32 v2, v1, v1, 161509; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41510; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1511; GFX900-NEXT: s_waitcnt vmcnt(0)1512; GFX900-NEXT: s_setpc_b64 s[30:31]1513;1514; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_2_2:1515; GFX90A: ; %bb.0:1516; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1517; GFX90A-NEXT: v_mov_b32_e32 v0, 01518; GFX90A-NEXT: ;;#ASMSTART1519; GFX90A-NEXT: ; def v11520; GFX90A-NEXT: ;;#ASMEND1521; GFX90A-NEXT: v_alignbit_b32 v2, v1, v1, 161522; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41523; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1524; GFX90A-NEXT: s_waitcnt vmcnt(0)1525; GFX90A-NEXT: s_setpc_b64 s[30:31]1526;1527; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_2_2:1528; GFX942: ; %bb.0:1529; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1530; GFX942-NEXT: v_mov_b32_e32 v0, 01531; GFX942-NEXT: ;;#ASMSTART1532; GFX942-NEXT: ; def v11533; GFX942-NEXT: ;;#ASMEND1534; GFX942-NEXT: s_nop 01535; GFX942-NEXT: v_alignbit_b32 v2, v1, v1, 161536; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41537; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1538; GFX942-NEXT: s_waitcnt vmcnt(0)1539; GFX942-NEXT: s_setpc_b64 s[30:31]1540 %vec0 = call <2 x half> asm "; def $0", "=v"()1541 %vec1 = call <2 x half> asm "; def $0", "=v"()1542 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 2>1543 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81544 ret void1545}1546 1547define void @v_shuffle_v3f16_v2f16__3_u_2(ptr addrspace(1) inreg %ptr) {1548; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_u_2:1549; GFX900: ; %bb.0:1550; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1551; GFX900-NEXT: v_mov_b32_e32 v0, 01552; GFX900-NEXT: ;;#ASMSTART1553; GFX900-NEXT: ; def v11554; GFX900-NEXT: ;;#ASMEND1555; GFX900-NEXT: v_alignbit_b32 v2, s4, v1, 161556; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41557; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1558; GFX900-NEXT: s_waitcnt vmcnt(0)1559; GFX900-NEXT: s_setpc_b64 s[30:31]1560;1561; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_u_2:1562; GFX90A: ; %bb.0:1563; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1564; GFX90A-NEXT: v_mov_b32_e32 v0, 01565; GFX90A-NEXT: ;;#ASMSTART1566; GFX90A-NEXT: ; def v11567; GFX90A-NEXT: ;;#ASMEND1568; GFX90A-NEXT: v_alignbit_b32 v2, s4, v1, 161569; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41570; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1571; GFX90A-NEXT: s_waitcnt vmcnt(0)1572; GFX90A-NEXT: s_setpc_b64 s[30:31]1573;1574; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_u_2:1575; GFX942: ; %bb.0:1576; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX942-NEXT: v_mov_b32_e32 v0, 01578; GFX942-NEXT: ;;#ASMSTART1579; GFX942-NEXT: ; def v11580; GFX942-NEXT: ;;#ASMEND1581; GFX942-NEXT: s_nop 01582; GFX942-NEXT: v_alignbit_b32 v2, s0, v1, 161583; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41584; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1585; GFX942-NEXT: s_waitcnt vmcnt(0)1586; GFX942-NEXT: s_setpc_b64 s[30:31]1587 %vec0 = call <2 x half> asm "; def $0", "=v"()1588 %vec1 = call <2 x half> asm "; def $0", "=v"()1589 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>1590 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81591 ret void1592}1593 1594define void @v_shuffle_v3f16_v2f16__3_0_2(ptr addrspace(1) inreg %ptr) {1595; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_0_2:1596; GFX900: ; %bb.0:1597; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1598; GFX900-NEXT: v_mov_b32_e32 v0, 01599; GFX900-NEXT: ;;#ASMSTART1600; GFX900-NEXT: ; def v11601; GFX900-NEXT: ;;#ASMEND1602; GFX900-NEXT: ;;#ASMSTART1603; GFX900-NEXT: ; def v21604; GFX900-NEXT: ;;#ASMEND1605; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 161606; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41607; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1608; GFX900-NEXT: s_waitcnt vmcnt(0)1609; GFX900-NEXT: s_setpc_b64 s[30:31]1610;1611; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_0_2:1612; GFX90A: ; %bb.0:1613; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1614; GFX90A-NEXT: v_mov_b32_e32 v0, 01615; GFX90A-NEXT: ;;#ASMSTART1616; GFX90A-NEXT: ; def v11617; GFX90A-NEXT: ;;#ASMEND1618; GFX90A-NEXT: ;;#ASMSTART1619; GFX90A-NEXT: ; def v21620; GFX90A-NEXT: ;;#ASMEND1621; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 161622; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41623; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1624; GFX90A-NEXT: s_waitcnt vmcnt(0)1625; GFX90A-NEXT: s_setpc_b64 s[30:31]1626;1627; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_0_2:1628; GFX942: ; %bb.0:1629; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1630; GFX942-NEXT: v_mov_b32_e32 v0, 01631; GFX942-NEXT: ;;#ASMSTART1632; GFX942-NEXT: ; def v11633; GFX942-NEXT: ;;#ASMEND1634; GFX942-NEXT: ;;#ASMSTART1635; GFX942-NEXT: ; def v21636; GFX942-NEXT: ;;#ASMEND1637; GFX942-NEXT: s_nop 01638; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 161639; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:41640; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1641; GFX942-NEXT: s_waitcnt vmcnt(0)1642; GFX942-NEXT: s_setpc_b64 s[30:31]1643 %vec0 = call <2 x half> asm "; def $0", "=v"()1644 %vec1 = call <2 x half> asm "; def $0", "=v"()1645 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 2>1646 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81647 ret void1648}1649 1650define void @v_shuffle_v3f16_v2f16__3_1_2(ptr addrspace(1) inreg %ptr) {1651; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_1_2:1652; GFX900: ; %bb.0:1653; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1654; GFX900-NEXT: v_mov_b32_e32 v0, 01655; GFX900-NEXT: ;;#ASMSTART1656; GFX900-NEXT: ; def v11657; GFX900-NEXT: ;;#ASMEND1658; GFX900-NEXT: ;;#ASMSTART1659; GFX900-NEXT: ; def v21660; GFX900-NEXT: ;;#ASMEND1661; GFX900-NEXT: s_mov_b32 s4, 0x70603021662; GFX900-NEXT: v_perm_b32 v1, v1, v2, s41663; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41664; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1665; GFX900-NEXT: s_waitcnt vmcnt(0)1666; GFX900-NEXT: s_setpc_b64 s[30:31]1667;1668; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_1_2:1669; GFX90A: ; %bb.0:1670; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1671; GFX90A-NEXT: v_mov_b32_e32 v0, 01672; GFX90A-NEXT: ;;#ASMSTART1673; GFX90A-NEXT: ; def v11674; GFX90A-NEXT: ;;#ASMEND1675; GFX90A-NEXT: ;;#ASMSTART1676; GFX90A-NEXT: ; def v21677; GFX90A-NEXT: ;;#ASMEND1678; GFX90A-NEXT: s_mov_b32 s4, 0x70603021679; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s41680; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41681; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1682; GFX90A-NEXT: s_waitcnt vmcnt(0)1683; GFX90A-NEXT: s_setpc_b64 s[30:31]1684;1685; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_1_2:1686; GFX942: ; %bb.0:1687; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1688; GFX942-NEXT: v_mov_b32_e32 v0, 01689; GFX942-NEXT: ;;#ASMSTART1690; GFX942-NEXT: ; def v11691; GFX942-NEXT: ;;#ASMEND1692; GFX942-NEXT: ;;#ASMSTART1693; GFX942-NEXT: ; def v21694; GFX942-NEXT: ;;#ASMEND1695; GFX942-NEXT: s_mov_b32 s2, 0x70603021696; GFX942-NEXT: v_perm_b32 v1, v1, v2, s21697; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:41698; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1699; GFX942-NEXT: s_waitcnt vmcnt(0)1700; GFX942-NEXT: s_setpc_b64 s[30:31]1701 %vec0 = call <2 x half> asm "; def $0", "=v"()1702 %vec1 = call <2 x half> asm "; def $0", "=v"()1703 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 2>1704 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81705 ret void1706}1707 1708define void @v_shuffle_v3f16_v2f16__u_3_3(ptr addrspace(1) inreg %ptr) {1709; GFX900-LABEL: v_shuffle_v3f16_v2f16__u_3_3:1710; GFX900: ; %bb.0:1711; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1712; GFX900-NEXT: v_mov_b32_e32 v0, 01713; GFX900-NEXT: ;;#ASMSTART1714; GFX900-NEXT: ; def v11715; GFX900-NEXT: ;;#ASMEND1716; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1717; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11718; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41719; GFX900-NEXT: s_waitcnt vmcnt(0)1720; GFX900-NEXT: s_setpc_b64 s[30:31]1721;1722; GFX90A-LABEL: v_shuffle_v3f16_v2f16__u_3_3:1723; GFX90A: ; %bb.0:1724; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1725; GFX90A-NEXT: v_mov_b32_e32 v0, 01726; GFX90A-NEXT: ;;#ASMSTART1727; GFX90A-NEXT: ; def v11728; GFX90A-NEXT: ;;#ASMEND1729; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1730; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11731; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41732; GFX90A-NEXT: s_waitcnt vmcnt(0)1733; GFX90A-NEXT: s_setpc_b64 s[30:31]1734;1735; GFX942-LABEL: v_shuffle_v3f16_v2f16__u_3_3:1736; GFX942: ; %bb.0:1737; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1738; GFX942-NEXT: v_mov_b32_e32 v0, 01739; GFX942-NEXT: ;;#ASMSTART1740; GFX942-NEXT: ; def v11741; GFX942-NEXT: ;;#ASMEND1742; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1743; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11744; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41745; GFX942-NEXT: s_waitcnt vmcnt(0)1746; GFX942-NEXT: s_setpc_b64 s[30:31]1747 %vec0 = call <2 x half> asm "; def $0", "=v"()1748 %vec1 = call <2 x half> asm "; def $0", "=v"()1749 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>1750 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81751 ret void1752}1753 1754define void @v_shuffle_v3f16_v2f16__0_3_3(ptr addrspace(1) inreg %ptr) {1755; GFX900-LABEL: v_shuffle_v3f16_v2f16__0_3_3:1756; GFX900: ; %bb.0:1757; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1758; GFX900-NEXT: ;;#ASMSTART1759; GFX900-NEXT: ; def v11760; GFX900-NEXT: ;;#ASMEND1761; GFX900-NEXT: ;;#ASMSTART1762; GFX900-NEXT: ; def v21763; GFX900-NEXT: ;;#ASMEND1764; GFX900-NEXT: s_mov_b32 s4, 0xffff1765; GFX900-NEXT: v_mov_b32_e32 v0, 01766; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v21767; GFX900-NEXT: v_lshrrev_b32_e32 v2, 16, v21768; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41769; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1770; GFX900-NEXT: s_waitcnt vmcnt(0)1771; GFX900-NEXT: s_setpc_b64 s[30:31]1772;1773; GFX90A-LABEL: v_shuffle_v3f16_v2f16__0_3_3:1774; GFX90A: ; %bb.0:1775; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1776; GFX90A-NEXT: ;;#ASMSTART1777; GFX90A-NEXT: ; def v11778; GFX90A-NEXT: ;;#ASMEND1779; GFX90A-NEXT: ;;#ASMSTART1780; GFX90A-NEXT: ; def v21781; GFX90A-NEXT: ;;#ASMEND1782; GFX90A-NEXT: s_mov_b32 s4, 0xffff1783; GFX90A-NEXT: v_mov_b32_e32 v0, 01784; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v21785; GFX90A-NEXT: v_lshrrev_b32_e32 v2, 16, v21786; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:41787; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1788; GFX90A-NEXT: s_waitcnt vmcnt(0)1789; GFX90A-NEXT: s_setpc_b64 s[30:31]1790;1791; GFX942-LABEL: v_shuffle_v3f16_v2f16__0_3_3:1792; GFX942: ; %bb.0:1793; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1794; GFX942-NEXT: ;;#ASMSTART1795; GFX942-NEXT: ; def v11796; GFX942-NEXT: ;;#ASMEND1797; GFX942-NEXT: ;;#ASMSTART1798; GFX942-NEXT: ; def v21799; GFX942-NEXT: ;;#ASMEND1800; GFX942-NEXT: s_mov_b32 s2, 0xffff1801; GFX942-NEXT: v_mov_b32_e32 v0, 01802; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v21803; GFX942-NEXT: v_lshrrev_b32_e32 v2, 16, v21804; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:41805; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1806; GFX942-NEXT: s_waitcnt vmcnt(0)1807; GFX942-NEXT: s_setpc_b64 s[30:31]1808 %vec0 = call <2 x half> asm "; def $0", "=v"()1809 %vec1 = call <2 x half> asm "; def $0", "=v"()1810 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 0, i32 3, i32 3>1811 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81812 ret void1813}1814 1815define void @v_shuffle_v3f16_v2f16__1_3_3(ptr addrspace(1) inreg %ptr) {1816; GFX900-LABEL: v_shuffle_v3f16_v2f16__1_3_3:1817; GFX900: ; %bb.0:1818; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1819; GFX900-NEXT: ;;#ASMSTART1820; GFX900-NEXT: ; def v11821; GFX900-NEXT: ;;#ASMEND1822; GFX900-NEXT: s_mov_b32 s4, 0x70603021823; GFX900-NEXT: v_mov_b32_e32 v0, 01824; GFX900-NEXT: ;;#ASMSTART1825; GFX900-NEXT: ; def v21826; GFX900-NEXT: ;;#ASMEND1827; GFX900-NEXT: v_perm_b32 v1, v2, v1, s41828; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1829; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v21830; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41831; GFX900-NEXT: s_waitcnt vmcnt(0)1832; GFX900-NEXT: s_setpc_b64 s[30:31]1833;1834; GFX90A-LABEL: v_shuffle_v3f16_v2f16__1_3_3:1835; GFX90A: ; %bb.0:1836; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1837; GFX90A-NEXT: ;;#ASMSTART1838; GFX90A-NEXT: ; def v11839; GFX90A-NEXT: ;;#ASMEND1840; GFX90A-NEXT: s_mov_b32 s4, 0x70603021841; GFX90A-NEXT: v_mov_b32_e32 v0, 01842; GFX90A-NEXT: ;;#ASMSTART1843; GFX90A-NEXT: ; def v21844; GFX90A-NEXT: ;;#ASMEND1845; GFX90A-NEXT: v_perm_b32 v1, v2, v1, s41846; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1847; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v21848; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41849; GFX90A-NEXT: s_waitcnt vmcnt(0)1850; GFX90A-NEXT: s_setpc_b64 s[30:31]1851;1852; GFX942-LABEL: v_shuffle_v3f16_v2f16__1_3_3:1853; GFX942: ; %bb.0:1854; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1855; GFX942-NEXT: ;;#ASMSTART1856; GFX942-NEXT: ; def v11857; GFX942-NEXT: ;;#ASMEND1858; GFX942-NEXT: s_mov_b32 s2, 0x70603021859; GFX942-NEXT: v_mov_b32_e32 v0, 01860; GFX942-NEXT: ;;#ASMSTART1861; GFX942-NEXT: ; def v21862; GFX942-NEXT: ;;#ASMEND1863; GFX942-NEXT: s_nop 01864; GFX942-NEXT: v_perm_b32 v1, v2, v1, s21865; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1866; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v21867; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41868; GFX942-NEXT: s_waitcnt vmcnt(0)1869; GFX942-NEXT: s_setpc_b64 s[30:31]1870 %vec0 = call <2 x half> asm "; def $0", "=v"()1871 %vec1 = call <2 x half> asm "; def $0", "=v"()1872 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 1, i32 3, i32 3>1873 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81874 ret void1875}1876 1877define void @v_shuffle_v3f16_v2f16__2_3_3(ptr addrspace(1) inreg %ptr) {1878; GFX900-LABEL: v_shuffle_v3f16_v2f16__2_3_3:1879; GFX900: ; %bb.0:1880; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1881; GFX900-NEXT: v_mov_b32_e32 v0, 01882; GFX900-NEXT: ;;#ASMSTART1883; GFX900-NEXT: ; def v11884; GFX900-NEXT: ;;#ASMEND1885; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1886; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11887; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41888; GFX900-NEXT: s_waitcnt vmcnt(0)1889; GFX900-NEXT: s_setpc_b64 s[30:31]1890;1891; GFX90A-LABEL: v_shuffle_v3f16_v2f16__2_3_3:1892; GFX90A: ; %bb.0:1893; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1894; GFX90A-NEXT: v_mov_b32_e32 v0, 01895; GFX90A-NEXT: ;;#ASMSTART1896; GFX90A-NEXT: ; def v11897; GFX90A-NEXT: ;;#ASMEND1898; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]1899; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11900; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41901; GFX90A-NEXT: s_waitcnt vmcnt(0)1902; GFX90A-NEXT: s_setpc_b64 s[30:31]1903;1904; GFX942-LABEL: v_shuffle_v3f16_v2f16__2_3_3:1905; GFX942: ; %bb.0:1906; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1907; GFX942-NEXT: v_mov_b32_e32 v0, 01908; GFX942-NEXT: ;;#ASMSTART1909; GFX942-NEXT: ; def v11910; GFX942-NEXT: ;;#ASMEND1911; GFX942-NEXT: global_store_dword v0, v1, s[0:1]1912; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11913; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41914; GFX942-NEXT: s_waitcnt vmcnt(0)1915; GFX942-NEXT: s_setpc_b64 s[30:31]1916 %vec0 = call <2 x half> asm "; def $0", "=v"()1917 %vec1 = call <2 x half> asm "; def $0", "=v"()1918 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 2, i32 3, i32 3>1919 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81920 ret void1921}1922 1923define void @v_shuffle_v3f16_v2f16__3_u_3(ptr addrspace(1) inreg %ptr) {1924; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_u_3:1925; GFX900: ; %bb.0:1926; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1927; GFX900-NEXT: ;;#ASMSTART1928; GFX900-NEXT: ; def v11929; GFX900-NEXT: ;;#ASMEND1930; GFX900-NEXT: v_mov_b32_e32 v0, 01931; GFX900-NEXT: v_alignbit_b32 v2, s4, v1, 161932; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v11933; GFX900-NEXT: global_store_dword v0, v2, s[16:17]1934; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:41935; GFX900-NEXT: s_waitcnt vmcnt(0)1936; GFX900-NEXT: s_setpc_b64 s[30:31]1937;1938; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_u_3:1939; GFX90A: ; %bb.0:1940; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1941; GFX90A-NEXT: ;;#ASMSTART1942; GFX90A-NEXT: ; def v11943; GFX90A-NEXT: ;;#ASMEND1944; GFX90A-NEXT: v_mov_b32_e32 v0, 01945; GFX90A-NEXT: v_alignbit_b32 v2, s4, v1, 161946; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v11947; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]1948; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:41949; GFX90A-NEXT: s_waitcnt vmcnt(0)1950; GFX90A-NEXT: s_setpc_b64 s[30:31]1951;1952; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_u_3:1953; GFX942: ; %bb.0:1954; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1955; GFX942-NEXT: ;;#ASMSTART1956; GFX942-NEXT: ; def v11957; GFX942-NEXT: ;;#ASMEND1958; GFX942-NEXT: v_mov_b32_e32 v0, 01959; GFX942-NEXT: v_alignbit_b32 v2, s0, v1, 161960; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v11961; GFX942-NEXT: global_store_dword v0, v2, s[0:1]1962; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:41963; GFX942-NEXT: s_waitcnt vmcnt(0)1964; GFX942-NEXT: s_setpc_b64 s[30:31]1965 %vec0 = call <2 x half> asm "; def $0", "=v"()1966 %vec1 = call <2 x half> asm "; def $0", "=v"()1967 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>1968 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 81969 ret void1970}1971 1972define void @v_shuffle_v3f16_v2f16__3_0_3(ptr addrspace(1) inreg %ptr) {1973; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_0_3:1974; GFX900: ; %bb.0:1975; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1976; GFX900-NEXT: ;;#ASMSTART1977; GFX900-NEXT: ; def v11978; GFX900-NEXT: ;;#ASMEND1979; GFX900-NEXT: ;;#ASMSTART1980; GFX900-NEXT: ; def v21981; GFX900-NEXT: ;;#ASMEND1982; GFX900-NEXT: v_mov_b32_e32 v0, 01983; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 161984; GFX900-NEXT: v_lshrrev_b32_e32 v2, 16, v21985; GFX900-NEXT: global_store_short v0, v2, s[16:17] offset:41986; GFX900-NEXT: global_store_dword v0, v1, s[16:17]1987; GFX900-NEXT: s_waitcnt vmcnt(0)1988; GFX900-NEXT: s_setpc_b64 s[30:31]1989;1990; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_0_3:1991; GFX90A: ; %bb.0:1992; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1993; GFX90A-NEXT: ;;#ASMSTART1994; GFX90A-NEXT: ; def v11995; GFX90A-NEXT: ;;#ASMEND1996; GFX90A-NEXT: ;;#ASMSTART1997; GFX90A-NEXT: ; def v21998; GFX90A-NEXT: ;;#ASMEND1999; GFX90A-NEXT: v_mov_b32_e32 v0, 02000; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 162001; GFX90A-NEXT: v_lshrrev_b32_e32 v2, 16, v22002; GFX90A-NEXT: global_store_short v0, v2, s[16:17] offset:42003; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]2004; GFX90A-NEXT: s_waitcnt vmcnt(0)2005; GFX90A-NEXT: s_setpc_b64 s[30:31]2006;2007; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_0_3:2008; GFX942: ; %bb.0:2009; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2010; GFX942-NEXT: ;;#ASMSTART2011; GFX942-NEXT: ; def v12012; GFX942-NEXT: ;;#ASMEND2013; GFX942-NEXT: ;;#ASMSTART2014; GFX942-NEXT: ; def v22015; GFX942-NEXT: ;;#ASMEND2016; GFX942-NEXT: v_mov_b32_e32 v0, 02017; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 162018; GFX942-NEXT: v_lshrrev_b32_e32 v2, 16, v22019; GFX942-NEXT: global_store_short v0, v2, s[0:1] offset:42020; GFX942-NEXT: global_store_dword v0, v1, s[0:1]2021; GFX942-NEXT: s_waitcnt vmcnt(0)2022; GFX942-NEXT: s_setpc_b64 s[30:31]2023 %vec0 = call <2 x half> asm "; def $0", "=v"()2024 %vec1 = call <2 x half> asm "; def $0", "=v"()2025 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 3>2026 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 82027 ret void2028}2029 2030define void @v_shuffle_v3f16_v2f16__3_1_3(ptr addrspace(1) inreg %ptr) {2031; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_1_3:2032; GFX900: ; %bb.0:2033; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2034; GFX900-NEXT: ;;#ASMSTART2035; GFX900-NEXT: ; def v12036; GFX900-NEXT: ;;#ASMEND2037; GFX900-NEXT: s_mov_b32 s4, 0x70603022038; GFX900-NEXT: v_mov_b32_e32 v0, 02039; GFX900-NEXT: ;;#ASMSTART2040; GFX900-NEXT: ; def v22041; GFX900-NEXT: ;;#ASMEND2042; GFX900-NEXT: v_perm_b32 v1, v1, v2, s42043; GFX900-NEXT: global_store_dword v0, v1, s[16:17]2044; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v22045; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:42046; GFX900-NEXT: s_waitcnt vmcnt(0)2047; GFX900-NEXT: s_setpc_b64 s[30:31]2048;2049; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_1_3:2050; GFX90A: ; %bb.0:2051; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2052; GFX90A-NEXT: ;;#ASMSTART2053; GFX90A-NEXT: ; def v12054; GFX90A-NEXT: ;;#ASMEND2055; GFX90A-NEXT: s_mov_b32 s4, 0x70603022056; GFX90A-NEXT: v_mov_b32_e32 v0, 02057; GFX90A-NEXT: ;;#ASMSTART2058; GFX90A-NEXT: ; def v22059; GFX90A-NEXT: ;;#ASMEND2060; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s42061; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]2062; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v22063; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:42064; GFX90A-NEXT: s_waitcnt vmcnt(0)2065; GFX90A-NEXT: s_setpc_b64 s[30:31]2066;2067; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_1_3:2068; GFX942: ; %bb.0:2069; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2070; GFX942-NEXT: ;;#ASMSTART2071; GFX942-NEXT: ; def v12072; GFX942-NEXT: ;;#ASMEND2073; GFX942-NEXT: s_mov_b32 s2, 0x70603022074; GFX942-NEXT: v_mov_b32_e32 v0, 02075; GFX942-NEXT: ;;#ASMSTART2076; GFX942-NEXT: ; def v22077; GFX942-NEXT: ;;#ASMEND2078; GFX942-NEXT: s_nop 02079; GFX942-NEXT: v_perm_b32 v1, v1, v2, s22080; GFX942-NEXT: global_store_dword v0, v1, s[0:1]2081; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v22082; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:42083; GFX942-NEXT: s_waitcnt vmcnt(0)2084; GFX942-NEXT: s_setpc_b64 s[30:31]2085 %vec0 = call <2 x half> asm "; def $0", "=v"()2086 %vec1 = call <2 x half> asm "; def $0", "=v"()2087 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 3>2088 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 82089 ret void2090}2091 2092define void @v_shuffle_v3f16_v2f16__3_2_3(ptr addrspace(1) inreg %ptr) {2093; GFX900-LABEL: v_shuffle_v3f16_v2f16__3_2_3:2094; GFX900: ; %bb.0:2095; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2096; GFX900-NEXT: ;;#ASMSTART2097; GFX900-NEXT: ; def v12098; GFX900-NEXT: ;;#ASMEND2099; GFX900-NEXT: v_mov_b32_e32 v0, 02100; GFX900-NEXT: v_alignbit_b32 v2, v1, v1, 162101; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v12102; GFX900-NEXT: global_store_short v0, v1, s[16:17] offset:42103; GFX900-NEXT: global_store_dword v0, v2, s[16:17]2104; GFX900-NEXT: s_waitcnt vmcnt(0)2105; GFX900-NEXT: s_setpc_b64 s[30:31]2106;2107; GFX90A-LABEL: v_shuffle_v3f16_v2f16__3_2_3:2108; GFX90A: ; %bb.0:2109; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2110; GFX90A-NEXT: ;;#ASMSTART2111; GFX90A-NEXT: ; def v12112; GFX90A-NEXT: ;;#ASMEND2113; GFX90A-NEXT: v_mov_b32_e32 v0, 02114; GFX90A-NEXT: v_alignbit_b32 v2, v1, v1, 162115; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v12116; GFX90A-NEXT: global_store_short v0, v1, s[16:17] offset:42117; GFX90A-NEXT: global_store_dword v0, v2, s[16:17]2118; GFX90A-NEXT: s_waitcnt vmcnt(0)2119; GFX90A-NEXT: s_setpc_b64 s[30:31]2120;2121; GFX942-LABEL: v_shuffle_v3f16_v2f16__3_2_3:2122; GFX942: ; %bb.0:2123; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2124; GFX942-NEXT: ;;#ASMSTART2125; GFX942-NEXT: ; def v12126; GFX942-NEXT: ;;#ASMEND2127; GFX942-NEXT: v_mov_b32_e32 v0, 02128; GFX942-NEXT: v_alignbit_b32 v2, v1, v1, 162129; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v12130; GFX942-NEXT: global_store_short v0, v1, s[0:1] offset:42131; GFX942-NEXT: global_store_dword v0, v2, s[0:1]2132; GFX942-NEXT: s_waitcnt vmcnt(0)2133; GFX942-NEXT: s_setpc_b64 s[30:31]2134 %vec0 = call <2 x half> asm "; def $0", "=v"()2135 %vec1 = call <2 x half> asm "; def $0", "=v"()2136 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 3>2137 store <3 x half> %shuf, ptr addrspace(1) %ptr, align 82138 ret void2139}2140 2141define void @s_shuffle_v3f16_v2f16__u_u_u() {2142; GFX9-LABEL: s_shuffle_v3f16_v2f16__u_u_u:2143; GFX9: ; %bb.0:2144; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2145; GFX9-NEXT: ;;#ASMSTART2146; GFX9-NEXT: ; use s[8:9]2147; GFX9-NEXT: ;;#ASMEND2148; GFX9-NEXT: s_setpc_b64 s[30:31]2149 %vec0 = call <2 x half> asm "; def $0", "=s"()2150 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> poison2151 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2152 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2153 ret void2154}2155 2156define void @s_shuffle_v3f16_v2f16__0_u_u() {2157; GFX900-LABEL: s_shuffle_v3f16_v2f16__0_u_u:2158; GFX900: ; %bb.0:2159; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2160; GFX900-NEXT: ;;#ASMSTART2161; GFX900-NEXT: ; def s82162; GFX900-NEXT: ;;#ASMEND2163; GFX900-NEXT: ;;#ASMSTART2164; GFX900-NEXT: ; use s[8:9]2165; GFX900-NEXT: ;;#ASMEND2166; GFX900-NEXT: s_setpc_b64 s[30:31]2167;2168; GFX90A-LABEL: s_shuffle_v3f16_v2f16__0_u_u:2169; GFX90A: ; %bb.0:2170; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2171; GFX90A-NEXT: ;;#ASMSTART2172; GFX90A-NEXT: ; def s82173; GFX90A-NEXT: ;;#ASMEND2174; GFX90A-NEXT: ;;#ASMSTART2175; GFX90A-NEXT: ; use s[8:9]2176; GFX90A-NEXT: ;;#ASMEND2177; GFX90A-NEXT: s_setpc_b64 s[30:31]2178;2179; GFX942-LABEL: s_shuffle_v3f16_v2f16__0_u_u:2180; GFX942: ; %bb.0:2181; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2182; GFX942-NEXT: ;;#ASMSTART2183; GFX942-NEXT: ; def s82184; GFX942-NEXT: ;;#ASMEND2185; GFX942-NEXT: s_nop 02186; GFX942-NEXT: ;;#ASMSTART2187; GFX942-NEXT: ; use s[8:9]2188; GFX942-NEXT: ;;#ASMEND2189; GFX942-NEXT: s_setpc_b64 s[30:31]2190 %vec0 = call <2 x half> asm "; def $0", "=s"()2191 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 0, i32 poison, i32 poison>2192 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2193 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2194 ret void2195}2196 2197define void @s_shuffle_v3f16_v2f16__1_u_u() {2198; GFX900-LABEL: s_shuffle_v3f16_v2f16__1_u_u:2199; GFX900: ; %bb.0:2200; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2201; GFX900-NEXT: ;;#ASMSTART2202; GFX900-NEXT: ; def s42203; GFX900-NEXT: ;;#ASMEND2204; GFX900-NEXT: s_lshr_b32 s8, s4, 162205; GFX900-NEXT: ;;#ASMSTART2206; GFX900-NEXT: ; use s[8:9]2207; GFX900-NEXT: ;;#ASMEND2208; GFX900-NEXT: s_setpc_b64 s[30:31]2209;2210; GFX90A-LABEL: s_shuffle_v3f16_v2f16__1_u_u:2211; GFX90A: ; %bb.0:2212; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2213; GFX90A-NEXT: ;;#ASMSTART2214; GFX90A-NEXT: ; def s42215; GFX90A-NEXT: ;;#ASMEND2216; GFX90A-NEXT: s_lshr_b32 s8, s4, 162217; GFX90A-NEXT: ;;#ASMSTART2218; GFX90A-NEXT: ; use s[8:9]2219; GFX90A-NEXT: ;;#ASMEND2220; GFX90A-NEXT: s_setpc_b64 s[30:31]2221;2222; GFX942-LABEL: s_shuffle_v3f16_v2f16__1_u_u:2223; GFX942: ; %bb.0:2224; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2225; GFX942-NEXT: ;;#ASMSTART2226; GFX942-NEXT: ; def s02227; GFX942-NEXT: ;;#ASMEND2228; GFX942-NEXT: s_lshr_b32 s8, s0, 162229; GFX942-NEXT: ;;#ASMSTART2230; GFX942-NEXT: ; use s[8:9]2231; GFX942-NEXT: ;;#ASMEND2232; GFX942-NEXT: s_setpc_b64 s[30:31]2233 %vec0 = call <2 x half> asm "; def $0", "=s"()2234 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 poison, i32 poison>2235 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2236 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2237 ret void2238}2239 2240define void @s_shuffle_v3f16_v2f16__2_u_u() {2241; GFX9-LABEL: s_shuffle_v3f16_v2f16__2_u_u:2242; GFX9: ; %bb.0:2243; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2244; GFX9-NEXT: ;;#ASMSTART2245; GFX9-NEXT: ; use s[8:9]2246; GFX9-NEXT: ;;#ASMEND2247; GFX9-NEXT: s_setpc_b64 s[30:31]2248 %vec0 = call <2 x half> asm "; def $0", "=s"()2249 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 poison, i32 poison>2250 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2251 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2252 ret void2253}2254 2255define void @s_shuffle_v3f16_v2f16__3_u_u() {2256; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_u_u:2257; GFX900: ; %bb.0:2258; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2259; GFX900-NEXT: ;;#ASMSTART2260; GFX900-NEXT: ; def s42261; GFX900-NEXT: ;;#ASMEND2262; GFX900-NEXT: s_lshr_b32 s8, s4, 162263; GFX900-NEXT: ;;#ASMSTART2264; GFX900-NEXT: ; use s[8:9]2265; GFX900-NEXT: ;;#ASMEND2266; GFX900-NEXT: s_setpc_b64 s[30:31]2267;2268; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_u_u:2269; GFX90A: ; %bb.0:2270; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2271; GFX90A-NEXT: ;;#ASMSTART2272; GFX90A-NEXT: ; def s42273; GFX90A-NEXT: ;;#ASMEND2274; GFX90A-NEXT: s_lshr_b32 s8, s4, 162275; GFX90A-NEXT: ;;#ASMSTART2276; GFX90A-NEXT: ; use s[8:9]2277; GFX90A-NEXT: ;;#ASMEND2278; GFX90A-NEXT: s_setpc_b64 s[30:31]2279;2280; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_u_u:2281; GFX942: ; %bb.0:2282; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2283; GFX942-NEXT: ;;#ASMSTART2284; GFX942-NEXT: ; def s02285; GFX942-NEXT: ;;#ASMEND2286; GFX942-NEXT: s_lshr_b32 s8, s0, 162287; GFX942-NEXT: ;;#ASMSTART2288; GFX942-NEXT: ; use s[8:9]2289; GFX942-NEXT: ;;#ASMEND2290; GFX942-NEXT: s_setpc_b64 s[30:31]2291 %vec0 = call <2 x half> asm "; def $0", "=s"()2292 %vec1 = call <2 x half> asm "; def $0", "=s"()2293 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>2294 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2295 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2296 ret void2297}2298 2299define void @s_shuffle_v3f16_v2f16__3_0_u() {2300; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_0_u:2301; GFX900: ; %bb.0:2302; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2303; GFX900-NEXT: ;;#ASMSTART2304; GFX900-NEXT: ; def s52305; GFX900-NEXT: ;;#ASMEND2306; GFX900-NEXT: s_lshr_b32 s5, s5, 162307; GFX900-NEXT: ;;#ASMSTART2308; GFX900-NEXT: ; def s42309; GFX900-NEXT: ;;#ASMEND2310; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42311; GFX900-NEXT: ;;#ASMSTART2312; GFX900-NEXT: ; use s[8:9]2313; GFX900-NEXT: ;;#ASMEND2314; GFX900-NEXT: s_setpc_b64 s[30:31]2315;2316; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_0_u:2317; GFX90A: ; %bb.0:2318; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2319; GFX90A-NEXT: ;;#ASMSTART2320; GFX90A-NEXT: ; def s52321; GFX90A-NEXT: ;;#ASMEND2322; GFX90A-NEXT: s_lshr_b32 s5, s5, 162323; GFX90A-NEXT: ;;#ASMSTART2324; GFX90A-NEXT: ; def s42325; GFX90A-NEXT: ;;#ASMEND2326; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42327; GFX90A-NEXT: ;;#ASMSTART2328; GFX90A-NEXT: ; use s[8:9]2329; GFX90A-NEXT: ;;#ASMEND2330; GFX90A-NEXT: s_setpc_b64 s[30:31]2331;2332; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_0_u:2333; GFX942: ; %bb.0:2334; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2335; GFX942-NEXT: ;;#ASMSTART2336; GFX942-NEXT: ; def s12337; GFX942-NEXT: ;;#ASMEND2338; GFX942-NEXT: s_lshr_b32 s1, s1, 162339; GFX942-NEXT: ;;#ASMSTART2340; GFX942-NEXT: ; def s02341; GFX942-NEXT: ;;#ASMEND2342; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02343; GFX942-NEXT: ;;#ASMSTART2344; GFX942-NEXT: ; use s[8:9]2345; GFX942-NEXT: ;;#ASMEND2346; GFX942-NEXT: s_setpc_b64 s[30:31]2347 %vec0 = call <2 x half> asm "; def $0", "=s"()2348 %vec1 = call <2 x half> asm "; def $0", "=s"()2349 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>2350 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2351 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2352 ret void2353}2354 2355define void @s_shuffle_v3f16_v2f16__3_1_u() {2356; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_1_u:2357; GFX900: ; %bb.0:2358; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2359; GFX900-NEXT: ;;#ASMSTART2360; GFX900-NEXT: ; def s42361; GFX900-NEXT: ;;#ASMEND2362; GFX900-NEXT: ;;#ASMSTART2363; GFX900-NEXT: ; def s52364; GFX900-NEXT: ;;#ASMEND2365; GFX900-NEXT: s_lshr_b32 s4, s4, 162366; GFX900-NEXT: s_lshr_b32 s5, s5, 162367; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42368; GFX900-NEXT: ;;#ASMSTART2369; GFX900-NEXT: ; use s[8:9]2370; GFX900-NEXT: ;;#ASMEND2371; GFX900-NEXT: s_setpc_b64 s[30:31]2372;2373; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_1_u:2374; GFX90A: ; %bb.0:2375; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2376; GFX90A-NEXT: ;;#ASMSTART2377; GFX90A-NEXT: ; def s42378; GFX90A-NEXT: ;;#ASMEND2379; GFX90A-NEXT: ;;#ASMSTART2380; GFX90A-NEXT: ; def s52381; GFX90A-NEXT: ;;#ASMEND2382; GFX90A-NEXT: s_lshr_b32 s4, s4, 162383; GFX90A-NEXT: s_lshr_b32 s5, s5, 162384; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42385; GFX90A-NEXT: ;;#ASMSTART2386; GFX90A-NEXT: ; use s[8:9]2387; GFX90A-NEXT: ;;#ASMEND2388; GFX90A-NEXT: s_setpc_b64 s[30:31]2389;2390; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_1_u:2391; GFX942: ; %bb.0:2392; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2393; GFX942-NEXT: ;;#ASMSTART2394; GFX942-NEXT: ; def s02395; GFX942-NEXT: ;;#ASMEND2396; GFX942-NEXT: ;;#ASMSTART2397; GFX942-NEXT: ; def s12398; GFX942-NEXT: ;;#ASMEND2399; GFX942-NEXT: s_lshr_b32 s0, s0, 162400; GFX942-NEXT: s_lshr_b32 s1, s1, 162401; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02402; GFX942-NEXT: ;;#ASMSTART2403; GFX942-NEXT: ; use s[8:9]2404; GFX942-NEXT: ;;#ASMEND2405; GFX942-NEXT: s_setpc_b64 s[30:31]2406 %vec0 = call <2 x half> asm "; def $0", "=s"()2407 %vec1 = call <2 x half> asm "; def $0", "=s"()2408 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>2409 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2410 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2411 ret void2412}2413 2414define void @s_shuffle_v3f16_v2f16__3_2_u() {2415; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_2_u:2416; GFX900: ; %bb.0:2417; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2418; GFX900-NEXT: ;;#ASMSTART2419; GFX900-NEXT: ; def s42420; GFX900-NEXT: ;;#ASMEND2421; GFX900-NEXT: s_lshr_b32 s5, s4, 162422; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s42423; GFX900-NEXT: ;;#ASMSTART2424; GFX900-NEXT: ; use s[8:9]2425; GFX900-NEXT: ;;#ASMEND2426; GFX900-NEXT: s_setpc_b64 s[30:31]2427;2428; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_2_u:2429; GFX90A: ; %bb.0:2430; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2431; GFX90A-NEXT: ;;#ASMSTART2432; GFX90A-NEXT: ; def s42433; GFX90A-NEXT: ;;#ASMEND2434; GFX90A-NEXT: s_lshr_b32 s5, s4, 162435; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s42436; GFX90A-NEXT: ;;#ASMSTART2437; GFX90A-NEXT: ; use s[8:9]2438; GFX90A-NEXT: ;;#ASMEND2439; GFX90A-NEXT: s_setpc_b64 s[30:31]2440;2441; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_2_u:2442; GFX942: ; %bb.0:2443; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2444; GFX942-NEXT: ;;#ASMSTART2445; GFX942-NEXT: ; def s02446; GFX942-NEXT: ;;#ASMEND2447; GFX942-NEXT: s_lshr_b32 s1, s0, 162448; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s02449; GFX942-NEXT: ;;#ASMSTART2450; GFX942-NEXT: ; use s[8:9]2451; GFX942-NEXT: ;;#ASMEND2452; GFX942-NEXT: s_setpc_b64 s[30:31]2453 %vec0 = call <2 x half> asm "; def $0", "=s"()2454 %vec1 = call <2 x half> asm "; def $0", "=s"()2455 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>2456 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2457 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2458 ret void2459}2460 2461define void @s_shuffle_v3f16_v2f16__3_3_u() {2462; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_3_u:2463; GFX900: ; %bb.0:2464; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2465; GFX900-NEXT: ;;#ASMSTART2466; GFX900-NEXT: ; def s42467; GFX900-NEXT: ;;#ASMEND2468; GFX900-NEXT: s_lshr_b32 s4, s4, 162469; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s42470; GFX900-NEXT: ;;#ASMSTART2471; GFX900-NEXT: ; use s[8:9]2472; GFX900-NEXT: ;;#ASMEND2473; GFX900-NEXT: s_setpc_b64 s[30:31]2474;2475; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_3_u:2476; GFX90A: ; %bb.0:2477; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2478; GFX90A-NEXT: ;;#ASMSTART2479; GFX90A-NEXT: ; def s42480; GFX90A-NEXT: ;;#ASMEND2481; GFX90A-NEXT: s_lshr_b32 s4, s4, 162482; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s42483; GFX90A-NEXT: ;;#ASMSTART2484; GFX90A-NEXT: ; use s[8:9]2485; GFX90A-NEXT: ;;#ASMEND2486; GFX90A-NEXT: s_setpc_b64 s[30:31]2487;2488; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_3_u:2489; GFX942: ; %bb.0:2490; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2491; GFX942-NEXT: ;;#ASMSTART2492; GFX942-NEXT: ; def s02493; GFX942-NEXT: ;;#ASMEND2494; GFX942-NEXT: s_lshr_b32 s0, s0, 162495; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s02496; GFX942-NEXT: ;;#ASMSTART2497; GFX942-NEXT: ; use s[8:9]2498; GFX942-NEXT: ;;#ASMEND2499; GFX942-NEXT: s_setpc_b64 s[30:31]2500 %vec0 = call <2 x half> asm "; def $0", "=s"()2501 %vec1 = call <2 x half> asm "; def $0", "=s"()2502 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>2503 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2504 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2505 ret void2506}2507 2508define void @s_shuffle_v3f16_v2f16__3_3_0() {2509; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_3_0:2510; GFX900: ; %bb.0:2511; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2512; GFX900-NEXT: ;;#ASMSTART2513; GFX900-NEXT: ; def s42514; GFX900-NEXT: ;;#ASMEND2515; GFX900-NEXT: s_lshr_b32 s4, s4, 162516; GFX900-NEXT: ;;#ASMSTART2517; GFX900-NEXT: ; def s92518; GFX900-NEXT: ;;#ASMEND2519; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s42520; GFX900-NEXT: ;;#ASMSTART2521; GFX900-NEXT: ; use s[8:9]2522; GFX900-NEXT: ;;#ASMEND2523; GFX900-NEXT: s_setpc_b64 s[30:31]2524;2525; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_3_0:2526; GFX90A: ; %bb.0:2527; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2528; GFX90A-NEXT: ;;#ASMSTART2529; GFX90A-NEXT: ; def s42530; GFX90A-NEXT: ;;#ASMEND2531; GFX90A-NEXT: s_lshr_b32 s4, s4, 162532; GFX90A-NEXT: ;;#ASMSTART2533; GFX90A-NEXT: ; def s92534; GFX90A-NEXT: ;;#ASMEND2535; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s42536; GFX90A-NEXT: ;;#ASMSTART2537; GFX90A-NEXT: ; use s[8:9]2538; GFX90A-NEXT: ;;#ASMEND2539; GFX90A-NEXT: s_setpc_b64 s[30:31]2540;2541; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_3_0:2542; GFX942: ; %bb.0:2543; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2544; GFX942-NEXT: ;;#ASMSTART2545; GFX942-NEXT: ; def s02546; GFX942-NEXT: ;;#ASMEND2547; GFX942-NEXT: s_lshr_b32 s0, s0, 162548; GFX942-NEXT: ;;#ASMSTART2549; GFX942-NEXT: ; def s92550; GFX942-NEXT: ;;#ASMEND2551; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s02552; GFX942-NEXT: ;;#ASMSTART2553; GFX942-NEXT: ; use s[8:9]2554; GFX942-NEXT: ;;#ASMEND2555; GFX942-NEXT: s_setpc_b64 s[30:31]2556 %vec0 = call <2 x half> asm "; def $0", "=s"()2557 %vec1 = call <2 x half> asm "; def $0", "=s"()2558 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 0>2559 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2560 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2561 ret void2562}2563 2564define void @s_shuffle_v3f16_v2f16__3_3_1() {2565; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_3_1:2566; GFX900: ; %bb.0:2567; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2568; GFX900-NEXT: ;;#ASMSTART2569; GFX900-NEXT: ; def s42570; GFX900-NEXT: ;;#ASMEND2571; GFX900-NEXT: ;;#ASMSTART2572; GFX900-NEXT: ; def s52573; GFX900-NEXT: ;;#ASMEND2574; GFX900-NEXT: s_lshr_b32 s9, s4, 162575; GFX900-NEXT: s_lshr_b32 s4, s5, 162576; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s42577; GFX900-NEXT: ;;#ASMSTART2578; GFX900-NEXT: ; use s[8:9]2579; GFX900-NEXT: ;;#ASMEND2580; GFX900-NEXT: s_setpc_b64 s[30:31]2581;2582; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_3_1:2583; GFX90A: ; %bb.0:2584; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2585; GFX90A-NEXT: ;;#ASMSTART2586; GFX90A-NEXT: ; def s42587; GFX90A-NEXT: ;;#ASMEND2588; GFX90A-NEXT: ;;#ASMSTART2589; GFX90A-NEXT: ; def s52590; GFX90A-NEXT: ;;#ASMEND2591; GFX90A-NEXT: s_lshr_b32 s9, s4, 162592; GFX90A-NEXT: s_lshr_b32 s4, s5, 162593; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s42594; GFX90A-NEXT: ;;#ASMSTART2595; GFX90A-NEXT: ; use s[8:9]2596; GFX90A-NEXT: ;;#ASMEND2597; GFX90A-NEXT: s_setpc_b64 s[30:31]2598;2599; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_3_1:2600; GFX942: ; %bb.0:2601; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2602; GFX942-NEXT: ;;#ASMSTART2603; GFX942-NEXT: ; def s02604; GFX942-NEXT: ;;#ASMEND2605; GFX942-NEXT: ;;#ASMSTART2606; GFX942-NEXT: ; def s12607; GFX942-NEXT: ;;#ASMEND2608; GFX942-NEXT: s_lshr_b32 s9, s0, 162609; GFX942-NEXT: s_lshr_b32 s0, s1, 162610; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s02611; GFX942-NEXT: ;;#ASMSTART2612; GFX942-NEXT: ; use s[8:9]2613; GFX942-NEXT: ;;#ASMEND2614; GFX942-NEXT: s_setpc_b64 s[30:31]2615 %vec0 = call <2 x half> asm "; def $0", "=s"()2616 %vec1 = call <2 x half> asm "; def $0", "=s"()2617 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 1>2618 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2619 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2620 ret void2621}2622 2623define void @s_shuffle_v3f16_v2f16__3_3_2() {2624; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_3_2:2625; GFX900: ; %bb.0:2626; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2627; GFX900-NEXT: ;;#ASMSTART2628; GFX900-NEXT: ; def s92629; GFX900-NEXT: ;;#ASMEND2630; GFX900-NEXT: s_lshr_b32 s4, s9, 162631; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s42632; GFX900-NEXT: ;;#ASMSTART2633; GFX900-NEXT: ; use s[8:9]2634; GFX900-NEXT: ;;#ASMEND2635; GFX900-NEXT: s_setpc_b64 s[30:31]2636;2637; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_3_2:2638; GFX90A: ; %bb.0:2639; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2640; GFX90A-NEXT: ;;#ASMSTART2641; GFX90A-NEXT: ; def s92642; GFX90A-NEXT: ;;#ASMEND2643; GFX90A-NEXT: s_lshr_b32 s4, s9, 162644; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s42645; GFX90A-NEXT: ;;#ASMSTART2646; GFX90A-NEXT: ; use s[8:9]2647; GFX90A-NEXT: ;;#ASMEND2648; GFX90A-NEXT: s_setpc_b64 s[30:31]2649;2650; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_3_2:2651; GFX942: ; %bb.0:2652; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2653; GFX942-NEXT: ;;#ASMSTART2654; GFX942-NEXT: ; def s92655; GFX942-NEXT: ;;#ASMEND2656; GFX942-NEXT: s_lshr_b32 s0, s9, 162657; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s02658; GFX942-NEXT: ;;#ASMSTART2659; GFX942-NEXT: ; use s[8:9]2660; GFX942-NEXT: ;;#ASMEND2661; GFX942-NEXT: s_setpc_b64 s[30:31]2662 %vec0 = call <2 x half> asm "; def $0", "=s"()2663 %vec1 = call <2 x half> asm "; def $0", "=s"()2664 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 2>2665 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2666 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2667 ret void2668}2669 2670define void @s_shuffle_v3f16_v2f16__3_3_3() {2671; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_3_3:2672; GFX900: ; %bb.0:2673; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2674; GFX900-NEXT: ;;#ASMSTART2675; GFX900-NEXT: ; def s42676; GFX900-NEXT: ;;#ASMEND2677; GFX900-NEXT: s_lshr_b32 s9, s4, 162678; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s92679; GFX900-NEXT: ;;#ASMSTART2680; GFX900-NEXT: ; use s[8:9]2681; GFX900-NEXT: ;;#ASMEND2682; GFX900-NEXT: s_setpc_b64 s[30:31]2683;2684; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_3_3:2685; GFX90A: ; %bb.0:2686; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2687; GFX90A-NEXT: ;;#ASMSTART2688; GFX90A-NEXT: ; def s42689; GFX90A-NEXT: ;;#ASMEND2690; GFX90A-NEXT: s_lshr_b32 s9, s4, 162691; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s92692; GFX90A-NEXT: ;;#ASMSTART2693; GFX90A-NEXT: ; use s[8:9]2694; GFX90A-NEXT: ;;#ASMEND2695; GFX90A-NEXT: s_setpc_b64 s[30:31]2696;2697; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_3_3:2698; GFX942: ; %bb.0:2699; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2700; GFX942-NEXT: ;;#ASMSTART2701; GFX942-NEXT: ; def s02702; GFX942-NEXT: ;;#ASMEND2703; GFX942-NEXT: s_lshr_b32 s9, s0, 162704; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s92705; GFX942-NEXT: ;;#ASMSTART2706; GFX942-NEXT: ; use s[8:9]2707; GFX942-NEXT: ;;#ASMEND2708; GFX942-NEXT: s_setpc_b64 s[30:31]2709 %vec0 = call <2 x half> asm "; def $0", "=s"()2710 %vec1 = call <2 x half> asm "; def $0", "=s"()2711 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 3, i32 3>2712 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2713 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2714 ret void2715}2716 2717define void @s_shuffle_v3f16_v2f16__u_0_0() {2718; GFX9-LABEL: s_shuffle_v3f16_v2f16__u_0_0:2719; GFX9: ; %bb.0:2720; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2721; GFX9-NEXT: ;;#ASMSTART2722; GFX9-NEXT: ; def s92723; GFX9-NEXT: ;;#ASMEND2724; GFX9-NEXT: s_lshl_b32 s8, s9, 162725; GFX9-NEXT: ;;#ASMSTART2726; GFX9-NEXT: ; use s[8:9]2727; GFX9-NEXT: ;;#ASMEND2728; GFX9-NEXT: s_setpc_b64 s[30:31]2729 %vec0 = call <2 x half> asm "; def $0", "=s"()2730 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 poison, i32 0, i32 0>2731 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2732 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2733 ret void2734}2735 2736define void @s_shuffle_v3f16_v2f16__0_0_0() {2737; GFX9-LABEL: s_shuffle_v3f16_v2f16__0_0_0:2738; GFX9: ; %bb.0:2739; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2740; GFX9-NEXT: ;;#ASMSTART2741; GFX9-NEXT: ; def s92742; GFX9-NEXT: ;;#ASMEND2743; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s92744; GFX9-NEXT: ;;#ASMSTART2745; GFX9-NEXT: ; use s[8:9]2746; GFX9-NEXT: ;;#ASMEND2747; GFX9-NEXT: s_setpc_b64 s[30:31]2748 %vec0 = call <2 x half> asm "; def $0", "=s"()2749 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> zeroinitializer2750 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2751 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2752 ret void2753}2754 2755define void @s_shuffle_v3f16_v2f16__1_0_0() {2756; GFX900-LABEL: s_shuffle_v3f16_v2f16__1_0_0:2757; GFX900: ; %bb.0:2758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2759; GFX900-NEXT: ;;#ASMSTART2760; GFX900-NEXT: ; def s92761; GFX900-NEXT: ;;#ASMEND2762; GFX900-NEXT: s_lshr_b32 s4, s9, 162763; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s92764; GFX900-NEXT: ;;#ASMSTART2765; GFX900-NEXT: ; use s[8:9]2766; GFX900-NEXT: ;;#ASMEND2767; GFX900-NEXT: s_setpc_b64 s[30:31]2768;2769; GFX90A-LABEL: s_shuffle_v3f16_v2f16__1_0_0:2770; GFX90A: ; %bb.0:2771; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2772; GFX90A-NEXT: ;;#ASMSTART2773; GFX90A-NEXT: ; def s92774; GFX90A-NEXT: ;;#ASMEND2775; GFX90A-NEXT: s_lshr_b32 s4, s9, 162776; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s92777; GFX90A-NEXT: ;;#ASMSTART2778; GFX90A-NEXT: ; use s[8:9]2779; GFX90A-NEXT: ;;#ASMEND2780; GFX90A-NEXT: s_setpc_b64 s[30:31]2781;2782; GFX942-LABEL: s_shuffle_v3f16_v2f16__1_0_0:2783; GFX942: ; %bb.0:2784; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2785; GFX942-NEXT: ;;#ASMSTART2786; GFX942-NEXT: ; def s92787; GFX942-NEXT: ;;#ASMEND2788; GFX942-NEXT: s_lshr_b32 s0, s9, 162789; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s92790; GFX942-NEXT: ;;#ASMSTART2791; GFX942-NEXT: ; use s[8:9]2792; GFX942-NEXT: ;;#ASMEND2793; GFX942-NEXT: s_setpc_b64 s[30:31]2794 %vec0 = call <2 x half> asm "; def $0", "=s"()2795 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 0, i32 0>2796 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2797 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2798 ret void2799}2800 2801define void @s_shuffle_v3f16_v2f16__2_0_0() {2802; GFX9-LABEL: s_shuffle_v3f16_v2f16__2_0_0:2803; GFX9: ; %bb.0:2804; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2805; GFX9-NEXT: ;;#ASMSTART2806; GFX9-NEXT: ; def s92807; GFX9-NEXT: ;;#ASMEND2808; GFX9-NEXT: s_lshl_b32 s8, s9, 162809; GFX9-NEXT: ;;#ASMSTART2810; GFX9-NEXT: ; use s[8:9]2811; GFX9-NEXT: ;;#ASMEND2812; GFX9-NEXT: s_setpc_b64 s[30:31]2813 %vec0 = call <2 x half> asm "; def $0", "=s"()2814 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 0, i32 0>2815 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2816 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2817 ret void2818}2819 2820define void @s_shuffle_v3f16_v2f16__3_0_0() {2821; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_0_0:2822; GFX900: ; %bb.0:2823; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2824; GFX900-NEXT: ;;#ASMSTART2825; GFX900-NEXT: ; def s42826; GFX900-NEXT: ;;#ASMEND2827; GFX900-NEXT: s_lshr_b32 s4, s4, 162828; GFX900-NEXT: ;;#ASMSTART2829; GFX900-NEXT: ; def s92830; GFX900-NEXT: ;;#ASMEND2831; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s92832; 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_v3f16_v2f16__3_0_0:2838; GFX90A: ; %bb.0:2839; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2840; GFX90A-NEXT: ;;#ASMSTART2841; GFX90A-NEXT: ; def s42842; GFX90A-NEXT: ;;#ASMEND2843; GFX90A-NEXT: s_lshr_b32 s4, s4, 162844; GFX90A-NEXT: ;;#ASMSTART2845; GFX90A-NEXT: ; def s92846; GFX90A-NEXT: ;;#ASMEND2847; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s92848; GFX90A-NEXT: ;;#ASMSTART2849; GFX90A-NEXT: ; use s[8:9]2850; GFX90A-NEXT: ;;#ASMEND2851; GFX90A-NEXT: s_setpc_b64 s[30:31]2852;2853; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_0_0:2854; GFX942: ; %bb.0:2855; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2856; GFX942-NEXT: ;;#ASMSTART2857; GFX942-NEXT: ; def s02858; GFX942-NEXT: ;;#ASMEND2859; GFX942-NEXT: s_lshr_b32 s0, s0, 162860; GFX942-NEXT: ;;#ASMSTART2861; GFX942-NEXT: ; def s92862; GFX942-NEXT: ;;#ASMEND2863; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s92864; GFX942-NEXT: ;;#ASMSTART2865; GFX942-NEXT: ; use s[8:9]2866; GFX942-NEXT: ;;#ASMEND2867; GFX942-NEXT: s_setpc_b64 s[30:31]2868 %vec0 = call <2 x half> asm "; def $0", "=s"()2869 %vec1 = call <2 x half> asm "; def $0", "=s"()2870 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 0>2871 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2872 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2873 ret void2874}2875 2876define void @s_shuffle_v3f16_v2f16__3_u_0() {2877; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_u_0:2878; GFX900: ; %bb.0:2879; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2880; GFX900-NEXT: ;;#ASMSTART2881; GFX900-NEXT: ; def s92882; GFX900-NEXT: ;;#ASMEND2883; GFX900-NEXT: ;;#ASMSTART2884; GFX900-NEXT: ; def s42885; GFX900-NEXT: ;;#ASMEND2886; GFX900-NEXT: s_lshr_b32 s8, s4, 162887; GFX900-NEXT: ;;#ASMSTART2888; GFX900-NEXT: ; use s[8:9]2889; GFX900-NEXT: ;;#ASMEND2890; GFX900-NEXT: s_setpc_b64 s[30:31]2891;2892; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_u_0:2893; GFX90A: ; %bb.0:2894; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2895; GFX90A-NEXT: ;;#ASMSTART2896; GFX90A-NEXT: ; def s92897; GFX90A-NEXT: ;;#ASMEND2898; GFX90A-NEXT: ;;#ASMSTART2899; GFX90A-NEXT: ; def s42900; GFX90A-NEXT: ;;#ASMEND2901; GFX90A-NEXT: s_lshr_b32 s8, s4, 162902; GFX90A-NEXT: ;;#ASMSTART2903; GFX90A-NEXT: ; use s[8:9]2904; GFX90A-NEXT: ;;#ASMEND2905; GFX90A-NEXT: s_setpc_b64 s[30:31]2906;2907; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_u_0:2908; GFX942: ; %bb.0:2909; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2910; GFX942-NEXT: ;;#ASMSTART2911; GFX942-NEXT: ; def s92912; GFX942-NEXT: ;;#ASMEND2913; GFX942-NEXT: ;;#ASMSTART2914; GFX942-NEXT: ; def s02915; GFX942-NEXT: ;;#ASMEND2916; GFX942-NEXT: s_lshr_b32 s8, s0, 162917; GFX942-NEXT: ;;#ASMSTART2918; GFX942-NEXT: ; use s[8:9]2919; GFX942-NEXT: ;;#ASMEND2920; GFX942-NEXT: s_setpc_b64 s[30:31]2921 %vec0 = call <2 x half> asm "; def $0", "=s"()2922 %vec1 = call <2 x half> asm "; def $0", "=s"()2923 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>2924 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2925 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2926 ret void2927}2928 2929define void @s_shuffle_v3f16_v2f16__3_1_0() {2930; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_1_0:2931; GFX900: ; %bb.0:2932; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2933; GFX900-NEXT: ;;#ASMSTART2934; GFX900-NEXT: ; def s42935; GFX900-NEXT: ;;#ASMEND2936; GFX900-NEXT: ;;#ASMSTART2937; GFX900-NEXT: ; def s92938; GFX900-NEXT: ;;#ASMEND2939; GFX900-NEXT: s_lshr_b32 s5, s9, 162940; GFX900-NEXT: s_lshr_b32 s4, s4, 162941; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s52942; GFX900-NEXT: ;;#ASMSTART2943; GFX900-NEXT: ; use s[8:9]2944; GFX900-NEXT: ;;#ASMEND2945; GFX900-NEXT: s_setpc_b64 s[30:31]2946;2947; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_1_0:2948; GFX90A: ; %bb.0:2949; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2950; GFX90A-NEXT: ;;#ASMSTART2951; GFX90A-NEXT: ; def s42952; GFX90A-NEXT: ;;#ASMEND2953; GFX90A-NEXT: ;;#ASMSTART2954; GFX90A-NEXT: ; def s92955; GFX90A-NEXT: ;;#ASMEND2956; GFX90A-NEXT: s_lshr_b32 s5, s9, 162957; GFX90A-NEXT: s_lshr_b32 s4, s4, 162958; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s52959; GFX90A-NEXT: ;;#ASMSTART2960; GFX90A-NEXT: ; use s[8:9]2961; GFX90A-NEXT: ;;#ASMEND2962; GFX90A-NEXT: s_setpc_b64 s[30:31]2963;2964; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_1_0:2965; GFX942: ; %bb.0:2966; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2967; GFX942-NEXT: ;;#ASMSTART2968; GFX942-NEXT: ; def s02969; GFX942-NEXT: ;;#ASMEND2970; GFX942-NEXT: ;;#ASMSTART2971; GFX942-NEXT: ; def s92972; GFX942-NEXT: ;;#ASMEND2973; GFX942-NEXT: s_lshr_b32 s1, s9, 162974; GFX942-NEXT: s_lshr_b32 s0, s0, 162975; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s12976; GFX942-NEXT: ;;#ASMSTART2977; GFX942-NEXT: ; use s[8:9]2978; GFX942-NEXT: ;;#ASMEND2979; GFX942-NEXT: s_setpc_b64 s[30:31]2980 %vec0 = call <2 x half> asm "; def $0", "=s"()2981 %vec1 = call <2 x half> asm "; def $0", "=s"()2982 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 0>2983 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>2984 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)2985 ret void2986}2987 2988define void @s_shuffle_v3f16_v2f16__3_2_0() {2989; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_2_0:2990; GFX900: ; %bb.0:2991; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2992; GFX900-NEXT: ;;#ASMSTART2993; GFX900-NEXT: ; def s42994; GFX900-NEXT: ;;#ASMEND2995; GFX900-NEXT: s_lshr_b32 s5, s4, 162996; GFX900-NEXT: ;;#ASMSTART2997; GFX900-NEXT: ; def s92998; GFX900-NEXT: ;;#ASMEND2999; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43000; GFX900-NEXT: ;;#ASMSTART3001; GFX900-NEXT: ; use s[8:9]3002; GFX900-NEXT: ;;#ASMEND3003; GFX900-NEXT: s_setpc_b64 s[30:31]3004;3005; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_2_0:3006; GFX90A: ; %bb.0:3007; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3008; GFX90A-NEXT: ;;#ASMSTART3009; GFX90A-NEXT: ; def s43010; GFX90A-NEXT: ;;#ASMEND3011; GFX90A-NEXT: s_lshr_b32 s5, s4, 163012; GFX90A-NEXT: ;;#ASMSTART3013; GFX90A-NEXT: ; def s93014; GFX90A-NEXT: ;;#ASMEND3015; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43016; GFX90A-NEXT: ;;#ASMSTART3017; GFX90A-NEXT: ; use s[8:9]3018; GFX90A-NEXT: ;;#ASMEND3019; GFX90A-NEXT: s_setpc_b64 s[30:31]3020;3021; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_2_0:3022; GFX942: ; %bb.0:3023; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3024; GFX942-NEXT: ;;#ASMSTART3025; GFX942-NEXT: ; def s03026; GFX942-NEXT: ;;#ASMEND3027; GFX942-NEXT: s_lshr_b32 s1, s0, 163028; GFX942-NEXT: ;;#ASMSTART3029; GFX942-NEXT: ; def s93030; GFX942-NEXT: ;;#ASMEND3031; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03032; GFX942-NEXT: ;;#ASMSTART3033; GFX942-NEXT: ; use s[8:9]3034; GFX942-NEXT: ;;#ASMEND3035; GFX942-NEXT: s_setpc_b64 s[30:31]3036 %vec0 = call <2 x half> asm "; def $0", "=s"()3037 %vec1 = call <2 x half> asm "; def $0", "=s"()3038 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 0>3039 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3040 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3041 ret void3042}3043 3044define void @s_shuffle_v3f16_v2f16__u_1_1() {3045; GFX9-LABEL: s_shuffle_v3f16_v2f16__u_1_1:3046; GFX9: ; %bb.0:3047; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3048; GFX9-NEXT: ;;#ASMSTART3049; GFX9-NEXT: ; def s83050; GFX9-NEXT: ;;#ASMEND3051; GFX9-NEXT: s_lshr_b32 s9, s8, 163052; GFX9-NEXT: ;;#ASMSTART3053; GFX9-NEXT: ; use s[8:9]3054; GFX9-NEXT: ;;#ASMEND3055; GFX9-NEXT: s_setpc_b64 s[30:31]3056 %vec0 = call <2 x half> asm "; def $0", "=s"()3057 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 poison, i32 1, i32 1>3058 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3059 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3060 ret void3061}3062 3063define void @s_shuffle_v3f16_v2f16__0_1_1() {3064; GFX9-LABEL: s_shuffle_v3f16_v2f16__0_1_1:3065; GFX9: ; %bb.0:3066; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3067; GFX9-NEXT: ;;#ASMSTART3068; GFX9-NEXT: ; def s83069; GFX9-NEXT: ;;#ASMEND3070; GFX9-NEXT: s_lshr_b32 s9, s8, 163071; GFX9-NEXT: ;;#ASMSTART3072; GFX9-NEXT: ; use s[8:9]3073; GFX9-NEXT: ;;#ASMEND3074; GFX9-NEXT: s_setpc_b64 s[30:31]3075 %vec0 = call <2 x half> asm "; def $0", "=s"()3076 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 0, i32 1, i32 1>3077 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3078 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3079 ret void3080}3081 3082define void @s_shuffle_v3f16_v2f16__1_1_1() {3083; GFX900-LABEL: s_shuffle_v3f16_v2f16__1_1_1:3084; GFX900: ; %bb.0:3085; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3086; GFX900-NEXT: ;;#ASMSTART3087; GFX900-NEXT: ; def s43088; GFX900-NEXT: ;;#ASMEND3089; GFX900-NEXT: s_lshr_b32 s9, s4, 163090; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s93091; GFX900-NEXT: ;;#ASMSTART3092; GFX900-NEXT: ; use s[8:9]3093; GFX900-NEXT: ;;#ASMEND3094; GFX900-NEXT: s_setpc_b64 s[30:31]3095;3096; GFX90A-LABEL: s_shuffle_v3f16_v2f16__1_1_1:3097; GFX90A: ; %bb.0:3098; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3099; GFX90A-NEXT: ;;#ASMSTART3100; GFX90A-NEXT: ; def s43101; GFX90A-NEXT: ;;#ASMEND3102; GFX90A-NEXT: s_lshr_b32 s9, s4, 163103; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s93104; GFX90A-NEXT: ;;#ASMSTART3105; GFX90A-NEXT: ; use s[8:9]3106; GFX90A-NEXT: ;;#ASMEND3107; GFX90A-NEXT: s_setpc_b64 s[30:31]3108;3109; GFX942-LABEL: s_shuffle_v3f16_v2f16__1_1_1:3110; GFX942: ; %bb.0:3111; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3112; GFX942-NEXT: ;;#ASMSTART3113; GFX942-NEXT: ; def s03114; GFX942-NEXT: ;;#ASMEND3115; GFX942-NEXT: s_lshr_b32 s9, s0, 163116; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s93117; GFX942-NEXT: ;;#ASMSTART3118; GFX942-NEXT: ; use s[8:9]3119; GFX942-NEXT: ;;#ASMEND3120; GFX942-NEXT: s_setpc_b64 s[30:31]3121 %vec0 = call <2 x half> asm "; def $0", "=s"()3122 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 1, i32 1>3123 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3124 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3125 ret void3126}3127 3128define void @s_shuffle_v3f16_v2f16__2_1_1() {3129; GFX9-LABEL: s_shuffle_v3f16_v2f16__2_1_1:3130; GFX9: ; %bb.0:3131; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3132; GFX9-NEXT: ;;#ASMSTART3133; GFX9-NEXT: ; def s83134; GFX9-NEXT: ;;#ASMEND3135; GFX9-NEXT: s_lshr_b32 s9, s8, 163136; GFX9-NEXT: ;;#ASMSTART3137; GFX9-NEXT: ; use s[8:9]3138; GFX9-NEXT: ;;#ASMEND3139; GFX9-NEXT: s_setpc_b64 s[30:31]3140 %vec0 = call <2 x half> asm "; def $0", "=s"()3141 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 1, i32 1>3142 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3143 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3144 ret void3145}3146 3147define void @s_shuffle_v3f16_v2f16__3_1_1() {3148; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_1_1:3149; GFX900: ; %bb.0:3150; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3151; GFX900-NEXT: ;;#ASMSTART3152; GFX900-NEXT: ; def s43153; GFX900-NEXT: ;;#ASMEND3154; GFX900-NEXT: ;;#ASMSTART3155; GFX900-NEXT: ; def s53156; GFX900-NEXT: ;;#ASMEND3157; GFX900-NEXT: s_lshr_b32 s9, s4, 163158; GFX900-NEXT: s_lshr_b32 s4, s5, 163159; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s93160; GFX900-NEXT: ;;#ASMSTART3161; GFX900-NEXT: ; use s[8:9]3162; GFX900-NEXT: ;;#ASMEND3163; GFX900-NEXT: s_setpc_b64 s[30:31]3164;3165; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_1_1:3166; GFX90A: ; %bb.0:3167; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3168; GFX90A-NEXT: ;;#ASMSTART3169; GFX90A-NEXT: ; def s43170; GFX90A-NEXT: ;;#ASMEND3171; GFX90A-NEXT: ;;#ASMSTART3172; GFX90A-NEXT: ; def s53173; GFX90A-NEXT: ;;#ASMEND3174; GFX90A-NEXT: s_lshr_b32 s9, s4, 163175; GFX90A-NEXT: s_lshr_b32 s4, s5, 163176; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s93177; GFX90A-NEXT: ;;#ASMSTART3178; GFX90A-NEXT: ; use s[8:9]3179; GFX90A-NEXT: ;;#ASMEND3180; GFX90A-NEXT: s_setpc_b64 s[30:31]3181;3182; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_1_1:3183; GFX942: ; %bb.0:3184; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3185; GFX942-NEXT: ;;#ASMSTART3186; GFX942-NEXT: ; def s03187; GFX942-NEXT: ;;#ASMEND3188; GFX942-NEXT: ;;#ASMSTART3189; GFX942-NEXT: ; def s13190; GFX942-NEXT: ;;#ASMEND3191; GFX942-NEXT: s_lshr_b32 s9, s0, 163192; GFX942-NEXT: s_lshr_b32 s0, s1, 163193; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s93194; GFX942-NEXT: ;;#ASMSTART3195; GFX942-NEXT: ; use s[8:9]3196; GFX942-NEXT: ;;#ASMEND3197; GFX942-NEXT: s_setpc_b64 s[30:31]3198 %vec0 = call <2 x half> asm "; def $0", "=s"()3199 %vec1 = call <2 x half> asm "; def $0", "=s"()3200 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 1>3201 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3202 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3203 ret void3204}3205 3206define void @s_shuffle_v3f16_v2f16__3_u_1() {3207; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_u_1:3208; GFX900: ; %bb.0:3209; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3210; GFX900-NEXT: ;;#ASMSTART3211; GFX900-NEXT: ; def s43212; GFX900-NEXT: ;;#ASMEND3213; GFX900-NEXT: ;;#ASMSTART3214; GFX900-NEXT: ; def s53215; GFX900-NEXT: ;;#ASMEND3216; GFX900-NEXT: s_lshr_b32 s9, s4, 163217; GFX900-NEXT: s_lshr_b32 s8, s5, 163218; GFX900-NEXT: ;;#ASMSTART3219; GFX900-NEXT: ; use s[8:9]3220; GFX900-NEXT: ;;#ASMEND3221; GFX900-NEXT: s_setpc_b64 s[30:31]3222;3223; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_u_1:3224; GFX90A: ; %bb.0:3225; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3226; GFX90A-NEXT: ;;#ASMSTART3227; GFX90A-NEXT: ; def s43228; GFX90A-NEXT: ;;#ASMEND3229; GFX90A-NEXT: ;;#ASMSTART3230; GFX90A-NEXT: ; def s53231; GFX90A-NEXT: ;;#ASMEND3232; GFX90A-NEXT: s_lshr_b32 s9, s4, 163233; GFX90A-NEXT: s_lshr_b32 s8, s5, 163234; GFX90A-NEXT: ;;#ASMSTART3235; GFX90A-NEXT: ; use s[8:9]3236; GFX90A-NEXT: ;;#ASMEND3237; GFX90A-NEXT: s_setpc_b64 s[30:31]3238;3239; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_u_1:3240; GFX942: ; %bb.0:3241; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3242; GFX942-NEXT: ;;#ASMSTART3243; GFX942-NEXT: ; def s03244; GFX942-NEXT: ;;#ASMEND3245; GFX942-NEXT: ;;#ASMSTART3246; GFX942-NEXT: ; def s13247; GFX942-NEXT: ;;#ASMEND3248; GFX942-NEXT: s_lshr_b32 s9, s0, 163249; GFX942-NEXT: s_lshr_b32 s8, s1, 163250; GFX942-NEXT: ;;#ASMSTART3251; GFX942-NEXT: ; use s[8:9]3252; GFX942-NEXT: ;;#ASMEND3253; GFX942-NEXT: s_setpc_b64 s[30:31]3254 %vec0 = call <2 x half> asm "; def $0", "=s"()3255 %vec1 = call <2 x half> asm "; def $0", "=s"()3256 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>3257 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3258 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3259 ret void3260}3261 3262define void @s_shuffle_v3f16_v2f16__3_0_1() {3263; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_0_1:3264; GFX900: ; %bb.0:3265; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3266; GFX900-NEXT: ;;#ASMSTART3267; GFX900-NEXT: ; def s53268; GFX900-NEXT: ;;#ASMEND3269; GFX900-NEXT: s_lshr_b32 s5, s5, 163270; GFX900-NEXT: ;;#ASMSTART3271; GFX900-NEXT: ; def s43272; GFX900-NEXT: ;;#ASMEND3273; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43274; GFX900-NEXT: s_lshr_b32 s9, s4, 163275; GFX900-NEXT: ;;#ASMSTART3276; GFX900-NEXT: ; use s[8:9]3277; GFX900-NEXT: ;;#ASMEND3278; GFX900-NEXT: s_setpc_b64 s[30:31]3279;3280; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_0_1:3281; GFX90A: ; %bb.0:3282; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3283; GFX90A-NEXT: ;;#ASMSTART3284; GFX90A-NEXT: ; def s53285; GFX90A-NEXT: ;;#ASMEND3286; GFX90A-NEXT: s_lshr_b32 s5, s5, 163287; GFX90A-NEXT: ;;#ASMSTART3288; GFX90A-NEXT: ; def s43289; GFX90A-NEXT: ;;#ASMEND3290; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43291; GFX90A-NEXT: s_lshr_b32 s9, s4, 163292; GFX90A-NEXT: ;;#ASMSTART3293; GFX90A-NEXT: ; use s[8:9]3294; GFX90A-NEXT: ;;#ASMEND3295; GFX90A-NEXT: s_setpc_b64 s[30:31]3296;3297; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_0_1:3298; GFX942: ; %bb.0:3299; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3300; GFX942-NEXT: ;;#ASMSTART3301; GFX942-NEXT: ; def s13302; GFX942-NEXT: ;;#ASMEND3303; GFX942-NEXT: s_lshr_b32 s1, s1, 163304; GFX942-NEXT: ;;#ASMSTART3305; GFX942-NEXT: ; def s03306; GFX942-NEXT: ;;#ASMEND3307; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03308; GFX942-NEXT: s_lshr_b32 s9, s0, 163309; GFX942-NEXT: ;;#ASMSTART3310; GFX942-NEXT: ; use s[8:9]3311; GFX942-NEXT: ;;#ASMEND3312; GFX942-NEXT: s_setpc_b64 s[30:31]3313 %vec0 = call <2 x half> asm "; def $0", "=s"()3314 %vec1 = call <2 x half> asm "; def $0", "=s"()3315 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 1>3316 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3317 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3318 ret void3319}3320 3321define void @s_shuffle_v3f16_v2f16__3_2_1() {3322; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_2_1:3323; GFX900: ; %bb.0:3324; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3325; GFX900-NEXT: ;;#ASMSTART3326; GFX900-NEXT: ; def s53327; GFX900-NEXT: ;;#ASMEND3328; GFX900-NEXT: s_lshr_b32 s6, s5, 163329; GFX900-NEXT: ;;#ASMSTART3330; GFX900-NEXT: ; def s43331; GFX900-NEXT: ;;#ASMEND3332; GFX900-NEXT: s_pack_ll_b32_b16 s8, s6, s53333; GFX900-NEXT: s_lshr_b32 s9, s4, 163334; GFX900-NEXT: ;;#ASMSTART3335; GFX900-NEXT: ; use s[8:9]3336; GFX900-NEXT: ;;#ASMEND3337; GFX900-NEXT: s_setpc_b64 s[30:31]3338;3339; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_2_1:3340; GFX90A: ; %bb.0:3341; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3342; GFX90A-NEXT: ;;#ASMSTART3343; GFX90A-NEXT: ; def s53344; GFX90A-NEXT: ;;#ASMEND3345; GFX90A-NEXT: s_lshr_b32 s6, s5, 163346; GFX90A-NEXT: ;;#ASMSTART3347; GFX90A-NEXT: ; def s43348; GFX90A-NEXT: ;;#ASMEND3349; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s6, s53350; GFX90A-NEXT: s_lshr_b32 s9, s4, 163351; GFX90A-NEXT: ;;#ASMSTART3352; GFX90A-NEXT: ; use s[8:9]3353; GFX90A-NEXT: ;;#ASMEND3354; GFX90A-NEXT: s_setpc_b64 s[30:31]3355;3356; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_2_1:3357; GFX942: ; %bb.0:3358; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3359; GFX942-NEXT: ;;#ASMSTART3360; GFX942-NEXT: ; def s13361; GFX942-NEXT: ;;#ASMEND3362; GFX942-NEXT: s_lshr_b32 s2, s1, 163363; GFX942-NEXT: ;;#ASMSTART3364; GFX942-NEXT: ; def s03365; GFX942-NEXT: ;;#ASMEND3366; GFX942-NEXT: s_pack_ll_b32_b16 s8, s2, s13367; GFX942-NEXT: s_lshr_b32 s9, s0, 163368; GFX942-NEXT: ;;#ASMSTART3369; GFX942-NEXT: ; use s[8:9]3370; GFX942-NEXT: ;;#ASMEND3371; GFX942-NEXT: s_setpc_b64 s[30:31]3372 %vec0 = call <2 x half> asm "; def $0", "=s"()3373 %vec1 = call <2 x half> asm "; def $0", "=s"()3374 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 1>3375 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3376 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3377 ret void3378}3379 3380define void @s_shuffle_v3f16_v2f16__u_2_2() {3381; GFX9-LABEL: s_shuffle_v3f16_v2f16__u_2_2:3382; GFX9: ; %bb.0:3383; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3384; GFX9-NEXT: ;;#ASMSTART3385; GFX9-NEXT: ; use s[8:9]3386; GFX9-NEXT: ;;#ASMEND3387; GFX9-NEXT: s_setpc_b64 s[30:31]3388 %vec0 = call <2 x half> asm "; def $0", "=s"()3389 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 poison, i32 2, i32 2>3390 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3391 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3392 ret void3393}3394 3395define void @s_shuffle_v3f16_v2f16__0_2_2() {3396; GFX900-LABEL: s_shuffle_v3f16_v2f16__0_2_2:3397; GFX900: ; %bb.0:3398; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3399; GFX900-NEXT: ;;#ASMSTART3400; GFX900-NEXT: ; def s83401; GFX900-NEXT: ;;#ASMEND3402; GFX900-NEXT: ;;#ASMSTART3403; GFX900-NEXT: ; use s[8:9]3404; GFX900-NEXT: ;;#ASMEND3405; GFX900-NEXT: s_setpc_b64 s[30:31]3406;3407; GFX90A-LABEL: s_shuffle_v3f16_v2f16__0_2_2:3408; GFX90A: ; %bb.0:3409; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3410; GFX90A-NEXT: ;;#ASMSTART3411; GFX90A-NEXT: ; def s83412; GFX90A-NEXT: ;;#ASMEND3413; GFX90A-NEXT: ;;#ASMSTART3414; GFX90A-NEXT: ; use s[8:9]3415; GFX90A-NEXT: ;;#ASMEND3416; GFX90A-NEXT: s_setpc_b64 s[30:31]3417;3418; GFX942-LABEL: s_shuffle_v3f16_v2f16__0_2_2:3419; GFX942: ; %bb.0:3420; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3421; GFX942-NEXT: ;;#ASMSTART3422; GFX942-NEXT: ; def s83423; GFX942-NEXT: ;;#ASMEND3424; GFX942-NEXT: s_nop 03425; GFX942-NEXT: ;;#ASMSTART3426; GFX942-NEXT: ; use s[8:9]3427; GFX942-NEXT: ;;#ASMEND3428; GFX942-NEXT: s_setpc_b64 s[30:31]3429 %vec0 = call <2 x half> asm "; def $0", "=s"()3430 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 0, i32 2, i32 2>3431 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3432 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3433 ret void3434}3435 3436define void @s_shuffle_v3f16_v2f16__1_2_2() {3437; GFX900-LABEL: s_shuffle_v3f16_v2f16__1_2_2:3438; GFX900: ; %bb.0:3439; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3440; GFX900-NEXT: ;;#ASMSTART3441; GFX900-NEXT: ; def s43442; GFX900-NEXT: ;;#ASMEND3443; GFX900-NEXT: s_lshr_b32 s8, s4, 163444; GFX900-NEXT: ;;#ASMSTART3445; GFX900-NEXT: ; use s[8:9]3446; GFX900-NEXT: ;;#ASMEND3447; GFX900-NEXT: s_setpc_b64 s[30:31]3448;3449; GFX90A-LABEL: s_shuffle_v3f16_v2f16__1_2_2:3450; GFX90A: ; %bb.0:3451; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3452; GFX90A-NEXT: ;;#ASMSTART3453; GFX90A-NEXT: ; def s43454; GFX90A-NEXT: ;;#ASMEND3455; GFX90A-NEXT: s_lshr_b32 s8, s4, 163456; GFX90A-NEXT: ;;#ASMSTART3457; GFX90A-NEXT: ; use s[8:9]3458; GFX90A-NEXT: ;;#ASMEND3459; GFX90A-NEXT: s_setpc_b64 s[30:31]3460;3461; GFX942-LABEL: s_shuffle_v3f16_v2f16__1_2_2:3462; GFX942: ; %bb.0:3463; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3464; GFX942-NEXT: ;;#ASMSTART3465; GFX942-NEXT: ; def s03466; GFX942-NEXT: ;;#ASMEND3467; GFX942-NEXT: s_lshr_b32 s8, s0, 163468; GFX942-NEXT: ;;#ASMSTART3469; GFX942-NEXT: ; use s[8:9]3470; GFX942-NEXT: ;;#ASMEND3471; GFX942-NEXT: s_setpc_b64 s[30:31]3472 %vec0 = call <2 x half> asm "; def $0", "=s"()3473 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 1, i32 2, i32 2>3474 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3475 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3476 ret void3477}3478 3479define void @s_shuffle_v3f16_v2f16__2_2_2() {3480; GFX9-LABEL: s_shuffle_v3f16_v2f16__2_2_2:3481; GFX9: ; %bb.0:3482; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3483; GFX9-NEXT: ;;#ASMSTART3484; GFX9-NEXT: ; use s[8:9]3485; GFX9-NEXT: ;;#ASMEND3486; GFX9-NEXT: s_setpc_b64 s[30:31]3487 %vec0 = call <2 x half> asm "; def $0", "=s"()3488 %shuf = shufflevector <2 x half> %vec0, <2 x half> poison, <3 x i32> <i32 2, i32 2, i32 2>3489 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3490 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3491 ret void3492}3493 3494define void @s_shuffle_v3f16_v2f16__3_2_2() {3495; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_2_2:3496; GFX900: ; %bb.0:3497; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3498; GFX900-NEXT: ;;#ASMSTART3499; GFX900-NEXT: ; def s93500; GFX900-NEXT: ;;#ASMEND3501; GFX900-NEXT: s_lshr_b32 s4, s9, 163502; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s93503; GFX900-NEXT: ;;#ASMSTART3504; GFX900-NEXT: ; use s[8:9]3505; GFX900-NEXT: ;;#ASMEND3506; GFX900-NEXT: s_setpc_b64 s[30:31]3507;3508; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_2_2:3509; GFX90A: ; %bb.0:3510; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3511; GFX90A-NEXT: ;;#ASMSTART3512; GFX90A-NEXT: ; def s93513; GFX90A-NEXT: ;;#ASMEND3514; GFX90A-NEXT: s_lshr_b32 s4, s9, 163515; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s93516; GFX90A-NEXT: ;;#ASMSTART3517; GFX90A-NEXT: ; use s[8:9]3518; GFX90A-NEXT: ;;#ASMEND3519; GFX90A-NEXT: s_setpc_b64 s[30:31]3520;3521; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_2_2:3522; GFX942: ; %bb.0:3523; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3524; GFX942-NEXT: ;;#ASMSTART3525; GFX942-NEXT: ; def s93526; GFX942-NEXT: ;;#ASMEND3527; GFX942-NEXT: s_lshr_b32 s0, s9, 163528; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s93529; GFX942-NEXT: ;;#ASMSTART3530; GFX942-NEXT: ; use s[8:9]3531; GFX942-NEXT: ;;#ASMEND3532; GFX942-NEXT: s_setpc_b64 s[30:31]3533 %vec0 = call <2 x half> asm "; def $0", "=s"()3534 %vec1 = call <2 x half> asm "; def $0", "=s"()3535 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 2>3536 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3537 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3538 ret void3539}3540 3541define void @s_shuffle_v3f16_v2f16__3_u_2() {3542; GFX9-LABEL: s_shuffle_v3f16_v2f16__3_u_2:3543; GFX9: ; %bb.0:3544; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3545; GFX9-NEXT: ;;#ASMSTART3546; GFX9-NEXT: ; def s93547; GFX9-NEXT: ;;#ASMEND3548; GFX9-NEXT: s_lshr_b32 s8, s9, 163549; GFX9-NEXT: ;;#ASMSTART3550; GFX9-NEXT: ; use s[8:9]3551; GFX9-NEXT: ;;#ASMEND3552; GFX9-NEXT: s_setpc_b64 s[30:31]3553 %vec0 = call <2 x half> asm "; def $0", "=s"()3554 %vec1 = call <2 x half> asm "; def $0", "=s"()3555 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>3556 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3557 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3558 ret void3559}3560 3561define void @s_shuffle_v3f16_v2f16__3_0_2() {3562; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_0_2:3563; GFX900: ; %bb.0:3564; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3565; GFX900-NEXT: ;;#ASMSTART3566; GFX900-NEXT: ; def s93567; GFX900-NEXT: ;;#ASMEND3568; GFX900-NEXT: s_lshr_b32 s5, s9, 163569; GFX900-NEXT: ;;#ASMSTART3570; GFX900-NEXT: ; def s43571; GFX900-NEXT: ;;#ASMEND3572; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43573; GFX900-NEXT: ;;#ASMSTART3574; GFX900-NEXT: ; use s[8:9]3575; GFX900-NEXT: ;;#ASMEND3576; GFX900-NEXT: s_setpc_b64 s[30:31]3577;3578; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_0_2:3579; GFX90A: ; %bb.0:3580; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3581; GFX90A-NEXT: ;;#ASMSTART3582; GFX90A-NEXT: ; def s93583; GFX90A-NEXT: ;;#ASMEND3584; GFX90A-NEXT: s_lshr_b32 s5, s9, 163585; GFX90A-NEXT: ;;#ASMSTART3586; GFX90A-NEXT: ; def s43587; GFX90A-NEXT: ;;#ASMEND3588; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43589; GFX90A-NEXT: ;;#ASMSTART3590; GFX90A-NEXT: ; use s[8:9]3591; GFX90A-NEXT: ;;#ASMEND3592; GFX90A-NEXT: s_setpc_b64 s[30:31]3593;3594; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_0_2:3595; GFX942: ; %bb.0:3596; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3597; GFX942-NEXT: ;;#ASMSTART3598; GFX942-NEXT: ; def s93599; GFX942-NEXT: ;;#ASMEND3600; GFX942-NEXT: s_lshr_b32 s1, s9, 163601; GFX942-NEXT: ;;#ASMSTART3602; GFX942-NEXT: ; def s03603; GFX942-NEXT: ;;#ASMEND3604; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03605; GFX942-NEXT: ;;#ASMSTART3606; GFX942-NEXT: ; use s[8:9]3607; GFX942-NEXT: ;;#ASMEND3608; GFX942-NEXT: s_setpc_b64 s[30:31]3609 %vec0 = call <2 x half> asm "; def $0", "=s"()3610 %vec1 = call <2 x half> asm "; def $0", "=s"()3611 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 2>3612 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3613 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3614 ret void3615}3616 3617define void @s_shuffle_v3f16_v2f16__3_1_2() {3618; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_1_2:3619; GFX900: ; %bb.0:3620; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3621; GFX900-NEXT: ;;#ASMSTART3622; GFX900-NEXT: ; def s43623; GFX900-NEXT: ;;#ASMEND3624; GFX900-NEXT: ;;#ASMSTART3625; GFX900-NEXT: ; def s93626; GFX900-NEXT: ;;#ASMEND3627; GFX900-NEXT: s_lshr_b32 s4, s4, 163628; GFX900-NEXT: s_lshr_b32 s5, s9, 163629; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43630; GFX900-NEXT: ;;#ASMSTART3631; GFX900-NEXT: ; use s[8:9]3632; GFX900-NEXT: ;;#ASMEND3633; GFX900-NEXT: s_setpc_b64 s[30:31]3634;3635; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_1_2:3636; GFX90A: ; %bb.0:3637; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3638; GFX90A-NEXT: ;;#ASMSTART3639; GFX90A-NEXT: ; def s43640; GFX90A-NEXT: ;;#ASMEND3641; GFX90A-NEXT: ;;#ASMSTART3642; GFX90A-NEXT: ; def s93643; GFX90A-NEXT: ;;#ASMEND3644; GFX90A-NEXT: s_lshr_b32 s4, s4, 163645; GFX90A-NEXT: s_lshr_b32 s5, s9, 163646; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43647; GFX90A-NEXT: ;;#ASMSTART3648; GFX90A-NEXT: ; use s[8:9]3649; GFX90A-NEXT: ;;#ASMEND3650; GFX90A-NEXT: s_setpc_b64 s[30:31]3651;3652; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_1_2:3653; GFX942: ; %bb.0:3654; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3655; GFX942-NEXT: ;;#ASMSTART3656; GFX942-NEXT: ; def s03657; GFX942-NEXT: ;;#ASMEND3658; GFX942-NEXT: ;;#ASMSTART3659; GFX942-NEXT: ; def s93660; GFX942-NEXT: ;;#ASMEND3661; GFX942-NEXT: s_lshr_b32 s0, s0, 163662; GFX942-NEXT: s_lshr_b32 s1, s9, 163663; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03664; GFX942-NEXT: ;;#ASMSTART3665; GFX942-NEXT: ; use s[8:9]3666; GFX942-NEXT: ;;#ASMEND3667; GFX942-NEXT: s_setpc_b64 s[30:31]3668 %vec0 = call <2 x half> asm "; def $0", "=s"()3669 %vec1 = call <2 x half> asm "; def $0", "=s"()3670 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 2>3671 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3672 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3673 ret void3674}3675 3676define void @s_shuffle_v3f16_v2f16__u_3_3() {3677; GFX9-LABEL: s_shuffle_v3f16_v2f16__u_3_3:3678; GFX9: ; %bb.0:3679; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3680; GFX9-NEXT: ;;#ASMSTART3681; GFX9-NEXT: ; def s83682; GFX9-NEXT: ;;#ASMEND3683; GFX9-NEXT: s_lshr_b32 s9, s8, 163684; GFX9-NEXT: ;;#ASMSTART3685; GFX9-NEXT: ; use s[8:9]3686; GFX9-NEXT: ;;#ASMEND3687; GFX9-NEXT: s_setpc_b64 s[30:31]3688 %vec0 = call <2 x half> asm "; def $0", "=s"()3689 %vec1 = call <2 x half> asm "; def $0", "=s"()3690 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>3691 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3692 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3693 ret void3694}3695 3696define void @s_shuffle_v3f16_v2f16__0_3_3() {3697; GFX900-LABEL: s_shuffle_v3f16_v2f16__0_3_3:3698; GFX900: ; %bb.0:3699; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3700; GFX900-NEXT: ;;#ASMSTART3701; GFX900-NEXT: ; def s53702; GFX900-NEXT: ;;#ASMEND3703; GFX900-NEXT: s_lshr_b32 s9, s5, 163704; GFX900-NEXT: ;;#ASMSTART3705; GFX900-NEXT: ; def s43706; GFX900-NEXT: ;;#ASMEND3707; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s93708; GFX900-NEXT: ;;#ASMSTART3709; GFX900-NEXT: ; use s[8:9]3710; GFX900-NEXT: ;;#ASMEND3711; GFX900-NEXT: s_setpc_b64 s[30:31]3712;3713; GFX90A-LABEL: s_shuffle_v3f16_v2f16__0_3_3:3714; GFX90A: ; %bb.0:3715; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3716; GFX90A-NEXT: ;;#ASMSTART3717; GFX90A-NEXT: ; def s53718; GFX90A-NEXT: ;;#ASMEND3719; GFX90A-NEXT: s_lshr_b32 s9, s5, 163720; GFX90A-NEXT: ;;#ASMSTART3721; GFX90A-NEXT: ; def s43722; GFX90A-NEXT: ;;#ASMEND3723; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s93724; GFX90A-NEXT: ;;#ASMSTART3725; GFX90A-NEXT: ; use s[8:9]3726; GFX90A-NEXT: ;;#ASMEND3727; GFX90A-NEXT: s_setpc_b64 s[30:31]3728;3729; GFX942-LABEL: s_shuffle_v3f16_v2f16__0_3_3:3730; GFX942: ; %bb.0:3731; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3732; GFX942-NEXT: ;;#ASMSTART3733; GFX942-NEXT: ; def s13734; GFX942-NEXT: ;;#ASMEND3735; GFX942-NEXT: s_lshr_b32 s9, s1, 163736; GFX942-NEXT: ;;#ASMSTART3737; GFX942-NEXT: ; def s03738; GFX942-NEXT: ;;#ASMEND3739; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s93740; GFX942-NEXT: ;;#ASMSTART3741; GFX942-NEXT: ; use s[8:9]3742; GFX942-NEXT: ;;#ASMEND3743; GFX942-NEXT: s_setpc_b64 s[30:31]3744 %vec0 = call <2 x half> asm "; def $0", "=s"()3745 %vec1 = call <2 x half> asm "; def $0", "=s"()3746 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 0, i32 3, i32 3>3747 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3748 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3749 ret void3750}3751 3752define void @s_shuffle_v3f16_v2f16__1_3_3() {3753; GFX900-LABEL: s_shuffle_v3f16_v2f16__1_3_3:3754; GFX900: ; %bb.0:3755; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3756; GFX900-NEXT: ;;#ASMSTART3757; GFX900-NEXT: ; def s43758; GFX900-NEXT: ;;#ASMEND3759; GFX900-NEXT: ;;#ASMSTART3760; GFX900-NEXT: ; def s53761; GFX900-NEXT: ;;#ASMEND3762; GFX900-NEXT: s_lshr_b32 s9, s5, 163763; GFX900-NEXT: s_lshr_b32 s4, s4, 163764; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s93765; GFX900-NEXT: ;;#ASMSTART3766; GFX900-NEXT: ; use s[8:9]3767; GFX900-NEXT: ;;#ASMEND3768; GFX900-NEXT: s_setpc_b64 s[30:31]3769;3770; GFX90A-LABEL: s_shuffle_v3f16_v2f16__1_3_3:3771; GFX90A: ; %bb.0:3772; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3773; GFX90A-NEXT: ;;#ASMSTART3774; GFX90A-NEXT: ; def s43775; GFX90A-NEXT: ;;#ASMEND3776; GFX90A-NEXT: ;;#ASMSTART3777; GFX90A-NEXT: ; def s53778; GFX90A-NEXT: ;;#ASMEND3779; GFX90A-NEXT: s_lshr_b32 s9, s5, 163780; GFX90A-NEXT: s_lshr_b32 s4, s4, 163781; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s93782; GFX90A-NEXT: ;;#ASMSTART3783; GFX90A-NEXT: ; use s[8:9]3784; GFX90A-NEXT: ;;#ASMEND3785; GFX90A-NEXT: s_setpc_b64 s[30:31]3786;3787; GFX942-LABEL: s_shuffle_v3f16_v2f16__1_3_3:3788; GFX942: ; %bb.0:3789; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3790; GFX942-NEXT: ;;#ASMSTART3791; GFX942-NEXT: ; def s03792; GFX942-NEXT: ;;#ASMEND3793; GFX942-NEXT: ;;#ASMSTART3794; GFX942-NEXT: ; def s13795; GFX942-NEXT: ;;#ASMEND3796; GFX942-NEXT: s_lshr_b32 s9, s1, 163797; GFX942-NEXT: s_lshr_b32 s0, s0, 163798; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s93799; GFX942-NEXT: ;;#ASMSTART3800; GFX942-NEXT: ; use s[8:9]3801; GFX942-NEXT: ;;#ASMEND3802; GFX942-NEXT: s_setpc_b64 s[30:31]3803 %vec0 = call <2 x half> asm "; def $0", "=s"()3804 %vec1 = call <2 x half> asm "; def $0", "=s"()3805 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 1, i32 3, i32 3>3806 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3807 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3808 ret void3809}3810 3811define void @s_shuffle_v3f16_v2f16__2_3_3() {3812; GFX9-LABEL: s_shuffle_v3f16_v2f16__2_3_3:3813; GFX9: ; %bb.0:3814; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3815; GFX9-NEXT: ;;#ASMSTART3816; GFX9-NEXT: ; def s83817; GFX9-NEXT: ;;#ASMEND3818; GFX9-NEXT: s_lshr_b32 s9, s8, 163819; GFX9-NEXT: ;;#ASMSTART3820; GFX9-NEXT: ; use s[8:9]3821; GFX9-NEXT: ;;#ASMEND3822; GFX9-NEXT: s_setpc_b64 s[30:31]3823 %vec0 = call <2 x half> asm "; def $0", "=s"()3824 %vec1 = call <2 x half> asm "; def $0", "=s"()3825 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 2, i32 3, i32 3>3826 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3827 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3828 ret void3829}3830 3831define void @s_shuffle_v3f16_v2f16__3_u_3() {3832; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_u_3:3833; GFX900: ; %bb.0:3834; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3835; GFX900-NEXT: ;;#ASMSTART3836; GFX900-NEXT: ; def s43837; GFX900-NEXT: ;;#ASMEND3838; GFX900-NEXT: s_lshr_b32 s8, s4, 163839; GFX900-NEXT: s_mov_b32 s9, s83840; GFX900-NEXT: ;;#ASMSTART3841; GFX900-NEXT: ; use s[8:9]3842; GFX900-NEXT: ;;#ASMEND3843; GFX900-NEXT: s_setpc_b64 s[30:31]3844;3845; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_u_3:3846; GFX90A: ; %bb.0:3847; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3848; GFX90A-NEXT: ;;#ASMSTART3849; GFX90A-NEXT: ; def s43850; GFX90A-NEXT: ;;#ASMEND3851; GFX90A-NEXT: s_lshr_b32 s8, s4, 163852; GFX90A-NEXT: s_mov_b32 s9, s83853; GFX90A-NEXT: ;;#ASMSTART3854; GFX90A-NEXT: ; use s[8:9]3855; GFX90A-NEXT: ;;#ASMEND3856; GFX90A-NEXT: s_setpc_b64 s[30:31]3857;3858; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_u_3:3859; GFX942: ; %bb.0:3860; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3861; GFX942-NEXT: ;;#ASMSTART3862; GFX942-NEXT: ; def s03863; GFX942-NEXT: ;;#ASMEND3864; GFX942-NEXT: s_lshr_b32 s8, s0, 163865; GFX942-NEXT: s_mov_b32 s9, s83866; GFX942-NEXT: ;;#ASMSTART3867; GFX942-NEXT: ; use s[8:9]3868; GFX942-NEXT: ;;#ASMEND3869; GFX942-NEXT: s_setpc_b64 s[30:31]3870 %vec0 = call <2 x half> asm "; def $0", "=s"()3871 %vec1 = call <2 x half> asm "; def $0", "=s"()3872 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>3873 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3874 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3875 ret void3876}3877 3878define void @s_shuffle_v3f16_v2f16__3_0_3() {3879; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_0_3:3880; GFX900: ; %bb.0:3881; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3882; GFX900-NEXT: ;;#ASMSTART3883; GFX900-NEXT: ; def s53884; GFX900-NEXT: ;;#ASMEND3885; GFX900-NEXT: s_lshr_b32 s9, s5, 163886; GFX900-NEXT: ;;#ASMSTART3887; GFX900-NEXT: ; def s43888; GFX900-NEXT: ;;#ASMEND3889; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s43890; GFX900-NEXT: ;;#ASMSTART3891; GFX900-NEXT: ; use s[8:9]3892; GFX900-NEXT: ;;#ASMEND3893; GFX900-NEXT: s_setpc_b64 s[30:31]3894;3895; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_0_3:3896; GFX90A: ; %bb.0:3897; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3898; GFX90A-NEXT: ;;#ASMSTART3899; GFX90A-NEXT: ; def s53900; GFX90A-NEXT: ;;#ASMEND3901; GFX90A-NEXT: s_lshr_b32 s9, s5, 163902; GFX90A-NEXT: ;;#ASMSTART3903; GFX90A-NEXT: ; def s43904; GFX90A-NEXT: ;;#ASMEND3905; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s43906; GFX90A-NEXT: ;;#ASMSTART3907; GFX90A-NEXT: ; use s[8:9]3908; GFX90A-NEXT: ;;#ASMEND3909; GFX90A-NEXT: s_setpc_b64 s[30:31]3910;3911; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_0_3:3912; GFX942: ; %bb.0:3913; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3914; GFX942-NEXT: ;;#ASMSTART3915; GFX942-NEXT: ; def s13916; GFX942-NEXT: ;;#ASMEND3917; GFX942-NEXT: s_lshr_b32 s9, s1, 163918; GFX942-NEXT: ;;#ASMSTART3919; GFX942-NEXT: ; def s03920; GFX942-NEXT: ;;#ASMEND3921; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s03922; GFX942-NEXT: ;;#ASMSTART3923; GFX942-NEXT: ; use s[8:9]3924; GFX942-NEXT: ;;#ASMEND3925; GFX942-NEXT: s_setpc_b64 s[30:31]3926 %vec0 = call <2 x half> asm "; def $0", "=s"()3927 %vec1 = call <2 x half> asm "; def $0", "=s"()3928 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 0, i32 3>3929 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3930 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3931 ret void3932}3933 3934define void @s_shuffle_v3f16_v2f16__3_1_3() {3935; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_1_3:3936; GFX900: ; %bb.0:3937; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3938; GFX900-NEXT: ;;#ASMSTART3939; GFX900-NEXT: ; def s43940; GFX900-NEXT: ;;#ASMEND3941; GFX900-NEXT: ;;#ASMSTART3942; GFX900-NEXT: ; def s53943; GFX900-NEXT: ;;#ASMEND3944; GFX900-NEXT: s_lshr_b32 s4, s4, 163945; GFX900-NEXT: s_lshr_b32 s9, s5, 163946; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s43947; GFX900-NEXT: ;;#ASMSTART3948; GFX900-NEXT: ; use s[8:9]3949; GFX900-NEXT: ;;#ASMEND3950; GFX900-NEXT: s_setpc_b64 s[30:31]3951;3952; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_1_3:3953; GFX90A: ; %bb.0:3954; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3955; GFX90A-NEXT: ;;#ASMSTART3956; GFX90A-NEXT: ; def s43957; GFX90A-NEXT: ;;#ASMEND3958; GFX90A-NEXT: ;;#ASMSTART3959; GFX90A-NEXT: ; def s53960; GFX90A-NEXT: ;;#ASMEND3961; GFX90A-NEXT: s_lshr_b32 s4, s4, 163962; GFX90A-NEXT: s_lshr_b32 s9, s5, 163963; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s43964; GFX90A-NEXT: ;;#ASMSTART3965; GFX90A-NEXT: ; use s[8:9]3966; GFX90A-NEXT: ;;#ASMEND3967; GFX90A-NEXT: s_setpc_b64 s[30:31]3968;3969; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_1_3:3970; GFX942: ; %bb.0:3971; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3972; GFX942-NEXT: ;;#ASMSTART3973; GFX942-NEXT: ; def s03974; GFX942-NEXT: ;;#ASMEND3975; GFX942-NEXT: ;;#ASMSTART3976; GFX942-NEXT: ; def s13977; GFX942-NEXT: ;;#ASMEND3978; GFX942-NEXT: s_lshr_b32 s0, s0, 163979; GFX942-NEXT: s_lshr_b32 s9, s1, 163980; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s03981; GFX942-NEXT: ;;#ASMSTART3982; GFX942-NEXT: ; use s[8:9]3983; GFX942-NEXT: ;;#ASMEND3984; GFX942-NEXT: s_setpc_b64 s[30:31]3985 %vec0 = call <2 x half> asm "; def $0", "=s"()3986 %vec1 = call <2 x half> asm "; def $0", "=s"()3987 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 1, i32 3>3988 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>3989 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)3990 ret void3991}3992 3993define void @s_shuffle_v3f16_v2f16__3_2_3() {3994; GFX900-LABEL: s_shuffle_v3f16_v2f16__3_2_3:3995; GFX900: ; %bb.0:3996; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3997; GFX900-NEXT: ;;#ASMSTART3998; GFX900-NEXT: ; def s43999; GFX900-NEXT: ;;#ASMEND4000; GFX900-NEXT: s_lshr_b32 s9, s4, 164001; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s44002; GFX900-NEXT: ;;#ASMSTART4003; GFX900-NEXT: ; use s[8:9]4004; GFX900-NEXT: ;;#ASMEND4005; GFX900-NEXT: s_setpc_b64 s[30:31]4006;4007; GFX90A-LABEL: s_shuffle_v3f16_v2f16__3_2_3:4008; GFX90A: ; %bb.0:4009; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4010; GFX90A-NEXT: ;;#ASMSTART4011; GFX90A-NEXT: ; def s44012; GFX90A-NEXT: ;;#ASMEND4013; GFX90A-NEXT: s_lshr_b32 s9, s4, 164014; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s44015; GFX90A-NEXT: ;;#ASMSTART4016; GFX90A-NEXT: ; use s[8:9]4017; GFX90A-NEXT: ;;#ASMEND4018; GFX90A-NEXT: s_setpc_b64 s[30:31]4019;4020; GFX942-LABEL: s_shuffle_v3f16_v2f16__3_2_3:4021; GFX942: ; %bb.0:4022; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4023; GFX942-NEXT: ;;#ASMSTART4024; GFX942-NEXT: ; def s04025; GFX942-NEXT: ;;#ASMEND4026; GFX942-NEXT: s_lshr_b32 s9, s0, 164027; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s04028; GFX942-NEXT: ;;#ASMSTART4029; GFX942-NEXT: ; use s[8:9]4030; GFX942-NEXT: ;;#ASMEND4031; GFX942-NEXT: s_setpc_b64 s[30:31]4032 %vec0 = call <2 x half> asm "; def $0", "=s"()4033 %vec1 = call <2 x half> asm "; def $0", "=s"()4034 %shuf = shufflevector <2 x half> %vec0, <2 x half> %vec1, <3 x i32> <i32 3, i32 2, i32 3>4035 %extend3 = shufflevector <3 x half> %shuf, <3 x half> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4036 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x half> %extend3)4037 ret void4038}4039;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:4040; GFX90APLUS: {{.*}}4041