6536 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_v4bf16_v2bf16__u_u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v4bf16_v2bf16__u_u_u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()13 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> poison14 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 815 ret void16}17 18define void @v_shuffle_v4bf16_v2bf16__0_u_u_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__0_u_u_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v1, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v025; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__0_u_u_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v1, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v036; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__0_u_u_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v1, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v047; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>53 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 854 ret void55}56 57define void @v_shuffle_v4bf16_v2bf16__1_u_u_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__1_u_u_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: ;;#ASMSTART62; GFX900-NEXT: ; def v063; GFX900-NEXT: ;;#ASMEND64; GFX900-NEXT: v_mov_b32_e32 v1, 065; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 1666; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__1_u_u_u:71; GFX90A: ; %bb.0:72; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; GFX90A-NEXT: ;;#ASMSTART74; GFX90A-NEXT: ; def v075; GFX90A-NEXT: ;;#ASMEND76; GFX90A-NEXT: v_mov_b32_e32 v1, 077; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 1678; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__1_u_u_u:83; GFX942: ; %bb.0:84; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX942-NEXT: ;;#ASMSTART86; GFX942-NEXT: ; def v087; GFX942-NEXT: ;;#ASMEND88; GFX942-NEXT: v_mov_b32_e32 v1, 089; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 1690; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]91; GFX942-NEXT: s_waitcnt vmcnt(0)92; GFX942-NEXT: s_setpc_b64 s[30:31]93 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()94 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>95 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 896 ret void97}98 99define void @v_shuffle_v4bf16_v2bf16__2_u_u_u(ptr addrspace(1) inreg %ptr) {100; GFX9-LABEL: v_shuffle_v4bf16_v2bf16__2_u_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 bfloat> asm "; def $0", "=v"()105 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>106 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8107 ret void108}109 110define void @v_shuffle_v4bf16_v2bf16__3_u_u_u(ptr addrspace(1) inreg %ptr) {111; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_u_u_u:112; GFX900: ; %bb.0:113; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX900-NEXT: ;;#ASMSTART115; GFX900-NEXT: ; def v0116; GFX900-NEXT: ;;#ASMEND117; GFX900-NEXT: v_mov_b32_e32 v1, 0118; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 16119; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_u_u_u:124; GFX90A: ; %bb.0:125; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)126; GFX90A-NEXT: ;;#ASMSTART127; GFX90A-NEXT: ; def v0128; GFX90A-NEXT: ;;#ASMEND129; GFX90A-NEXT: v_mov_b32_e32 v1, 0130; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 16131; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_u_u_u:136; GFX942: ; %bb.0:137; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX942-NEXT: ;;#ASMSTART139; GFX942-NEXT: ; def v0140; GFX942-NEXT: ;;#ASMEND141; GFX942-NEXT: v_mov_b32_e32 v1, 0142; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 16143; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]144; GFX942-NEXT: s_waitcnt vmcnt(0)145; GFX942-NEXT: s_setpc_b64 s[30:31]146 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()147 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()148 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>149 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8150 ret void151}152 153define void @v_shuffle_v4bf16_v2bf16__3_0_u_u(ptr addrspace(1) inreg %ptr) {154; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_0_u_u:155; GFX900: ; %bb.0:156; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)157; GFX900-NEXT: ;;#ASMSTART158; GFX900-NEXT: ; def v0159; GFX900-NEXT: ;;#ASMEND160; GFX900-NEXT: v_mov_b32_e32 v1, 0161; GFX900-NEXT: ;;#ASMSTART162; GFX900-NEXT: ; def v2163; GFX900-NEXT: ;;#ASMEND164; GFX900-NEXT: v_alignbit_b32 v0, v0, v2, 16165; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], s[16:17]166; GFX900-NEXT: s_waitcnt vmcnt(0)167; GFX900-NEXT: s_setpc_b64 s[30:31]168;169; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_0_u_u:170; GFX90A: ; %bb.0:171; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; GFX90A-NEXT: ;;#ASMSTART173; GFX90A-NEXT: ; def v0174; GFX90A-NEXT: ;;#ASMEND175; GFX90A-NEXT: v_mov_b32_e32 v1, 0176; GFX90A-NEXT: ;;#ASMSTART177; GFX90A-NEXT: ; def v2178; GFX90A-NEXT: ;;#ASMEND179; GFX90A-NEXT: v_alignbit_b32 v0, v0, v2, 16180; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_0_u_u:185; GFX942: ; %bb.0:186; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX942-NEXT: ;;#ASMSTART188; GFX942-NEXT: ; def v0189; GFX942-NEXT: ;;#ASMEND190; GFX942-NEXT: v_mov_b32_e32 v1, 0191; GFX942-NEXT: ;;#ASMSTART192; GFX942-NEXT: ; def v2193; GFX942-NEXT: ;;#ASMEND194; GFX942-NEXT: s_nop 0195; GFX942-NEXT: v_alignbit_b32 v0, v0, v2, 16196; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]197; GFX942-NEXT: s_waitcnt vmcnt(0)198; GFX942-NEXT: s_setpc_b64 s[30:31]199 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()200 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()201 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>202 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8203 ret void204}205 206define void @v_shuffle_v4bf16_v2bf16__3_1_u_u(ptr addrspace(1) inreg %ptr) {207; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_1_u_u:208; GFX900: ; %bb.0:209; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)210; GFX900-NEXT: ;;#ASMSTART211; GFX900-NEXT: ; def v0212; GFX900-NEXT: ;;#ASMEND213; GFX900-NEXT: s_mov_b32 s4, 0x7060302214; GFX900-NEXT: v_mov_b32_e32 v1, 0215; GFX900-NEXT: ;;#ASMSTART216; GFX900-NEXT: ; def v2217; GFX900-NEXT: ;;#ASMEND218; GFX900-NEXT: v_perm_b32 v0, v0, v2, s4219; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_1_u_u:224; GFX90A: ; %bb.0:225; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GFX90A-NEXT: ;;#ASMSTART227; GFX90A-NEXT: ; def v0228; GFX90A-NEXT: ;;#ASMEND229; GFX90A-NEXT: s_mov_b32 s4, 0x7060302230; GFX90A-NEXT: v_mov_b32_e32 v1, 0231; GFX90A-NEXT: ;;#ASMSTART232; GFX90A-NEXT: ; def v2233; GFX90A-NEXT: ;;#ASMEND234; GFX90A-NEXT: v_perm_b32 v0, v0, v2, s4235; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_1_u_u:240; GFX942: ; %bb.0:241; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX942-NEXT: ;;#ASMSTART243; GFX942-NEXT: ; def v0244; GFX942-NEXT: ;;#ASMEND245; GFX942-NEXT: s_mov_b32 s2, 0x7060302246; GFX942-NEXT: v_mov_b32_e32 v1, 0247; GFX942-NEXT: ;;#ASMSTART248; GFX942-NEXT: ; def v2249; GFX942-NEXT: ;;#ASMEND250; GFX942-NEXT: s_nop 0251; GFX942-NEXT: v_perm_b32 v0, v0, v2, s2252; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]253; GFX942-NEXT: s_waitcnt vmcnt(0)254; GFX942-NEXT: s_setpc_b64 s[30:31]255 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()256 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()257 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>258 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8259 ret void260}261 262define void @v_shuffle_v4bf16_v2bf16__3_2_u_u(ptr addrspace(1) inreg %ptr) {263; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_2_u_u:264; GFX900: ; %bb.0:265; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)266; GFX900-NEXT: ;;#ASMSTART267; GFX900-NEXT: ; def v0268; GFX900-NEXT: ;;#ASMEND269; GFX900-NEXT: v_mov_b32_e32 v1, 0270; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 16271; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_2_u_u:276; GFX90A: ; %bb.0:277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX90A-NEXT: ;;#ASMSTART279; GFX90A-NEXT: ; def v0280; GFX90A-NEXT: ;;#ASMEND281; GFX90A-NEXT: v_mov_b32_e32 v1, 0282; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 16283; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_2_u_u:288; GFX942: ; %bb.0:289; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX942-NEXT: ;;#ASMSTART291; GFX942-NEXT: ; def v0292; GFX942-NEXT: ;;#ASMEND293; GFX942-NEXT: v_mov_b32_e32 v1, 0294; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 16295; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]296; GFX942-NEXT: s_waitcnt vmcnt(0)297; GFX942-NEXT: s_setpc_b64 s[30:31]298 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()299 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()300 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>301 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8302 ret void303}304 305define void @v_shuffle_v4bf16_v2bf16__3_3_u_u(ptr addrspace(1) inreg %ptr) {306; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_u:307; GFX900: ; %bb.0:308; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX900-NEXT: ;;#ASMSTART310; GFX900-NEXT: ; def v0311; GFX900-NEXT: ;;#ASMEND312; GFX900-NEXT: s_mov_b32 s4, 0x7060302313; GFX900-NEXT: v_mov_b32_e32 v1, 0314; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4315; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_3_u_u:320; GFX90A: ; %bb.0:321; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX90A-NEXT: ;;#ASMSTART323; GFX90A-NEXT: ; def v0324; GFX90A-NEXT: ;;#ASMEND325; GFX90A-NEXT: s_mov_b32 s4, 0x7060302326; GFX90A-NEXT: v_mov_b32_e32 v1, 0327; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4328; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], 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_v4bf16_v2bf16__3_3_u_u:333; GFX942: ; %bb.0:334; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)335; GFX942-NEXT: ;;#ASMSTART336; GFX942-NEXT: ; def v0337; GFX942-NEXT: ;;#ASMEND338; GFX942-NEXT: s_mov_b32 s2, 0x7060302339; GFX942-NEXT: v_mov_b32_e32 v1, 0340; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2341; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]342; GFX942-NEXT: s_waitcnt vmcnt(0)343; GFX942-NEXT: s_setpc_b64 s[30:31]344 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()345 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()346 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>347 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8348 ret void349}350 351define void @v_shuffle_v4bf16_v2bf16__3_3_0_u(ptr addrspace(1) inreg %ptr) {352; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_u:353; GFX900: ; %bb.0:354; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX900-NEXT: ;;#ASMSTART356; GFX900-NEXT: ; def v0357; GFX900-NEXT: ;;#ASMEND358; GFX900-NEXT: s_mov_b32 s4, 0x7060302359; GFX900-NEXT: v_mov_b32_e32 v2, 0360; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4361; GFX900-NEXT: ;;#ASMSTART362; GFX900-NEXT: ; def v1363; GFX900-NEXT: ;;#ASMEND364; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]365; GFX900-NEXT: s_waitcnt vmcnt(0)366; GFX900-NEXT: s_setpc_b64 s[30:31]367;368; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_u:369; GFX90A: ; %bb.0:370; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)371; GFX90A-NEXT: ;;#ASMSTART372; GFX90A-NEXT: ; def v0373; GFX90A-NEXT: ;;#ASMEND374; GFX90A-NEXT: s_mov_b32 s4, 0x7060302375; GFX90A-NEXT: v_mov_b32_e32 v2, 0376; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4377; GFX90A-NEXT: ;;#ASMSTART378; GFX90A-NEXT: ; def v1379; GFX90A-NEXT: ;;#ASMEND380; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]381; GFX90A-NEXT: s_waitcnt vmcnt(0)382; GFX90A-NEXT: s_setpc_b64 s[30:31]383;384; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_u:385; GFX942: ; %bb.0:386; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)387; GFX942-NEXT: ;;#ASMSTART388; GFX942-NEXT: ; def v0389; GFX942-NEXT: ;;#ASMEND390; GFX942-NEXT: s_mov_b32 s2, 0x7060302391; GFX942-NEXT: v_mov_b32_e32 v2, 0392; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2393; GFX942-NEXT: ;;#ASMSTART394; GFX942-NEXT: ; def v1395; GFX942-NEXT: ;;#ASMEND396; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]397; GFX942-NEXT: s_waitcnt vmcnt(0)398; GFX942-NEXT: s_setpc_b64 s[30:31]399 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()400 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()401 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>402 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8403 ret void404}405 406define void @v_shuffle_v4bf16_v2bf16__3_3_1_u(ptr addrspace(1) inreg %ptr) {407; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_u:408; GFX900: ; %bb.0:409; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)410; GFX900-NEXT: ;;#ASMSTART411; GFX900-NEXT: ; def v0412; GFX900-NEXT: ;;#ASMEND413; GFX900-NEXT: v_alignbit_b32 v1, s4, v0, 16414; GFX900-NEXT: s_mov_b32 s4, 0x7060302415; GFX900-NEXT: v_mov_b32_e32 v2, 0416; GFX900-NEXT: ;;#ASMSTART417; GFX900-NEXT: ; def v3418; GFX900-NEXT: ;;#ASMEND419; GFX900-NEXT: v_perm_b32 v0, v3, v3, s4420; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]421; GFX900-NEXT: s_waitcnt vmcnt(0)422; GFX900-NEXT: s_setpc_b64 s[30:31]423;424; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_u:425; GFX90A: ; %bb.0:426; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)427; GFX90A-NEXT: ;;#ASMSTART428; GFX90A-NEXT: ; def v0429; GFX90A-NEXT: ;;#ASMEND430; GFX90A-NEXT: v_alignbit_b32 v1, s4, v0, 16431; GFX90A-NEXT: s_mov_b32 s4, 0x7060302432; GFX90A-NEXT: v_mov_b32_e32 v2, 0433; GFX90A-NEXT: ;;#ASMSTART434; GFX90A-NEXT: ; def v3435; GFX90A-NEXT: ;;#ASMEND436; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4437; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]438; GFX90A-NEXT: s_waitcnt vmcnt(0)439; GFX90A-NEXT: s_setpc_b64 s[30:31]440;441; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_u:442; GFX942: ; %bb.0:443; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)444; GFX942-NEXT: ;;#ASMSTART445; GFX942-NEXT: ; def v0446; GFX942-NEXT: ;;#ASMEND447; GFX942-NEXT: s_mov_b32 s2, 0x7060302448; GFX942-NEXT: v_mov_b32_e32 v2, 0449; GFX942-NEXT: ;;#ASMSTART450; GFX942-NEXT: ; def v3451; GFX942-NEXT: ;;#ASMEND452; GFX942-NEXT: v_alignbit_b32 v1, s0, v0, 16453; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2454; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]455; GFX942-NEXT: s_waitcnt vmcnt(0)456; GFX942-NEXT: s_setpc_b64 s[30:31]457 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()458 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()459 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>460 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8461 ret void462}463 464define void @v_shuffle_v4bf16_v2bf16__3_3_2_u(ptr addrspace(1) inreg %ptr) {465; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_u:466; GFX900: ; %bb.0:467; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)468; GFX900-NEXT: s_mov_b32 s4, 0x7060302469; GFX900-NEXT: v_mov_b32_e32 v2, 0470; GFX900-NEXT: ;;#ASMSTART471; GFX900-NEXT: ; def v1472; GFX900-NEXT: ;;#ASMEND473; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4474; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]475; GFX900-NEXT: s_waitcnt vmcnt(0)476; GFX900-NEXT: s_setpc_b64 s[30:31]477;478; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_u:479; GFX90A: ; %bb.0:480; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)481; GFX90A-NEXT: s_mov_b32 s4, 0x7060302482; GFX90A-NEXT: v_mov_b32_e32 v2, 0483; GFX90A-NEXT: ;;#ASMSTART484; GFX90A-NEXT: ; def v1485; GFX90A-NEXT: ;;#ASMEND486; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4487; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]488; GFX90A-NEXT: s_waitcnt vmcnt(0)489; GFX90A-NEXT: s_setpc_b64 s[30:31]490;491; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_u:492; GFX942: ; %bb.0:493; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)494; GFX942-NEXT: s_mov_b32 s2, 0x7060302495; GFX942-NEXT: v_mov_b32_e32 v2, 0496; GFX942-NEXT: ;;#ASMSTART497; GFX942-NEXT: ; def v1498; GFX942-NEXT: ;;#ASMEND499; GFX942-NEXT: s_nop 0500; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2501; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]502; GFX942-NEXT: s_waitcnt vmcnt(0)503; GFX942-NEXT: s_setpc_b64 s[30:31]504 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()505 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()506 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>507 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8508 ret void509}510 511define void @v_shuffle_v4bf16_v2bf16__3_3_3_u(ptr addrspace(1) inreg %ptr) {512; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_u:513; GFX900: ; %bb.0:514; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX900-NEXT: ;;#ASMSTART516; GFX900-NEXT: ; def v0517; GFX900-NEXT: ;;#ASMEND518; GFX900-NEXT: v_alignbit_b32 v1, s4, v0, 16519; GFX900-NEXT: s_mov_b32 s4, 0x7060302520; GFX900-NEXT: v_mov_b32_e32 v2, 0521; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4522; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]523; GFX900-NEXT: s_waitcnt vmcnt(0)524; GFX900-NEXT: s_setpc_b64 s[30:31]525;526; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_u:527; GFX90A: ; %bb.0:528; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)529; GFX90A-NEXT: ;;#ASMSTART530; GFX90A-NEXT: ; def v0531; GFX90A-NEXT: ;;#ASMEND532; GFX90A-NEXT: v_alignbit_b32 v1, s4, v0, 16533; GFX90A-NEXT: s_mov_b32 s4, 0x7060302534; GFX90A-NEXT: v_mov_b32_e32 v2, 0535; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4536; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]537; GFX90A-NEXT: s_waitcnt vmcnt(0)538; GFX90A-NEXT: s_setpc_b64 s[30:31]539;540; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_u:541; GFX942: ; %bb.0:542; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)543; GFX942-NEXT: ;;#ASMSTART544; GFX942-NEXT: ; def v0545; GFX942-NEXT: ;;#ASMEND546; GFX942-NEXT: s_mov_b32 s2, 0x7060302547; GFX942-NEXT: v_mov_b32_e32 v2, 0548; GFX942-NEXT: v_alignbit_b32 v1, s0, v0, 16549; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2550; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]551; GFX942-NEXT: s_waitcnt vmcnt(0)552; GFX942-NEXT: s_setpc_b64 s[30:31]553 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()554 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()555 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>556 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8557 ret void558}559 560define void @v_shuffle_v4bf16_v2bf16__3_3_3_0(ptr addrspace(1) inreg %ptr) {561; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_0:562; GFX900: ; %bb.0:563; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)564; GFX900-NEXT: ;;#ASMSTART565; GFX900-NEXT: ; def v1566; GFX900-NEXT: ;;#ASMEND567; GFX900-NEXT: s_mov_b32 s4, 0x7060302568; GFX900-NEXT: v_mov_b32_e32 v2, 0569; GFX900-NEXT: ;;#ASMSTART570; GFX900-NEXT: ; def v3571; GFX900-NEXT: ;;#ASMEND572; GFX900-NEXT: v_perm_b32 v0, v3, v3, s4573; GFX900-NEXT: v_alignbit_b32 v1, v1, v3, 16574; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]575; GFX900-NEXT: s_waitcnt vmcnt(0)576; GFX900-NEXT: s_setpc_b64 s[30:31]577;578; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_0:579; GFX90A: ; %bb.0:580; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)581; GFX90A-NEXT: ;;#ASMSTART582; GFX90A-NEXT: ; def v1583; GFX90A-NEXT: ;;#ASMEND584; GFX90A-NEXT: s_mov_b32 s4, 0x7060302585; GFX90A-NEXT: v_mov_b32_e32 v2, 0586; GFX90A-NEXT: ;;#ASMSTART587; GFX90A-NEXT: ; def v3588; GFX90A-NEXT: ;;#ASMEND589; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4590; GFX90A-NEXT: v_alignbit_b32 v1, v1, v3, 16591; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], 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_v4bf16_v2bf16__3_3_3_0:596; GFX942: ; %bb.0:597; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)598; GFX942-NEXT: ;;#ASMSTART599; GFX942-NEXT: ; def v1600; GFX942-NEXT: ;;#ASMEND601; GFX942-NEXT: s_mov_b32 s2, 0x7060302602; GFX942-NEXT: v_mov_b32_e32 v2, 0603; GFX942-NEXT: ;;#ASMSTART604; GFX942-NEXT: ; def v3605; GFX942-NEXT: ;;#ASMEND606; GFX942-NEXT: s_nop 0607; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2608; GFX942-NEXT: v_alignbit_b32 v1, v1, v3, 16609; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]610; GFX942-NEXT: s_waitcnt vmcnt(0)611; GFX942-NEXT: s_setpc_b64 s[30:31]612 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()613 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()614 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>615 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8616 ret void617}618 619define void @v_shuffle_v4bf16_v2bf16__3_3_3_1(ptr addrspace(1) inreg %ptr) {620; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_1:621; GFX900: ; %bb.0:622; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)623; GFX900-NEXT: ;;#ASMSTART624; GFX900-NEXT: ; def v0625; GFX900-NEXT: ;;#ASMEND626; GFX900-NEXT: s_mov_b32 s4, 0x7060302627; GFX900-NEXT: v_mov_b32_e32 v2, 0628; GFX900-NEXT: ;;#ASMSTART629; GFX900-NEXT: ; def v3630; GFX900-NEXT: ;;#ASMEND631; GFX900-NEXT: v_perm_b32 v1, v0, v3, s4632; GFX900-NEXT: v_perm_b32 v0, v3, v3, s4633; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]634; GFX900-NEXT: s_waitcnt vmcnt(0)635; GFX900-NEXT: s_setpc_b64 s[30:31]636;637; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_1:638; GFX90A: ; %bb.0:639; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)640; GFX90A-NEXT: ;;#ASMSTART641; GFX90A-NEXT: ; def v0642; GFX90A-NEXT: ;;#ASMEND643; GFX90A-NEXT: s_mov_b32 s4, 0x7060302644; GFX90A-NEXT: v_mov_b32_e32 v2, 0645; GFX90A-NEXT: ;;#ASMSTART646; GFX90A-NEXT: ; def v3647; GFX90A-NEXT: ;;#ASMEND648; GFX90A-NEXT: v_perm_b32 v1, v0, v3, s4649; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4650; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]651; GFX90A-NEXT: s_waitcnt vmcnt(0)652; GFX90A-NEXT: s_setpc_b64 s[30:31]653;654; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_1:655; GFX942: ; %bb.0:656; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)657; GFX942-NEXT: ;;#ASMSTART658; GFX942-NEXT: ; def v0659; GFX942-NEXT: ;;#ASMEND660; GFX942-NEXT: s_mov_b32 s2, 0x7060302661; GFX942-NEXT: v_mov_b32_e32 v2, 0662; GFX942-NEXT: ;;#ASMSTART663; GFX942-NEXT: ; def v3664; GFX942-NEXT: ;;#ASMEND665; GFX942-NEXT: s_nop 0666; GFX942-NEXT: v_perm_b32 v1, v0, v3, s2667; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2668; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]669; GFX942-NEXT: s_waitcnt vmcnt(0)670; GFX942-NEXT: s_setpc_b64 s[30:31]671 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()672 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()673 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>674 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8675 ret void676}677 678define void @v_shuffle_v4bf16_v2bf16__3_3_3_2(ptr addrspace(1) inreg %ptr) {679; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_2:680; GFX900: ; %bb.0:681; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)682; GFX900-NEXT: ;;#ASMSTART683; GFX900-NEXT: ; def v1684; GFX900-NEXT: ;;#ASMEND685; GFX900-NEXT: s_mov_b32 s4, 0x7060302686; GFX900-NEXT: v_mov_b32_e32 v2, 0687; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4688; GFX900-NEXT: v_alignbit_b32 v1, v1, v1, 16689; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]690; GFX900-NEXT: s_waitcnt vmcnt(0)691; GFX900-NEXT: s_setpc_b64 s[30:31]692;693; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_2:694; GFX90A: ; %bb.0:695; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)696; GFX90A-NEXT: ;;#ASMSTART697; GFX90A-NEXT: ; def v1698; GFX90A-NEXT: ;;#ASMEND699; GFX90A-NEXT: s_mov_b32 s4, 0x7060302700; GFX90A-NEXT: v_mov_b32_e32 v2, 0701; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4702; GFX90A-NEXT: v_alignbit_b32 v1, v1, v1, 16703; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]704; GFX90A-NEXT: s_waitcnt vmcnt(0)705; GFX90A-NEXT: s_setpc_b64 s[30:31]706;707; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_2:708; GFX942: ; %bb.0:709; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)710; GFX942-NEXT: ;;#ASMSTART711; GFX942-NEXT: ; def v1712; GFX942-NEXT: ;;#ASMEND713; GFX942-NEXT: s_mov_b32 s2, 0x7060302714; GFX942-NEXT: v_mov_b32_e32 v2, 0715; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2716; GFX942-NEXT: v_alignbit_b32 v1, v1, v1, 16717; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]718; GFX942-NEXT: s_waitcnt vmcnt(0)719; GFX942-NEXT: s_setpc_b64 s[30:31]720 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()721 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()722 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>723 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8724 ret void725}726 727define void @v_shuffle_v4bf16_v2bf16__3_3_3_3(ptr addrspace(1) inreg %ptr) {728; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_3:729; GFX900: ; %bb.0:730; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)731; GFX900-NEXT: ;;#ASMSTART732; GFX900-NEXT: ; def v0733; GFX900-NEXT: ;;#ASMEND734; GFX900-NEXT: s_mov_b32 s4, 0x7060302735; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4736; GFX900-NEXT: v_mov_b32_e32 v2, 0737; GFX900-NEXT: v_mov_b32_e32 v1, v0738; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]739; GFX900-NEXT: s_waitcnt vmcnt(0)740; GFX900-NEXT: s_setpc_b64 s[30:31]741;742; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_3:743; GFX90A: ; %bb.0:744; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)745; GFX90A-NEXT: ;;#ASMSTART746; GFX90A-NEXT: ; def v0747; GFX90A-NEXT: ;;#ASMEND748; GFX90A-NEXT: s_mov_b32 s4, 0x7060302749; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4750; GFX90A-NEXT: v_mov_b32_e32 v2, 0751; GFX90A-NEXT: v_mov_b32_e32 v1, v0752; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]753; GFX90A-NEXT: s_waitcnt vmcnt(0)754; GFX90A-NEXT: s_setpc_b64 s[30:31]755;756; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_3_3:757; GFX942: ; %bb.0:758; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)759; GFX942-NEXT: ;;#ASMSTART760; GFX942-NEXT: ; def v0761; GFX942-NEXT: ;;#ASMEND762; GFX942-NEXT: s_mov_b32 s2, 0x7060302763; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2764; GFX942-NEXT: v_mov_b32_e32 v2, 0765; GFX942-NEXT: v_mov_b32_e32 v1, v0766; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]767; GFX942-NEXT: s_waitcnt vmcnt(0)768; GFX942-NEXT: s_setpc_b64 s[30:31]769 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()770 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()771 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>772 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8773 ret void774}775 776define void @v_shuffle_v4bf16_v2bf16__u_0_0_0(ptr addrspace(1) inreg %ptr) {777; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__u_0_0_0:778; GFX900: ; %bb.0:779; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)780; GFX900-NEXT: ;;#ASMSTART781; GFX900-NEXT: ; def v0782; GFX900-NEXT: ;;#ASMEND783; GFX900-NEXT: s_mov_b32 s4, 0x5040100784; GFX900-NEXT: v_mov_b32_e32 v2, 0785; GFX900-NEXT: v_perm_b32 v1, v0, v0, s4786; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0787; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]788; GFX900-NEXT: s_waitcnt vmcnt(0)789; GFX900-NEXT: s_setpc_b64 s[30:31]790;791; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__u_0_0_0:792; GFX90A: ; %bb.0:793; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)794; GFX90A-NEXT: ;;#ASMSTART795; GFX90A-NEXT: ; def v0796; GFX90A-NEXT: ;;#ASMEND797; GFX90A-NEXT: s_mov_b32 s4, 0x5040100798; GFX90A-NEXT: v_mov_b32_e32 v2, 0799; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s4800; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0801; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]802; GFX90A-NEXT: s_waitcnt vmcnt(0)803; GFX90A-NEXT: s_setpc_b64 s[30:31]804;805; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__u_0_0_0:806; GFX942: ; %bb.0:807; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)808; GFX942-NEXT: ;;#ASMSTART809; GFX942-NEXT: ; def v0810; GFX942-NEXT: ;;#ASMEND811; GFX942-NEXT: s_mov_b32 s2, 0x5040100812; GFX942-NEXT: v_mov_b32_e32 v2, 0813; GFX942-NEXT: v_perm_b32 v1, v0, v0, s2814; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0815; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]816; GFX942-NEXT: s_waitcnt vmcnt(0)817; GFX942-NEXT: s_setpc_b64 s[30:31]818 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()819 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>820 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8821 ret void822}823 824define void @v_shuffle_v4bf16_v2bf16__0_0_0_0(ptr addrspace(1) inreg %ptr) {825; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__0_0_0_0:826; GFX900: ; %bb.0:827; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)828; GFX900-NEXT: ;;#ASMSTART829; GFX900-NEXT: ; def v0830; GFX900-NEXT: ;;#ASMEND831; GFX900-NEXT: s_mov_b32 s4, 0x5040100832; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4833; GFX900-NEXT: v_mov_b32_e32 v2, 0834; GFX900-NEXT: v_mov_b32_e32 v1, v0835; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]836; GFX900-NEXT: s_waitcnt vmcnt(0)837; GFX900-NEXT: s_setpc_b64 s[30:31]838;839; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__0_0_0_0:840; GFX90A: ; %bb.0:841; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)842; GFX90A-NEXT: ;;#ASMSTART843; GFX90A-NEXT: ; def v0844; GFX90A-NEXT: ;;#ASMEND845; GFX90A-NEXT: s_mov_b32 s4, 0x5040100846; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4847; GFX90A-NEXT: v_mov_b32_e32 v2, 0848; GFX90A-NEXT: v_mov_b32_e32 v1, v0849; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]850; GFX90A-NEXT: s_waitcnt vmcnt(0)851; GFX90A-NEXT: s_setpc_b64 s[30:31]852;853; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__0_0_0_0:854; GFX942: ; %bb.0:855; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)856; GFX942-NEXT: ;;#ASMSTART857; GFX942-NEXT: ; def v0858; GFX942-NEXT: ;;#ASMEND859; GFX942-NEXT: s_mov_b32 s2, 0x5040100860; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2861; GFX942-NEXT: v_mov_b32_e32 v2, 0862; GFX942-NEXT: v_mov_b32_e32 v1, v0863; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]864; GFX942-NEXT: s_waitcnt vmcnt(0)865; GFX942-NEXT: s_setpc_b64 s[30:31]866 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()867 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> zeroinitializer868 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8869 ret void870}871 872define void @v_shuffle_v4bf16_v2bf16__1_0_0_0(ptr addrspace(1) inreg %ptr) {873; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__1_0_0_0:874; GFX900: ; %bb.0:875; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)876; GFX900-NEXT: ;;#ASMSTART877; GFX900-NEXT: ; def v0878; GFX900-NEXT: ;;#ASMEND879; GFX900-NEXT: s_mov_b32 s4, 0x5040100880; GFX900-NEXT: v_mov_b32_e32 v2, 0881; GFX900-NEXT: v_perm_b32 v1, v0, v0, s4882; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 16883; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]884; GFX900-NEXT: s_waitcnt vmcnt(0)885; GFX900-NEXT: s_setpc_b64 s[30:31]886;887; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__1_0_0_0:888; GFX90A: ; %bb.0:889; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)890; GFX90A-NEXT: ;;#ASMSTART891; GFX90A-NEXT: ; def v0892; GFX90A-NEXT: ;;#ASMEND893; GFX90A-NEXT: s_mov_b32 s4, 0x5040100894; GFX90A-NEXT: v_mov_b32_e32 v2, 0895; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s4896; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 16897; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], 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_v4bf16_v2bf16__1_0_0_0:902; GFX942: ; %bb.0:903; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)904; GFX942-NEXT: ;;#ASMSTART905; GFX942-NEXT: ; def v0906; GFX942-NEXT: ;;#ASMEND907; GFX942-NEXT: s_mov_b32 s2, 0x5040100908; GFX942-NEXT: v_mov_b32_e32 v2, 0909; GFX942-NEXT: v_perm_b32 v1, v0, v0, s2910; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 16911; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]912; GFX942-NEXT: s_waitcnt vmcnt(0)913; GFX942-NEXT: s_setpc_b64 s[30:31]914 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()915 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>916 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8917 ret void918}919 920define void @v_shuffle_v4bf16_v2bf16__2_0_0_0(ptr addrspace(1) inreg %ptr) {921; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__2_0_0_0:922; GFX900: ; %bb.0:923; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)924; GFX900-NEXT: ;;#ASMSTART925; GFX900-NEXT: ; def v0926; GFX900-NEXT: ;;#ASMEND927; GFX900-NEXT: s_mov_b32 s4, 0x5040100928; GFX900-NEXT: v_mov_b32_e32 v2, 0929; GFX900-NEXT: v_perm_b32 v1, v0, v0, s4930; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0931; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]932; GFX900-NEXT: s_waitcnt vmcnt(0)933; GFX900-NEXT: s_setpc_b64 s[30:31]934;935; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__2_0_0_0:936; GFX90A: ; %bb.0:937; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)938; GFX90A-NEXT: ;;#ASMSTART939; GFX90A-NEXT: ; def v0940; GFX90A-NEXT: ;;#ASMEND941; GFX90A-NEXT: s_mov_b32 s4, 0x5040100942; GFX90A-NEXT: v_mov_b32_e32 v2, 0943; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s4944; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0945; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]946; GFX90A-NEXT: s_waitcnt vmcnt(0)947; GFX90A-NEXT: s_setpc_b64 s[30:31]948;949; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__2_0_0_0:950; GFX942: ; %bb.0:951; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)952; GFX942-NEXT: ;;#ASMSTART953; GFX942-NEXT: ; def v0954; GFX942-NEXT: ;;#ASMEND955; GFX942-NEXT: s_mov_b32 s2, 0x5040100956; GFX942-NEXT: v_mov_b32_e32 v2, 0957; GFX942-NEXT: v_perm_b32 v1, v0, v0, s2958; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0959; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]960; GFX942-NEXT: s_waitcnt vmcnt(0)961; GFX942-NEXT: s_setpc_b64 s[30:31]962 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()963 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>964 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8965 ret void966}967 968define void @v_shuffle_v4bf16_v2bf16__3_0_0_0(ptr addrspace(1) inreg %ptr) {969; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_0_0_0:970; GFX900: ; %bb.0:971; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)972; GFX900-NEXT: ;;#ASMSTART973; GFX900-NEXT: ; def v0974; GFX900-NEXT: ;;#ASMEND975; GFX900-NEXT: s_mov_b32 s4, 0x5040100976; GFX900-NEXT: v_mov_b32_e32 v2, 0977; GFX900-NEXT: ;;#ASMSTART978; GFX900-NEXT: ; def v3979; GFX900-NEXT: ;;#ASMEND980; GFX900-NEXT: v_perm_b32 v1, v0, v0, s4981; GFX900-NEXT: v_alignbit_b32 v0, v0, v3, 16982; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]983; GFX900-NEXT: s_waitcnt vmcnt(0)984; GFX900-NEXT: s_setpc_b64 s[30:31]985;986; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_0_0_0:987; GFX90A: ; %bb.0:988; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)989; GFX90A-NEXT: ;;#ASMSTART990; GFX90A-NEXT: ; def v0991; GFX90A-NEXT: ;;#ASMEND992; GFX90A-NEXT: s_mov_b32 s4, 0x5040100993; GFX90A-NEXT: v_mov_b32_e32 v2, 0994; GFX90A-NEXT: ;;#ASMSTART995; GFX90A-NEXT: ; def v3996; GFX90A-NEXT: ;;#ASMEND997; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s4998; GFX90A-NEXT: v_alignbit_b32 v0, v0, v3, 16999; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1000; GFX90A-NEXT: s_waitcnt vmcnt(0)1001; GFX90A-NEXT: s_setpc_b64 s[30:31]1002;1003; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_0_0_0:1004; GFX942: ; %bb.0:1005; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1006; GFX942-NEXT: ;;#ASMSTART1007; GFX942-NEXT: ; def v01008; GFX942-NEXT: ;;#ASMEND1009; GFX942-NEXT: s_mov_b32 s2, 0x50401001010; GFX942-NEXT: v_mov_b32_e32 v2, 01011; GFX942-NEXT: ;;#ASMSTART1012; GFX942-NEXT: ; def v31013; GFX942-NEXT: ;;#ASMEND1014; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21015; GFX942-NEXT: v_alignbit_b32 v0, v0, v3, 161016; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1017; GFX942-NEXT: s_waitcnt vmcnt(0)1018; GFX942-NEXT: s_setpc_b64 s[30:31]1019 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1020 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1021 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>1022 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81023 ret void1024}1025 1026define void @v_shuffle_v4bf16_v2bf16__3_u_0_0(ptr addrspace(1) inreg %ptr) {1027; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_u_0_0:1028; GFX900: ; %bb.0:1029; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1030; GFX900-NEXT: ;;#ASMSTART1031; GFX900-NEXT: ; def v01032; GFX900-NEXT: ;;#ASMEND1033; GFX900-NEXT: ;;#ASMSTART1034; GFX900-NEXT: ; def v11035; GFX900-NEXT: ;;#ASMEND1036; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 161037; GFX900-NEXT: s_mov_b32 s4, 0x50401001038; GFX900-NEXT: v_mov_b32_e32 v2, 01039; GFX900-NEXT: v_perm_b32 v1, v1, v1, s41040; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1041; GFX900-NEXT: s_waitcnt vmcnt(0)1042; GFX900-NEXT: s_setpc_b64 s[30:31]1043;1044; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_u_0_0:1045; GFX90A: ; %bb.0:1046; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1047; GFX90A-NEXT: ;;#ASMSTART1048; GFX90A-NEXT: ; def v01049; GFX90A-NEXT: ;;#ASMEND1050; GFX90A-NEXT: ;;#ASMSTART1051; GFX90A-NEXT: ; def v11052; GFX90A-NEXT: ;;#ASMEND1053; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 161054; GFX90A-NEXT: s_mov_b32 s4, 0x50401001055; GFX90A-NEXT: v_mov_b32_e32 v2, 01056; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s41057; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1058; GFX90A-NEXT: s_waitcnt vmcnt(0)1059; GFX90A-NEXT: s_setpc_b64 s[30:31]1060;1061; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_u_0_0:1062; GFX942: ; %bb.0:1063; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1064; GFX942-NEXT: ;;#ASMSTART1065; GFX942-NEXT: ; def v11066; GFX942-NEXT: ;;#ASMEND1067; GFX942-NEXT: ;;#ASMSTART1068; GFX942-NEXT: ; def v01069; GFX942-NEXT: ;;#ASMEND1070; GFX942-NEXT: s_mov_b32 s2, 0x50401001071; GFX942-NEXT: v_mov_b32_e32 v2, 01072; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 161073; GFX942-NEXT: v_perm_b32 v1, v1, v1, s21074; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1075; GFX942-NEXT: s_waitcnt vmcnt(0)1076; GFX942-NEXT: s_setpc_b64 s[30:31]1077 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1078 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1079 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>1080 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81081 ret void1082}1083 1084define void @v_shuffle_v4bf16_v2bf16__3_1_0_0(ptr addrspace(1) inreg %ptr) {1085; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_1_0_0:1086; GFX900: ; %bb.0:1087; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1088; GFX900-NEXT: ;;#ASMSTART1089; GFX900-NEXT: ; def v01090; GFX900-NEXT: ;;#ASMEND1091; GFX900-NEXT: s_mov_b32 s4, 0x70603021092; GFX900-NEXT: ;;#ASMSTART1093; GFX900-NEXT: ; def v11094; GFX900-NEXT: ;;#ASMEND1095; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41096; GFX900-NEXT: s_mov_b32 s4, 0x50401001097; GFX900-NEXT: v_mov_b32_e32 v2, 01098; GFX900-NEXT: v_perm_b32 v1, v1, v1, s41099; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1100; GFX900-NEXT: s_waitcnt vmcnt(0)1101; GFX900-NEXT: s_setpc_b64 s[30:31]1102;1103; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_1_0_0:1104; GFX90A: ; %bb.0:1105; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1106; GFX90A-NEXT: ;;#ASMSTART1107; GFX90A-NEXT: ; def v01108; GFX90A-NEXT: ;;#ASMEND1109; GFX90A-NEXT: s_mov_b32 s4, 0x70603021110; GFX90A-NEXT: ;;#ASMSTART1111; GFX90A-NEXT: ; def v11112; GFX90A-NEXT: ;;#ASMEND1113; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41114; GFX90A-NEXT: s_mov_b32 s4, 0x50401001115; GFX90A-NEXT: v_mov_b32_e32 v2, 01116; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s41117; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1118; GFX90A-NEXT: s_waitcnt vmcnt(0)1119; GFX90A-NEXT: s_setpc_b64 s[30:31]1120;1121; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_1_0_0:1122; GFX942: ; %bb.0:1123; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1124; GFX942-NEXT: ;;#ASMSTART1125; GFX942-NEXT: ; def v01126; GFX942-NEXT: ;;#ASMEND1127; GFX942-NEXT: s_mov_b32 s2, 0x70603021128; GFX942-NEXT: ;;#ASMSTART1129; GFX942-NEXT: ; def v11130; GFX942-NEXT: ;;#ASMEND1131; GFX942-NEXT: v_mov_b32_e32 v2, 01132; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21133; GFX942-NEXT: s_mov_b32 s2, 0x50401001134; GFX942-NEXT: v_perm_b32 v1, v1, v1, s21135; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1136; GFX942-NEXT: s_waitcnt vmcnt(0)1137; GFX942-NEXT: s_setpc_b64 s[30:31]1138 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1139 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1140 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>1141 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81142 ret void1143}1144 1145define void @v_shuffle_v4bf16_v2bf16__3_2_0_0(ptr addrspace(1) inreg %ptr) {1146; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_2_0_0:1147; GFX900: ; %bb.0:1148; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1149; GFX900-NEXT: ;;#ASMSTART1150; GFX900-NEXT: ; def v01151; GFX900-NEXT: ;;#ASMEND1152; GFX900-NEXT: s_mov_b32 s4, 0x50401001153; GFX900-NEXT: v_mov_b32_e32 v2, 01154; GFX900-NEXT: ;;#ASMSTART1155; GFX900-NEXT: ; def v31156; GFX900-NEXT: ;;#ASMEND1157; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41158; GFX900-NEXT: v_alignbit_b32 v0, v3, v3, 161159; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1160; GFX900-NEXT: s_waitcnt vmcnt(0)1161; GFX900-NEXT: s_setpc_b64 s[30:31]1162;1163; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_2_0_0:1164; GFX90A: ; %bb.0:1165; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1166; GFX90A-NEXT: ;;#ASMSTART1167; GFX90A-NEXT: ; def v01168; GFX90A-NEXT: ;;#ASMEND1169; GFX90A-NEXT: s_mov_b32 s4, 0x50401001170; GFX90A-NEXT: v_mov_b32_e32 v2, 01171; GFX90A-NEXT: ;;#ASMSTART1172; GFX90A-NEXT: ; def v31173; GFX90A-NEXT: ;;#ASMEND1174; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41175; GFX90A-NEXT: v_alignbit_b32 v0, v3, v3, 161176; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1177; GFX90A-NEXT: s_waitcnt vmcnt(0)1178; GFX90A-NEXT: s_setpc_b64 s[30:31]1179;1180; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_2_0_0:1181; GFX942: ; %bb.0:1182; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1183; GFX942-NEXT: ;;#ASMSTART1184; GFX942-NEXT: ; def v01185; GFX942-NEXT: ;;#ASMEND1186; GFX942-NEXT: s_mov_b32 s2, 0x50401001187; GFX942-NEXT: v_mov_b32_e32 v2, 01188; GFX942-NEXT: ;;#ASMSTART1189; GFX942-NEXT: ; def v31190; GFX942-NEXT: ;;#ASMEND1191; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21192; GFX942-NEXT: v_alignbit_b32 v0, v3, v3, 161193; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1194; GFX942-NEXT: s_waitcnt vmcnt(0)1195; GFX942-NEXT: s_setpc_b64 s[30:31]1196 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1197 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1198 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>1199 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81200 ret void1201}1202 1203define void @v_shuffle_v4bf16_v2bf16__3_3_0_0(ptr addrspace(1) inreg %ptr) {1204; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_0:1205; GFX900: ; %bb.0:1206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1207; GFX900-NEXT: ;;#ASMSTART1208; GFX900-NEXT: ; def v01209; GFX900-NEXT: ;;#ASMEND1210; GFX900-NEXT: s_mov_b32 s4, 0x70603021211; GFX900-NEXT: ;;#ASMSTART1212; GFX900-NEXT: ; def v11213; GFX900-NEXT: ;;#ASMEND1214; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41215; GFX900-NEXT: s_mov_b32 s4, 0x50401001216; GFX900-NEXT: v_mov_b32_e32 v2, 01217; GFX900-NEXT: v_perm_b32 v1, v1, v1, s41218; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1219; GFX900-NEXT: s_waitcnt vmcnt(0)1220; GFX900-NEXT: s_setpc_b64 s[30:31]1221;1222; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_0:1223; GFX90A: ; %bb.0:1224; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1225; GFX90A-NEXT: ;;#ASMSTART1226; GFX90A-NEXT: ; def v01227; GFX90A-NEXT: ;;#ASMEND1228; GFX90A-NEXT: s_mov_b32 s4, 0x70603021229; GFX90A-NEXT: ;;#ASMSTART1230; GFX90A-NEXT: ; def v11231; GFX90A-NEXT: ;;#ASMEND1232; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41233; GFX90A-NEXT: s_mov_b32 s4, 0x50401001234; GFX90A-NEXT: v_mov_b32_e32 v2, 01235; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s41236; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1237; GFX90A-NEXT: s_waitcnt vmcnt(0)1238; GFX90A-NEXT: s_setpc_b64 s[30:31]1239;1240; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_0:1241; GFX942: ; %bb.0:1242; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1243; GFX942-NEXT: ;;#ASMSTART1244; GFX942-NEXT: ; def v01245; GFX942-NEXT: ;;#ASMEND1246; GFX942-NEXT: s_mov_b32 s2, 0x70603021247; GFX942-NEXT: ;;#ASMSTART1248; GFX942-NEXT: ; def v11249; GFX942-NEXT: ;;#ASMEND1250; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21251; GFX942-NEXT: s_mov_b32 s2, 0x50401001252; GFX942-NEXT: v_mov_b32_e32 v2, 01253; GFX942-NEXT: v_perm_b32 v1, v1, v1, s21254; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1255; GFX942-NEXT: s_waitcnt vmcnt(0)1256; GFX942-NEXT: s_setpc_b64 s[30:31]1257 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1258 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1259 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>1260 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81261 ret void1262}1263 1264define void @v_shuffle_v4bf16_v2bf16__3_3_u_0(ptr addrspace(1) inreg %ptr) {1265; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_0:1266; GFX900: ; %bb.0:1267; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1268; GFX900-NEXT: ;;#ASMSTART1269; GFX900-NEXT: ; def v11270; GFX900-NEXT: ;;#ASMEND1271; GFX900-NEXT: ;;#ASMSTART1272; GFX900-NEXT: ; def v01273; GFX900-NEXT: ;;#ASMEND1274; GFX900-NEXT: s_mov_b32 s4, 0x70603021275; GFX900-NEXT: v_mov_b32_e32 v2, 01276; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41277; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v11278; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1279; GFX900-NEXT: s_waitcnt vmcnt(0)1280; GFX900-NEXT: s_setpc_b64 s[30:31]1281;1282; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_0:1283; GFX90A: ; %bb.0:1284; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1285; GFX90A-NEXT: ;;#ASMSTART1286; GFX90A-NEXT: ; def v11287; GFX90A-NEXT: ;;#ASMEND1288; GFX90A-NEXT: ;;#ASMSTART1289; GFX90A-NEXT: ; def v01290; GFX90A-NEXT: ;;#ASMEND1291; GFX90A-NEXT: s_mov_b32 s4, 0x70603021292; GFX90A-NEXT: v_mov_b32_e32 v2, 01293; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41294; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v11295; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1296; GFX90A-NEXT: s_waitcnt vmcnt(0)1297; GFX90A-NEXT: s_setpc_b64 s[30:31]1298;1299; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_0:1300; GFX942: ; %bb.0:1301; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1302; GFX942-NEXT: ;;#ASMSTART1303; GFX942-NEXT: ; def v11304; GFX942-NEXT: ;;#ASMEND1305; GFX942-NEXT: ;;#ASMSTART1306; GFX942-NEXT: ; def v01307; GFX942-NEXT: ;;#ASMEND1308; GFX942-NEXT: s_mov_b32 s2, 0x70603021309; GFX942-NEXT: v_mov_b32_e32 v2, 01310; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21311; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v11312; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1313; GFX942-NEXT: s_waitcnt vmcnt(0)1314; GFX942-NEXT: s_setpc_b64 s[30:31]1315 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1316 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1317 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>1318 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81319 ret void1320}1321 1322define void @v_shuffle_v4bf16_v2bf16__3_3_1_0(ptr addrspace(1) inreg %ptr) {1323; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_0:1324; GFX900: ; %bb.0:1325; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1326; GFX900-NEXT: ;;#ASMSTART1327; GFX900-NEXT: ; def v11328; GFX900-NEXT: ;;#ASMEND1329; GFX900-NEXT: ;;#ASMSTART1330; GFX900-NEXT: ; def v01331; GFX900-NEXT: ;;#ASMEND1332; GFX900-NEXT: s_mov_b32 s4, 0x70603021333; GFX900-NEXT: v_mov_b32_e32 v2, 01334; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41335; GFX900-NEXT: v_alignbit_b32 v1, v1, v1, 161336; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1337; GFX900-NEXT: s_waitcnt vmcnt(0)1338; GFX900-NEXT: s_setpc_b64 s[30:31]1339;1340; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_0:1341; GFX90A: ; %bb.0:1342; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1343; GFX90A-NEXT: ;;#ASMSTART1344; GFX90A-NEXT: ; def v11345; GFX90A-NEXT: ;;#ASMEND1346; GFX90A-NEXT: ;;#ASMSTART1347; GFX90A-NEXT: ; def v01348; GFX90A-NEXT: ;;#ASMEND1349; GFX90A-NEXT: s_mov_b32 s4, 0x70603021350; GFX90A-NEXT: v_mov_b32_e32 v2, 01351; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41352; GFX90A-NEXT: v_alignbit_b32 v1, v1, v1, 161353; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1354; GFX90A-NEXT: s_waitcnt vmcnt(0)1355; GFX90A-NEXT: s_setpc_b64 s[30:31]1356;1357; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_0:1358; GFX942: ; %bb.0:1359; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1360; GFX942-NEXT: ;;#ASMSTART1361; GFX942-NEXT: ; def v11362; GFX942-NEXT: ;;#ASMEND1363; GFX942-NEXT: ;;#ASMSTART1364; GFX942-NEXT: ; def v01365; GFX942-NEXT: ;;#ASMEND1366; GFX942-NEXT: s_mov_b32 s2, 0x70603021367; GFX942-NEXT: v_mov_b32_e32 v2, 01368; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21369; GFX942-NEXT: v_alignbit_b32 v1, v1, v1, 161370; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1371; GFX942-NEXT: s_waitcnt vmcnt(0)1372; GFX942-NEXT: s_setpc_b64 s[30:31]1373 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1374 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1375 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>1376 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81377 ret void1378}1379 1380define void @v_shuffle_v4bf16_v2bf16__3_3_2_0(ptr addrspace(1) inreg %ptr) {1381; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_0:1382; GFX900: ; %bb.0:1383; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1384; GFX900-NEXT: s_mov_b32 s4, 0x50401001385; GFX900-NEXT: ;;#ASMSTART1386; GFX900-NEXT: ; def v01387; GFX900-NEXT: ;;#ASMEND1388; GFX900-NEXT: ;;#ASMSTART1389; GFX900-NEXT: ; def v31390; GFX900-NEXT: ;;#ASMEND1391; GFX900-NEXT: v_perm_b32 v1, v0, v3, s41392; GFX900-NEXT: s_mov_b32 s4, 0x70603021393; GFX900-NEXT: v_mov_b32_e32 v2, 01394; GFX900-NEXT: v_perm_b32 v0, v3, v3, s41395; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1396; GFX900-NEXT: s_waitcnt vmcnt(0)1397; GFX900-NEXT: s_setpc_b64 s[30:31]1398;1399; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_0:1400; GFX90A: ; %bb.0:1401; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1402; GFX90A-NEXT: s_mov_b32 s4, 0x50401001403; GFX90A-NEXT: ;;#ASMSTART1404; GFX90A-NEXT: ; def v01405; GFX90A-NEXT: ;;#ASMEND1406; GFX90A-NEXT: ;;#ASMSTART1407; GFX90A-NEXT: ; def v31408; GFX90A-NEXT: ;;#ASMEND1409; GFX90A-NEXT: v_perm_b32 v1, v0, v3, s41410; GFX90A-NEXT: s_mov_b32 s4, 0x70603021411; GFX90A-NEXT: v_mov_b32_e32 v2, 01412; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s41413; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1414; GFX90A-NEXT: s_waitcnt vmcnt(0)1415; GFX90A-NEXT: s_setpc_b64 s[30:31]1416;1417; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_0:1418; GFX942: ; %bb.0:1419; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1420; GFX942-NEXT: s_mov_b32 s2, 0x50401001421; GFX942-NEXT: ;;#ASMSTART1422; GFX942-NEXT: ; def v01423; GFX942-NEXT: ;;#ASMEND1424; GFX942-NEXT: ;;#ASMSTART1425; GFX942-NEXT: ; def v31426; GFX942-NEXT: ;;#ASMEND1427; GFX942-NEXT: v_mov_b32_e32 v2, 01428; GFX942-NEXT: v_perm_b32 v1, v0, v3, s21429; GFX942-NEXT: s_mov_b32 s2, 0x70603021430; GFX942-NEXT: v_perm_b32 v0, v3, v3, s21431; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1432; GFX942-NEXT: s_waitcnt vmcnt(0)1433; GFX942-NEXT: s_setpc_b64 s[30:31]1434 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1435 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1436 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>1437 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81438 ret void1439}1440 1441define void @v_shuffle_v4bf16_v2bf16__u_1_1_1(ptr addrspace(1) inreg %ptr) {1442; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__u_1_1_1:1443; GFX900: ; %bb.0:1444; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1445; GFX900-NEXT: s_mov_b32 s4, 0x70603021446; GFX900-NEXT: v_mov_b32_e32 v2, 01447; GFX900-NEXT: ;;#ASMSTART1448; GFX900-NEXT: ; def v01449; GFX900-NEXT: ;;#ASMEND1450; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41451; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1452; GFX900-NEXT: s_waitcnt vmcnt(0)1453; GFX900-NEXT: s_setpc_b64 s[30:31]1454;1455; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__u_1_1_1:1456; GFX90A: ; %bb.0:1457; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1458; GFX90A-NEXT: s_mov_b32 s4, 0x70603021459; GFX90A-NEXT: v_mov_b32_e32 v2, 01460; GFX90A-NEXT: ;;#ASMSTART1461; GFX90A-NEXT: ; def v01462; GFX90A-NEXT: ;;#ASMEND1463; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41464; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1465; GFX90A-NEXT: s_waitcnt vmcnt(0)1466; GFX90A-NEXT: s_setpc_b64 s[30:31]1467;1468; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__u_1_1_1:1469; GFX942: ; %bb.0:1470; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1471; GFX942-NEXT: s_mov_b32 s2, 0x70603021472; GFX942-NEXT: v_mov_b32_e32 v2, 01473; GFX942-NEXT: ;;#ASMSTART1474; GFX942-NEXT: ; def v01475; GFX942-NEXT: ;;#ASMEND1476; GFX942-NEXT: s_nop 01477; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21478; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1479; GFX942-NEXT: s_waitcnt vmcnt(0)1480; GFX942-NEXT: s_setpc_b64 s[30:31]1481 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1482 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>1483 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81484 ret void1485}1486 1487define void @v_shuffle_v4bf16_v2bf16__0_1_1_1(ptr addrspace(1) inreg %ptr) {1488; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__0_1_1_1:1489; GFX900: ; %bb.0:1490; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1491; GFX900-NEXT: s_mov_b32 s4, 0x70603021492; GFX900-NEXT: v_mov_b32_e32 v2, 01493; GFX900-NEXT: ;;#ASMSTART1494; GFX900-NEXT: ; def v01495; GFX900-NEXT: ;;#ASMEND1496; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41497; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1498; GFX900-NEXT: s_waitcnt vmcnt(0)1499; GFX900-NEXT: s_setpc_b64 s[30:31]1500;1501; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__0_1_1_1:1502; GFX90A: ; %bb.0:1503; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1504; GFX90A-NEXT: s_mov_b32 s4, 0x70603021505; GFX90A-NEXT: v_mov_b32_e32 v2, 01506; GFX90A-NEXT: ;;#ASMSTART1507; GFX90A-NEXT: ; def v01508; GFX90A-NEXT: ;;#ASMEND1509; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41510; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1511; GFX90A-NEXT: s_waitcnt vmcnt(0)1512; GFX90A-NEXT: s_setpc_b64 s[30:31]1513;1514; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__0_1_1_1:1515; GFX942: ; %bb.0:1516; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1517; GFX942-NEXT: s_mov_b32 s2, 0x70603021518; GFX942-NEXT: v_mov_b32_e32 v2, 01519; GFX942-NEXT: ;;#ASMSTART1520; GFX942-NEXT: ; def v01521; GFX942-NEXT: ;;#ASMEND1522; GFX942-NEXT: s_nop 01523; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21524; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1525; GFX942-NEXT: s_waitcnt vmcnt(0)1526; GFX942-NEXT: s_setpc_b64 s[30:31]1527 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1528 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>1529 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81530 ret void1531}1532 1533define void @v_shuffle_v4bf16_v2bf16__1_1_1_1(ptr addrspace(1) inreg %ptr) {1534; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__1_1_1_1:1535; GFX900: ; %bb.0:1536; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1537; GFX900-NEXT: ;;#ASMSTART1538; GFX900-NEXT: ; def v01539; GFX900-NEXT: ;;#ASMEND1540; GFX900-NEXT: s_mov_b32 s4, 0x70603021541; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41542; GFX900-NEXT: v_mov_b32_e32 v2, 01543; GFX900-NEXT: v_mov_b32_e32 v1, v01544; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1545; GFX900-NEXT: s_waitcnt vmcnt(0)1546; GFX900-NEXT: s_setpc_b64 s[30:31]1547;1548; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__1_1_1_1:1549; GFX90A: ; %bb.0:1550; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1551; GFX90A-NEXT: ;;#ASMSTART1552; GFX90A-NEXT: ; def v01553; GFX90A-NEXT: ;;#ASMEND1554; GFX90A-NEXT: s_mov_b32 s4, 0x70603021555; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41556; GFX90A-NEXT: v_mov_b32_e32 v2, 01557; GFX90A-NEXT: v_mov_b32_e32 v1, v01558; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1559; GFX90A-NEXT: s_waitcnt vmcnt(0)1560; GFX90A-NEXT: s_setpc_b64 s[30:31]1561;1562; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__1_1_1_1:1563; GFX942: ; %bb.0:1564; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1565; GFX942-NEXT: ;;#ASMSTART1566; GFX942-NEXT: ; def v01567; GFX942-NEXT: ;;#ASMEND1568; GFX942-NEXT: s_mov_b32 s2, 0x70603021569; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21570; GFX942-NEXT: v_mov_b32_e32 v2, 01571; GFX942-NEXT: v_mov_b32_e32 v1, v01572; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1573; GFX942-NEXT: s_waitcnt vmcnt(0)1574; GFX942-NEXT: s_setpc_b64 s[30:31]1575 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1576 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>1577 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81578 ret void1579}1580 1581define void @v_shuffle_v4bf16_v2bf16__2_1_1_1(ptr addrspace(1) inreg %ptr) {1582; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__2_1_1_1:1583; GFX900: ; %bb.0:1584; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1585; GFX900-NEXT: s_mov_b32 s4, 0x70603021586; GFX900-NEXT: v_mov_b32_e32 v2, 01587; GFX900-NEXT: ;;#ASMSTART1588; GFX900-NEXT: ; def v01589; GFX900-NEXT: ;;#ASMEND1590; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41591; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1592; GFX900-NEXT: s_waitcnt vmcnt(0)1593; GFX900-NEXT: s_setpc_b64 s[30:31]1594;1595; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__2_1_1_1:1596; GFX90A: ; %bb.0:1597; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1598; GFX90A-NEXT: s_mov_b32 s4, 0x70603021599; GFX90A-NEXT: v_mov_b32_e32 v2, 01600; GFX90A-NEXT: ;;#ASMSTART1601; GFX90A-NEXT: ; def v01602; GFX90A-NEXT: ;;#ASMEND1603; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41604; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1605; GFX90A-NEXT: s_waitcnt vmcnt(0)1606; GFX90A-NEXT: s_setpc_b64 s[30:31]1607;1608; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__2_1_1_1:1609; GFX942: ; %bb.0:1610; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1611; GFX942-NEXT: s_mov_b32 s2, 0x70603021612; GFX942-NEXT: v_mov_b32_e32 v2, 01613; GFX942-NEXT: ;;#ASMSTART1614; GFX942-NEXT: ; def v01615; GFX942-NEXT: ;;#ASMEND1616; GFX942-NEXT: s_nop 01617; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21618; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1619; GFX942-NEXT: s_waitcnt vmcnt(0)1620; GFX942-NEXT: s_setpc_b64 s[30:31]1621 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1622 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>1623 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81624 ret void1625}1626 1627define void @v_shuffle_v4bf16_v2bf16__3_1_1_1(ptr addrspace(1) inreg %ptr) {1628; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_1_1_1:1629; GFX900: ; %bb.0:1630; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1631; GFX900-NEXT: ;;#ASMSTART1632; GFX900-NEXT: ; def v11633; GFX900-NEXT: ;;#ASMEND1634; GFX900-NEXT: ;;#ASMSTART1635; GFX900-NEXT: ; def v01636; GFX900-NEXT: ;;#ASMEND1637; GFX900-NEXT: s_mov_b32 s4, 0x70603021638; GFX900-NEXT: v_mov_b32_e32 v2, 01639; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41640; GFX900-NEXT: v_perm_b32 v1, v1, v1, s41641; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1642; GFX900-NEXT: s_waitcnt vmcnt(0)1643; GFX900-NEXT: s_setpc_b64 s[30:31]1644;1645; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_1_1_1:1646; GFX90A: ; %bb.0:1647; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1648; GFX90A-NEXT: ;;#ASMSTART1649; GFX90A-NEXT: ; def v11650; GFX90A-NEXT: ;;#ASMEND1651; GFX90A-NEXT: ;;#ASMSTART1652; GFX90A-NEXT: ; def v01653; GFX90A-NEXT: ;;#ASMEND1654; GFX90A-NEXT: s_mov_b32 s4, 0x70603021655; GFX90A-NEXT: v_mov_b32_e32 v2, 01656; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41657; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s41658; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1659; GFX90A-NEXT: s_waitcnt vmcnt(0)1660; GFX90A-NEXT: s_setpc_b64 s[30:31]1661;1662; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_1_1_1:1663; GFX942: ; %bb.0:1664; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1665; GFX942-NEXT: ;;#ASMSTART1666; GFX942-NEXT: ; def v11667; GFX942-NEXT: ;;#ASMEND1668; GFX942-NEXT: ;;#ASMSTART1669; GFX942-NEXT: ; def v01670; GFX942-NEXT: ;;#ASMEND1671; GFX942-NEXT: s_mov_b32 s2, 0x70603021672; GFX942-NEXT: v_mov_b32_e32 v2, 01673; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21674; GFX942-NEXT: v_perm_b32 v1, v1, v1, s21675; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1676; GFX942-NEXT: s_waitcnt vmcnt(0)1677; GFX942-NEXT: s_setpc_b64 s[30:31]1678 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1679 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1680 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>1681 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81682 ret void1683}1684 1685define void @v_shuffle_v4bf16_v2bf16__3_u_1_1(ptr addrspace(1) inreg %ptr) {1686; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_u_1_1:1687; GFX900: ; %bb.0:1688; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1689; GFX900-NEXT: ;;#ASMSTART1690; GFX900-NEXT: ; def v01691; GFX900-NEXT: ;;#ASMEND1692; GFX900-NEXT: s_mov_b32 s4, 0x70603021693; GFX900-NEXT: v_mov_b32_e32 v2, 01694; GFX900-NEXT: ;;#ASMSTART1695; GFX900-NEXT: ; def v31696; GFX900-NEXT: ;;#ASMEND1697; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41698; GFX900-NEXT: v_alignbit_b32 v0, s4, v3, 161699; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1700; GFX900-NEXT: s_waitcnt vmcnt(0)1701; GFX900-NEXT: s_setpc_b64 s[30:31]1702;1703; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_u_1_1:1704; GFX90A: ; %bb.0:1705; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1706; GFX90A-NEXT: ;;#ASMSTART1707; GFX90A-NEXT: ; def v01708; GFX90A-NEXT: ;;#ASMEND1709; GFX90A-NEXT: s_mov_b32 s4, 0x70603021710; GFX90A-NEXT: v_mov_b32_e32 v2, 01711; GFX90A-NEXT: ;;#ASMSTART1712; GFX90A-NEXT: ; def v31713; GFX90A-NEXT: ;;#ASMEND1714; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41715; GFX90A-NEXT: v_alignbit_b32 v0, s4, v3, 161716; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1717; GFX90A-NEXT: s_waitcnt vmcnt(0)1718; GFX90A-NEXT: s_setpc_b64 s[30:31]1719;1720; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_u_1_1:1721; GFX942: ; %bb.0:1722; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1723; GFX942-NEXT: ;;#ASMSTART1724; GFX942-NEXT: ; def v01725; GFX942-NEXT: ;;#ASMEND1726; GFX942-NEXT: s_mov_b32 s2, 0x70603021727; GFX942-NEXT: v_mov_b32_e32 v2, 01728; GFX942-NEXT: ;;#ASMSTART1729; GFX942-NEXT: ; def v31730; GFX942-NEXT: ;;#ASMEND1731; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21732; GFX942-NEXT: v_alignbit_b32 v0, s0, v3, 161733; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1734; GFX942-NEXT: s_waitcnt vmcnt(0)1735; GFX942-NEXT: s_setpc_b64 s[30:31]1736 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1737 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1738 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>1739 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81740 ret void1741}1742 1743define void @v_shuffle_v4bf16_v2bf16__3_0_1_1(ptr addrspace(1) inreg %ptr) {1744; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_0_1_1:1745; GFX900: ; %bb.0:1746; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1747; GFX900-NEXT: ;;#ASMSTART1748; GFX900-NEXT: ; def v01749; GFX900-NEXT: ;;#ASMEND1750; GFX900-NEXT: s_mov_b32 s4, 0x70603021751; GFX900-NEXT: v_mov_b32_e32 v2, 01752; GFX900-NEXT: ;;#ASMSTART1753; GFX900-NEXT: ; def v31754; GFX900-NEXT: ;;#ASMEND1755; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41756; GFX900-NEXT: v_alignbit_b32 v0, v0, v3, 161757; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1758; GFX900-NEXT: s_waitcnt vmcnt(0)1759; GFX900-NEXT: s_setpc_b64 s[30:31]1760;1761; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_0_1_1:1762; GFX90A: ; %bb.0:1763; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1764; GFX90A-NEXT: ;;#ASMSTART1765; GFX90A-NEXT: ; def v01766; GFX90A-NEXT: ;;#ASMEND1767; GFX90A-NEXT: s_mov_b32 s4, 0x70603021768; GFX90A-NEXT: v_mov_b32_e32 v2, 01769; GFX90A-NEXT: ;;#ASMSTART1770; GFX90A-NEXT: ; def v31771; GFX90A-NEXT: ;;#ASMEND1772; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41773; GFX90A-NEXT: v_alignbit_b32 v0, v0, v3, 161774; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1775; GFX90A-NEXT: s_waitcnt vmcnt(0)1776; GFX90A-NEXT: s_setpc_b64 s[30:31]1777;1778; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_0_1_1:1779; GFX942: ; %bb.0:1780; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1781; GFX942-NEXT: ;;#ASMSTART1782; GFX942-NEXT: ; def v01783; GFX942-NEXT: ;;#ASMEND1784; GFX942-NEXT: s_mov_b32 s2, 0x70603021785; GFX942-NEXT: v_mov_b32_e32 v2, 01786; GFX942-NEXT: ;;#ASMSTART1787; GFX942-NEXT: ; def v31788; GFX942-NEXT: ;;#ASMEND1789; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21790; GFX942-NEXT: v_alignbit_b32 v0, v0, v3, 161791; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1792; GFX942-NEXT: s_waitcnt vmcnt(0)1793; GFX942-NEXT: s_setpc_b64 s[30:31]1794 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1795 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1796 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>1797 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81798 ret void1799}1800 1801define void @v_shuffle_v4bf16_v2bf16__3_2_1_1(ptr addrspace(1) inreg %ptr) {1802; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_2_1_1:1803; GFX900: ; %bb.0:1804; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1805; GFX900-NEXT: ;;#ASMSTART1806; GFX900-NEXT: ; def v01807; GFX900-NEXT: ;;#ASMEND1808; GFX900-NEXT: s_mov_b32 s4, 0x70603021809; GFX900-NEXT: v_mov_b32_e32 v2, 01810; GFX900-NEXT: ;;#ASMSTART1811; GFX900-NEXT: ; def v31812; GFX900-NEXT: ;;#ASMEND1813; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41814; GFX900-NEXT: v_alignbit_b32 v0, v3, v3, 161815; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1816; GFX900-NEXT: s_waitcnt vmcnt(0)1817; GFX900-NEXT: s_setpc_b64 s[30:31]1818;1819; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_2_1_1:1820; GFX90A: ; %bb.0:1821; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1822; GFX90A-NEXT: ;;#ASMSTART1823; GFX90A-NEXT: ; def v01824; GFX90A-NEXT: ;;#ASMEND1825; GFX90A-NEXT: s_mov_b32 s4, 0x70603021826; GFX90A-NEXT: v_mov_b32_e32 v2, 01827; GFX90A-NEXT: ;;#ASMSTART1828; GFX90A-NEXT: ; def v31829; GFX90A-NEXT: ;;#ASMEND1830; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41831; GFX90A-NEXT: v_alignbit_b32 v0, v3, v3, 161832; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1833; GFX90A-NEXT: s_waitcnt vmcnt(0)1834; GFX90A-NEXT: s_setpc_b64 s[30:31]1835;1836; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_2_1_1:1837; GFX942: ; %bb.0:1838; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1839; GFX942-NEXT: ;;#ASMSTART1840; GFX942-NEXT: ; def v01841; GFX942-NEXT: ;;#ASMEND1842; GFX942-NEXT: s_mov_b32 s2, 0x70603021843; GFX942-NEXT: v_mov_b32_e32 v2, 01844; GFX942-NEXT: ;;#ASMSTART1845; GFX942-NEXT: ; def v31846; GFX942-NEXT: ;;#ASMEND1847; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21848; GFX942-NEXT: v_alignbit_b32 v0, v3, v3, 161849; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1850; GFX942-NEXT: s_waitcnt vmcnt(0)1851; GFX942-NEXT: s_setpc_b64 s[30:31]1852 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1853 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1854 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>1855 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81856 ret void1857}1858 1859define void @v_shuffle_v4bf16_v2bf16__3_3_1_1(ptr addrspace(1) inreg %ptr) {1860; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_1:1861; GFX900: ; %bb.0:1862; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1863; GFX900-NEXT: ;;#ASMSTART1864; GFX900-NEXT: ; def v01865; GFX900-NEXT: ;;#ASMEND1866; GFX900-NEXT: s_mov_b32 s4, 0x70603021867; GFX900-NEXT: v_mov_b32_e32 v2, 01868; GFX900-NEXT: ;;#ASMSTART1869; GFX900-NEXT: ; def v31870; GFX900-NEXT: ;;#ASMEND1871; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41872; GFX900-NEXT: v_perm_b32 v0, v3, v3, s41873; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1874; GFX900-NEXT: s_waitcnt vmcnt(0)1875; GFX900-NEXT: s_setpc_b64 s[30:31]1876;1877; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_1:1878; GFX90A: ; %bb.0:1879; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1880; GFX90A-NEXT: ;;#ASMSTART1881; GFX90A-NEXT: ; def v01882; GFX90A-NEXT: ;;#ASMEND1883; GFX90A-NEXT: s_mov_b32 s4, 0x70603021884; GFX90A-NEXT: v_mov_b32_e32 v2, 01885; GFX90A-NEXT: ;;#ASMSTART1886; GFX90A-NEXT: ; def v31887; GFX90A-NEXT: ;;#ASMEND1888; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41889; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s41890; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1891; GFX90A-NEXT: s_waitcnt vmcnt(0)1892; GFX90A-NEXT: s_setpc_b64 s[30:31]1893;1894; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_1:1895; GFX942: ; %bb.0:1896; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1897; GFX942-NEXT: ;;#ASMSTART1898; GFX942-NEXT: ; def v01899; GFX942-NEXT: ;;#ASMEND1900; GFX942-NEXT: s_mov_b32 s2, 0x70603021901; GFX942-NEXT: v_mov_b32_e32 v2, 01902; GFX942-NEXT: ;;#ASMSTART1903; GFX942-NEXT: ; def v31904; GFX942-NEXT: ;;#ASMEND1905; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21906; GFX942-NEXT: v_perm_b32 v0, v3, v3, s21907; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1908; GFX942-NEXT: s_waitcnt vmcnt(0)1909; GFX942-NEXT: s_setpc_b64 s[30:31]1910 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1911 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1912 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>1913 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81914 ret void1915}1916 1917define void @v_shuffle_v4bf16_v2bf16__3_3_u_1(ptr addrspace(1) inreg %ptr) {1918; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_1:1919; GFX900: ; %bb.0:1920; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1921; GFX900-NEXT: ;;#ASMSTART1922; GFX900-NEXT: ; def v01923; GFX900-NEXT: ;;#ASMEND1924; GFX900-NEXT: s_mov_b32 s4, 0x70603021925; GFX900-NEXT: v_mov_b32_e32 v2, 01926; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41927; GFX900-NEXT: ;;#ASMSTART1928; GFX900-NEXT: ; def v11929; GFX900-NEXT: ;;#ASMEND1930; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1931; GFX900-NEXT: s_waitcnt vmcnt(0)1932; GFX900-NEXT: s_setpc_b64 s[30:31]1933;1934; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_1:1935; GFX90A: ; %bb.0:1936; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1937; GFX90A-NEXT: ;;#ASMSTART1938; GFX90A-NEXT: ; def v01939; GFX90A-NEXT: ;;#ASMEND1940; GFX90A-NEXT: s_mov_b32 s4, 0x70603021941; GFX90A-NEXT: v_mov_b32_e32 v2, 01942; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41943; GFX90A-NEXT: ;;#ASMSTART1944; GFX90A-NEXT: ; def v11945; GFX90A-NEXT: ;;#ASMEND1946; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1947; GFX90A-NEXT: s_waitcnt vmcnt(0)1948; GFX90A-NEXT: s_setpc_b64 s[30:31]1949;1950; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_1:1951; GFX942: ; %bb.0:1952; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1953; GFX942-NEXT: ;;#ASMSTART1954; GFX942-NEXT: ; def v01955; GFX942-NEXT: ;;#ASMEND1956; GFX942-NEXT: s_mov_b32 s2, 0x70603021957; GFX942-NEXT: v_mov_b32_e32 v2, 01958; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21959; GFX942-NEXT: ;;#ASMSTART1960; GFX942-NEXT: ; def v11961; GFX942-NEXT: ;;#ASMEND1962; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]1963; GFX942-NEXT: s_waitcnt vmcnt(0)1964; GFX942-NEXT: s_setpc_b64 s[30:31]1965 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()1966 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()1967 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>1968 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81969 ret void1970}1971 1972define void @v_shuffle_v4bf16_v2bf16__3_3_0_1(ptr addrspace(1) inreg %ptr) {1973; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_1:1974; GFX900: ; %bb.0:1975; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1976; GFX900-NEXT: ;;#ASMSTART1977; GFX900-NEXT: ; def v01978; GFX900-NEXT: ;;#ASMEND1979; GFX900-NEXT: s_mov_b32 s4, 0x70603021980; GFX900-NEXT: v_mov_b32_e32 v2, 01981; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41982; GFX900-NEXT: ;;#ASMSTART1983; GFX900-NEXT: ; def v11984; GFX900-NEXT: ;;#ASMEND1985; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]1986; GFX900-NEXT: s_waitcnt vmcnt(0)1987; GFX900-NEXT: s_setpc_b64 s[30:31]1988;1989; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_1:1990; GFX90A: ; %bb.0:1991; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1992; GFX90A-NEXT: ;;#ASMSTART1993; GFX90A-NEXT: ; def v01994; GFX90A-NEXT: ;;#ASMEND1995; GFX90A-NEXT: s_mov_b32 s4, 0x70603021996; GFX90A-NEXT: v_mov_b32_e32 v2, 01997; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41998; GFX90A-NEXT: ;;#ASMSTART1999; GFX90A-NEXT: ; def v12000; GFX90A-NEXT: ;;#ASMEND2001; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2002; GFX90A-NEXT: s_waitcnt vmcnt(0)2003; GFX90A-NEXT: s_setpc_b64 s[30:31]2004;2005; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_1:2006; GFX942: ; %bb.0:2007; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2008; GFX942-NEXT: ;;#ASMSTART2009; GFX942-NEXT: ; def v02010; GFX942-NEXT: ;;#ASMEND2011; GFX942-NEXT: s_mov_b32 s2, 0x70603022012; GFX942-NEXT: v_mov_b32_e32 v2, 02013; GFX942-NEXT: v_perm_b32 v0, v0, v0, s22014; GFX942-NEXT: ;;#ASMSTART2015; GFX942-NEXT: ; def v12016; GFX942-NEXT: ;;#ASMEND2017; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2018; GFX942-NEXT: s_waitcnt vmcnt(0)2019; GFX942-NEXT: s_setpc_b64 s[30:31]2020 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2021 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2022 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>2023 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82024 ret void2025}2026 2027define void @v_shuffle_v4bf16_v2bf16__3_3_2_1(ptr addrspace(1) inreg %ptr) {2028; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_1:2029; GFX900: ; %bb.0:2030; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2031; GFX900-NEXT: s_mov_b32 s4, 0xffff2032; GFX900-NEXT: ;;#ASMSTART2033; GFX900-NEXT: ; def v02034; GFX900-NEXT: ;;#ASMEND2035; GFX900-NEXT: ;;#ASMSTART2036; GFX900-NEXT: ; def v32037; GFX900-NEXT: ;;#ASMEND2038; GFX900-NEXT: v_bfi_b32 v1, s4, v3, v02039; GFX900-NEXT: s_mov_b32 s4, 0x70603022040; GFX900-NEXT: v_mov_b32_e32 v2, 02041; GFX900-NEXT: v_perm_b32 v0, v3, v3, s42042; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2043; GFX900-NEXT: s_waitcnt vmcnt(0)2044; GFX900-NEXT: s_setpc_b64 s[30:31]2045;2046; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_1:2047; GFX90A: ; %bb.0:2048; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2049; GFX90A-NEXT: s_mov_b32 s4, 0xffff2050; GFX90A-NEXT: ;;#ASMSTART2051; GFX90A-NEXT: ; def v02052; GFX90A-NEXT: ;;#ASMEND2053; GFX90A-NEXT: ;;#ASMSTART2054; GFX90A-NEXT: ; def v32055; GFX90A-NEXT: ;;#ASMEND2056; GFX90A-NEXT: v_bfi_b32 v1, s4, v3, v02057; GFX90A-NEXT: s_mov_b32 s4, 0x70603022058; GFX90A-NEXT: v_mov_b32_e32 v2, 02059; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42060; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2061; GFX90A-NEXT: s_waitcnt vmcnt(0)2062; GFX90A-NEXT: s_setpc_b64 s[30:31]2063;2064; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_1:2065; GFX942: ; %bb.0:2066; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2067; GFX942-NEXT: s_mov_b32 s2, 0xffff2068; GFX942-NEXT: ;;#ASMSTART2069; GFX942-NEXT: ; def v02070; GFX942-NEXT: ;;#ASMEND2071; GFX942-NEXT: ;;#ASMSTART2072; GFX942-NEXT: ; def v32073; GFX942-NEXT: ;;#ASMEND2074; GFX942-NEXT: v_mov_b32_e32 v2, 02075; GFX942-NEXT: v_bfi_b32 v1, s2, v3, v02076; GFX942-NEXT: s_mov_b32 s2, 0x70603022077; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22078; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2079; GFX942-NEXT: s_waitcnt vmcnt(0)2080; GFX942-NEXT: s_setpc_b64 s[30:31]2081 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2082 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2083 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>2084 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82085 ret void2086}2087 2088define void @v_shuffle_v4bf16_v2bf16__u_2_2_2(ptr addrspace(1) inreg %ptr) {2089; GFX9-LABEL: v_shuffle_v4bf16_v2bf16__u_2_2_2:2090; GFX9: ; %bb.0:2091; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2092; GFX9-NEXT: s_setpc_b64 s[30:31]2093 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2094 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>2095 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82096 ret void2097}2098 2099define void @v_shuffle_v4bf16_v2bf16__0_2_2_2(ptr addrspace(1) inreg %ptr) {2100; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__0_2_2_2:2101; GFX900: ; %bb.0:2102; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2103; GFX900-NEXT: v_mov_b32_e32 v1, 02104; GFX900-NEXT: ;;#ASMSTART2105; GFX900-NEXT: ; def v02106; GFX900-NEXT: ;;#ASMEND2107; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], s[16:17]2108; GFX900-NEXT: s_waitcnt vmcnt(0)2109; GFX900-NEXT: s_setpc_b64 s[30:31]2110;2111; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__0_2_2_2:2112; GFX90A: ; %bb.0:2113; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2114; GFX90A-NEXT: v_mov_b32_e32 v1, 02115; GFX90A-NEXT: ;;#ASMSTART2116; GFX90A-NEXT: ; def v02117; GFX90A-NEXT: ;;#ASMEND2118; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], s[16:17]2119; GFX90A-NEXT: s_waitcnt vmcnt(0)2120; GFX90A-NEXT: s_setpc_b64 s[30:31]2121;2122; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__0_2_2_2:2123; GFX942: ; %bb.0:2124; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2125; GFX942-NEXT: v_mov_b32_e32 v1, 02126; GFX942-NEXT: ;;#ASMSTART2127; GFX942-NEXT: ; def v02128; GFX942-NEXT: ;;#ASMEND2129; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]2130; GFX942-NEXT: s_waitcnt vmcnt(0)2131; GFX942-NEXT: s_setpc_b64 s[30:31]2132 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2133 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>2134 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82135 ret void2136}2137 2138define void @v_shuffle_v4bf16_v2bf16__1_2_2_2(ptr addrspace(1) inreg %ptr) {2139; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__1_2_2_2:2140; GFX900: ; %bb.0:2141; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2142; GFX900-NEXT: ;;#ASMSTART2143; GFX900-NEXT: ; def v02144; GFX900-NEXT: ;;#ASMEND2145; GFX900-NEXT: v_mov_b32_e32 v1, 02146; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 162147; GFX900-NEXT: global_store_dwordx2 v1, v[0:1], s[16:17]2148; GFX900-NEXT: s_waitcnt vmcnt(0)2149; GFX900-NEXT: s_setpc_b64 s[30:31]2150;2151; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__1_2_2_2:2152; GFX90A: ; %bb.0:2153; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2154; GFX90A-NEXT: ;;#ASMSTART2155; GFX90A-NEXT: ; def v02156; GFX90A-NEXT: ;;#ASMEND2157; GFX90A-NEXT: v_mov_b32_e32 v1, 02158; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 162159; GFX90A-NEXT: global_store_dwordx2 v1, v[0:1], s[16:17]2160; GFX90A-NEXT: s_waitcnt vmcnt(0)2161; GFX90A-NEXT: s_setpc_b64 s[30:31]2162;2163; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__1_2_2_2:2164; GFX942: ; %bb.0:2165; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2166; GFX942-NEXT: ;;#ASMSTART2167; GFX942-NEXT: ; def v02168; GFX942-NEXT: ;;#ASMEND2169; GFX942-NEXT: v_mov_b32_e32 v1, 02170; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 162171; GFX942-NEXT: global_store_dwordx2 v1, v[0:1], s[0:1]2172; GFX942-NEXT: s_waitcnt vmcnt(0)2173; GFX942-NEXT: s_setpc_b64 s[30:31]2174 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2175 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>2176 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82177 ret void2178}2179 2180define void @v_shuffle_v4bf16_v2bf16__2_2_2_2(ptr addrspace(1) inreg %ptr) {2181; GFX9-LABEL: v_shuffle_v4bf16_v2bf16__2_2_2_2:2182; GFX9: ; %bb.0:2183; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2184; GFX9-NEXT: s_setpc_b64 s[30:31]2185 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2186 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>2187 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82188 ret void2189}2190 2191define void @v_shuffle_v4bf16_v2bf16__3_2_2_2(ptr addrspace(1) inreg %ptr) {2192; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_2_2_2:2193; GFX900: ; %bb.0:2194; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2195; GFX900-NEXT: ;;#ASMSTART2196; GFX900-NEXT: ; def v02197; GFX900-NEXT: ;;#ASMEND2198; GFX900-NEXT: s_mov_b32 s4, 0x50401002199; GFX900-NEXT: v_mov_b32_e32 v2, 02200; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42201; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 162202; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2203; GFX900-NEXT: s_waitcnt vmcnt(0)2204; GFX900-NEXT: s_setpc_b64 s[30:31]2205;2206; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_2_2_2:2207; GFX90A: ; %bb.0:2208; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2209; GFX90A-NEXT: ;;#ASMSTART2210; GFX90A-NEXT: ; def v02211; GFX90A-NEXT: ;;#ASMEND2212; GFX90A-NEXT: s_mov_b32 s4, 0x50401002213; GFX90A-NEXT: v_mov_b32_e32 v2, 02214; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42215; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 162216; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2217; GFX90A-NEXT: s_waitcnt vmcnt(0)2218; GFX90A-NEXT: s_setpc_b64 s[30:31]2219;2220; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_2_2_2:2221; GFX942: ; %bb.0:2222; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2223; GFX942-NEXT: ;;#ASMSTART2224; GFX942-NEXT: ; def v02225; GFX942-NEXT: ;;#ASMEND2226; GFX942-NEXT: s_mov_b32 s2, 0x50401002227; GFX942-NEXT: v_mov_b32_e32 v2, 02228; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22229; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 162230; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2231; GFX942-NEXT: s_waitcnt vmcnt(0)2232; GFX942-NEXT: s_setpc_b64 s[30:31]2233 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2234 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2235 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>2236 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82237 ret void2238}2239 2240define void @v_shuffle_v4bf16_v2bf16__3_u_2_2(ptr addrspace(1) inreg %ptr) {2241; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_u_2_2:2242; GFX900: ; %bb.0:2243; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2244; GFX900-NEXT: ;;#ASMSTART2245; GFX900-NEXT: ; def v12246; GFX900-NEXT: ;;#ASMEND2247; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 162248; GFX900-NEXT: s_mov_b32 s4, 0x50401002249; GFX900-NEXT: v_mov_b32_e32 v2, 02250; GFX900-NEXT: v_perm_b32 v1, v1, v1, s42251; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2252; GFX900-NEXT: s_waitcnt vmcnt(0)2253; GFX900-NEXT: s_setpc_b64 s[30:31]2254;2255; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_u_2_2:2256; GFX90A: ; %bb.0:2257; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2258; GFX90A-NEXT: ;;#ASMSTART2259; GFX90A-NEXT: ; def v12260; GFX90A-NEXT: ;;#ASMEND2261; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 162262; GFX90A-NEXT: s_mov_b32 s4, 0x50401002263; GFX90A-NEXT: v_mov_b32_e32 v2, 02264; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s42265; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2266; GFX90A-NEXT: s_waitcnt vmcnt(0)2267; GFX90A-NEXT: s_setpc_b64 s[30:31]2268;2269; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_u_2_2:2270; GFX942: ; %bb.0:2271; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2272; GFX942-NEXT: ;;#ASMSTART2273; GFX942-NEXT: ; def v12274; GFX942-NEXT: ;;#ASMEND2275; GFX942-NEXT: s_mov_b32 s2, 0x50401002276; GFX942-NEXT: v_mov_b32_e32 v2, 02277; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 162278; GFX942-NEXT: v_perm_b32 v1, v1, v1, s22279; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2280; GFX942-NEXT: s_waitcnt vmcnt(0)2281; GFX942-NEXT: s_setpc_b64 s[30:31]2282 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2283 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2284 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>2285 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82286 ret void2287}2288 2289define void @v_shuffle_v4bf16_v2bf16__3_0_2_2(ptr addrspace(1) inreg %ptr) {2290; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_0_2_2:2291; GFX900: ; %bb.0:2292; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2293; GFX900-NEXT: ;;#ASMSTART2294; GFX900-NEXT: ; def v02295; GFX900-NEXT: ;;#ASMEND2296; GFX900-NEXT: s_mov_b32 s4, 0x50401002297; GFX900-NEXT: v_mov_b32_e32 v2, 02298; GFX900-NEXT: ;;#ASMSTART2299; GFX900-NEXT: ; def v32300; GFX900-NEXT: ;;#ASMEND2301; GFX900-NEXT: v_perm_b32 v1, v3, v3, s42302; GFX900-NEXT: v_alignbit_b32 v0, v0, v3, 162303; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2304; GFX900-NEXT: s_waitcnt vmcnt(0)2305; GFX900-NEXT: s_setpc_b64 s[30:31]2306;2307; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_0_2_2:2308; GFX90A: ; %bb.0:2309; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2310; GFX90A-NEXT: ;;#ASMSTART2311; GFX90A-NEXT: ; def v02312; GFX90A-NEXT: ;;#ASMEND2313; GFX90A-NEXT: s_mov_b32 s4, 0x50401002314; GFX90A-NEXT: v_mov_b32_e32 v2, 02315; GFX90A-NEXT: ;;#ASMSTART2316; GFX90A-NEXT: ; def v32317; GFX90A-NEXT: ;;#ASMEND2318; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s42319; GFX90A-NEXT: v_alignbit_b32 v0, v0, v3, 162320; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2321; GFX90A-NEXT: s_waitcnt vmcnt(0)2322; GFX90A-NEXT: s_setpc_b64 s[30:31]2323;2324; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_0_2_2:2325; GFX942: ; %bb.0:2326; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2327; GFX942-NEXT: ;;#ASMSTART2328; GFX942-NEXT: ; def v02329; GFX942-NEXT: ;;#ASMEND2330; GFX942-NEXT: s_mov_b32 s2, 0x50401002331; GFX942-NEXT: v_mov_b32_e32 v2, 02332; GFX942-NEXT: ;;#ASMSTART2333; GFX942-NEXT: ; def v32334; GFX942-NEXT: ;;#ASMEND2335; GFX942-NEXT: s_nop 02336; GFX942-NEXT: v_perm_b32 v1, v3, v3, s22337; GFX942-NEXT: v_alignbit_b32 v0, v0, v3, 162338; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2339; GFX942-NEXT: s_waitcnt vmcnt(0)2340; GFX942-NEXT: s_setpc_b64 s[30:31]2341 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2342 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2343 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>2344 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82345 ret void2346}2347 2348define void @v_shuffle_v4bf16_v2bf16__3_1_2_2(ptr addrspace(1) inreg %ptr) {2349; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_1_2_2:2350; GFX900: ; %bb.0:2351; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2352; GFX900-NEXT: ;;#ASMSTART2353; GFX900-NEXT: ; def v02354; GFX900-NEXT: ;;#ASMEND2355; GFX900-NEXT: s_mov_b32 s4, 0x70603022356; GFX900-NEXT: ;;#ASMSTART2357; GFX900-NEXT: ; def v12358; GFX900-NEXT: ;;#ASMEND2359; GFX900-NEXT: v_perm_b32 v0, v0, v1, s42360; GFX900-NEXT: s_mov_b32 s4, 0x50401002361; GFX900-NEXT: v_mov_b32_e32 v2, 02362; GFX900-NEXT: v_perm_b32 v1, v1, v1, s42363; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2364; GFX900-NEXT: s_waitcnt vmcnt(0)2365; GFX900-NEXT: s_setpc_b64 s[30:31]2366;2367; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_1_2_2:2368; GFX90A: ; %bb.0:2369; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2370; GFX90A-NEXT: ;;#ASMSTART2371; GFX90A-NEXT: ; def v02372; GFX90A-NEXT: ;;#ASMEND2373; GFX90A-NEXT: s_mov_b32 s4, 0x70603022374; GFX90A-NEXT: ;;#ASMSTART2375; GFX90A-NEXT: ; def v12376; GFX90A-NEXT: ;;#ASMEND2377; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s42378; GFX90A-NEXT: s_mov_b32 s4, 0x50401002379; GFX90A-NEXT: v_mov_b32_e32 v2, 02380; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s42381; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2382; GFX90A-NEXT: s_waitcnt vmcnt(0)2383; GFX90A-NEXT: s_setpc_b64 s[30:31]2384;2385; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_1_2_2:2386; GFX942: ; %bb.0:2387; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2388; GFX942-NEXT: ;;#ASMSTART2389; GFX942-NEXT: ; def v02390; GFX942-NEXT: ;;#ASMEND2391; GFX942-NEXT: s_mov_b32 s2, 0x70603022392; GFX942-NEXT: ;;#ASMSTART2393; GFX942-NEXT: ; def v12394; GFX942-NEXT: ;;#ASMEND2395; GFX942-NEXT: v_mov_b32_e32 v2, 02396; GFX942-NEXT: v_perm_b32 v0, v0, v1, s22397; GFX942-NEXT: s_mov_b32 s2, 0x50401002398; GFX942-NEXT: v_perm_b32 v1, v1, v1, s22399; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2400; GFX942-NEXT: s_waitcnt vmcnt(0)2401; GFX942-NEXT: s_setpc_b64 s[30:31]2402 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2403 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2404 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>2405 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82406 ret void2407}2408 2409define void @v_shuffle_v4bf16_v2bf16__3_3_2_2(ptr addrspace(1) inreg %ptr) {2410; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_2:2411; GFX900: ; %bb.0:2412; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2413; GFX900-NEXT: s_mov_b32 s4, 0x70603022414; GFX900-NEXT: ;;#ASMSTART2415; GFX900-NEXT: ; def v12416; GFX900-NEXT: ;;#ASMEND2417; GFX900-NEXT: v_perm_b32 v0, v1, v1, s42418; GFX900-NEXT: s_mov_b32 s4, 0x50401002419; GFX900-NEXT: v_mov_b32_e32 v2, 02420; GFX900-NEXT: v_perm_b32 v1, v1, v1, s42421; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2422; GFX900-NEXT: s_waitcnt vmcnt(0)2423; GFX900-NEXT: s_setpc_b64 s[30:31]2424;2425; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_2:2426; GFX90A: ; %bb.0:2427; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2428; GFX90A-NEXT: s_mov_b32 s4, 0x70603022429; GFX90A-NEXT: ;;#ASMSTART2430; GFX90A-NEXT: ; def v12431; GFX90A-NEXT: ;;#ASMEND2432; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s42433; GFX90A-NEXT: s_mov_b32 s4, 0x50401002434; GFX90A-NEXT: v_mov_b32_e32 v2, 02435; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s42436; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2437; GFX90A-NEXT: s_waitcnt vmcnt(0)2438; GFX90A-NEXT: s_setpc_b64 s[30:31]2439;2440; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_2:2441; GFX942: ; %bb.0:2442; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2443; GFX942-NEXT: s_mov_b32 s2, 0x70603022444; GFX942-NEXT: ;;#ASMSTART2445; GFX942-NEXT: ; def v12446; GFX942-NEXT: ;;#ASMEND2447; GFX942-NEXT: v_mov_b32_e32 v2, 02448; GFX942-NEXT: v_perm_b32 v0, v1, v1, s22449; GFX942-NEXT: s_mov_b32 s2, 0x50401002450; GFX942-NEXT: v_perm_b32 v1, v1, v1, s22451; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2452; GFX942-NEXT: s_waitcnt vmcnt(0)2453; GFX942-NEXT: s_setpc_b64 s[30:31]2454 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2455 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2456 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>2457 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82458 ret void2459}2460 2461define void @v_shuffle_v4bf16_v2bf16__3_3_u_2(ptr addrspace(1) inreg %ptr) {2462; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_2:2463; GFX900: ; %bb.0:2464; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2465; GFX900-NEXT: ;;#ASMSTART2466; GFX900-NEXT: ; def v12467; GFX900-NEXT: ;;#ASMEND2468; GFX900-NEXT: s_mov_b32 s4, 0x70603022469; GFX900-NEXT: v_mov_b32_e32 v2, 02470; GFX900-NEXT: v_perm_b32 v0, v1, v1, s42471; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v12472; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2473; GFX900-NEXT: s_waitcnt vmcnt(0)2474; GFX900-NEXT: s_setpc_b64 s[30:31]2475;2476; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_2:2477; GFX90A: ; %bb.0:2478; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2479; GFX90A-NEXT: ;;#ASMSTART2480; GFX90A-NEXT: ; def v12481; GFX90A-NEXT: ;;#ASMEND2482; GFX90A-NEXT: s_mov_b32 s4, 0x70603022483; GFX90A-NEXT: v_mov_b32_e32 v2, 02484; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s42485; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v12486; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2487; GFX90A-NEXT: s_waitcnt vmcnt(0)2488; GFX90A-NEXT: s_setpc_b64 s[30:31]2489;2490; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_2:2491; GFX942: ; %bb.0:2492; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2493; GFX942-NEXT: ;;#ASMSTART2494; GFX942-NEXT: ; def v12495; GFX942-NEXT: ;;#ASMEND2496; GFX942-NEXT: s_mov_b32 s2, 0x70603022497; GFX942-NEXT: v_mov_b32_e32 v2, 02498; GFX942-NEXT: v_perm_b32 v0, v1, v1, s22499; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v12500; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2501; GFX942-NEXT: s_waitcnt vmcnt(0)2502; GFX942-NEXT: s_setpc_b64 s[30:31]2503 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2504 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2505 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>2506 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82507 ret void2508}2509 2510define void @v_shuffle_v4bf16_v2bf16__3_3_0_2(ptr addrspace(1) inreg %ptr) {2511; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_2:2512; GFX900: ; %bb.0:2513; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2514; GFX900-NEXT: s_mov_b32 s4, 0x50401002515; GFX900-NEXT: ;;#ASMSTART2516; GFX900-NEXT: ; def v02517; GFX900-NEXT: ;;#ASMEND2518; GFX900-NEXT: ;;#ASMSTART2519; GFX900-NEXT: ; def v32520; GFX900-NEXT: ;;#ASMEND2521; GFX900-NEXT: v_perm_b32 v1, v3, v0, s42522; GFX900-NEXT: s_mov_b32 s4, 0x70603022523; GFX900-NEXT: v_mov_b32_e32 v2, 02524; GFX900-NEXT: v_perm_b32 v0, v3, v3, s42525; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2526; GFX900-NEXT: s_waitcnt vmcnt(0)2527; GFX900-NEXT: s_setpc_b64 s[30:31]2528;2529; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_2:2530; GFX90A: ; %bb.0:2531; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2532; GFX90A-NEXT: s_mov_b32 s4, 0x50401002533; GFX90A-NEXT: ;;#ASMSTART2534; GFX90A-NEXT: ; def v02535; GFX90A-NEXT: ;;#ASMEND2536; GFX90A-NEXT: ;;#ASMSTART2537; GFX90A-NEXT: ; def v32538; GFX90A-NEXT: ;;#ASMEND2539; GFX90A-NEXT: v_perm_b32 v1, v3, v0, s42540; GFX90A-NEXT: s_mov_b32 s4, 0x70603022541; GFX90A-NEXT: v_mov_b32_e32 v2, 02542; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42543; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2544; GFX90A-NEXT: s_waitcnt vmcnt(0)2545; GFX90A-NEXT: s_setpc_b64 s[30:31]2546;2547; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_2:2548; GFX942: ; %bb.0:2549; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2550; GFX942-NEXT: s_mov_b32 s2, 0x50401002551; GFX942-NEXT: ;;#ASMSTART2552; GFX942-NEXT: ; def v02553; GFX942-NEXT: ;;#ASMEND2554; GFX942-NEXT: ;;#ASMSTART2555; GFX942-NEXT: ; def v32556; GFX942-NEXT: ;;#ASMEND2557; GFX942-NEXT: v_mov_b32_e32 v2, 02558; GFX942-NEXT: v_perm_b32 v1, v3, v0, s22559; GFX942-NEXT: s_mov_b32 s2, 0x70603022560; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22561; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2562; GFX942-NEXT: s_waitcnt vmcnt(0)2563; GFX942-NEXT: s_setpc_b64 s[30:31]2564 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2565 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2566 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>2567 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82568 ret void2569}2570 2571define void @v_shuffle_v4bf16_v2bf16__3_3_1_2(ptr addrspace(1) inreg %ptr) {2572; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_2:2573; GFX900: ; %bb.0:2574; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2575; GFX900-NEXT: ;;#ASMSTART2576; GFX900-NEXT: ; def v12577; GFX900-NEXT: ;;#ASMEND2578; GFX900-NEXT: s_mov_b32 s4, 0x70603022579; GFX900-NEXT: v_mov_b32_e32 v2, 02580; GFX900-NEXT: ;;#ASMSTART2581; GFX900-NEXT: ; def v32582; GFX900-NEXT: ;;#ASMEND2583; GFX900-NEXT: v_perm_b32 v0, v3, v3, s42584; GFX900-NEXT: v_alignbit_b32 v1, v3, v1, 162585; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2586; GFX900-NEXT: s_waitcnt vmcnt(0)2587; GFX900-NEXT: s_setpc_b64 s[30:31]2588;2589; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_2:2590; GFX90A: ; %bb.0:2591; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2592; GFX90A-NEXT: ;;#ASMSTART2593; GFX90A-NEXT: ; def v12594; GFX90A-NEXT: ;;#ASMEND2595; GFX90A-NEXT: s_mov_b32 s4, 0x70603022596; GFX90A-NEXT: v_mov_b32_e32 v2, 02597; GFX90A-NEXT: ;;#ASMSTART2598; GFX90A-NEXT: ; def v32599; GFX90A-NEXT: ;;#ASMEND2600; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s42601; GFX90A-NEXT: v_alignbit_b32 v1, v3, v1, 162602; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2603; GFX90A-NEXT: s_waitcnt vmcnt(0)2604; GFX90A-NEXT: s_setpc_b64 s[30:31]2605;2606; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_2:2607; GFX942: ; %bb.0:2608; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2609; GFX942-NEXT: ;;#ASMSTART2610; GFX942-NEXT: ; def v12611; GFX942-NEXT: ;;#ASMEND2612; GFX942-NEXT: s_mov_b32 s2, 0x70603022613; GFX942-NEXT: v_mov_b32_e32 v2, 02614; GFX942-NEXT: ;;#ASMSTART2615; GFX942-NEXT: ; def v32616; GFX942-NEXT: ;;#ASMEND2617; GFX942-NEXT: s_nop 02618; GFX942-NEXT: v_perm_b32 v0, v3, v3, s22619; GFX942-NEXT: v_alignbit_b32 v1, v3, v1, 162620; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2621; GFX942-NEXT: s_waitcnt vmcnt(0)2622; GFX942-NEXT: s_setpc_b64 s[30:31]2623 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2624 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2625 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>2626 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82627 ret void2628}2629 2630define void @v_shuffle_v4bf16_v2bf16__u_3_3_3(ptr addrspace(1) inreg %ptr) {2631; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__u_3_3_3:2632; GFX900: ; %bb.0:2633; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2634; GFX900-NEXT: s_mov_b32 s4, 0x70603022635; GFX900-NEXT: v_mov_b32_e32 v2, 02636; GFX900-NEXT: ;;#ASMSTART2637; GFX900-NEXT: ; def v02638; GFX900-NEXT: ;;#ASMEND2639; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42640; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2641; GFX900-NEXT: s_waitcnt vmcnt(0)2642; GFX900-NEXT: s_setpc_b64 s[30:31]2643;2644; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__u_3_3_3:2645; GFX90A: ; %bb.0:2646; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2647; GFX90A-NEXT: s_mov_b32 s4, 0x70603022648; GFX90A-NEXT: v_mov_b32_e32 v2, 02649; GFX90A-NEXT: ;;#ASMSTART2650; GFX90A-NEXT: ; def v02651; GFX90A-NEXT: ;;#ASMEND2652; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42653; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2654; GFX90A-NEXT: s_waitcnt vmcnt(0)2655; GFX90A-NEXT: s_setpc_b64 s[30:31]2656;2657; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__u_3_3_3:2658; GFX942: ; %bb.0:2659; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2660; GFX942-NEXT: s_mov_b32 s2, 0x70603022661; GFX942-NEXT: v_mov_b32_e32 v2, 02662; GFX942-NEXT: ;;#ASMSTART2663; GFX942-NEXT: ; def v02664; GFX942-NEXT: ;;#ASMEND2665; GFX942-NEXT: s_nop 02666; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22667; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2668; GFX942-NEXT: s_waitcnt vmcnt(0)2669; GFX942-NEXT: s_setpc_b64 s[30:31]2670 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2671 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2672 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>2673 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82674 ret void2675}2676 2677define void @v_shuffle_v4bf16_v2bf16__0_3_3_3(ptr addrspace(1) inreg %ptr) {2678; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__0_3_3_3:2679; GFX900: ; %bb.0:2680; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2681; GFX900-NEXT: ;;#ASMSTART2682; GFX900-NEXT: ; def v02683; GFX900-NEXT: ;;#ASMEND2684; GFX900-NEXT: s_mov_b32 s4, 0xffff2685; GFX900-NEXT: ;;#ASMSTART2686; GFX900-NEXT: ; def v12687; GFX900-NEXT: ;;#ASMEND2688; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v12689; GFX900-NEXT: s_mov_b32 s4, 0x70603022690; GFX900-NEXT: v_mov_b32_e32 v2, 02691; GFX900-NEXT: v_perm_b32 v1, v1, v1, s42692; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2693; GFX900-NEXT: s_waitcnt vmcnt(0)2694; GFX900-NEXT: s_setpc_b64 s[30:31]2695;2696; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__0_3_3_3:2697; GFX90A: ; %bb.0:2698; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2699; GFX90A-NEXT: ;;#ASMSTART2700; GFX90A-NEXT: ; def v02701; GFX90A-NEXT: ;;#ASMEND2702; GFX90A-NEXT: s_mov_b32 s4, 0xffff2703; GFX90A-NEXT: ;;#ASMSTART2704; GFX90A-NEXT: ; def v12705; GFX90A-NEXT: ;;#ASMEND2706; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v12707; GFX90A-NEXT: s_mov_b32 s4, 0x70603022708; GFX90A-NEXT: v_mov_b32_e32 v2, 02709; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s42710; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2711; GFX90A-NEXT: s_waitcnt vmcnt(0)2712; GFX90A-NEXT: s_setpc_b64 s[30:31]2713;2714; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__0_3_3_3:2715; GFX942: ; %bb.0:2716; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2717; GFX942-NEXT: ;;#ASMSTART2718; GFX942-NEXT: ; def v02719; GFX942-NEXT: ;;#ASMEND2720; GFX942-NEXT: s_mov_b32 s2, 0xffff2721; GFX942-NEXT: ;;#ASMSTART2722; GFX942-NEXT: ; def v12723; GFX942-NEXT: ;;#ASMEND2724; GFX942-NEXT: v_mov_b32_e32 v2, 02725; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v12726; GFX942-NEXT: s_mov_b32 s2, 0x70603022727; GFX942-NEXT: v_perm_b32 v1, v1, v1, s22728; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2729; GFX942-NEXT: s_waitcnt vmcnt(0)2730; GFX942-NEXT: s_setpc_b64 s[30:31]2731 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2732 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2733 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>2734 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82735 ret void2736}2737 2738define void @v_shuffle_v4bf16_v2bf16__1_3_3_3(ptr addrspace(1) inreg %ptr) {2739; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__1_3_3_3:2740; GFX900: ; %bb.0:2741; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2742; GFX900-NEXT: ;;#ASMSTART2743; GFX900-NEXT: ; def v02744; GFX900-NEXT: ;;#ASMEND2745; GFX900-NEXT: ;;#ASMSTART2746; GFX900-NEXT: ; def v12747; GFX900-NEXT: ;;#ASMEND2748; GFX900-NEXT: s_mov_b32 s4, 0x70603022749; GFX900-NEXT: v_mov_b32_e32 v2, 02750; GFX900-NEXT: v_perm_b32 v0, v1, v0, s42751; GFX900-NEXT: v_perm_b32 v1, v1, v1, s42752; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2753; GFX900-NEXT: s_waitcnt vmcnt(0)2754; GFX900-NEXT: s_setpc_b64 s[30:31]2755;2756; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__1_3_3_3:2757; GFX90A: ; %bb.0:2758; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2759; GFX90A-NEXT: ;;#ASMSTART2760; GFX90A-NEXT: ; def v02761; GFX90A-NEXT: ;;#ASMEND2762; GFX90A-NEXT: ;;#ASMSTART2763; GFX90A-NEXT: ; def v12764; GFX90A-NEXT: ;;#ASMEND2765; GFX90A-NEXT: s_mov_b32 s4, 0x70603022766; GFX90A-NEXT: v_mov_b32_e32 v2, 02767; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s42768; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s42769; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2770; GFX90A-NEXT: s_waitcnt vmcnt(0)2771; GFX90A-NEXT: s_setpc_b64 s[30:31]2772;2773; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__1_3_3_3:2774; GFX942: ; %bb.0:2775; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2776; GFX942-NEXT: ;;#ASMSTART2777; GFX942-NEXT: ; def v02778; GFX942-NEXT: ;;#ASMEND2779; GFX942-NEXT: ;;#ASMSTART2780; GFX942-NEXT: ; def v12781; GFX942-NEXT: ;;#ASMEND2782; GFX942-NEXT: s_mov_b32 s2, 0x70603022783; GFX942-NEXT: v_mov_b32_e32 v2, 02784; GFX942-NEXT: v_perm_b32 v0, v1, v0, s22785; GFX942-NEXT: v_perm_b32 v1, v1, v1, s22786; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2787; GFX942-NEXT: s_waitcnt vmcnt(0)2788; GFX942-NEXT: s_setpc_b64 s[30:31]2789 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2790 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2791 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>2792 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82793 ret void2794}2795 2796define void @v_shuffle_v4bf16_v2bf16__2_3_3_3(ptr addrspace(1) inreg %ptr) {2797; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__2_3_3_3:2798; GFX900: ; %bb.0:2799; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2800; GFX900-NEXT: s_mov_b32 s4, 0x70603022801; GFX900-NEXT: v_mov_b32_e32 v2, 02802; GFX900-NEXT: ;;#ASMSTART2803; GFX900-NEXT: ; def v02804; GFX900-NEXT: ;;#ASMEND2805; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42806; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2807; GFX900-NEXT: s_waitcnt vmcnt(0)2808; GFX900-NEXT: s_setpc_b64 s[30:31]2809;2810; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__2_3_3_3:2811; GFX90A: ; %bb.0:2812; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2813; GFX90A-NEXT: s_mov_b32 s4, 0x70603022814; GFX90A-NEXT: v_mov_b32_e32 v2, 02815; GFX90A-NEXT: ;;#ASMSTART2816; GFX90A-NEXT: ; def v02817; GFX90A-NEXT: ;;#ASMEND2818; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42819; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2820; GFX90A-NEXT: s_waitcnt vmcnt(0)2821; GFX90A-NEXT: s_setpc_b64 s[30:31]2822;2823; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__2_3_3_3:2824; GFX942: ; %bb.0:2825; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2826; GFX942-NEXT: s_mov_b32 s2, 0x70603022827; GFX942-NEXT: v_mov_b32_e32 v2, 02828; GFX942-NEXT: ;;#ASMSTART2829; GFX942-NEXT: ; def v02830; GFX942-NEXT: ;;#ASMEND2831; GFX942-NEXT: s_nop 02832; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22833; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2834; GFX942-NEXT: s_waitcnt vmcnt(0)2835; GFX942-NEXT: s_setpc_b64 s[30:31]2836 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2837 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2838 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>2839 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82840 ret void2841}2842 2843define void @v_shuffle_v4bf16_v2bf16__3_u_3_3(ptr addrspace(1) inreg %ptr) {2844; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_u_3_3:2845; GFX900: ; %bb.0:2846; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2847; GFX900-NEXT: ;;#ASMSTART2848; GFX900-NEXT: ; def v02849; GFX900-NEXT: ;;#ASMEND2850; GFX900-NEXT: s_mov_b32 s4, 0x70603022851; GFX900-NEXT: v_mov_b32_e32 v2, 02852; GFX900-NEXT: v_perm_b32 v1, v0, v0, s42853; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 162854; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2855; GFX900-NEXT: s_waitcnt vmcnt(0)2856; GFX900-NEXT: s_setpc_b64 s[30:31]2857;2858; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_u_3_3:2859; GFX90A: ; %bb.0:2860; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2861; GFX90A-NEXT: ;;#ASMSTART2862; GFX90A-NEXT: ; def v02863; GFX90A-NEXT: ;;#ASMEND2864; GFX90A-NEXT: s_mov_b32 s4, 0x70603022865; GFX90A-NEXT: v_mov_b32_e32 v2, 02866; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s42867; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 162868; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2869; GFX90A-NEXT: s_waitcnt vmcnt(0)2870; GFX90A-NEXT: s_setpc_b64 s[30:31]2871;2872; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_u_3_3:2873; GFX942: ; %bb.0:2874; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2875; GFX942-NEXT: ;;#ASMSTART2876; GFX942-NEXT: ; def v02877; GFX942-NEXT: ;;#ASMEND2878; GFX942-NEXT: s_mov_b32 s2, 0x70603022879; GFX942-NEXT: v_mov_b32_e32 v2, 02880; GFX942-NEXT: v_perm_b32 v1, v0, v0, s22881; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 162882; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2883; GFX942-NEXT: s_waitcnt vmcnt(0)2884; GFX942-NEXT: s_setpc_b64 s[30:31]2885 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2886 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2887 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>2888 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82889 ret void2890}2891 2892define void @v_shuffle_v4bf16_v2bf16__3_0_3_3(ptr addrspace(1) inreg %ptr) {2893; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_0_3_3:2894; GFX900: ; %bb.0:2895; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2896; GFX900-NEXT: ;;#ASMSTART2897; GFX900-NEXT: ; def v02898; GFX900-NEXT: ;;#ASMEND2899; GFX900-NEXT: s_mov_b32 s4, 0x70603022900; GFX900-NEXT: v_mov_b32_e32 v2, 02901; GFX900-NEXT: ;;#ASMSTART2902; GFX900-NEXT: ; def v32903; GFX900-NEXT: ;;#ASMEND2904; GFX900-NEXT: v_perm_b32 v1, v3, v3, s42905; GFX900-NEXT: v_alignbit_b32 v0, v0, v3, 162906; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2907; GFX900-NEXT: s_waitcnt vmcnt(0)2908; GFX900-NEXT: s_setpc_b64 s[30:31]2909;2910; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_0_3_3:2911; GFX90A: ; %bb.0:2912; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2913; GFX90A-NEXT: ;;#ASMSTART2914; GFX90A-NEXT: ; def v02915; GFX90A-NEXT: ;;#ASMEND2916; GFX90A-NEXT: s_mov_b32 s4, 0x70603022917; GFX90A-NEXT: v_mov_b32_e32 v2, 02918; GFX90A-NEXT: ;;#ASMSTART2919; GFX90A-NEXT: ; def v32920; GFX90A-NEXT: ;;#ASMEND2921; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s42922; GFX90A-NEXT: v_alignbit_b32 v0, v0, v3, 162923; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2924; GFX90A-NEXT: s_waitcnt vmcnt(0)2925; GFX90A-NEXT: s_setpc_b64 s[30:31]2926;2927; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_0_3_3:2928; GFX942: ; %bb.0:2929; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2930; GFX942-NEXT: ;;#ASMSTART2931; GFX942-NEXT: ; def v02932; GFX942-NEXT: ;;#ASMEND2933; GFX942-NEXT: s_mov_b32 s2, 0x70603022934; GFX942-NEXT: v_mov_b32_e32 v2, 02935; GFX942-NEXT: ;;#ASMSTART2936; GFX942-NEXT: ; def v32937; GFX942-NEXT: ;;#ASMEND2938; GFX942-NEXT: s_nop 02939; GFX942-NEXT: v_perm_b32 v1, v3, v3, s22940; GFX942-NEXT: v_alignbit_b32 v0, v0, v3, 162941; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]2942; GFX942-NEXT: s_waitcnt vmcnt(0)2943; GFX942-NEXT: s_setpc_b64 s[30:31]2944 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()2945 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()2946 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>2947 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82948 ret void2949}2950 2951define void @v_shuffle_v4bf16_v2bf16__3_1_3_3(ptr addrspace(1) inreg %ptr) {2952; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_1_3_3:2953; GFX900: ; %bb.0:2954; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2955; GFX900-NEXT: ;;#ASMSTART2956; GFX900-NEXT: ; def v02957; GFX900-NEXT: ;;#ASMEND2958; GFX900-NEXT: ;;#ASMSTART2959; GFX900-NEXT: ; def v12960; GFX900-NEXT: ;;#ASMEND2961; GFX900-NEXT: s_mov_b32 s4, 0x70603022962; GFX900-NEXT: v_mov_b32_e32 v2, 02963; GFX900-NEXT: v_perm_b32 v0, v0, v1, s42964; GFX900-NEXT: v_perm_b32 v1, v1, v1, s42965; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2966; GFX900-NEXT: s_waitcnt vmcnt(0)2967; GFX900-NEXT: s_setpc_b64 s[30:31]2968;2969; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_1_3_3:2970; GFX90A: ; %bb.0:2971; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2972; GFX90A-NEXT: ;;#ASMSTART2973; GFX90A-NEXT: ; def v02974; GFX90A-NEXT: ;;#ASMEND2975; GFX90A-NEXT: ;;#ASMSTART2976; GFX90A-NEXT: ; def v12977; GFX90A-NEXT: ;;#ASMEND2978; GFX90A-NEXT: s_mov_b32 s4, 0x70603022979; GFX90A-NEXT: v_mov_b32_e32 v2, 02980; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s42981; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s42982; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]2983; GFX90A-NEXT: s_waitcnt vmcnt(0)2984; GFX90A-NEXT: s_setpc_b64 s[30:31]2985;2986; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_1_3_3:2987; GFX942: ; %bb.0:2988; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2989; GFX942-NEXT: ;;#ASMSTART2990; GFX942-NEXT: ; def v02991; GFX942-NEXT: ;;#ASMEND2992; GFX942-NEXT: ;;#ASMSTART2993; GFX942-NEXT: ; def v12994; GFX942-NEXT: ;;#ASMEND2995; GFX942-NEXT: s_mov_b32 s2, 0x70603022996; GFX942-NEXT: v_mov_b32_e32 v2, 02997; GFX942-NEXT: v_perm_b32 v0, v0, v1, s22998; GFX942-NEXT: v_perm_b32 v1, v1, v1, s22999; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3000; GFX942-NEXT: s_waitcnt vmcnt(0)3001; GFX942-NEXT: s_setpc_b64 s[30:31]3002 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()3003 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()3004 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>3005 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83006 ret void3007}3008 3009define void @v_shuffle_v4bf16_v2bf16__3_2_3_3(ptr addrspace(1) inreg %ptr) {3010; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_2_3_3:3011; GFX900: ; %bb.0:3012; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3013; GFX900-NEXT: ;;#ASMSTART3014; GFX900-NEXT: ; def v03015; GFX900-NEXT: ;;#ASMEND3016; GFX900-NEXT: s_mov_b32 s4, 0x70603023017; GFX900-NEXT: v_mov_b32_e32 v2, 03018; GFX900-NEXT: v_perm_b32 v1, v0, v0, s43019; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 163020; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3021; GFX900-NEXT: s_waitcnt vmcnt(0)3022; GFX900-NEXT: s_setpc_b64 s[30:31]3023;3024; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_2_3_3:3025; GFX90A: ; %bb.0:3026; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3027; GFX90A-NEXT: ;;#ASMSTART3028; GFX90A-NEXT: ; def v03029; GFX90A-NEXT: ;;#ASMEND3030; GFX90A-NEXT: s_mov_b32 s4, 0x70603023031; GFX90A-NEXT: v_mov_b32_e32 v2, 03032; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s43033; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 163034; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3035; GFX90A-NEXT: s_waitcnt vmcnt(0)3036; GFX90A-NEXT: s_setpc_b64 s[30:31]3037;3038; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_2_3_3:3039; GFX942: ; %bb.0:3040; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3041; GFX942-NEXT: ;;#ASMSTART3042; GFX942-NEXT: ; def v03043; GFX942-NEXT: ;;#ASMEND3044; GFX942-NEXT: s_mov_b32 s2, 0x70603023045; GFX942-NEXT: v_mov_b32_e32 v2, 03046; GFX942-NEXT: v_perm_b32 v1, v0, v0, s23047; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 163048; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3049; GFX942-NEXT: s_waitcnt vmcnt(0)3050; GFX942-NEXT: s_setpc_b64 s[30:31]3051 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()3052 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()3053 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>3054 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83055 ret void3056}3057 3058define void @v_shuffle_v4bf16_v2bf16__3_3_u_3(ptr addrspace(1) inreg %ptr) {3059; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_3:3060; GFX900: ; %bb.0:3061; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3062; GFX900-NEXT: s_mov_b32 s4, 0x70603023063; GFX900-NEXT: v_mov_b32_e32 v2, 03064; GFX900-NEXT: ;;#ASMSTART3065; GFX900-NEXT: ; def v13066; GFX900-NEXT: ;;#ASMEND3067; GFX900-NEXT: v_perm_b32 v0, v1, v1, s43068; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3069; GFX900-NEXT: s_waitcnt vmcnt(0)3070; GFX900-NEXT: s_setpc_b64 s[30:31]3071;3072; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_3:3073; GFX90A: ; %bb.0:3074; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3075; GFX90A-NEXT: s_mov_b32 s4, 0x70603023076; GFX90A-NEXT: v_mov_b32_e32 v2, 03077; GFX90A-NEXT: ;;#ASMSTART3078; GFX90A-NEXT: ; def v13079; GFX90A-NEXT: ;;#ASMEND3080; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s43081; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3082; GFX90A-NEXT: s_waitcnt vmcnt(0)3083; GFX90A-NEXT: s_setpc_b64 s[30:31]3084;3085; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_u_3:3086; GFX942: ; %bb.0:3087; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3088; GFX942-NEXT: s_mov_b32 s2, 0x70603023089; GFX942-NEXT: v_mov_b32_e32 v2, 03090; GFX942-NEXT: ;;#ASMSTART3091; GFX942-NEXT: ; def v13092; GFX942-NEXT: ;;#ASMEND3093; GFX942-NEXT: s_nop 03094; GFX942-NEXT: v_perm_b32 v0, v1, v1, s23095; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3096; GFX942-NEXT: s_waitcnt vmcnt(0)3097; GFX942-NEXT: s_setpc_b64 s[30:31]3098 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()3099 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()3100 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>3101 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83102 ret void3103}3104 3105define void @v_shuffle_v4bf16_v2bf16__3_3_0_3(ptr addrspace(1) inreg %ptr) {3106; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_3:3107; GFX900: ; %bb.0:3108; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3109; GFX900-NEXT: s_mov_b32 s4, 0xffff3110; GFX900-NEXT: ;;#ASMSTART3111; GFX900-NEXT: ; def v03112; GFX900-NEXT: ;;#ASMEND3113; GFX900-NEXT: ;;#ASMSTART3114; GFX900-NEXT: ; def v33115; GFX900-NEXT: ;;#ASMEND3116; GFX900-NEXT: v_bfi_b32 v1, s4, v0, v33117; GFX900-NEXT: s_mov_b32 s4, 0x70603023118; GFX900-NEXT: v_mov_b32_e32 v2, 03119; GFX900-NEXT: v_perm_b32 v0, v3, v3, s43120; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3121; GFX900-NEXT: s_waitcnt vmcnt(0)3122; GFX900-NEXT: s_setpc_b64 s[30:31]3123;3124; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_3:3125; GFX90A: ; %bb.0:3126; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3127; GFX90A-NEXT: s_mov_b32 s4, 0xffff3128; GFX90A-NEXT: ;;#ASMSTART3129; GFX90A-NEXT: ; def v03130; GFX90A-NEXT: ;;#ASMEND3131; GFX90A-NEXT: ;;#ASMSTART3132; GFX90A-NEXT: ; def v33133; GFX90A-NEXT: ;;#ASMEND3134; GFX90A-NEXT: v_bfi_b32 v1, s4, v0, v33135; GFX90A-NEXT: s_mov_b32 s4, 0x70603023136; GFX90A-NEXT: v_mov_b32_e32 v2, 03137; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s43138; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3139; GFX90A-NEXT: s_waitcnt vmcnt(0)3140; GFX90A-NEXT: s_setpc_b64 s[30:31]3141;3142; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_0_3:3143; GFX942: ; %bb.0:3144; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3145; GFX942-NEXT: s_mov_b32 s2, 0xffff3146; GFX942-NEXT: ;;#ASMSTART3147; GFX942-NEXT: ; def v03148; GFX942-NEXT: ;;#ASMEND3149; GFX942-NEXT: ;;#ASMSTART3150; GFX942-NEXT: ; def v33151; GFX942-NEXT: ;;#ASMEND3152; GFX942-NEXT: v_mov_b32_e32 v2, 03153; GFX942-NEXT: v_bfi_b32 v1, s2, v0, v33154; GFX942-NEXT: s_mov_b32 s2, 0x70603023155; GFX942-NEXT: v_perm_b32 v0, v3, v3, s23156; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3157; GFX942-NEXT: s_waitcnt vmcnt(0)3158; GFX942-NEXT: s_setpc_b64 s[30:31]3159 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()3160 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()3161 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>3162 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83163 ret void3164}3165 3166define void @v_shuffle_v4bf16_v2bf16__3_3_1_3(ptr addrspace(1) inreg %ptr) {3167; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_3:3168; GFX900: ; %bb.0:3169; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3170; GFX900-NEXT: ;;#ASMSTART3171; GFX900-NEXT: ; def v03172; GFX900-NEXT: ;;#ASMEND3173; GFX900-NEXT: s_mov_b32 s4, 0x70603023174; GFX900-NEXT: v_mov_b32_e32 v2, 03175; GFX900-NEXT: ;;#ASMSTART3176; GFX900-NEXT: ; def v33177; GFX900-NEXT: ;;#ASMEND3178; GFX900-NEXT: v_perm_b32 v1, v3, v0, s43179; GFX900-NEXT: v_perm_b32 v0, v3, v3, s43180; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3181; GFX900-NEXT: s_waitcnt vmcnt(0)3182; GFX900-NEXT: s_setpc_b64 s[30:31]3183;3184; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_3:3185; GFX90A: ; %bb.0:3186; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3187; GFX90A-NEXT: ;;#ASMSTART3188; GFX90A-NEXT: ; def v03189; GFX90A-NEXT: ;;#ASMEND3190; GFX90A-NEXT: s_mov_b32 s4, 0x70603023191; GFX90A-NEXT: v_mov_b32_e32 v2, 03192; GFX90A-NEXT: ;;#ASMSTART3193; GFX90A-NEXT: ; def v33194; GFX90A-NEXT: ;;#ASMEND3195; GFX90A-NEXT: v_perm_b32 v1, v3, v0, s43196; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s43197; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3198; GFX90A-NEXT: s_waitcnt vmcnt(0)3199; GFX90A-NEXT: s_setpc_b64 s[30:31]3200;3201; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_1_3:3202; GFX942: ; %bb.0:3203; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3204; GFX942-NEXT: ;;#ASMSTART3205; GFX942-NEXT: ; def v03206; GFX942-NEXT: ;;#ASMEND3207; GFX942-NEXT: s_mov_b32 s2, 0x70603023208; GFX942-NEXT: v_mov_b32_e32 v2, 03209; GFX942-NEXT: ;;#ASMSTART3210; GFX942-NEXT: ; def v33211; GFX942-NEXT: ;;#ASMEND3212; GFX942-NEXT: s_nop 03213; GFX942-NEXT: v_perm_b32 v1, v3, v0, s23214; GFX942-NEXT: v_perm_b32 v0, v3, v3, s23215; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3216; GFX942-NEXT: s_waitcnt vmcnt(0)3217; GFX942-NEXT: s_setpc_b64 s[30:31]3218 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()3219 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()3220 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>3221 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83222 ret void3223}3224 3225define void @v_shuffle_v4bf16_v2bf16__3_3_2_3(ptr addrspace(1) inreg %ptr) {3226; GFX900-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_3:3227; GFX900: ; %bb.0:3228; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3229; GFX900-NEXT: s_mov_b32 s4, 0x70603023230; GFX900-NEXT: v_mov_b32_e32 v2, 03231; GFX900-NEXT: ;;#ASMSTART3232; GFX900-NEXT: ; def v13233; GFX900-NEXT: ;;#ASMEND3234; GFX900-NEXT: v_perm_b32 v0, v1, v1, s43235; GFX900-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3236; GFX900-NEXT: s_waitcnt vmcnt(0)3237; GFX900-NEXT: s_setpc_b64 s[30:31]3238;3239; GFX90A-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_3:3240; GFX90A: ; %bb.0:3241; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3242; GFX90A-NEXT: s_mov_b32 s4, 0x70603023243; GFX90A-NEXT: v_mov_b32_e32 v2, 03244; GFX90A-NEXT: ;;#ASMSTART3245; GFX90A-NEXT: ; def v13246; GFX90A-NEXT: ;;#ASMEND3247; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s43248; GFX90A-NEXT: global_store_dwordx2 v2, v[0:1], s[16:17]3249; GFX90A-NEXT: s_waitcnt vmcnt(0)3250; GFX90A-NEXT: s_setpc_b64 s[30:31]3251;3252; GFX942-LABEL: v_shuffle_v4bf16_v2bf16__3_3_2_3:3253; GFX942: ; %bb.0:3254; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3255; GFX942-NEXT: s_mov_b32 s2, 0x70603023256; GFX942-NEXT: v_mov_b32_e32 v2, 03257; GFX942-NEXT: ;;#ASMSTART3258; GFX942-NEXT: ; def v13259; GFX942-NEXT: ;;#ASMEND3260; GFX942-NEXT: s_nop 03261; GFX942-NEXT: v_perm_b32 v0, v1, v1, s23262; GFX942-NEXT: global_store_dwordx2 v2, v[0:1], s[0:1]3263; GFX942-NEXT: s_waitcnt vmcnt(0)3264; GFX942-NEXT: s_setpc_b64 s[30:31]3265 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()3266 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()3267 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>3268 store <4 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83269 ret void3270}3271 3272define void @s_shuffle_v4bf16_v2bf16__u_u_u_u() {3273; GFX9-LABEL: s_shuffle_v4bf16_v2bf16__u_u_u_u:3274; GFX9: ; %bb.0:3275; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3276; GFX9-NEXT: ;;#ASMSTART3277; GFX9-NEXT: ; use s[8:9]3278; GFX9-NEXT: ;;#ASMEND3279; GFX9-NEXT: s_setpc_b64 s[30:31]3280 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3281 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> poison3282 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3283 ret void3284}3285 3286define void @s_shuffle_v4bf16_v2bf16__0_u_u_u() {3287; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__0_u_u_u:3288; GFX900: ; %bb.0:3289; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3290; GFX900-NEXT: ;;#ASMSTART3291; GFX900-NEXT: ; def s83292; GFX900-NEXT: ;;#ASMEND3293; GFX900-NEXT: ;;#ASMSTART3294; GFX900-NEXT: ; use s[8:9]3295; GFX900-NEXT: ;;#ASMEND3296; GFX900-NEXT: s_setpc_b64 s[30:31]3297;3298; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__0_u_u_u:3299; GFX90A: ; %bb.0:3300; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3301; GFX90A-NEXT: ;;#ASMSTART3302; GFX90A-NEXT: ; def s83303; GFX90A-NEXT: ;;#ASMEND3304; GFX90A-NEXT: ;;#ASMSTART3305; GFX90A-NEXT: ; use s[8:9]3306; GFX90A-NEXT: ;;#ASMEND3307; GFX90A-NEXT: s_setpc_b64 s[30:31]3308;3309; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__0_u_u_u:3310; GFX942: ; %bb.0:3311; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3312; GFX942-NEXT: ;;#ASMSTART3313; GFX942-NEXT: ; def s83314; GFX942-NEXT: ;;#ASMEND3315; GFX942-NEXT: s_nop 03316; GFX942-NEXT: ;;#ASMSTART3317; GFX942-NEXT: ; use s[8:9]3318; GFX942-NEXT: ;;#ASMEND3319; GFX942-NEXT: s_setpc_b64 s[30:31]3320 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3321 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>3322 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3323 ret void3324}3325 3326define void @s_shuffle_v4bf16_v2bf16__1_u_u_u() {3327; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__1_u_u_u:3328; GFX900: ; %bb.0:3329; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3330; GFX900-NEXT: ;;#ASMSTART3331; GFX900-NEXT: ; def s43332; GFX900-NEXT: ;;#ASMEND3333; GFX900-NEXT: s_lshr_b32 s8, 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_v4bf16_v2bf16__1_u_u_u:3340; GFX90A: ; %bb.0:3341; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3342; GFX90A-NEXT: ;;#ASMSTART3343; GFX90A-NEXT: ; def s43344; GFX90A-NEXT: ;;#ASMEND3345; GFX90A-NEXT: s_lshr_b32 s8, s4, 163346; GFX90A-NEXT: ;;#ASMSTART3347; GFX90A-NEXT: ; use s[8:9]3348; GFX90A-NEXT: ;;#ASMEND3349; GFX90A-NEXT: s_setpc_b64 s[30:31]3350;3351; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__1_u_u_u:3352; GFX942: ; %bb.0:3353; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3354; GFX942-NEXT: ;;#ASMSTART3355; GFX942-NEXT: ; def s03356; GFX942-NEXT: ;;#ASMEND3357; GFX942-NEXT: s_lshr_b32 s8, s0, 163358; GFX942-NEXT: ;;#ASMSTART3359; GFX942-NEXT: ; use s[8:9]3360; GFX942-NEXT: ;;#ASMEND3361; GFX942-NEXT: s_setpc_b64 s[30:31]3362 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3363 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>3364 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3365 ret void3366}3367 3368define void @s_shuffle_v4bf16_v2bf16__2_u_u_u() {3369; GFX9-LABEL: s_shuffle_v4bf16_v2bf16__2_u_u_u:3370; GFX9: ; %bb.0:3371; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3372; GFX9-NEXT: ;;#ASMSTART3373; GFX9-NEXT: ; use s[8:9]3374; GFX9-NEXT: ;;#ASMEND3375; GFX9-NEXT: s_setpc_b64 s[30:31]3376 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3377 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>3378 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3379 ret void3380}3381 3382define void @s_shuffle_v4bf16_v2bf16__3_u_u_u() {3383; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_u_u_u:3384; GFX900: ; %bb.0:3385; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3386; GFX900-NEXT: ;;#ASMSTART3387; GFX900-NEXT: ; def s43388; GFX900-NEXT: ;;#ASMEND3389; GFX900-NEXT: s_lshr_b32 s8, s4, 163390; GFX900-NEXT: ;;#ASMSTART3391; GFX900-NEXT: ; use s[8:9]3392; GFX900-NEXT: ;;#ASMEND3393; GFX900-NEXT: s_setpc_b64 s[30:31]3394;3395; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_u_u_u:3396; GFX90A: ; %bb.0:3397; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3398; GFX90A-NEXT: ;;#ASMSTART3399; GFX90A-NEXT: ; def s43400; GFX90A-NEXT: ;;#ASMEND3401; GFX90A-NEXT: s_lshr_b32 s8, s4, 163402; GFX90A-NEXT: ;;#ASMSTART3403; GFX90A-NEXT: ; use s[8:9]3404; GFX90A-NEXT: ;;#ASMEND3405; GFX90A-NEXT: s_setpc_b64 s[30:31]3406;3407; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_u_u_u:3408; GFX942: ; %bb.0:3409; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3410; GFX942-NEXT: ;;#ASMSTART3411; GFX942-NEXT: ; def s03412; GFX942-NEXT: ;;#ASMEND3413; GFX942-NEXT: s_lshr_b32 s8, s0, 163414; GFX942-NEXT: ;;#ASMSTART3415; GFX942-NEXT: ; use s[8:9]3416; GFX942-NEXT: ;;#ASMEND3417; GFX942-NEXT: s_setpc_b64 s[30:31]3418 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3419 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3420 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>3421 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3422 ret void3423}3424 3425define void @s_shuffle_v4bf16_v2bf16__3_0_u_u() {3426; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_0_u_u:3427; GFX900: ; %bb.0:3428; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3429; GFX900-NEXT: ;;#ASMSTART3430; GFX900-NEXT: ; def s53431; GFX900-NEXT: ;;#ASMEND3432; GFX900-NEXT: s_lshr_b32 s5, s5, 163433; GFX900-NEXT: ;;#ASMSTART3434; GFX900-NEXT: ; def s43435; GFX900-NEXT: ;;#ASMEND3436; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43437; GFX900-NEXT: ;;#ASMSTART3438; GFX900-NEXT: ; use s[8:9]3439; GFX900-NEXT: ;;#ASMEND3440; GFX900-NEXT: s_setpc_b64 s[30:31]3441;3442; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_0_u_u:3443; GFX90A: ; %bb.0:3444; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3445; GFX90A-NEXT: ;;#ASMSTART3446; GFX90A-NEXT: ; def s53447; GFX90A-NEXT: ;;#ASMEND3448; GFX90A-NEXT: s_lshr_b32 s5, s5, 163449; GFX90A-NEXT: ;;#ASMSTART3450; GFX90A-NEXT: ; def s43451; GFX90A-NEXT: ;;#ASMEND3452; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43453; GFX90A-NEXT: ;;#ASMSTART3454; GFX90A-NEXT: ; use s[8:9]3455; GFX90A-NEXT: ;;#ASMEND3456; GFX90A-NEXT: s_setpc_b64 s[30:31]3457;3458; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_0_u_u:3459; GFX942: ; %bb.0:3460; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3461; GFX942-NEXT: ;;#ASMSTART3462; GFX942-NEXT: ; def s13463; GFX942-NEXT: ;;#ASMEND3464; GFX942-NEXT: s_lshr_b32 s1, s1, 163465; GFX942-NEXT: ;;#ASMSTART3466; GFX942-NEXT: ; def s03467; GFX942-NEXT: ;;#ASMEND3468; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03469; GFX942-NEXT: ;;#ASMSTART3470; GFX942-NEXT: ; use s[8:9]3471; GFX942-NEXT: ;;#ASMEND3472; GFX942-NEXT: s_setpc_b64 s[30:31]3473 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3474 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3475 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>3476 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3477 ret void3478}3479 3480define void @s_shuffle_v4bf16_v2bf16__3_1_u_u() {3481; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_1_u_u:3482; GFX900: ; %bb.0:3483; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3484; GFX900-NEXT: ;;#ASMSTART3485; GFX900-NEXT: ; def s43486; GFX900-NEXT: ;;#ASMEND3487; GFX900-NEXT: ;;#ASMSTART3488; GFX900-NEXT: ; def s53489; GFX900-NEXT: ;;#ASMEND3490; GFX900-NEXT: s_lshr_b32 s4, s4, 163491; GFX900-NEXT: s_lshr_b32 s5, s5, 163492; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43493; GFX900-NEXT: ;;#ASMSTART3494; GFX900-NEXT: ; use s[8:9]3495; GFX900-NEXT: ;;#ASMEND3496; GFX900-NEXT: s_setpc_b64 s[30:31]3497;3498; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_1_u_u:3499; GFX90A: ; %bb.0:3500; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3501; GFX90A-NEXT: ;;#ASMSTART3502; GFX90A-NEXT: ; def s43503; GFX90A-NEXT: ;;#ASMEND3504; GFX90A-NEXT: ;;#ASMSTART3505; GFX90A-NEXT: ; def s53506; GFX90A-NEXT: ;;#ASMEND3507; GFX90A-NEXT: s_lshr_b32 s4, s4, 163508; GFX90A-NEXT: s_lshr_b32 s5, s5, 163509; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43510; GFX90A-NEXT: ;;#ASMSTART3511; GFX90A-NEXT: ; use s[8:9]3512; GFX90A-NEXT: ;;#ASMEND3513; GFX90A-NEXT: s_setpc_b64 s[30:31]3514;3515; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_1_u_u:3516; GFX942: ; %bb.0:3517; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3518; GFX942-NEXT: ;;#ASMSTART3519; GFX942-NEXT: ; def s03520; GFX942-NEXT: ;;#ASMEND3521; GFX942-NEXT: ;;#ASMSTART3522; GFX942-NEXT: ; def s13523; GFX942-NEXT: ;;#ASMEND3524; GFX942-NEXT: s_lshr_b32 s0, s0, 163525; GFX942-NEXT: s_lshr_b32 s1, s1, 163526; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03527; GFX942-NEXT: ;;#ASMSTART3528; GFX942-NEXT: ; use s[8:9]3529; GFX942-NEXT: ;;#ASMEND3530; GFX942-NEXT: s_setpc_b64 s[30:31]3531 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3532 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3533 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>3534 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3535 ret void3536}3537 3538define void @s_shuffle_v4bf16_v2bf16__3_2_u_u() {3539; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_2_u_u:3540; GFX900: ; %bb.0:3541; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3542; GFX900-NEXT: ;;#ASMSTART3543; GFX900-NEXT: ; def s43544; GFX900-NEXT: ;;#ASMEND3545; GFX900-NEXT: s_lshr_b32 s5, s4, 163546; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43547; GFX900-NEXT: ;;#ASMSTART3548; GFX900-NEXT: ; use s[8:9]3549; GFX900-NEXT: ;;#ASMEND3550; GFX900-NEXT: s_setpc_b64 s[30:31]3551;3552; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_2_u_u:3553; GFX90A: ; %bb.0:3554; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3555; GFX90A-NEXT: ;;#ASMSTART3556; GFX90A-NEXT: ; def s43557; GFX90A-NEXT: ;;#ASMEND3558; GFX90A-NEXT: s_lshr_b32 s5, s4, 163559; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43560; GFX90A-NEXT: ;;#ASMSTART3561; GFX90A-NEXT: ; use s[8:9]3562; GFX90A-NEXT: ;;#ASMEND3563; GFX90A-NEXT: s_setpc_b64 s[30:31]3564;3565; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_2_u_u:3566; GFX942: ; %bb.0:3567; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3568; GFX942-NEXT: ;;#ASMSTART3569; GFX942-NEXT: ; def s03570; GFX942-NEXT: ;;#ASMEND3571; GFX942-NEXT: s_lshr_b32 s1, s0, 163572; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s03573; GFX942-NEXT: ;;#ASMSTART3574; GFX942-NEXT: ; use s[8:9]3575; GFX942-NEXT: ;;#ASMEND3576; GFX942-NEXT: s_setpc_b64 s[30:31]3577 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3578 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3579 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>3580 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3581 ret void3582}3583 3584define void @s_shuffle_v4bf16_v2bf16__3_3_u_u() {3585; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_u:3586; GFX900: ; %bb.0:3587; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3588; GFX900-NEXT: ;;#ASMSTART3589; GFX900-NEXT: ; def s43590; GFX900-NEXT: ;;#ASMEND3591; GFX900-NEXT: s_lshr_b32 s4, s4, 163592; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s43593; GFX900-NEXT: ;;#ASMSTART3594; GFX900-NEXT: ; use s[8:9]3595; GFX900-NEXT: ;;#ASMEND3596; GFX900-NEXT: s_setpc_b64 s[30:31]3597;3598; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_u:3599; GFX90A: ; %bb.0:3600; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3601; GFX90A-NEXT: ;;#ASMSTART3602; GFX90A-NEXT: ; def s43603; GFX90A-NEXT: ;;#ASMEND3604; GFX90A-NEXT: s_lshr_b32 s4, s4, 163605; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s43606; GFX90A-NEXT: ;;#ASMSTART3607; GFX90A-NEXT: ; use s[8:9]3608; GFX90A-NEXT: ;;#ASMEND3609; GFX90A-NEXT: s_setpc_b64 s[30:31]3610;3611; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_u:3612; GFX942: ; %bb.0:3613; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3614; GFX942-NEXT: ;;#ASMSTART3615; GFX942-NEXT: ; def s03616; GFX942-NEXT: ;;#ASMEND3617; GFX942-NEXT: s_lshr_b32 s0, s0, 163618; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s03619; GFX942-NEXT: ;;#ASMSTART3620; GFX942-NEXT: ; use s[8:9]3621; GFX942-NEXT: ;;#ASMEND3622; GFX942-NEXT: s_setpc_b64 s[30:31]3623 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3624 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3625 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>3626 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3627 ret void3628}3629 3630define void @s_shuffle_v4bf16_v2bf16__3_3_0_u() {3631; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_u:3632; GFX900: ; %bb.0:3633; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3634; GFX900-NEXT: ;;#ASMSTART3635; GFX900-NEXT: ; def s43636; GFX900-NEXT: ;;#ASMEND3637; GFX900-NEXT: s_lshr_b32 s4, s4, 163638; GFX900-NEXT: ;;#ASMSTART3639; GFX900-NEXT: ; def s93640; GFX900-NEXT: ;;#ASMEND3641; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s43642; GFX900-NEXT: ;;#ASMSTART3643; GFX900-NEXT: ; use s[8:9]3644; GFX900-NEXT: ;;#ASMEND3645; GFX900-NEXT: s_setpc_b64 s[30:31]3646;3647; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_u:3648; GFX90A: ; %bb.0:3649; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3650; GFX90A-NEXT: ;;#ASMSTART3651; GFX90A-NEXT: ; def s43652; GFX90A-NEXT: ;;#ASMEND3653; GFX90A-NEXT: s_lshr_b32 s4, s4, 163654; GFX90A-NEXT: ;;#ASMSTART3655; GFX90A-NEXT: ; def s93656; GFX90A-NEXT: ;;#ASMEND3657; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s43658; GFX90A-NEXT: ;;#ASMSTART3659; GFX90A-NEXT: ; use s[8:9]3660; GFX90A-NEXT: ;;#ASMEND3661; GFX90A-NEXT: s_setpc_b64 s[30:31]3662;3663; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_u:3664; GFX942: ; %bb.0:3665; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3666; GFX942-NEXT: ;;#ASMSTART3667; GFX942-NEXT: ; def s03668; GFX942-NEXT: ;;#ASMEND3669; GFX942-NEXT: s_lshr_b32 s0, s0, 163670; GFX942-NEXT: ;;#ASMSTART3671; GFX942-NEXT: ; def s93672; GFX942-NEXT: ;;#ASMEND3673; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s03674; GFX942-NEXT: ;;#ASMSTART3675; GFX942-NEXT: ; use s[8:9]3676; GFX942-NEXT: ;;#ASMEND3677; GFX942-NEXT: s_setpc_b64 s[30:31]3678 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3679 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3680 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>3681 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3682 ret void3683}3684 3685define void @s_shuffle_v4bf16_v2bf16__3_3_1_u() {3686; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_u:3687; GFX900: ; %bb.0:3688; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3689; GFX900-NEXT: ;;#ASMSTART3690; GFX900-NEXT: ; def s43691; GFX900-NEXT: ;;#ASMEND3692; GFX900-NEXT: ;;#ASMSTART3693; GFX900-NEXT: ; def s53694; GFX900-NEXT: ;;#ASMEND3695; GFX900-NEXT: s_lshr_b32 s9, s4, 163696; GFX900-NEXT: s_lshr_b32 s4, s5, 163697; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s43698; GFX900-NEXT: ;;#ASMSTART3699; GFX900-NEXT: ; use s[8:9]3700; GFX900-NEXT: ;;#ASMEND3701; GFX900-NEXT: s_setpc_b64 s[30:31]3702;3703; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_u:3704; GFX90A: ; %bb.0:3705; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3706; GFX90A-NEXT: ;;#ASMSTART3707; GFX90A-NEXT: ; def s43708; GFX90A-NEXT: ;;#ASMEND3709; GFX90A-NEXT: ;;#ASMSTART3710; GFX90A-NEXT: ; def s53711; GFX90A-NEXT: ;;#ASMEND3712; GFX90A-NEXT: s_lshr_b32 s9, s4, 163713; GFX90A-NEXT: s_lshr_b32 s4, s5, 163714; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s43715; GFX90A-NEXT: ;;#ASMSTART3716; GFX90A-NEXT: ; use s[8:9]3717; GFX90A-NEXT: ;;#ASMEND3718; GFX90A-NEXT: s_setpc_b64 s[30:31]3719;3720; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_u:3721; GFX942: ; %bb.0:3722; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3723; GFX942-NEXT: ;;#ASMSTART3724; GFX942-NEXT: ; def s03725; GFX942-NEXT: ;;#ASMEND3726; GFX942-NEXT: ;;#ASMSTART3727; GFX942-NEXT: ; def s13728; GFX942-NEXT: ;;#ASMEND3729; GFX942-NEXT: s_lshr_b32 s9, s0, 163730; GFX942-NEXT: s_lshr_b32 s0, s1, 163731; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s03732; GFX942-NEXT: ;;#ASMSTART3733; GFX942-NEXT: ; use s[8:9]3734; GFX942-NEXT: ;;#ASMEND3735; GFX942-NEXT: s_setpc_b64 s[30:31]3736 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3737 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3738 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>3739 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3740 ret void3741}3742 3743define void @s_shuffle_v4bf16_v2bf16__3_3_2_u() {3744; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_u:3745; GFX900: ; %bb.0:3746; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3747; GFX900-NEXT: ;;#ASMSTART3748; GFX900-NEXT: ; def s93749; GFX900-NEXT: ;;#ASMEND3750; GFX900-NEXT: s_lshr_b32 s4, s9, 163751; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s43752; GFX900-NEXT: ;;#ASMSTART3753; GFX900-NEXT: ; use s[8:9]3754; GFX900-NEXT: ;;#ASMEND3755; GFX900-NEXT: s_setpc_b64 s[30:31]3756;3757; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_u:3758; GFX90A: ; %bb.0:3759; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3760; GFX90A-NEXT: ;;#ASMSTART3761; GFX90A-NEXT: ; def s93762; GFX90A-NEXT: ;;#ASMEND3763; GFX90A-NEXT: s_lshr_b32 s4, s9, 163764; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s43765; GFX90A-NEXT: ;;#ASMSTART3766; GFX90A-NEXT: ; use s[8:9]3767; GFX90A-NEXT: ;;#ASMEND3768; GFX90A-NEXT: s_setpc_b64 s[30:31]3769;3770; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_u:3771; GFX942: ; %bb.0:3772; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3773; GFX942-NEXT: ;;#ASMSTART3774; GFX942-NEXT: ; def s93775; GFX942-NEXT: ;;#ASMEND3776; GFX942-NEXT: s_lshr_b32 s0, s9, 163777; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s03778; GFX942-NEXT: ;;#ASMSTART3779; GFX942-NEXT: ; use s[8:9]3780; GFX942-NEXT: ;;#ASMEND3781; GFX942-NEXT: s_setpc_b64 s[30:31]3782 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3783 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3784 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>3785 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3786 ret void3787}3788 3789define void @s_shuffle_v4bf16_v2bf16__3_3_3_u() {3790; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_u:3791; GFX900: ; %bb.0:3792; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3793; GFX900-NEXT: ;;#ASMSTART3794; GFX900-NEXT: ; def s43795; GFX900-NEXT: ;;#ASMEND3796; GFX900-NEXT: s_lshr_b32 s9, s4, 163797; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s93798; GFX900-NEXT: ;;#ASMSTART3799; GFX900-NEXT: ; use s[8:9]3800; GFX900-NEXT: ;;#ASMEND3801; GFX900-NEXT: s_setpc_b64 s[30:31]3802;3803; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_u:3804; GFX90A: ; %bb.0:3805; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3806; GFX90A-NEXT: ;;#ASMSTART3807; GFX90A-NEXT: ; def s43808; GFX90A-NEXT: ;;#ASMEND3809; GFX90A-NEXT: s_lshr_b32 s9, s4, 163810; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s93811; GFX90A-NEXT: ;;#ASMSTART3812; GFX90A-NEXT: ; use s[8:9]3813; GFX90A-NEXT: ;;#ASMEND3814; GFX90A-NEXT: s_setpc_b64 s[30:31]3815;3816; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_u:3817; GFX942: ; %bb.0:3818; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3819; GFX942-NEXT: ;;#ASMSTART3820; GFX942-NEXT: ; def s03821; GFX942-NEXT: ;;#ASMEND3822; GFX942-NEXT: s_lshr_b32 s9, s0, 163823; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s93824; GFX942-NEXT: ;;#ASMSTART3825; GFX942-NEXT: ; use s[8:9]3826; GFX942-NEXT: ;;#ASMEND3827; GFX942-NEXT: s_setpc_b64 s[30:31]3828 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3829 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3830 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>3831 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3832 ret void3833}3834 3835define void @s_shuffle_v4bf16_v2bf16__3_3_3_0() {3836; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_0:3837; GFX900: ; %bb.0:3838; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3839; GFX900-NEXT: ;;#ASMSTART3840; GFX900-NEXT: ; def s53841; GFX900-NEXT: ;;#ASMEND3842; GFX900-NEXT: s_lshr_b32 s5, s5, 163843; GFX900-NEXT: ;;#ASMSTART3844; GFX900-NEXT: ; def s43845; GFX900-NEXT: ;;#ASMEND3846; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s43847; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s53848; GFX900-NEXT: ;;#ASMSTART3849; GFX900-NEXT: ; use s[8:9]3850; GFX900-NEXT: ;;#ASMEND3851; GFX900-NEXT: s_setpc_b64 s[30:31]3852;3853; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_0:3854; GFX90A: ; %bb.0:3855; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3856; GFX90A-NEXT: ;;#ASMSTART3857; GFX90A-NEXT: ; def s53858; GFX90A-NEXT: ;;#ASMEND3859; GFX90A-NEXT: s_lshr_b32 s5, s5, 163860; GFX90A-NEXT: ;;#ASMSTART3861; GFX90A-NEXT: ; def s43862; GFX90A-NEXT: ;;#ASMEND3863; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s43864; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s53865; GFX90A-NEXT: ;;#ASMSTART3866; GFX90A-NEXT: ; use s[8:9]3867; GFX90A-NEXT: ;;#ASMEND3868; GFX90A-NEXT: s_setpc_b64 s[30:31]3869;3870; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_0:3871; GFX942: ; %bb.0:3872; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3873; GFX942-NEXT: ;;#ASMSTART3874; GFX942-NEXT: ; def s13875; GFX942-NEXT: ;;#ASMEND3876; GFX942-NEXT: s_lshr_b32 s1, s1, 163877; GFX942-NEXT: ;;#ASMSTART3878; GFX942-NEXT: ; def s03879; GFX942-NEXT: ;;#ASMEND3880; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s03881; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s13882; GFX942-NEXT: ;;#ASMSTART3883; GFX942-NEXT: ; use s[8:9]3884; GFX942-NEXT: ;;#ASMEND3885; GFX942-NEXT: s_setpc_b64 s[30:31]3886 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3887 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3888 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>3889 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3890 ret void3891}3892 3893define void @s_shuffle_v4bf16_v2bf16__3_3_3_1() {3894; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_1:3895; GFX900: ; %bb.0:3896; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3897; GFX900-NEXT: ;;#ASMSTART3898; GFX900-NEXT: ; def s43899; GFX900-NEXT: ;;#ASMEND3900; GFX900-NEXT: ;;#ASMSTART3901; GFX900-NEXT: ; def s53902; GFX900-NEXT: ;;#ASMEND3903; GFX900-NEXT: s_lshr_b32 s4, s4, 163904; GFX900-NEXT: s_lshr_b32 s5, s5, 163905; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s43906; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s53907; GFX900-NEXT: ;;#ASMSTART3908; GFX900-NEXT: ; use s[8:9]3909; GFX900-NEXT: ;;#ASMEND3910; GFX900-NEXT: s_setpc_b64 s[30:31]3911;3912; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_1:3913; GFX90A: ; %bb.0:3914; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3915; GFX90A-NEXT: ;;#ASMSTART3916; GFX90A-NEXT: ; def s43917; GFX90A-NEXT: ;;#ASMEND3918; GFX90A-NEXT: ;;#ASMSTART3919; GFX90A-NEXT: ; def s53920; GFX90A-NEXT: ;;#ASMEND3921; GFX90A-NEXT: s_lshr_b32 s4, s4, 163922; GFX90A-NEXT: s_lshr_b32 s5, s5, 163923; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s43924; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s53925; GFX90A-NEXT: ;;#ASMSTART3926; GFX90A-NEXT: ; use s[8:9]3927; GFX90A-NEXT: ;;#ASMEND3928; GFX90A-NEXT: s_setpc_b64 s[30:31]3929;3930; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_1:3931; GFX942: ; %bb.0:3932; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3933; GFX942-NEXT: ;;#ASMSTART3934; GFX942-NEXT: ; def s03935; GFX942-NEXT: ;;#ASMEND3936; GFX942-NEXT: ;;#ASMSTART3937; GFX942-NEXT: ; def s13938; GFX942-NEXT: ;;#ASMEND3939; GFX942-NEXT: s_lshr_b32 s0, s0, 163940; GFX942-NEXT: s_lshr_b32 s1, s1, 163941; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s03942; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s13943; GFX942-NEXT: ;;#ASMSTART3944; GFX942-NEXT: ; use s[8:9]3945; GFX942-NEXT: ;;#ASMEND3946; GFX942-NEXT: s_setpc_b64 s[30:31]3947 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3948 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3949 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>3950 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)3951 ret void3952}3953 3954define void @s_shuffle_v4bf16_v2bf16__3_3_3_2() {3955; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_2:3956; GFX900: ; %bb.0:3957; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3958; GFX900-NEXT: ;;#ASMSTART3959; GFX900-NEXT: ; def s43960; GFX900-NEXT: ;;#ASMEND3961; GFX900-NEXT: s_lshr_b32 s5, s4, 163962; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s43963; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s53964; GFX900-NEXT: ;;#ASMSTART3965; GFX900-NEXT: ; use s[8:9]3966; GFX900-NEXT: ;;#ASMEND3967; GFX900-NEXT: s_setpc_b64 s[30:31]3968;3969; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_2:3970; GFX90A: ; %bb.0:3971; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3972; GFX90A-NEXT: ;;#ASMSTART3973; GFX90A-NEXT: ; def s43974; GFX90A-NEXT: ;;#ASMEND3975; GFX90A-NEXT: s_lshr_b32 s5, s4, 163976; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s43977; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s53978; GFX90A-NEXT: ;;#ASMSTART3979; GFX90A-NEXT: ; use s[8:9]3980; GFX90A-NEXT: ;;#ASMEND3981; GFX90A-NEXT: s_setpc_b64 s[30:31]3982;3983; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_2:3984; GFX942: ; %bb.0:3985; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3986; GFX942-NEXT: ;;#ASMSTART3987; GFX942-NEXT: ; def s03988; GFX942-NEXT: ;;#ASMEND3989; GFX942-NEXT: s_lshr_b32 s1, s0, 163990; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s03991; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s13992; GFX942-NEXT: ;;#ASMSTART3993; GFX942-NEXT: ; use s[8:9]3994; GFX942-NEXT: ;;#ASMEND3995; GFX942-NEXT: s_setpc_b64 s[30:31]3996 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()3997 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()3998 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>3999 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4000 ret void4001}4002 4003define void @s_shuffle_v4bf16_v2bf16__3_3_3_3() {4004; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_3:4005; GFX900: ; %bb.0:4006; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4007; GFX900-NEXT: ;;#ASMSTART4008; GFX900-NEXT: ; def s44009; GFX900-NEXT: ;;#ASMEND4010; GFX900-NEXT: s_lshr_b32 s4, s4, 164011; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44012; GFX900-NEXT: s_mov_b32 s9, s84013; GFX900-NEXT: ;;#ASMSTART4014; GFX900-NEXT: ; use s[8:9]4015; GFX900-NEXT: ;;#ASMEND4016; GFX900-NEXT: s_setpc_b64 s[30:31]4017;4018; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_3:4019; GFX90A: ; %bb.0:4020; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4021; GFX90A-NEXT: ;;#ASMSTART4022; GFX90A-NEXT: ; def s44023; GFX90A-NEXT: ;;#ASMEND4024; GFX90A-NEXT: s_lshr_b32 s4, s4, 164025; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44026; GFX90A-NEXT: s_mov_b32 s9, s84027; GFX90A-NEXT: ;;#ASMSTART4028; GFX90A-NEXT: ; use s[8:9]4029; GFX90A-NEXT: ;;#ASMEND4030; GFX90A-NEXT: s_setpc_b64 s[30:31]4031;4032; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_3_3:4033; GFX942: ; %bb.0:4034; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4035; GFX942-NEXT: ;;#ASMSTART4036; GFX942-NEXT: ; def s04037; GFX942-NEXT: ;;#ASMEND4038; GFX942-NEXT: s_lshr_b32 s0, s0, 164039; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04040; GFX942-NEXT: s_mov_b32 s9, s84041; GFX942-NEXT: ;;#ASMSTART4042; GFX942-NEXT: ; use s[8:9]4043; GFX942-NEXT: ;;#ASMEND4044; GFX942-NEXT: s_setpc_b64 s[30:31]4045 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4046 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4047 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>4048 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4049 ret void4050}4051 4052define void @s_shuffle_v4bf16_v2bf16__u_0_0_0() {4053; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__u_0_0_0:4054; GFX900: ; %bb.0:4055; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4056; GFX900-NEXT: ;;#ASMSTART4057; GFX900-NEXT: ; def s44058; GFX900-NEXT: ;;#ASMEND4059; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44060; GFX900-NEXT: s_lshl_b32 s8, s4, 164061; GFX900-NEXT: ;;#ASMSTART4062; GFX900-NEXT: ; use s[8:9]4063; GFX900-NEXT: ;;#ASMEND4064; GFX900-NEXT: s_setpc_b64 s[30:31]4065;4066; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__u_0_0_0:4067; GFX90A: ; %bb.0:4068; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4069; GFX90A-NEXT: ;;#ASMSTART4070; GFX90A-NEXT: ; def s44071; GFX90A-NEXT: ;;#ASMEND4072; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44073; GFX90A-NEXT: s_lshl_b32 s8, s4, 164074; GFX90A-NEXT: ;;#ASMSTART4075; GFX90A-NEXT: ; use s[8:9]4076; GFX90A-NEXT: ;;#ASMEND4077; GFX90A-NEXT: s_setpc_b64 s[30:31]4078;4079; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__u_0_0_0:4080; GFX942: ; %bb.0:4081; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4082; GFX942-NEXT: ;;#ASMSTART4083; GFX942-NEXT: ; def s04084; GFX942-NEXT: ;;#ASMEND4085; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04086; GFX942-NEXT: s_lshl_b32 s8, s0, 164087; GFX942-NEXT: ;;#ASMSTART4088; GFX942-NEXT: ; use s[8:9]4089; GFX942-NEXT: ;;#ASMEND4090; GFX942-NEXT: s_setpc_b64 s[30:31]4091 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4092 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>4093 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4094 ret void4095}4096 4097define void @s_shuffle_v4bf16_v2bf16__0_0_0_0() {4098; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__0_0_0_0:4099; GFX900: ; %bb.0:4100; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4101; GFX900-NEXT: ;;#ASMSTART4102; GFX900-NEXT: ; def s44103; GFX900-NEXT: ;;#ASMEND4104; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44105; GFX900-NEXT: s_mov_b32 s9, s84106; GFX900-NEXT: ;;#ASMSTART4107; GFX900-NEXT: ; use s[8:9]4108; GFX900-NEXT: ;;#ASMEND4109; GFX900-NEXT: s_setpc_b64 s[30:31]4110;4111; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__0_0_0_0:4112; GFX90A: ; %bb.0:4113; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4114; GFX90A-NEXT: ;;#ASMSTART4115; GFX90A-NEXT: ; def s44116; GFX90A-NEXT: ;;#ASMEND4117; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44118; GFX90A-NEXT: s_mov_b32 s9, s84119; GFX90A-NEXT: ;;#ASMSTART4120; GFX90A-NEXT: ; use s[8:9]4121; GFX90A-NEXT: ;;#ASMEND4122; GFX90A-NEXT: s_setpc_b64 s[30:31]4123;4124; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__0_0_0_0:4125; GFX942: ; %bb.0:4126; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4127; GFX942-NEXT: ;;#ASMSTART4128; GFX942-NEXT: ; def s04129; GFX942-NEXT: ;;#ASMEND4130; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04131; GFX942-NEXT: s_mov_b32 s9, s84132; GFX942-NEXT: ;;#ASMSTART4133; GFX942-NEXT: ; use s[8:9]4134; GFX942-NEXT: ;;#ASMEND4135; GFX942-NEXT: s_setpc_b64 s[30:31]4136 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4137 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> zeroinitializer4138 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4139 ret void4140}4141 4142define void @s_shuffle_v4bf16_v2bf16__1_0_0_0() {4143; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__1_0_0_0:4144; GFX900: ; %bb.0:4145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4146; GFX900-NEXT: ;;#ASMSTART4147; GFX900-NEXT: ; def s44148; GFX900-NEXT: ;;#ASMEND4149; GFX900-NEXT: s_lshr_b32 s5, s4, 164150; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44151; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44152; GFX900-NEXT: ;;#ASMSTART4153; GFX900-NEXT: ; use s[8:9]4154; GFX900-NEXT: ;;#ASMEND4155; GFX900-NEXT: s_setpc_b64 s[30:31]4156;4157; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__1_0_0_0:4158; GFX90A: ; %bb.0:4159; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4160; GFX90A-NEXT: ;;#ASMSTART4161; GFX90A-NEXT: ; def s44162; GFX90A-NEXT: ;;#ASMEND4163; GFX90A-NEXT: s_lshr_b32 s5, s4, 164164; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44165; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44166; GFX90A-NEXT: ;;#ASMSTART4167; GFX90A-NEXT: ; use s[8:9]4168; GFX90A-NEXT: ;;#ASMEND4169; GFX90A-NEXT: s_setpc_b64 s[30:31]4170;4171; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__1_0_0_0:4172; GFX942: ; %bb.0:4173; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4174; GFX942-NEXT: ;;#ASMSTART4175; GFX942-NEXT: ; def s04176; GFX942-NEXT: ;;#ASMEND4177; GFX942-NEXT: s_lshr_b32 s1, s0, 164178; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04179; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04180; GFX942-NEXT: ;;#ASMSTART4181; GFX942-NEXT: ; use s[8:9]4182; GFX942-NEXT: ;;#ASMEND4183; GFX942-NEXT: s_setpc_b64 s[30:31]4184 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4185 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>4186 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4187 ret void4188}4189 4190define void @s_shuffle_v4bf16_v2bf16__2_0_0_0() {4191; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__2_0_0_0:4192; GFX900: ; %bb.0:4193; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4194; GFX900-NEXT: ;;#ASMSTART4195; GFX900-NEXT: ; def s44196; GFX900-NEXT: ;;#ASMEND4197; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44198; GFX900-NEXT: s_lshl_b32 s8, s4, 164199; GFX900-NEXT: ;;#ASMSTART4200; GFX900-NEXT: ; use s[8:9]4201; GFX900-NEXT: ;;#ASMEND4202; GFX900-NEXT: s_setpc_b64 s[30:31]4203;4204; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__2_0_0_0:4205; GFX90A: ; %bb.0:4206; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4207; GFX90A-NEXT: ;;#ASMSTART4208; GFX90A-NEXT: ; def s44209; GFX90A-NEXT: ;;#ASMEND4210; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44211; GFX90A-NEXT: s_lshl_b32 s8, s4, 164212; GFX90A-NEXT: ;;#ASMSTART4213; GFX90A-NEXT: ; use s[8:9]4214; GFX90A-NEXT: ;;#ASMEND4215; GFX90A-NEXT: s_setpc_b64 s[30:31]4216;4217; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__2_0_0_0:4218; GFX942: ; %bb.0:4219; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4220; GFX942-NEXT: ;;#ASMSTART4221; GFX942-NEXT: ; def s04222; GFX942-NEXT: ;;#ASMEND4223; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04224; GFX942-NEXT: s_lshl_b32 s8, s0, 164225; GFX942-NEXT: ;;#ASMSTART4226; GFX942-NEXT: ; use s[8:9]4227; GFX942-NEXT: ;;#ASMEND4228; GFX942-NEXT: s_setpc_b64 s[30:31]4229 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4230 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>4231 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4232 ret void4233}4234 4235define void @s_shuffle_v4bf16_v2bf16__3_0_0_0() {4236; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_0_0_0:4237; GFX900: ; %bb.0:4238; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4239; GFX900-NEXT: ;;#ASMSTART4240; GFX900-NEXT: ; def s54241; GFX900-NEXT: ;;#ASMEND4242; GFX900-NEXT: s_lshr_b32 s5, s5, 164243; GFX900-NEXT: ;;#ASMSTART4244; GFX900-NEXT: ; def s44245; GFX900-NEXT: ;;#ASMEND4246; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44247; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44248; GFX900-NEXT: ;;#ASMSTART4249; GFX900-NEXT: ; use s[8:9]4250; GFX900-NEXT: ;;#ASMEND4251; GFX900-NEXT: s_setpc_b64 s[30:31]4252;4253; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_0_0_0:4254; GFX90A: ; %bb.0:4255; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4256; GFX90A-NEXT: ;;#ASMSTART4257; GFX90A-NEXT: ; def s54258; GFX90A-NEXT: ;;#ASMEND4259; GFX90A-NEXT: s_lshr_b32 s5, s5, 164260; GFX90A-NEXT: ;;#ASMSTART4261; GFX90A-NEXT: ; def s44262; GFX90A-NEXT: ;;#ASMEND4263; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44264; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44265; GFX90A-NEXT: ;;#ASMSTART4266; GFX90A-NEXT: ; use s[8:9]4267; GFX90A-NEXT: ;;#ASMEND4268; GFX90A-NEXT: s_setpc_b64 s[30:31]4269;4270; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_0_0_0:4271; GFX942: ; %bb.0:4272; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4273; GFX942-NEXT: ;;#ASMSTART4274; GFX942-NEXT: ; def s14275; GFX942-NEXT: ;;#ASMEND4276; GFX942-NEXT: s_lshr_b32 s1, s1, 164277; GFX942-NEXT: ;;#ASMSTART4278; GFX942-NEXT: ; def s04279; GFX942-NEXT: ;;#ASMEND4280; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04281; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04282; GFX942-NEXT: ;;#ASMSTART4283; GFX942-NEXT: ; use s[8:9]4284; GFX942-NEXT: ;;#ASMEND4285; GFX942-NEXT: s_setpc_b64 s[30:31]4286 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4287 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4288 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>4289 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4290 ret void4291}4292 4293define void @s_shuffle_v4bf16_v2bf16__3_u_0_0() {4294; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_u_0_0:4295; GFX900: ; %bb.0:4296; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4297; GFX900-NEXT: ;;#ASMSTART4298; GFX900-NEXT: ; def s44299; GFX900-NEXT: ;;#ASMEND4300; GFX900-NEXT: ;;#ASMSTART4301; GFX900-NEXT: ; def s54302; GFX900-NEXT: ;;#ASMEND4303; GFX900-NEXT: s_lshr_b32 s8, s5, 164304; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44305; GFX900-NEXT: ;;#ASMSTART4306; GFX900-NEXT: ; use s[8:9]4307; GFX900-NEXT: ;;#ASMEND4308; GFX900-NEXT: s_setpc_b64 s[30:31]4309;4310; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_u_0_0:4311; GFX90A: ; %bb.0:4312; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4313; GFX90A-NEXT: ;;#ASMSTART4314; GFX90A-NEXT: ; def s44315; GFX90A-NEXT: ;;#ASMEND4316; GFX90A-NEXT: ;;#ASMSTART4317; GFX90A-NEXT: ; def s54318; GFX90A-NEXT: ;;#ASMEND4319; GFX90A-NEXT: s_lshr_b32 s8, s5, 164320; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44321; GFX90A-NEXT: ;;#ASMSTART4322; GFX90A-NEXT: ; use s[8:9]4323; GFX90A-NEXT: ;;#ASMEND4324; GFX90A-NEXT: s_setpc_b64 s[30:31]4325;4326; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_u_0_0:4327; GFX942: ; %bb.0:4328; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4329; GFX942-NEXT: ;;#ASMSTART4330; GFX942-NEXT: ; def s04331; GFX942-NEXT: ;;#ASMEND4332; GFX942-NEXT: ;;#ASMSTART4333; GFX942-NEXT: ; def s14334; GFX942-NEXT: ;;#ASMEND4335; GFX942-NEXT: s_lshr_b32 s8, s1, 164336; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04337; GFX942-NEXT: ;;#ASMSTART4338; GFX942-NEXT: ; use s[8:9]4339; GFX942-NEXT: ;;#ASMEND4340; GFX942-NEXT: s_setpc_b64 s[30:31]4341 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4342 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4343 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>4344 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4345 ret void4346}4347 4348define void @s_shuffle_v4bf16_v2bf16__3_1_0_0() {4349; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_1_0_0:4350; GFX900: ; %bb.0:4351; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4352; GFX900-NEXT: ;;#ASMSTART4353; GFX900-NEXT: ; def s54354; GFX900-NEXT: ;;#ASMEND4355; GFX900-NEXT: ;;#ASMSTART4356; GFX900-NEXT: ; def s44357; GFX900-NEXT: ;;#ASMEND4358; GFX900-NEXT: s_lshr_b32 s6, s4, 164359; GFX900-NEXT: s_lshr_b32 s5, s5, 164360; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s64361; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44362; GFX900-NEXT: ;;#ASMSTART4363; GFX900-NEXT: ; use s[8:9]4364; GFX900-NEXT: ;;#ASMEND4365; GFX900-NEXT: s_setpc_b64 s[30:31]4366;4367; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_1_0_0:4368; GFX90A: ; %bb.0:4369; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4370; GFX90A-NEXT: ;;#ASMSTART4371; GFX90A-NEXT: ; def s54372; GFX90A-NEXT: ;;#ASMEND4373; GFX90A-NEXT: ;;#ASMSTART4374; GFX90A-NEXT: ; def s44375; GFX90A-NEXT: ;;#ASMEND4376; GFX90A-NEXT: s_lshr_b32 s6, s4, 164377; GFX90A-NEXT: s_lshr_b32 s5, s5, 164378; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s64379; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44380; GFX90A-NEXT: ;;#ASMSTART4381; GFX90A-NEXT: ; use s[8:9]4382; GFX90A-NEXT: ;;#ASMEND4383; GFX90A-NEXT: s_setpc_b64 s[30:31]4384;4385; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_1_0_0:4386; GFX942: ; %bb.0:4387; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4388; GFX942-NEXT: ;;#ASMSTART4389; GFX942-NEXT: ; def s14390; GFX942-NEXT: ;;#ASMEND4391; GFX942-NEXT: ;;#ASMSTART4392; GFX942-NEXT: ; def s04393; GFX942-NEXT: ;;#ASMEND4394; GFX942-NEXT: s_lshr_b32 s2, s0, 164395; GFX942-NEXT: s_lshr_b32 s1, s1, 164396; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s24397; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04398; GFX942-NEXT: ;;#ASMSTART4399; GFX942-NEXT: ; use s[8:9]4400; GFX942-NEXT: ;;#ASMEND4401; GFX942-NEXT: s_setpc_b64 s[30:31]4402 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4403 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4404 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>4405 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4406 ret void4407}4408 4409define void @s_shuffle_v4bf16_v2bf16__3_2_0_0() {4410; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_2_0_0:4411; GFX900: ; %bb.0:4412; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4413; GFX900-NEXT: ;;#ASMSTART4414; GFX900-NEXT: ; def s54415; GFX900-NEXT: ;;#ASMEND4416; GFX900-NEXT: s_lshr_b32 s6, s5, 164417; GFX900-NEXT: ;;#ASMSTART4418; GFX900-NEXT: ; def s44419; GFX900-NEXT: ;;#ASMEND4420; GFX900-NEXT: s_pack_ll_b32_b16 s8, s6, s54421; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44422; GFX900-NEXT: ;;#ASMSTART4423; GFX900-NEXT: ; use s[8:9]4424; GFX900-NEXT: ;;#ASMEND4425; GFX900-NEXT: s_setpc_b64 s[30:31]4426;4427; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_2_0_0:4428; GFX90A: ; %bb.0:4429; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4430; GFX90A-NEXT: ;;#ASMSTART4431; GFX90A-NEXT: ; def s54432; GFX90A-NEXT: ;;#ASMEND4433; GFX90A-NEXT: s_lshr_b32 s6, s5, 164434; GFX90A-NEXT: ;;#ASMSTART4435; GFX90A-NEXT: ; def s44436; GFX90A-NEXT: ;;#ASMEND4437; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s6, s54438; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44439; GFX90A-NEXT: ;;#ASMSTART4440; GFX90A-NEXT: ; use s[8:9]4441; GFX90A-NEXT: ;;#ASMEND4442; GFX90A-NEXT: s_setpc_b64 s[30:31]4443;4444; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_2_0_0:4445; GFX942: ; %bb.0:4446; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4447; GFX942-NEXT: ;;#ASMSTART4448; GFX942-NEXT: ; def s14449; GFX942-NEXT: ;;#ASMEND4450; GFX942-NEXT: s_lshr_b32 s2, s1, 164451; GFX942-NEXT: ;;#ASMSTART4452; GFX942-NEXT: ; def s04453; GFX942-NEXT: ;;#ASMEND4454; GFX942-NEXT: s_pack_ll_b32_b16 s8, s2, s14455; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04456; GFX942-NEXT: ;;#ASMSTART4457; GFX942-NEXT: ; use s[8:9]4458; GFX942-NEXT: ;;#ASMEND4459; GFX942-NEXT: s_setpc_b64 s[30:31]4460 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4461 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4462 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>4463 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4464 ret void4465}4466 4467define void @s_shuffle_v4bf16_v2bf16__3_3_0_0() {4468; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_0:4469; GFX900: ; %bb.0:4470; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4471; GFX900-NEXT: ;;#ASMSTART4472; GFX900-NEXT: ; def s54473; GFX900-NEXT: ;;#ASMEND4474; GFX900-NEXT: s_lshr_b32 s5, s5, 164475; GFX900-NEXT: ;;#ASMSTART4476; GFX900-NEXT: ; def s44477; GFX900-NEXT: ;;#ASMEND4478; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s54479; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44480; GFX900-NEXT: ;;#ASMSTART4481; GFX900-NEXT: ; use s[8:9]4482; GFX900-NEXT: ;;#ASMEND4483; GFX900-NEXT: s_setpc_b64 s[30:31]4484;4485; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_0:4486; GFX90A: ; %bb.0:4487; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4488; GFX90A-NEXT: ;;#ASMSTART4489; GFX90A-NEXT: ; def s54490; GFX90A-NEXT: ;;#ASMEND4491; GFX90A-NEXT: s_lshr_b32 s5, s5, 164492; GFX90A-NEXT: ;;#ASMSTART4493; GFX90A-NEXT: ; def s44494; GFX90A-NEXT: ;;#ASMEND4495; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s54496; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44497; GFX90A-NEXT: ;;#ASMSTART4498; GFX90A-NEXT: ; use s[8:9]4499; GFX90A-NEXT: ;;#ASMEND4500; GFX90A-NEXT: s_setpc_b64 s[30:31]4501;4502; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_0:4503; GFX942: ; %bb.0:4504; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4505; GFX942-NEXT: ;;#ASMSTART4506; GFX942-NEXT: ; def s14507; GFX942-NEXT: ;;#ASMEND4508; GFX942-NEXT: s_lshr_b32 s1, s1, 164509; GFX942-NEXT: ;;#ASMSTART4510; GFX942-NEXT: ; def s04511; GFX942-NEXT: ;;#ASMEND4512; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s14513; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04514; GFX942-NEXT: ;;#ASMSTART4515; GFX942-NEXT: ; use s[8:9]4516; GFX942-NEXT: ;;#ASMEND4517; GFX942-NEXT: s_setpc_b64 s[30:31]4518 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4519 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4520 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>4521 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4522 ret void4523}4524 4525define void @s_shuffle_v4bf16_v2bf16__3_3_u_0() {4526; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_0:4527; GFX900: ; %bb.0:4528; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4529; GFX900-NEXT: ;;#ASMSTART4530; GFX900-NEXT: ; def s54531; GFX900-NEXT: ;;#ASMEND4532; GFX900-NEXT: s_lshr_b32 s5, s5, 164533; GFX900-NEXT: ;;#ASMSTART4534; GFX900-NEXT: ; def s44535; GFX900-NEXT: ;;#ASMEND4536; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s54537; GFX900-NEXT: s_lshl_b32 s9, s4, 164538; GFX900-NEXT: ;;#ASMSTART4539; GFX900-NEXT: ; use s[8:9]4540; GFX900-NEXT: ;;#ASMEND4541; GFX900-NEXT: s_setpc_b64 s[30:31]4542;4543; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_0:4544; GFX90A: ; %bb.0:4545; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4546; GFX90A-NEXT: ;;#ASMSTART4547; GFX90A-NEXT: ; def s54548; GFX90A-NEXT: ;;#ASMEND4549; GFX90A-NEXT: s_lshr_b32 s5, s5, 164550; GFX90A-NEXT: ;;#ASMSTART4551; GFX90A-NEXT: ; def s44552; GFX90A-NEXT: ;;#ASMEND4553; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s54554; GFX90A-NEXT: s_lshl_b32 s9, s4, 164555; GFX90A-NEXT: ;;#ASMSTART4556; GFX90A-NEXT: ; use s[8:9]4557; GFX90A-NEXT: ;;#ASMEND4558; GFX90A-NEXT: s_setpc_b64 s[30:31]4559;4560; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_0:4561; GFX942: ; %bb.0:4562; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4563; GFX942-NEXT: ;;#ASMSTART4564; GFX942-NEXT: ; def s14565; GFX942-NEXT: ;;#ASMEND4566; GFX942-NEXT: s_lshr_b32 s1, s1, 164567; GFX942-NEXT: ;;#ASMSTART4568; GFX942-NEXT: ; def s04569; GFX942-NEXT: ;;#ASMEND4570; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s14571; GFX942-NEXT: s_lshl_b32 s9, s0, 164572; GFX942-NEXT: ;;#ASMSTART4573; GFX942-NEXT: ; use s[8:9]4574; GFX942-NEXT: ;;#ASMEND4575; GFX942-NEXT: s_setpc_b64 s[30:31]4576 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4577 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4578 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>4579 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4580 ret void4581}4582 4583define void @s_shuffle_v4bf16_v2bf16__3_3_1_0() {4584; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_0:4585; GFX900: ; %bb.0:4586; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4587; GFX900-NEXT: ;;#ASMSTART4588; GFX900-NEXT: ; def s44589; GFX900-NEXT: ;;#ASMEND4590; GFX900-NEXT: s_lshr_b32 s6, s4, 164591; GFX900-NEXT: ;;#ASMSTART4592; GFX900-NEXT: ; def s54593; GFX900-NEXT: ;;#ASMEND4594; GFX900-NEXT: s_pack_ll_b32_b16 s9, s6, s44595; GFX900-NEXT: s_lshr_b32 s4, s5, 164596; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44597; GFX900-NEXT: ;;#ASMSTART4598; GFX900-NEXT: ; use s[8:9]4599; GFX900-NEXT: ;;#ASMEND4600; GFX900-NEXT: s_setpc_b64 s[30:31]4601;4602; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_0:4603; GFX90A: ; %bb.0:4604; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4605; GFX90A-NEXT: ;;#ASMSTART4606; GFX90A-NEXT: ; def s44607; GFX90A-NEXT: ;;#ASMEND4608; GFX90A-NEXT: s_lshr_b32 s6, s4, 164609; GFX90A-NEXT: ;;#ASMSTART4610; GFX90A-NEXT: ; def s54611; GFX90A-NEXT: ;;#ASMEND4612; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s6, s44613; GFX90A-NEXT: s_lshr_b32 s4, s5, 164614; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44615; GFX90A-NEXT: ;;#ASMSTART4616; GFX90A-NEXT: ; use s[8:9]4617; GFX90A-NEXT: ;;#ASMEND4618; GFX90A-NEXT: s_setpc_b64 s[30:31]4619;4620; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_0:4621; GFX942: ; %bb.0:4622; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4623; GFX942-NEXT: ;;#ASMSTART4624; GFX942-NEXT: ; def s04625; GFX942-NEXT: ;;#ASMEND4626; GFX942-NEXT: s_lshr_b32 s2, s0, 164627; GFX942-NEXT: ;;#ASMSTART4628; GFX942-NEXT: ; def s14629; GFX942-NEXT: ;;#ASMEND4630; GFX942-NEXT: s_pack_ll_b32_b16 s9, s2, s04631; GFX942-NEXT: s_lshr_b32 s0, s1, 164632; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04633; GFX942-NEXT: ;;#ASMSTART4634; GFX942-NEXT: ; use s[8:9]4635; GFX942-NEXT: ;;#ASMEND4636; GFX942-NEXT: s_setpc_b64 s[30:31]4637 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4638 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4639 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>4640 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4641 ret void4642}4643 4644define void @s_shuffle_v4bf16_v2bf16__3_3_2_0() {4645; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_0:4646; GFX900: ; %bb.0:4647; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4648; GFX900-NEXT: ;;#ASMSTART4649; GFX900-NEXT: ; def s44650; GFX900-NEXT: ;;#ASMEND4651; GFX900-NEXT: ;;#ASMSTART4652; GFX900-NEXT: ; def s54653; GFX900-NEXT: ;;#ASMEND4654; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s44655; GFX900-NEXT: s_lshr_b32 s4, s5, 164656; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44657; GFX900-NEXT: ;;#ASMSTART4658; GFX900-NEXT: ; use s[8:9]4659; GFX900-NEXT: ;;#ASMEND4660; GFX900-NEXT: s_setpc_b64 s[30:31]4661;4662; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_0:4663; GFX90A: ; %bb.0:4664; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4665; GFX90A-NEXT: ;;#ASMSTART4666; GFX90A-NEXT: ; def s44667; GFX90A-NEXT: ;;#ASMEND4668; GFX90A-NEXT: ;;#ASMSTART4669; GFX90A-NEXT: ; def s54670; GFX90A-NEXT: ;;#ASMEND4671; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s44672; GFX90A-NEXT: s_lshr_b32 s4, s5, 164673; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44674; GFX90A-NEXT: ;;#ASMSTART4675; GFX90A-NEXT: ; use s[8:9]4676; GFX90A-NEXT: ;;#ASMEND4677; GFX90A-NEXT: s_setpc_b64 s[30:31]4678;4679; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_0:4680; GFX942: ; %bb.0:4681; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4682; GFX942-NEXT: ;;#ASMSTART4683; GFX942-NEXT: ; def s04684; GFX942-NEXT: ;;#ASMEND4685; GFX942-NEXT: ;;#ASMSTART4686; GFX942-NEXT: ; def s14687; GFX942-NEXT: ;;#ASMEND4688; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s04689; GFX942-NEXT: s_lshr_b32 s0, s1, 164690; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04691; GFX942-NEXT: ;;#ASMSTART4692; GFX942-NEXT: ; use s[8:9]4693; GFX942-NEXT: ;;#ASMEND4694; GFX942-NEXT: s_setpc_b64 s[30:31]4695 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4696 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4697 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>4698 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4699 ret void4700}4701 4702define void @s_shuffle_v4bf16_v2bf16__u_1_1_1() {4703; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__u_1_1_1:4704; GFX900: ; %bb.0:4705; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4706; GFX900-NEXT: ;;#ASMSTART4707; GFX900-NEXT: ; def s84708; GFX900-NEXT: ;;#ASMEND4709; GFX900-NEXT: s_lshr_b32 s4, s8, 164710; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44711; GFX900-NEXT: ;;#ASMSTART4712; GFX900-NEXT: ; use s[8:9]4713; GFX900-NEXT: ;;#ASMEND4714; GFX900-NEXT: s_setpc_b64 s[30:31]4715;4716; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__u_1_1_1:4717; GFX90A: ; %bb.0:4718; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4719; GFX90A-NEXT: ;;#ASMSTART4720; GFX90A-NEXT: ; def s84721; GFX90A-NEXT: ;;#ASMEND4722; GFX90A-NEXT: s_lshr_b32 s4, s8, 164723; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44724; GFX90A-NEXT: ;;#ASMSTART4725; GFX90A-NEXT: ; use s[8:9]4726; GFX90A-NEXT: ;;#ASMEND4727; GFX90A-NEXT: s_setpc_b64 s[30:31]4728;4729; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__u_1_1_1:4730; GFX942: ; %bb.0:4731; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4732; GFX942-NEXT: ;;#ASMSTART4733; GFX942-NEXT: ; def s84734; GFX942-NEXT: ;;#ASMEND4735; GFX942-NEXT: s_lshr_b32 s0, s8, 164736; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04737; GFX942-NEXT: ;;#ASMSTART4738; GFX942-NEXT: ; use s[8:9]4739; GFX942-NEXT: ;;#ASMEND4740; GFX942-NEXT: s_setpc_b64 s[30:31]4741 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4742 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>4743 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4744 ret void4745}4746 4747define void @s_shuffle_v4bf16_v2bf16__0_1_1_1() {4748; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__0_1_1_1:4749; GFX900: ; %bb.0:4750; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4751; GFX900-NEXT: ;;#ASMSTART4752; GFX900-NEXT: ; def s84753; GFX900-NEXT: ;;#ASMEND4754; GFX900-NEXT: s_lshr_b32 s4, s8, 164755; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44756; GFX900-NEXT: ;;#ASMSTART4757; GFX900-NEXT: ; use s[8:9]4758; GFX900-NEXT: ;;#ASMEND4759; GFX900-NEXT: s_setpc_b64 s[30:31]4760;4761; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__0_1_1_1:4762; GFX90A: ; %bb.0:4763; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4764; GFX90A-NEXT: ;;#ASMSTART4765; GFX90A-NEXT: ; def s84766; GFX90A-NEXT: ;;#ASMEND4767; GFX90A-NEXT: s_lshr_b32 s4, s8, 164768; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44769; GFX90A-NEXT: ;;#ASMSTART4770; GFX90A-NEXT: ; use s[8:9]4771; GFX90A-NEXT: ;;#ASMEND4772; GFX90A-NEXT: s_setpc_b64 s[30:31]4773;4774; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__0_1_1_1:4775; GFX942: ; %bb.0:4776; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4777; GFX942-NEXT: ;;#ASMSTART4778; GFX942-NEXT: ; def s84779; GFX942-NEXT: ;;#ASMEND4780; GFX942-NEXT: s_lshr_b32 s0, s8, 164781; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04782; GFX942-NEXT: ;;#ASMSTART4783; GFX942-NEXT: ; use s[8:9]4784; GFX942-NEXT: ;;#ASMEND4785; GFX942-NEXT: s_setpc_b64 s[30:31]4786 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4787 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>4788 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4789 ret void4790}4791 4792define void @s_shuffle_v4bf16_v2bf16__1_1_1_1() {4793; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__1_1_1_1:4794; GFX900: ; %bb.0:4795; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4796; GFX900-NEXT: ;;#ASMSTART4797; GFX900-NEXT: ; def s44798; GFX900-NEXT: ;;#ASMEND4799; GFX900-NEXT: s_lshr_b32 s4, s4, 164800; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44801; GFX900-NEXT: s_mov_b32 s9, s84802; GFX900-NEXT: ;;#ASMSTART4803; GFX900-NEXT: ; use s[8:9]4804; GFX900-NEXT: ;;#ASMEND4805; GFX900-NEXT: s_setpc_b64 s[30:31]4806;4807; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__1_1_1_1:4808; GFX90A: ; %bb.0:4809; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4810; GFX90A-NEXT: ;;#ASMSTART4811; GFX90A-NEXT: ; def s44812; GFX90A-NEXT: ;;#ASMEND4813; GFX90A-NEXT: s_lshr_b32 s4, s4, 164814; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44815; GFX90A-NEXT: s_mov_b32 s9, s84816; GFX90A-NEXT: ;;#ASMSTART4817; GFX90A-NEXT: ; use s[8:9]4818; GFX90A-NEXT: ;;#ASMEND4819; GFX90A-NEXT: s_setpc_b64 s[30:31]4820;4821; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__1_1_1_1:4822; GFX942: ; %bb.0:4823; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4824; GFX942-NEXT: ;;#ASMSTART4825; GFX942-NEXT: ; def s04826; GFX942-NEXT: ;;#ASMEND4827; GFX942-NEXT: s_lshr_b32 s0, s0, 164828; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04829; GFX942-NEXT: s_mov_b32 s9, s84830; GFX942-NEXT: ;;#ASMSTART4831; GFX942-NEXT: ; use s[8:9]4832; GFX942-NEXT: ;;#ASMEND4833; GFX942-NEXT: s_setpc_b64 s[30:31]4834 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4835 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>4836 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4837 ret void4838}4839 4840define void @s_shuffle_v4bf16_v2bf16__2_1_1_1() {4841; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__2_1_1_1:4842; GFX900: ; %bb.0:4843; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4844; GFX900-NEXT: ;;#ASMSTART4845; GFX900-NEXT: ; def s84846; GFX900-NEXT: ;;#ASMEND4847; GFX900-NEXT: s_lshr_b32 s4, s8, 164848; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44849; GFX900-NEXT: ;;#ASMSTART4850; GFX900-NEXT: ; use s[8:9]4851; GFX900-NEXT: ;;#ASMEND4852; GFX900-NEXT: s_setpc_b64 s[30:31]4853;4854; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__2_1_1_1:4855; GFX90A: ; %bb.0:4856; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4857; GFX90A-NEXT: ;;#ASMSTART4858; GFX90A-NEXT: ; def s84859; GFX90A-NEXT: ;;#ASMEND4860; GFX90A-NEXT: s_lshr_b32 s4, s8, 164861; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44862; GFX90A-NEXT: ;;#ASMSTART4863; GFX90A-NEXT: ; use s[8:9]4864; GFX90A-NEXT: ;;#ASMEND4865; GFX90A-NEXT: s_setpc_b64 s[30:31]4866;4867; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__2_1_1_1:4868; GFX942: ; %bb.0:4869; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4870; GFX942-NEXT: ;;#ASMSTART4871; GFX942-NEXT: ; def s84872; GFX942-NEXT: ;;#ASMEND4873; GFX942-NEXT: s_lshr_b32 s0, s8, 164874; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04875; GFX942-NEXT: ;;#ASMSTART4876; GFX942-NEXT: ; use s[8:9]4877; GFX942-NEXT: ;;#ASMEND4878; GFX942-NEXT: s_setpc_b64 s[30:31]4879 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4880 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>4881 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4882 ret void4883}4884 4885define void @s_shuffle_v4bf16_v2bf16__3_1_1_1() {4886; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_1_1_1:4887; GFX900: ; %bb.0:4888; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4889; GFX900-NEXT: ;;#ASMSTART4890; GFX900-NEXT: ; def s44891; GFX900-NEXT: ;;#ASMEND4892; GFX900-NEXT: ;;#ASMSTART4893; GFX900-NEXT: ; def s54894; GFX900-NEXT: ;;#ASMEND4895; GFX900-NEXT: s_lshr_b32 s4, s4, 164896; GFX900-NEXT: s_lshr_b32 s5, s5, 164897; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44898; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44899; GFX900-NEXT: ;;#ASMSTART4900; GFX900-NEXT: ; use s[8:9]4901; GFX900-NEXT: ;;#ASMEND4902; GFX900-NEXT: s_setpc_b64 s[30:31]4903;4904; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_1_1_1:4905; GFX90A: ; %bb.0:4906; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4907; GFX90A-NEXT: ;;#ASMSTART4908; GFX90A-NEXT: ; def s44909; GFX90A-NEXT: ;;#ASMEND4910; GFX90A-NEXT: ;;#ASMSTART4911; GFX90A-NEXT: ; def s54912; GFX90A-NEXT: ;;#ASMEND4913; GFX90A-NEXT: s_lshr_b32 s4, s4, 164914; GFX90A-NEXT: s_lshr_b32 s5, s5, 164915; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44916; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44917; GFX90A-NEXT: ;;#ASMSTART4918; GFX90A-NEXT: ; use s[8:9]4919; GFX90A-NEXT: ;;#ASMEND4920; GFX90A-NEXT: s_setpc_b64 s[30:31]4921;4922; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_1_1_1:4923; GFX942: ; %bb.0:4924; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4925; GFX942-NEXT: ;;#ASMSTART4926; GFX942-NEXT: ; def s04927; GFX942-NEXT: ;;#ASMEND4928; GFX942-NEXT: ;;#ASMSTART4929; GFX942-NEXT: ; def s14930; GFX942-NEXT: ;;#ASMEND4931; GFX942-NEXT: s_lshr_b32 s0, s0, 164932; GFX942-NEXT: s_lshr_b32 s1, s1, 164933; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04934; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04935; GFX942-NEXT: ;;#ASMSTART4936; GFX942-NEXT: ; use s[8:9]4937; GFX942-NEXT: ;;#ASMEND4938; GFX942-NEXT: s_setpc_b64 s[30:31]4939 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4940 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4941 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>4942 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)4943 ret void4944}4945 4946define void @s_shuffle_v4bf16_v2bf16__3_u_1_1() {4947; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_u_1_1:4948; GFX900: ; %bb.0:4949; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4950; GFX900-NEXT: ;;#ASMSTART4951; GFX900-NEXT: ; def s44952; GFX900-NEXT: ;;#ASMEND4953; GFX900-NEXT: s_lshr_b32 s4, s4, 164954; GFX900-NEXT: ;;#ASMSTART4955; GFX900-NEXT: ; def s54956; GFX900-NEXT: ;;#ASMEND4957; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s44958; GFX900-NEXT: s_lshr_b32 s8, s5, 164959; GFX900-NEXT: ;;#ASMSTART4960; GFX900-NEXT: ; use s[8:9]4961; GFX900-NEXT: ;;#ASMEND4962; GFX900-NEXT: s_setpc_b64 s[30:31]4963;4964; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_u_1_1:4965; GFX90A: ; %bb.0:4966; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4967; GFX90A-NEXT: ;;#ASMSTART4968; GFX90A-NEXT: ; def s44969; GFX90A-NEXT: ;;#ASMEND4970; GFX90A-NEXT: s_lshr_b32 s4, s4, 164971; GFX90A-NEXT: ;;#ASMSTART4972; GFX90A-NEXT: ; def s54973; GFX90A-NEXT: ;;#ASMEND4974; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s44975; GFX90A-NEXT: s_lshr_b32 s8, s5, 164976; GFX90A-NEXT: ;;#ASMSTART4977; GFX90A-NEXT: ; use s[8:9]4978; GFX90A-NEXT: ;;#ASMEND4979; GFX90A-NEXT: s_setpc_b64 s[30:31]4980;4981; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_u_1_1:4982; GFX942: ; %bb.0:4983; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4984; GFX942-NEXT: ;;#ASMSTART4985; GFX942-NEXT: ; def s04986; GFX942-NEXT: ;;#ASMEND4987; GFX942-NEXT: s_lshr_b32 s0, s0, 164988; GFX942-NEXT: ;;#ASMSTART4989; GFX942-NEXT: ; def s14990; GFX942-NEXT: ;;#ASMEND4991; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s04992; GFX942-NEXT: s_lshr_b32 s8, s1, 164993; GFX942-NEXT: ;;#ASMSTART4994; GFX942-NEXT: ; use s[8:9]4995; GFX942-NEXT: ;;#ASMEND4996; GFX942-NEXT: s_setpc_b64 s[30:31]4997 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()4998 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()4999 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>5000 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5001 ret void5002}5003 5004define void @s_shuffle_v4bf16_v2bf16__3_0_1_1() {5005; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_0_1_1:5006; GFX900: ; %bb.0:5007; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5008; GFX900-NEXT: ;;#ASMSTART5009; GFX900-NEXT: ; def s55010; GFX900-NEXT: ;;#ASMEND5011; GFX900-NEXT: ;;#ASMSTART5012; GFX900-NEXT: ; def s45013; GFX900-NEXT: ;;#ASMEND5014; GFX900-NEXT: s_lshr_b32 s5, s5, 165015; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45016; GFX900-NEXT: s_lshr_b32 s4, s4, 165017; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45018; GFX900-NEXT: ;;#ASMSTART5019; GFX900-NEXT: ; use s[8:9]5020; GFX900-NEXT: ;;#ASMEND5021; GFX900-NEXT: s_setpc_b64 s[30:31]5022;5023; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_0_1_1:5024; GFX90A: ; %bb.0:5025; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5026; GFX90A-NEXT: ;;#ASMSTART5027; GFX90A-NEXT: ; def s55028; GFX90A-NEXT: ;;#ASMEND5029; GFX90A-NEXT: ;;#ASMSTART5030; GFX90A-NEXT: ; def s45031; GFX90A-NEXT: ;;#ASMEND5032; GFX90A-NEXT: s_lshr_b32 s5, s5, 165033; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45034; GFX90A-NEXT: s_lshr_b32 s4, s4, 165035; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45036; GFX90A-NEXT: ;;#ASMSTART5037; GFX90A-NEXT: ; use s[8:9]5038; GFX90A-NEXT: ;;#ASMEND5039; GFX90A-NEXT: s_setpc_b64 s[30:31]5040;5041; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_0_1_1:5042; GFX942: ; %bb.0:5043; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5044; GFX942-NEXT: ;;#ASMSTART5045; GFX942-NEXT: ; def s15046; GFX942-NEXT: ;;#ASMEND5047; GFX942-NEXT: ;;#ASMSTART5048; GFX942-NEXT: ; def s05049; GFX942-NEXT: ;;#ASMEND5050; GFX942-NEXT: s_lshr_b32 s1, s1, 165051; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05052; GFX942-NEXT: s_lshr_b32 s0, s0, 165053; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05054; GFX942-NEXT: ;;#ASMSTART5055; GFX942-NEXT: ; use s[8:9]5056; GFX942-NEXT: ;;#ASMEND5057; GFX942-NEXT: s_setpc_b64 s[30:31]5058 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5059 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5060 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>5061 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5062 ret void5063}5064 5065define void @s_shuffle_v4bf16_v2bf16__3_2_1_1() {5066; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_2_1_1:5067; GFX900: ; %bb.0:5068; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5069; GFX900-NEXT: ;;#ASMSTART5070; GFX900-NEXT: ; def s45071; GFX900-NEXT: ;;#ASMEND5072; GFX900-NEXT: ;;#ASMSTART5073; GFX900-NEXT: ; def s55074; GFX900-NEXT: ;;#ASMEND5075; GFX900-NEXT: s_lshr_b32 s6, s5, 165076; GFX900-NEXT: s_lshr_b32 s4, s4, 165077; GFX900-NEXT: s_pack_ll_b32_b16 s8, s6, s55078; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45079; GFX900-NEXT: ;;#ASMSTART5080; GFX900-NEXT: ; use s[8:9]5081; GFX900-NEXT: ;;#ASMEND5082; GFX900-NEXT: s_setpc_b64 s[30:31]5083;5084; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_2_1_1:5085; GFX90A: ; %bb.0:5086; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5087; GFX90A-NEXT: ;;#ASMSTART5088; GFX90A-NEXT: ; def s45089; GFX90A-NEXT: ;;#ASMEND5090; GFX90A-NEXT: ;;#ASMSTART5091; GFX90A-NEXT: ; def s55092; GFX90A-NEXT: ;;#ASMEND5093; GFX90A-NEXT: s_lshr_b32 s6, s5, 165094; GFX90A-NEXT: s_lshr_b32 s4, s4, 165095; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s6, s55096; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45097; GFX90A-NEXT: ;;#ASMSTART5098; GFX90A-NEXT: ; use s[8:9]5099; GFX90A-NEXT: ;;#ASMEND5100; GFX90A-NEXT: s_setpc_b64 s[30:31]5101;5102; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_2_1_1:5103; GFX942: ; %bb.0:5104; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5105; GFX942-NEXT: ;;#ASMSTART5106; GFX942-NEXT: ; def s05107; GFX942-NEXT: ;;#ASMEND5108; GFX942-NEXT: ;;#ASMSTART5109; GFX942-NEXT: ; def s15110; GFX942-NEXT: ;;#ASMEND5111; GFX942-NEXT: s_lshr_b32 s2, s1, 165112; GFX942-NEXT: s_lshr_b32 s0, s0, 165113; GFX942-NEXT: s_pack_ll_b32_b16 s8, s2, s15114; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05115; GFX942-NEXT: ;;#ASMSTART5116; GFX942-NEXT: ; use s[8:9]5117; GFX942-NEXT: ;;#ASMEND5118; GFX942-NEXT: s_setpc_b64 s[30:31]5119 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5120 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5121 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>5122 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5123 ret void5124}5125 5126define void @s_shuffle_v4bf16_v2bf16__3_3_1_1() {5127; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_1:5128; GFX900: ; %bb.0:5129; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5130; GFX900-NEXT: ;;#ASMSTART5131; GFX900-NEXT: ; def s45132; GFX900-NEXT: ;;#ASMEND5133; GFX900-NEXT: s_lshr_b32 s4, s4, 165134; GFX900-NEXT: ;;#ASMSTART5135; GFX900-NEXT: ; def s55136; GFX900-NEXT: ;;#ASMEND5137; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45138; GFX900-NEXT: s_lshr_b32 s4, s5, 165139; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45140; GFX900-NEXT: ;;#ASMSTART5141; GFX900-NEXT: ; use s[8:9]5142; GFX900-NEXT: ;;#ASMEND5143; GFX900-NEXT: s_setpc_b64 s[30:31]5144;5145; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_1:5146; GFX90A: ; %bb.0:5147; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5148; GFX90A-NEXT: ;;#ASMSTART5149; GFX90A-NEXT: ; def s45150; GFX90A-NEXT: ;;#ASMEND5151; GFX90A-NEXT: s_lshr_b32 s4, s4, 165152; GFX90A-NEXT: ;;#ASMSTART5153; GFX90A-NEXT: ; def s55154; GFX90A-NEXT: ;;#ASMEND5155; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45156; GFX90A-NEXT: s_lshr_b32 s4, s5, 165157; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45158; GFX90A-NEXT: ;;#ASMSTART5159; GFX90A-NEXT: ; use s[8:9]5160; GFX90A-NEXT: ;;#ASMEND5161; GFX90A-NEXT: s_setpc_b64 s[30:31]5162;5163; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_1:5164; GFX942: ; %bb.0:5165; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5166; GFX942-NEXT: ;;#ASMSTART5167; GFX942-NEXT: ; def s05168; GFX942-NEXT: ;;#ASMEND5169; GFX942-NEXT: s_lshr_b32 s0, s0, 165170; GFX942-NEXT: ;;#ASMSTART5171; GFX942-NEXT: ; def s15172; GFX942-NEXT: ;;#ASMEND5173; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05174; GFX942-NEXT: s_lshr_b32 s0, s1, 165175; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05176; GFX942-NEXT: ;;#ASMSTART5177; GFX942-NEXT: ; use s[8:9]5178; GFX942-NEXT: ;;#ASMEND5179; GFX942-NEXT: s_setpc_b64 s[30:31]5180 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5181 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5182 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>5183 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5184 ret void5185}5186 5187define void @s_shuffle_v4bf16_v2bf16__3_3_u_1() {5188; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_1:5189; GFX900: ; %bb.0:5190; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5191; GFX900-NEXT: ;;#ASMSTART5192; GFX900-NEXT: ; def s45193; GFX900-NEXT: ;;#ASMEND5194; GFX900-NEXT: s_lshr_b32 s4, s4, 165195; GFX900-NEXT: ;;#ASMSTART5196; GFX900-NEXT: ; def s95197; GFX900-NEXT: ;;#ASMEND5198; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45199; GFX900-NEXT: ;;#ASMSTART5200; GFX900-NEXT: ; use s[8:9]5201; GFX900-NEXT: ;;#ASMEND5202; GFX900-NEXT: s_setpc_b64 s[30:31]5203;5204; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_1:5205; GFX90A: ; %bb.0:5206; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5207; GFX90A-NEXT: ;;#ASMSTART5208; GFX90A-NEXT: ; def s45209; GFX90A-NEXT: ;;#ASMEND5210; GFX90A-NEXT: s_lshr_b32 s4, s4, 165211; GFX90A-NEXT: ;;#ASMSTART5212; GFX90A-NEXT: ; def s95213; GFX90A-NEXT: ;;#ASMEND5214; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45215; GFX90A-NEXT: ;;#ASMSTART5216; GFX90A-NEXT: ; use s[8:9]5217; GFX90A-NEXT: ;;#ASMEND5218; GFX90A-NEXT: s_setpc_b64 s[30:31]5219;5220; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_1:5221; GFX942: ; %bb.0:5222; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5223; GFX942-NEXT: ;;#ASMSTART5224; GFX942-NEXT: ; def s05225; GFX942-NEXT: ;;#ASMEND5226; GFX942-NEXT: s_lshr_b32 s0, s0, 165227; GFX942-NEXT: ;;#ASMSTART5228; GFX942-NEXT: ; def s95229; GFX942-NEXT: ;;#ASMEND5230; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05231; GFX942-NEXT: ;;#ASMSTART5232; GFX942-NEXT: ; use s[8:9]5233; GFX942-NEXT: ;;#ASMEND5234; GFX942-NEXT: s_setpc_b64 s[30:31]5235 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5236 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5237 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>5238 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5239 ret void5240}5241 5242define void @s_shuffle_v4bf16_v2bf16__3_3_0_1() {5243; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_1:5244; GFX900: ; %bb.0:5245; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5246; GFX900-NEXT: ;;#ASMSTART5247; GFX900-NEXT: ; def s45248; GFX900-NEXT: ;;#ASMEND5249; GFX900-NEXT: s_lshr_b32 s4, s4, 165250; GFX900-NEXT: ;;#ASMSTART5251; GFX900-NEXT: ; def s95252; GFX900-NEXT: ;;#ASMEND5253; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45254; GFX900-NEXT: ;;#ASMSTART5255; GFX900-NEXT: ; use s[8:9]5256; GFX900-NEXT: ;;#ASMEND5257; GFX900-NEXT: s_setpc_b64 s[30:31]5258;5259; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_1:5260; GFX90A: ; %bb.0:5261; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5262; GFX90A-NEXT: ;;#ASMSTART5263; GFX90A-NEXT: ; def s45264; GFX90A-NEXT: ;;#ASMEND5265; GFX90A-NEXT: s_lshr_b32 s4, s4, 165266; GFX90A-NEXT: ;;#ASMSTART5267; GFX90A-NEXT: ; def s95268; GFX90A-NEXT: ;;#ASMEND5269; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45270; GFX90A-NEXT: ;;#ASMSTART5271; GFX90A-NEXT: ; use s[8:9]5272; GFX90A-NEXT: ;;#ASMEND5273; GFX90A-NEXT: s_setpc_b64 s[30:31]5274;5275; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_1:5276; GFX942: ; %bb.0:5277; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5278; GFX942-NEXT: ;;#ASMSTART5279; GFX942-NEXT: ; def s05280; GFX942-NEXT: ;;#ASMEND5281; GFX942-NEXT: s_lshr_b32 s0, s0, 165282; GFX942-NEXT: ;;#ASMSTART5283; GFX942-NEXT: ; def s95284; GFX942-NEXT: ;;#ASMEND5285; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05286; GFX942-NEXT: ;;#ASMSTART5287; GFX942-NEXT: ; use s[8:9]5288; GFX942-NEXT: ;;#ASMEND5289; GFX942-NEXT: s_setpc_b64 s[30:31]5290 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5291 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5292 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>5293 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5294 ret void5295}5296 5297define void @s_shuffle_v4bf16_v2bf16__3_3_2_1() {5298; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_1:5299; GFX900: ; %bb.0:5300; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5301; GFX900-NEXT: ;;#ASMSTART5302; GFX900-NEXT: ; def s45303; GFX900-NEXT: ;;#ASMEND5304; GFX900-NEXT: s_lshr_b32 s4, s4, 165305; GFX900-NEXT: ;;#ASMSTART5306; GFX900-NEXT: ; def s55307; GFX900-NEXT: ;;#ASMEND5308; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s45309; GFX900-NEXT: s_lshr_b32 s4, s5, 165310; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45311; GFX900-NEXT: ;;#ASMSTART5312; GFX900-NEXT: ; use s[8:9]5313; GFX900-NEXT: ;;#ASMEND5314; GFX900-NEXT: s_setpc_b64 s[30:31]5315;5316; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_1:5317; GFX90A: ; %bb.0:5318; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5319; GFX90A-NEXT: ;;#ASMSTART5320; GFX90A-NEXT: ; def s45321; GFX90A-NEXT: ;;#ASMEND5322; GFX90A-NEXT: s_lshr_b32 s4, s4, 165323; GFX90A-NEXT: ;;#ASMSTART5324; GFX90A-NEXT: ; def s55325; GFX90A-NEXT: ;;#ASMEND5326; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s45327; GFX90A-NEXT: s_lshr_b32 s4, s5, 165328; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45329; GFX90A-NEXT: ;;#ASMSTART5330; GFX90A-NEXT: ; use s[8:9]5331; GFX90A-NEXT: ;;#ASMEND5332; GFX90A-NEXT: s_setpc_b64 s[30:31]5333;5334; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_1:5335; GFX942: ; %bb.0:5336; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5337; GFX942-NEXT: ;;#ASMSTART5338; GFX942-NEXT: ; def s05339; GFX942-NEXT: ;;#ASMEND5340; GFX942-NEXT: s_lshr_b32 s0, s0, 165341; GFX942-NEXT: ;;#ASMSTART5342; GFX942-NEXT: ; def s15343; GFX942-NEXT: ;;#ASMEND5344; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s05345; GFX942-NEXT: s_lshr_b32 s0, s1, 165346; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05347; GFX942-NEXT: ;;#ASMSTART5348; GFX942-NEXT: ; use s[8:9]5349; GFX942-NEXT: ;;#ASMEND5350; GFX942-NEXT: s_setpc_b64 s[30:31]5351 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5352 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5353 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>5354 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5355 ret void5356}5357 5358define void @s_shuffle_v4bf16_v2bf16__u_2_2_2() {5359; GFX9-LABEL: s_shuffle_v4bf16_v2bf16__u_2_2_2:5360; GFX9: ; %bb.0:5361; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5362; GFX9-NEXT: ;;#ASMSTART5363; GFX9-NEXT: ; use s[8:9]5364; GFX9-NEXT: ;;#ASMEND5365; GFX9-NEXT: s_setpc_b64 s[30:31]5366 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5367 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>5368 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5369 ret void5370}5371 5372define void @s_shuffle_v4bf16_v2bf16__0_2_2_2() {5373; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__0_2_2_2:5374; GFX900: ; %bb.0:5375; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5376; GFX900-NEXT: ;;#ASMSTART5377; GFX900-NEXT: ; def s85378; GFX900-NEXT: ;;#ASMEND5379; GFX900-NEXT: ;;#ASMSTART5380; GFX900-NEXT: ; use s[8:9]5381; GFX900-NEXT: ;;#ASMEND5382; GFX900-NEXT: s_setpc_b64 s[30:31]5383;5384; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__0_2_2_2:5385; GFX90A: ; %bb.0:5386; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5387; GFX90A-NEXT: ;;#ASMSTART5388; GFX90A-NEXT: ; def s85389; GFX90A-NEXT: ;;#ASMEND5390; GFX90A-NEXT: ;;#ASMSTART5391; GFX90A-NEXT: ; use s[8:9]5392; GFX90A-NEXT: ;;#ASMEND5393; GFX90A-NEXT: s_setpc_b64 s[30:31]5394;5395; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__0_2_2_2:5396; GFX942: ; %bb.0:5397; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5398; GFX942-NEXT: ;;#ASMSTART5399; GFX942-NEXT: ; def s85400; GFX942-NEXT: ;;#ASMEND5401; GFX942-NEXT: s_nop 05402; GFX942-NEXT: ;;#ASMSTART5403; GFX942-NEXT: ; use s[8:9]5404; GFX942-NEXT: ;;#ASMEND5405; GFX942-NEXT: s_setpc_b64 s[30:31]5406 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5407 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>5408 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5409 ret void5410}5411 5412define void @s_shuffle_v4bf16_v2bf16__1_2_2_2() {5413; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__1_2_2_2:5414; GFX900: ; %bb.0:5415; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5416; GFX900-NEXT: ;;#ASMSTART5417; GFX900-NEXT: ; def s45418; GFX900-NEXT: ;;#ASMEND5419; GFX900-NEXT: s_lshr_b32 s8, s4, 165420; GFX900-NEXT: ;;#ASMSTART5421; GFX900-NEXT: ; use s[8:9]5422; GFX900-NEXT: ;;#ASMEND5423; GFX900-NEXT: s_setpc_b64 s[30:31]5424;5425; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__1_2_2_2:5426; GFX90A: ; %bb.0:5427; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5428; GFX90A-NEXT: ;;#ASMSTART5429; GFX90A-NEXT: ; def s45430; GFX90A-NEXT: ;;#ASMEND5431; GFX90A-NEXT: s_lshr_b32 s8, s4, 165432; GFX90A-NEXT: ;;#ASMSTART5433; GFX90A-NEXT: ; use s[8:9]5434; GFX90A-NEXT: ;;#ASMEND5435; GFX90A-NEXT: s_setpc_b64 s[30:31]5436;5437; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__1_2_2_2:5438; GFX942: ; %bb.0:5439; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5440; GFX942-NEXT: ;;#ASMSTART5441; GFX942-NEXT: ; def s05442; GFX942-NEXT: ;;#ASMEND5443; GFX942-NEXT: s_lshr_b32 s8, s0, 165444; GFX942-NEXT: ;;#ASMSTART5445; GFX942-NEXT: ; use s[8:9]5446; GFX942-NEXT: ;;#ASMEND5447; GFX942-NEXT: s_setpc_b64 s[30:31]5448 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5449 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>5450 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5451 ret void5452}5453 5454define void @s_shuffle_v4bf16_v2bf16__2_2_2_2() {5455; GFX9-LABEL: s_shuffle_v4bf16_v2bf16__2_2_2_2:5456; GFX9: ; %bb.0:5457; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5458; GFX9-NEXT: ;;#ASMSTART5459; GFX9-NEXT: ; use s[8:9]5460; GFX9-NEXT: ;;#ASMEND5461; GFX9-NEXT: s_setpc_b64 s[30:31]5462 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5463 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>5464 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5465 ret void5466}5467 5468define void @s_shuffle_v4bf16_v2bf16__3_2_2_2() {5469; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_2_2_2:5470; GFX900: ; %bb.0:5471; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5472; GFX900-NEXT: ;;#ASMSTART5473; GFX900-NEXT: ; def s45474; GFX900-NEXT: ;;#ASMEND5475; GFX900-NEXT: s_lshr_b32 s5, s4, 165476; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45477; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45478; GFX900-NEXT: ;;#ASMSTART5479; GFX900-NEXT: ; use s[8:9]5480; GFX900-NEXT: ;;#ASMEND5481; GFX900-NEXT: s_setpc_b64 s[30:31]5482;5483; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_2_2_2:5484; GFX90A: ; %bb.0:5485; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5486; GFX90A-NEXT: ;;#ASMSTART5487; GFX90A-NEXT: ; def s45488; GFX90A-NEXT: ;;#ASMEND5489; GFX90A-NEXT: s_lshr_b32 s5, s4, 165490; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45491; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45492; GFX90A-NEXT: ;;#ASMSTART5493; GFX90A-NEXT: ; use s[8:9]5494; GFX90A-NEXT: ;;#ASMEND5495; GFX90A-NEXT: s_setpc_b64 s[30:31]5496;5497; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_2_2_2:5498; GFX942: ; %bb.0:5499; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5500; GFX942-NEXT: ;;#ASMSTART5501; GFX942-NEXT: ; def s05502; GFX942-NEXT: ;;#ASMEND5503; GFX942-NEXT: s_lshr_b32 s1, s0, 165504; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05505; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05506; GFX942-NEXT: ;;#ASMSTART5507; GFX942-NEXT: ; use s[8:9]5508; GFX942-NEXT: ;;#ASMEND5509; GFX942-NEXT: s_setpc_b64 s[30:31]5510 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5511 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5512 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>5513 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5514 ret void5515}5516 5517define void @s_shuffle_v4bf16_v2bf16__3_u_2_2() {5518; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_u_2_2:5519; GFX900: ; %bb.0:5520; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5521; GFX900-NEXT: ;;#ASMSTART5522; GFX900-NEXT: ; def s45523; GFX900-NEXT: ;;#ASMEND5524; GFX900-NEXT: s_lshr_b32 s8, s4, 165525; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45526; GFX900-NEXT: ;;#ASMSTART5527; GFX900-NEXT: ; use s[8:9]5528; GFX900-NEXT: ;;#ASMEND5529; GFX900-NEXT: s_setpc_b64 s[30:31]5530;5531; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_u_2_2:5532; GFX90A: ; %bb.0:5533; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5534; GFX90A-NEXT: ;;#ASMSTART5535; GFX90A-NEXT: ; def s45536; GFX90A-NEXT: ;;#ASMEND5537; GFX90A-NEXT: s_lshr_b32 s8, s4, 165538; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45539; GFX90A-NEXT: ;;#ASMSTART5540; GFX90A-NEXT: ; use s[8:9]5541; GFX90A-NEXT: ;;#ASMEND5542; GFX90A-NEXT: s_setpc_b64 s[30:31]5543;5544; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_u_2_2:5545; GFX942: ; %bb.0:5546; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5547; GFX942-NEXT: ;;#ASMSTART5548; GFX942-NEXT: ; def s05549; GFX942-NEXT: ;;#ASMEND5550; GFX942-NEXT: s_lshr_b32 s8, s0, 165551; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05552; GFX942-NEXT: ;;#ASMSTART5553; GFX942-NEXT: ; use s[8:9]5554; GFX942-NEXT: ;;#ASMEND5555; GFX942-NEXT: s_setpc_b64 s[30:31]5556 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5557 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5558 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>5559 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5560 ret void5561}5562 5563define void @s_shuffle_v4bf16_v2bf16__3_0_2_2() {5564; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_0_2_2:5565; GFX900: ; %bb.0:5566; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5567; GFX900-NEXT: ;;#ASMSTART5568; GFX900-NEXT: ; def s55569; GFX900-NEXT: ;;#ASMEND5570; GFX900-NEXT: s_lshr_b32 s6, s5, 165571; GFX900-NEXT: ;;#ASMSTART5572; GFX900-NEXT: ; def s45573; GFX900-NEXT: ;;#ASMEND5574; GFX900-NEXT: s_pack_ll_b32_b16 s8, s6, s45575; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s55576; GFX900-NEXT: ;;#ASMSTART5577; GFX900-NEXT: ; use s[8:9]5578; GFX900-NEXT: ;;#ASMEND5579; GFX900-NEXT: s_setpc_b64 s[30:31]5580;5581; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_0_2_2:5582; GFX90A: ; %bb.0:5583; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5584; GFX90A-NEXT: ;;#ASMSTART5585; GFX90A-NEXT: ; def s55586; GFX90A-NEXT: ;;#ASMEND5587; GFX90A-NEXT: s_lshr_b32 s6, s5, 165588; GFX90A-NEXT: ;;#ASMSTART5589; GFX90A-NEXT: ; def s45590; GFX90A-NEXT: ;;#ASMEND5591; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s6, s45592; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s55593; GFX90A-NEXT: ;;#ASMSTART5594; GFX90A-NEXT: ; use s[8:9]5595; GFX90A-NEXT: ;;#ASMEND5596; GFX90A-NEXT: s_setpc_b64 s[30:31]5597;5598; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_0_2_2:5599; GFX942: ; %bb.0:5600; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5601; GFX942-NEXT: ;;#ASMSTART5602; GFX942-NEXT: ; def s15603; GFX942-NEXT: ;;#ASMEND5604; GFX942-NEXT: s_lshr_b32 s2, s1, 165605; GFX942-NEXT: ;;#ASMSTART5606; GFX942-NEXT: ; def s05607; GFX942-NEXT: ;;#ASMEND5608; GFX942-NEXT: s_pack_ll_b32_b16 s8, s2, s05609; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s15610; GFX942-NEXT: ;;#ASMSTART5611; GFX942-NEXT: ; use s[8:9]5612; GFX942-NEXT: ;;#ASMEND5613; GFX942-NEXT: s_setpc_b64 s[30:31]5614 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5615 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5616 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>5617 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5618 ret void5619}5620 5621define void @s_shuffle_v4bf16_v2bf16__3_1_2_2() {5622; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_1_2_2:5623; GFX900: ; %bb.0:5624; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5625; GFX900-NEXT: ;;#ASMSTART5626; GFX900-NEXT: ; def s45627; GFX900-NEXT: ;;#ASMEND5628; GFX900-NEXT: ;;#ASMSTART5629; GFX900-NEXT: ; def s55630; GFX900-NEXT: ;;#ASMEND5631; GFX900-NEXT: s_lshr_b32 s4, s4, 165632; GFX900-NEXT: s_lshr_b32 s6, s5, 165633; GFX900-NEXT: s_pack_ll_b32_b16 s8, s6, s45634; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s55635; GFX900-NEXT: ;;#ASMSTART5636; GFX900-NEXT: ; use s[8:9]5637; GFX900-NEXT: ;;#ASMEND5638; GFX900-NEXT: s_setpc_b64 s[30:31]5639;5640; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_1_2_2:5641; GFX90A: ; %bb.0:5642; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5643; GFX90A-NEXT: ;;#ASMSTART5644; GFX90A-NEXT: ; def s45645; GFX90A-NEXT: ;;#ASMEND5646; GFX90A-NEXT: ;;#ASMSTART5647; GFX90A-NEXT: ; def s55648; GFX90A-NEXT: ;;#ASMEND5649; GFX90A-NEXT: s_lshr_b32 s4, s4, 165650; GFX90A-NEXT: s_lshr_b32 s6, s5, 165651; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s6, s45652; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s55653; GFX90A-NEXT: ;;#ASMSTART5654; GFX90A-NEXT: ; use s[8:9]5655; GFX90A-NEXT: ;;#ASMEND5656; GFX90A-NEXT: s_setpc_b64 s[30:31]5657;5658; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_1_2_2:5659; GFX942: ; %bb.0:5660; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5661; GFX942-NEXT: ;;#ASMSTART5662; GFX942-NEXT: ; def s05663; GFX942-NEXT: ;;#ASMEND5664; GFX942-NEXT: ;;#ASMSTART5665; GFX942-NEXT: ; def s15666; GFX942-NEXT: ;;#ASMEND5667; GFX942-NEXT: s_lshr_b32 s0, s0, 165668; GFX942-NEXT: s_lshr_b32 s2, s1, 165669; GFX942-NEXT: s_pack_ll_b32_b16 s8, s2, s05670; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s15671; GFX942-NEXT: ;;#ASMSTART5672; GFX942-NEXT: ; use s[8:9]5673; GFX942-NEXT: ;;#ASMEND5674; GFX942-NEXT: s_setpc_b64 s[30:31]5675 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5676 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5677 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>5678 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5679 ret void5680}5681 5682define void @s_shuffle_v4bf16_v2bf16__3_3_2_2() {5683; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_2:5684; GFX900: ; %bb.0:5685; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5686; GFX900-NEXT: ;;#ASMSTART5687; GFX900-NEXT: ; def s45688; GFX900-NEXT: ;;#ASMEND5689; GFX900-NEXT: s_lshr_b32 s5, s4, 165690; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55691; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45692; GFX900-NEXT: ;;#ASMSTART5693; GFX900-NEXT: ; use s[8:9]5694; GFX900-NEXT: ;;#ASMEND5695; GFX900-NEXT: s_setpc_b64 s[30:31]5696;5697; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_2:5698; GFX90A: ; %bb.0:5699; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5700; GFX90A-NEXT: ;;#ASMSTART5701; GFX90A-NEXT: ; def s45702; GFX90A-NEXT: ;;#ASMEND5703; GFX90A-NEXT: s_lshr_b32 s5, s4, 165704; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55705; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45706; GFX90A-NEXT: ;;#ASMSTART5707; GFX90A-NEXT: ; use s[8:9]5708; GFX90A-NEXT: ;;#ASMEND5709; GFX90A-NEXT: s_setpc_b64 s[30:31]5710;5711; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_2:5712; GFX942: ; %bb.0:5713; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5714; GFX942-NEXT: ;;#ASMSTART5715; GFX942-NEXT: ; def s05716; GFX942-NEXT: ;;#ASMEND5717; GFX942-NEXT: s_lshr_b32 s1, s0, 165718; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15719; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05720; GFX942-NEXT: ;;#ASMSTART5721; GFX942-NEXT: ; use s[8:9]5722; GFX942-NEXT: ;;#ASMEND5723; GFX942-NEXT: s_setpc_b64 s[30:31]5724 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5725 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5726 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>5727 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5728 ret void5729}5730 5731define void @s_shuffle_v4bf16_v2bf16__3_3_u_2() {5732; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_2:5733; GFX900: ; %bb.0:5734; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5735; GFX900-NEXT: ;;#ASMSTART5736; GFX900-NEXT: ; def s45737; GFX900-NEXT: ;;#ASMEND5738; GFX900-NEXT: s_lshr_b32 s5, s4, 165739; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55740; GFX900-NEXT: s_lshl_b32 s9, s4, 165741; GFX900-NEXT: ;;#ASMSTART5742; GFX900-NEXT: ; use s[8:9]5743; GFX900-NEXT: ;;#ASMEND5744; GFX900-NEXT: s_setpc_b64 s[30:31]5745;5746; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_2:5747; GFX90A: ; %bb.0:5748; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5749; GFX90A-NEXT: ;;#ASMSTART5750; GFX90A-NEXT: ; def s45751; GFX90A-NEXT: ;;#ASMEND5752; GFX90A-NEXT: s_lshr_b32 s5, s4, 165753; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55754; GFX90A-NEXT: s_lshl_b32 s9, s4, 165755; GFX90A-NEXT: ;;#ASMSTART5756; GFX90A-NEXT: ; use s[8:9]5757; GFX90A-NEXT: ;;#ASMEND5758; GFX90A-NEXT: s_setpc_b64 s[30:31]5759;5760; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_2:5761; GFX942: ; %bb.0:5762; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5763; GFX942-NEXT: ;;#ASMSTART5764; GFX942-NEXT: ; def s05765; GFX942-NEXT: ;;#ASMEND5766; GFX942-NEXT: s_lshr_b32 s1, s0, 165767; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15768; GFX942-NEXT: s_lshl_b32 s9, s0, 165769; GFX942-NEXT: ;;#ASMSTART5770; GFX942-NEXT: ; use s[8:9]5771; GFX942-NEXT: ;;#ASMEND5772; GFX942-NEXT: s_setpc_b64 s[30:31]5773 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5774 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5775 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>5776 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5777 ret void5778}5779 5780define void @s_shuffle_v4bf16_v2bf16__3_3_0_2() {5781; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_2:5782; GFX900: ; %bb.0:5783; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5784; GFX900-NEXT: ;;#ASMSTART5785; GFX900-NEXT: ; def s45786; GFX900-NEXT: ;;#ASMEND5787; GFX900-NEXT: ;;#ASMSTART5788; GFX900-NEXT: ; def s55789; GFX900-NEXT: ;;#ASMEND5790; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s55791; GFX900-NEXT: s_lshr_b32 s4, s5, 165792; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45793; GFX900-NEXT: ;;#ASMSTART5794; GFX900-NEXT: ; use s[8:9]5795; GFX900-NEXT: ;;#ASMEND5796; GFX900-NEXT: s_setpc_b64 s[30:31]5797;5798; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_2:5799; GFX90A: ; %bb.0:5800; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5801; GFX90A-NEXT: ;;#ASMSTART5802; GFX90A-NEXT: ; def s45803; GFX90A-NEXT: ;;#ASMEND5804; GFX90A-NEXT: ;;#ASMSTART5805; GFX90A-NEXT: ; def s55806; GFX90A-NEXT: ;;#ASMEND5807; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s55808; GFX90A-NEXT: s_lshr_b32 s4, s5, 165809; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45810; GFX90A-NEXT: ;;#ASMSTART5811; GFX90A-NEXT: ; use s[8:9]5812; GFX90A-NEXT: ;;#ASMEND5813; GFX90A-NEXT: s_setpc_b64 s[30:31]5814;5815; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_2:5816; GFX942: ; %bb.0:5817; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5818; GFX942-NEXT: ;;#ASMSTART5819; GFX942-NEXT: ; def s05820; GFX942-NEXT: ;;#ASMEND5821; GFX942-NEXT: ;;#ASMSTART5822; GFX942-NEXT: ; def s15823; GFX942-NEXT: ;;#ASMEND5824; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s15825; GFX942-NEXT: s_lshr_b32 s0, s1, 165826; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05827; GFX942-NEXT: ;;#ASMSTART5828; GFX942-NEXT: ; use s[8:9]5829; GFX942-NEXT: ;;#ASMEND5830; GFX942-NEXT: s_setpc_b64 s[30:31]5831 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5832 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5833 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>5834 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5835 ret void5836}5837 5838define void @s_shuffle_v4bf16_v2bf16__3_3_1_2() {5839; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_2:5840; GFX900: ; %bb.0:5841; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5842; GFX900-NEXT: ;;#ASMSTART5843; GFX900-NEXT: ; def s45844; GFX900-NEXT: ;;#ASMEND5845; GFX900-NEXT: s_lshr_b32 s4, s4, 165846; GFX900-NEXT: ;;#ASMSTART5847; GFX900-NEXT: ; def s55848; GFX900-NEXT: ;;#ASMEND5849; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s55850; GFX900-NEXT: s_lshr_b32 s4, s5, 165851; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45852; GFX900-NEXT: ;;#ASMSTART5853; GFX900-NEXT: ; use s[8:9]5854; GFX900-NEXT: ;;#ASMEND5855; GFX900-NEXT: s_setpc_b64 s[30:31]5856;5857; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_2:5858; GFX90A: ; %bb.0:5859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5860; GFX90A-NEXT: ;;#ASMSTART5861; GFX90A-NEXT: ; def s45862; GFX90A-NEXT: ;;#ASMEND5863; GFX90A-NEXT: s_lshr_b32 s4, s4, 165864; GFX90A-NEXT: ;;#ASMSTART5865; GFX90A-NEXT: ; def s55866; GFX90A-NEXT: ;;#ASMEND5867; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s55868; GFX90A-NEXT: s_lshr_b32 s4, s5, 165869; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45870; GFX90A-NEXT: ;;#ASMSTART5871; GFX90A-NEXT: ; use s[8:9]5872; GFX90A-NEXT: ;;#ASMEND5873; GFX90A-NEXT: s_setpc_b64 s[30:31]5874;5875; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_2:5876; GFX942: ; %bb.0:5877; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5878; GFX942-NEXT: ;;#ASMSTART5879; GFX942-NEXT: ; def s05880; GFX942-NEXT: ;;#ASMEND5881; GFX942-NEXT: s_lshr_b32 s0, s0, 165882; GFX942-NEXT: ;;#ASMSTART5883; GFX942-NEXT: ; def s15884; GFX942-NEXT: ;;#ASMEND5885; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s15886; GFX942-NEXT: s_lshr_b32 s0, s1, 165887; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05888; GFX942-NEXT: ;;#ASMSTART5889; GFX942-NEXT: ; use s[8:9]5890; GFX942-NEXT: ;;#ASMEND5891; GFX942-NEXT: s_setpc_b64 s[30:31]5892 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5893 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5894 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>5895 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5896 ret void5897}5898 5899define void @s_shuffle_v4bf16_v2bf16__u_3_3_3() {5900; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__u_3_3_3:5901; GFX900: ; %bb.0:5902; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5903; GFX900-NEXT: ;;#ASMSTART5904; GFX900-NEXT: ; def s85905; GFX900-NEXT: ;;#ASMEND5906; GFX900-NEXT: s_lshr_b32 s4, s8, 165907; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s45908; GFX900-NEXT: ;;#ASMSTART5909; GFX900-NEXT: ; use s[8:9]5910; GFX900-NEXT: ;;#ASMEND5911; GFX900-NEXT: s_setpc_b64 s[30:31]5912;5913; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__u_3_3_3:5914; GFX90A: ; %bb.0:5915; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5916; GFX90A-NEXT: ;;#ASMSTART5917; GFX90A-NEXT: ; def s85918; GFX90A-NEXT: ;;#ASMEND5919; GFX90A-NEXT: s_lshr_b32 s4, s8, 165920; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s45921; GFX90A-NEXT: ;;#ASMSTART5922; GFX90A-NEXT: ; use s[8:9]5923; GFX90A-NEXT: ;;#ASMEND5924; GFX90A-NEXT: s_setpc_b64 s[30:31]5925;5926; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__u_3_3_3:5927; GFX942: ; %bb.0:5928; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5929; GFX942-NEXT: ;;#ASMSTART5930; GFX942-NEXT: ; def s85931; GFX942-NEXT: ;;#ASMEND5932; GFX942-NEXT: s_lshr_b32 s0, s8, 165933; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s05934; GFX942-NEXT: ;;#ASMSTART5935; GFX942-NEXT: ; use s[8:9]5936; GFX942-NEXT: ;;#ASMEND5937; GFX942-NEXT: s_setpc_b64 s[30:31]5938 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5939 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5940 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>5941 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)5942 ret void5943}5944 5945define void @s_shuffle_v4bf16_v2bf16__0_3_3_3() {5946; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__0_3_3_3:5947; GFX900: ; %bb.0:5948; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5949; GFX900-NEXT: ;;#ASMSTART5950; GFX900-NEXT: ; def s55951; GFX900-NEXT: ;;#ASMEND5952; GFX900-NEXT: s_lshr_b32 s5, s5, 165953; GFX900-NEXT: ;;#ASMSTART5954; GFX900-NEXT: ; def s45955; GFX900-NEXT: ;;#ASMEND5956; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55957; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s55958; GFX900-NEXT: ;;#ASMSTART5959; GFX900-NEXT: ; use s[8:9]5960; GFX900-NEXT: ;;#ASMEND5961; GFX900-NEXT: s_setpc_b64 s[30:31]5962;5963; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__0_3_3_3:5964; GFX90A: ; %bb.0:5965; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5966; GFX90A-NEXT: ;;#ASMSTART5967; GFX90A-NEXT: ; def s55968; GFX90A-NEXT: ;;#ASMEND5969; GFX90A-NEXT: s_lshr_b32 s5, s5, 165970; GFX90A-NEXT: ;;#ASMSTART5971; GFX90A-NEXT: ; def s45972; GFX90A-NEXT: ;;#ASMEND5973; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55974; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s55975; GFX90A-NEXT: ;;#ASMSTART5976; GFX90A-NEXT: ; use s[8:9]5977; GFX90A-NEXT: ;;#ASMEND5978; GFX90A-NEXT: s_setpc_b64 s[30:31]5979;5980; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__0_3_3_3:5981; GFX942: ; %bb.0:5982; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5983; GFX942-NEXT: ;;#ASMSTART5984; GFX942-NEXT: ; def s15985; GFX942-NEXT: ;;#ASMEND5986; GFX942-NEXT: s_lshr_b32 s1, s1, 165987; GFX942-NEXT: ;;#ASMSTART5988; GFX942-NEXT: ; def s05989; GFX942-NEXT: ;;#ASMEND5990; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15991; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s15992; GFX942-NEXT: ;;#ASMSTART5993; GFX942-NEXT: ; use s[8:9]5994; GFX942-NEXT: ;;#ASMEND5995; GFX942-NEXT: s_setpc_b64 s[30:31]5996 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()5997 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()5998 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>5999 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6000 ret void6001}6002 6003define void @s_shuffle_v4bf16_v2bf16__1_3_3_3() {6004; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__1_3_3_3:6005; GFX900: ; %bb.0:6006; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6007; GFX900-NEXT: ;;#ASMSTART6008; GFX900-NEXT: ; def s46009; GFX900-NEXT: ;;#ASMEND6010; GFX900-NEXT: ;;#ASMSTART6011; GFX900-NEXT: ; def s56012; GFX900-NEXT: ;;#ASMEND6013; GFX900-NEXT: s_lshr_b32 s5, s5, 166014; GFX900-NEXT: s_lshr_b32 s4, s4, 166015; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56016; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s56017; GFX900-NEXT: ;;#ASMSTART6018; GFX900-NEXT: ; use s[8:9]6019; GFX900-NEXT: ;;#ASMEND6020; GFX900-NEXT: s_setpc_b64 s[30:31]6021;6022; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__1_3_3_3:6023; GFX90A: ; %bb.0:6024; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6025; GFX90A-NEXT: ;;#ASMSTART6026; GFX90A-NEXT: ; def s46027; GFX90A-NEXT: ;;#ASMEND6028; GFX90A-NEXT: ;;#ASMSTART6029; GFX90A-NEXT: ; def s56030; GFX90A-NEXT: ;;#ASMEND6031; GFX90A-NEXT: s_lshr_b32 s5, s5, 166032; GFX90A-NEXT: s_lshr_b32 s4, s4, 166033; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56034; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s56035; GFX90A-NEXT: ;;#ASMSTART6036; GFX90A-NEXT: ; use s[8:9]6037; GFX90A-NEXT: ;;#ASMEND6038; GFX90A-NEXT: s_setpc_b64 s[30:31]6039;6040; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__1_3_3_3:6041; GFX942: ; %bb.0:6042; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6043; GFX942-NEXT: ;;#ASMSTART6044; GFX942-NEXT: ; def s06045; GFX942-NEXT: ;;#ASMEND6046; GFX942-NEXT: ;;#ASMSTART6047; GFX942-NEXT: ; def s16048; GFX942-NEXT: ;;#ASMEND6049; GFX942-NEXT: s_lshr_b32 s1, s1, 166050; GFX942-NEXT: s_lshr_b32 s0, s0, 166051; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16052; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s16053; GFX942-NEXT: ;;#ASMSTART6054; GFX942-NEXT: ; use s[8:9]6055; GFX942-NEXT: ;;#ASMEND6056; GFX942-NEXT: s_setpc_b64 s[30:31]6057 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6058 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6059 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>6060 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6061 ret void6062}6063 6064define void @s_shuffle_v4bf16_v2bf16__2_3_3_3() {6065; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__2_3_3_3:6066; GFX900: ; %bb.0:6067; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6068; GFX900-NEXT: ;;#ASMSTART6069; GFX900-NEXT: ; def s86070; GFX900-NEXT: ;;#ASMEND6071; GFX900-NEXT: s_lshr_b32 s4, s8, 166072; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s46073; GFX900-NEXT: ;;#ASMSTART6074; GFX900-NEXT: ; use s[8:9]6075; GFX900-NEXT: ;;#ASMEND6076; GFX900-NEXT: s_setpc_b64 s[30:31]6077;6078; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__2_3_3_3:6079; GFX90A: ; %bb.0:6080; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6081; GFX90A-NEXT: ;;#ASMSTART6082; GFX90A-NEXT: ; def s86083; GFX90A-NEXT: ;;#ASMEND6084; GFX90A-NEXT: s_lshr_b32 s4, s8, 166085; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s46086; GFX90A-NEXT: ;;#ASMSTART6087; GFX90A-NEXT: ; use s[8:9]6088; GFX90A-NEXT: ;;#ASMEND6089; GFX90A-NEXT: s_setpc_b64 s[30:31]6090;6091; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__2_3_3_3:6092; GFX942: ; %bb.0:6093; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6094; GFX942-NEXT: ;;#ASMSTART6095; GFX942-NEXT: ; def s86096; GFX942-NEXT: ;;#ASMEND6097; GFX942-NEXT: s_lshr_b32 s0, s8, 166098; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s06099; GFX942-NEXT: ;;#ASMSTART6100; GFX942-NEXT: ; use s[8:9]6101; GFX942-NEXT: ;;#ASMEND6102; GFX942-NEXT: s_setpc_b64 s[30:31]6103 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6104 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6105 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>6106 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6107 ret void6108}6109 6110define void @s_shuffle_v4bf16_v2bf16__3_u_3_3() {6111; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_u_3_3:6112; GFX900: ; %bb.0:6113; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6114; GFX900-NEXT: ;;#ASMSTART6115; GFX900-NEXT: ; def s46116; GFX900-NEXT: ;;#ASMEND6117; GFX900-NEXT: s_lshr_b32 s8, s4, 166118; GFX900-NEXT: s_pack_ll_b32_b16 s9, s8, s86119; GFX900-NEXT: ;;#ASMSTART6120; GFX900-NEXT: ; use s[8:9]6121; GFX900-NEXT: ;;#ASMEND6122; GFX900-NEXT: s_setpc_b64 s[30:31]6123;6124; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_u_3_3:6125; GFX90A: ; %bb.0:6126; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6127; GFX90A-NEXT: ;;#ASMSTART6128; GFX90A-NEXT: ; def s46129; GFX90A-NEXT: ;;#ASMEND6130; GFX90A-NEXT: s_lshr_b32 s8, s4, 166131; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s8, s86132; GFX90A-NEXT: ;;#ASMSTART6133; GFX90A-NEXT: ; use s[8:9]6134; GFX90A-NEXT: ;;#ASMEND6135; GFX90A-NEXT: s_setpc_b64 s[30:31]6136;6137; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_u_3_3:6138; GFX942: ; %bb.0:6139; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6140; GFX942-NEXT: ;;#ASMSTART6141; GFX942-NEXT: ; def s06142; GFX942-NEXT: ;;#ASMEND6143; GFX942-NEXT: s_lshr_b32 s8, s0, 166144; GFX942-NEXT: s_pack_ll_b32_b16 s9, s8, s86145; GFX942-NEXT: ;;#ASMSTART6146; GFX942-NEXT: ; use s[8:9]6147; GFX942-NEXT: ;;#ASMEND6148; GFX942-NEXT: s_setpc_b64 s[30:31]6149 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6150 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6151 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>6152 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6153 ret void6154}6155 6156define void @s_shuffle_v4bf16_v2bf16__3_0_3_3() {6157; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_0_3_3:6158; GFX900: ; %bb.0:6159; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6160; GFX900-NEXT: ;;#ASMSTART6161; GFX900-NEXT: ; def s56162; GFX900-NEXT: ;;#ASMEND6163; GFX900-NEXT: s_lshr_b32 s5, s5, 166164; GFX900-NEXT: ;;#ASMSTART6165; GFX900-NEXT: ; def s46166; GFX900-NEXT: ;;#ASMEND6167; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46168; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s56169; GFX900-NEXT: ;;#ASMSTART6170; GFX900-NEXT: ; use s[8:9]6171; GFX900-NEXT: ;;#ASMEND6172; GFX900-NEXT: s_setpc_b64 s[30:31]6173;6174; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_0_3_3:6175; GFX90A: ; %bb.0:6176; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6177; GFX90A-NEXT: ;;#ASMSTART6178; GFX90A-NEXT: ; def s56179; GFX90A-NEXT: ;;#ASMEND6180; GFX90A-NEXT: s_lshr_b32 s5, s5, 166181; GFX90A-NEXT: ;;#ASMSTART6182; GFX90A-NEXT: ; def s46183; GFX90A-NEXT: ;;#ASMEND6184; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46185; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s56186; GFX90A-NEXT: ;;#ASMSTART6187; GFX90A-NEXT: ; use s[8:9]6188; GFX90A-NEXT: ;;#ASMEND6189; GFX90A-NEXT: s_setpc_b64 s[30:31]6190;6191; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_0_3_3:6192; GFX942: ; %bb.0:6193; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6194; GFX942-NEXT: ;;#ASMSTART6195; GFX942-NEXT: ; def s16196; GFX942-NEXT: ;;#ASMEND6197; GFX942-NEXT: s_lshr_b32 s1, s1, 166198; GFX942-NEXT: ;;#ASMSTART6199; GFX942-NEXT: ; def s06200; GFX942-NEXT: ;;#ASMEND6201; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06202; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s16203; GFX942-NEXT: ;;#ASMSTART6204; GFX942-NEXT: ; use s[8:9]6205; GFX942-NEXT: ;;#ASMEND6206; GFX942-NEXT: s_setpc_b64 s[30:31]6207 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6208 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6209 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>6210 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6211 ret void6212}6213 6214define void @s_shuffle_v4bf16_v2bf16__3_1_3_3() {6215; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_1_3_3:6216; GFX900: ; %bb.0:6217; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6218; GFX900-NEXT: ;;#ASMSTART6219; GFX900-NEXT: ; def s46220; GFX900-NEXT: ;;#ASMEND6221; GFX900-NEXT: ;;#ASMSTART6222; GFX900-NEXT: ; def s56223; GFX900-NEXT: ;;#ASMEND6224; GFX900-NEXT: s_lshr_b32 s4, s4, 166225; GFX900-NEXT: s_lshr_b32 s5, s5, 166226; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46227; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s56228; GFX900-NEXT: ;;#ASMSTART6229; GFX900-NEXT: ; use s[8:9]6230; GFX900-NEXT: ;;#ASMEND6231; GFX900-NEXT: s_setpc_b64 s[30:31]6232;6233; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_1_3_3:6234; GFX90A: ; %bb.0:6235; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6236; GFX90A-NEXT: ;;#ASMSTART6237; GFX90A-NEXT: ; def s46238; GFX90A-NEXT: ;;#ASMEND6239; GFX90A-NEXT: ;;#ASMSTART6240; GFX90A-NEXT: ; def s56241; GFX90A-NEXT: ;;#ASMEND6242; GFX90A-NEXT: s_lshr_b32 s4, s4, 166243; GFX90A-NEXT: s_lshr_b32 s5, s5, 166244; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46245; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s56246; GFX90A-NEXT: ;;#ASMSTART6247; GFX90A-NEXT: ; use s[8:9]6248; GFX90A-NEXT: ;;#ASMEND6249; GFX90A-NEXT: s_setpc_b64 s[30:31]6250;6251; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_1_3_3:6252; GFX942: ; %bb.0:6253; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6254; GFX942-NEXT: ;;#ASMSTART6255; GFX942-NEXT: ; def s06256; GFX942-NEXT: ;;#ASMEND6257; GFX942-NEXT: ;;#ASMSTART6258; GFX942-NEXT: ; def s16259; GFX942-NEXT: ;;#ASMEND6260; GFX942-NEXT: s_lshr_b32 s0, s0, 166261; GFX942-NEXT: s_lshr_b32 s1, s1, 166262; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06263; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s16264; GFX942-NEXT: ;;#ASMSTART6265; GFX942-NEXT: ; use s[8:9]6266; GFX942-NEXT: ;;#ASMEND6267; GFX942-NEXT: s_setpc_b64 s[30:31]6268 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6269 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6270 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>6271 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6272 ret void6273}6274 6275define void @s_shuffle_v4bf16_v2bf16__3_2_3_3() {6276; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_2_3_3:6277; GFX900: ; %bb.0:6278; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6279; GFX900-NEXT: ;;#ASMSTART6280; GFX900-NEXT: ; def s46281; GFX900-NEXT: ;;#ASMEND6282; GFX900-NEXT: s_lshr_b32 s5, s4, 166283; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46284; GFX900-NEXT: s_pack_ll_b32_b16 s9, s5, s56285; GFX900-NEXT: ;;#ASMSTART6286; GFX900-NEXT: ; use s[8:9]6287; GFX900-NEXT: ;;#ASMEND6288; GFX900-NEXT: s_setpc_b64 s[30:31]6289;6290; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_2_3_3:6291; GFX90A: ; %bb.0:6292; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6293; GFX90A-NEXT: ;;#ASMSTART6294; GFX90A-NEXT: ; def s46295; GFX90A-NEXT: ;;#ASMEND6296; GFX90A-NEXT: s_lshr_b32 s5, s4, 166297; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46298; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s5, s56299; GFX90A-NEXT: ;;#ASMSTART6300; GFX90A-NEXT: ; use s[8:9]6301; GFX90A-NEXT: ;;#ASMEND6302; GFX90A-NEXT: s_setpc_b64 s[30:31]6303;6304; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_2_3_3:6305; GFX942: ; %bb.0:6306; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6307; GFX942-NEXT: ;;#ASMSTART6308; GFX942-NEXT: ; def s06309; GFX942-NEXT: ;;#ASMEND6310; GFX942-NEXT: s_lshr_b32 s1, s0, 166311; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06312; GFX942-NEXT: s_pack_ll_b32_b16 s9, s1, s16313; GFX942-NEXT: ;;#ASMSTART6314; GFX942-NEXT: ; use s[8:9]6315; GFX942-NEXT: ;;#ASMEND6316; GFX942-NEXT: s_setpc_b64 s[30:31]6317 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6318 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6319 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>6320 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6321 ret void6322}6323 6324define void @s_shuffle_v4bf16_v2bf16__3_3_u_3() {6325; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_3:6326; GFX900: ; %bb.0:6327; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6328; GFX900-NEXT: ;;#ASMSTART6329; GFX900-NEXT: ; def s96330; GFX900-NEXT: ;;#ASMEND6331; GFX900-NEXT: s_lshr_b32 s4, s9, 166332; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s46333; GFX900-NEXT: ;;#ASMSTART6334; GFX900-NEXT: ; use s[8:9]6335; GFX900-NEXT: ;;#ASMEND6336; GFX900-NEXT: s_setpc_b64 s[30:31]6337;6338; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_3:6339; GFX90A: ; %bb.0:6340; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6341; GFX90A-NEXT: ;;#ASMSTART6342; GFX90A-NEXT: ; def s96343; GFX90A-NEXT: ;;#ASMEND6344; GFX90A-NEXT: s_lshr_b32 s4, s9, 166345; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s46346; GFX90A-NEXT: ;;#ASMSTART6347; GFX90A-NEXT: ; use s[8:9]6348; GFX90A-NEXT: ;;#ASMEND6349; GFX90A-NEXT: s_setpc_b64 s[30:31]6350;6351; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_u_3:6352; GFX942: ; %bb.0:6353; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6354; GFX942-NEXT: ;;#ASMSTART6355; GFX942-NEXT: ; def s96356; GFX942-NEXT: ;;#ASMEND6357; GFX942-NEXT: s_lshr_b32 s0, s9, 166358; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s06359; GFX942-NEXT: ;;#ASMSTART6360; GFX942-NEXT: ; use s[8:9]6361; GFX942-NEXT: ;;#ASMEND6362; GFX942-NEXT: s_setpc_b64 s[30:31]6363 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6364 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6365 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>6366 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6367 ret void6368}6369 6370define void @s_shuffle_v4bf16_v2bf16__3_3_0_3() {6371; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_3:6372; GFX900: ; %bb.0:6373; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6374; GFX900-NEXT: ;;#ASMSTART6375; GFX900-NEXT: ; def s56376; GFX900-NEXT: ;;#ASMEND6377; GFX900-NEXT: s_lshr_b32 s5, s5, 166378; GFX900-NEXT: ;;#ASMSTART6379; GFX900-NEXT: ; def s46380; GFX900-NEXT: ;;#ASMEND6381; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s56382; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s56383; GFX900-NEXT: ;;#ASMSTART6384; GFX900-NEXT: ; use s[8:9]6385; GFX900-NEXT: ;;#ASMEND6386; GFX900-NEXT: s_setpc_b64 s[30:31]6387;6388; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_3:6389; GFX90A: ; %bb.0:6390; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6391; GFX90A-NEXT: ;;#ASMSTART6392; GFX90A-NEXT: ; def s56393; GFX90A-NEXT: ;;#ASMEND6394; GFX90A-NEXT: s_lshr_b32 s5, s5, 166395; GFX90A-NEXT: ;;#ASMSTART6396; GFX90A-NEXT: ; def s46397; GFX90A-NEXT: ;;#ASMEND6398; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s56399; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s56400; GFX90A-NEXT: ;;#ASMSTART6401; GFX90A-NEXT: ; use s[8:9]6402; GFX90A-NEXT: ;;#ASMEND6403; GFX90A-NEXT: s_setpc_b64 s[30:31]6404;6405; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_0_3:6406; GFX942: ; %bb.0:6407; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6408; GFX942-NEXT: ;;#ASMSTART6409; GFX942-NEXT: ; def s16410; GFX942-NEXT: ;;#ASMEND6411; GFX942-NEXT: s_lshr_b32 s1, s1, 166412; GFX942-NEXT: ;;#ASMSTART6413; GFX942-NEXT: ; def s06414; GFX942-NEXT: ;;#ASMEND6415; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s16416; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s16417; GFX942-NEXT: ;;#ASMSTART6418; GFX942-NEXT: ; use s[8:9]6419; GFX942-NEXT: ;;#ASMEND6420; GFX942-NEXT: s_setpc_b64 s[30:31]6421 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6422 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6423 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>6424 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6425 ret void6426}6427 6428define void @s_shuffle_v4bf16_v2bf16__3_3_1_3() {6429; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_3:6430; GFX900: ; %bb.0:6431; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6432; GFX900-NEXT: ;;#ASMSTART6433; GFX900-NEXT: ; def s46434; GFX900-NEXT: ;;#ASMEND6435; GFX900-NEXT: ;;#ASMSTART6436; GFX900-NEXT: ; def s56437; GFX900-NEXT: ;;#ASMEND6438; GFX900-NEXT: s_lshr_b32 s5, s5, 166439; GFX900-NEXT: s_lshr_b32 s4, s4, 166440; GFX900-NEXT: s_pack_ll_b32_b16 s9, s4, s56441; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s56442; GFX900-NEXT: ;;#ASMSTART6443; GFX900-NEXT: ; use s[8:9]6444; GFX900-NEXT: ;;#ASMEND6445; GFX900-NEXT: s_setpc_b64 s[30:31]6446;6447; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_3:6448; GFX90A: ; %bb.0:6449; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6450; GFX90A-NEXT: ;;#ASMSTART6451; GFX90A-NEXT: ; def s46452; GFX90A-NEXT: ;;#ASMEND6453; GFX90A-NEXT: ;;#ASMSTART6454; GFX90A-NEXT: ; def s56455; GFX90A-NEXT: ;;#ASMEND6456; GFX90A-NEXT: s_lshr_b32 s5, s5, 166457; GFX90A-NEXT: s_lshr_b32 s4, s4, 166458; GFX90A-NEXT: s_pack_ll_b32_b16 s9, s4, s56459; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s56460; GFX90A-NEXT: ;;#ASMSTART6461; GFX90A-NEXT: ; use s[8:9]6462; GFX90A-NEXT: ;;#ASMEND6463; GFX90A-NEXT: s_setpc_b64 s[30:31]6464;6465; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_1_3:6466; GFX942: ; %bb.0:6467; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6468; GFX942-NEXT: ;;#ASMSTART6469; GFX942-NEXT: ; def s06470; GFX942-NEXT: ;;#ASMEND6471; GFX942-NEXT: ;;#ASMSTART6472; GFX942-NEXT: ; def s16473; GFX942-NEXT: ;;#ASMEND6474; GFX942-NEXT: s_lshr_b32 s1, s1, 166475; GFX942-NEXT: s_lshr_b32 s0, s0, 166476; GFX942-NEXT: s_pack_ll_b32_b16 s9, s0, s16477; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s16478; GFX942-NEXT: ;;#ASMSTART6479; GFX942-NEXT: ; use s[8:9]6480; GFX942-NEXT: ;;#ASMEND6481; GFX942-NEXT: s_setpc_b64 s[30:31]6482 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6483 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6484 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>6485 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6486 ret void6487}6488 6489define void @s_shuffle_v4bf16_v2bf16__3_3_2_3() {6490; GFX900-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_3:6491; GFX900: ; %bb.0:6492; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6493; GFX900-NEXT: ;;#ASMSTART6494; GFX900-NEXT: ; def s96495; GFX900-NEXT: ;;#ASMEND6496; GFX900-NEXT: s_lshr_b32 s4, s9, 166497; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s46498; GFX900-NEXT: ;;#ASMSTART6499; GFX900-NEXT: ; use s[8:9]6500; GFX900-NEXT: ;;#ASMEND6501; GFX900-NEXT: s_setpc_b64 s[30:31]6502;6503; GFX90A-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_3:6504; GFX90A: ; %bb.0:6505; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6506; GFX90A-NEXT: ;;#ASMSTART6507; GFX90A-NEXT: ; def s96508; GFX90A-NEXT: ;;#ASMEND6509; GFX90A-NEXT: s_lshr_b32 s4, s9, 166510; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s46511; GFX90A-NEXT: ;;#ASMSTART6512; GFX90A-NEXT: ; use s[8:9]6513; GFX90A-NEXT: ;;#ASMEND6514; GFX90A-NEXT: s_setpc_b64 s[30:31]6515;6516; GFX942-LABEL: s_shuffle_v4bf16_v2bf16__3_3_2_3:6517; GFX942: ; %bb.0:6518; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6519; GFX942-NEXT: ;;#ASMSTART6520; GFX942-NEXT: ; def s96521; GFX942-NEXT: ;;#ASMEND6522; GFX942-NEXT: s_lshr_b32 s0, s9, 166523; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s06524; GFX942-NEXT: ;;#ASMSTART6525; GFX942-NEXT: ; use s[8:9]6526; GFX942-NEXT: ;;#ASMEND6527; GFX942-NEXT: s_setpc_b64 s[30:31]6528 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()6529 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()6530 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>6531 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %shuf)6532 ret void6533}6534;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:6535; GFX90APLUS: {{.*}}6536