7330 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_v2bf16_v4bf16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2bf16_v4bf16__u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()13 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> poison14 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 415 ret void16}17 18define void @v_shuffle_v2bf16_v4bf16__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v2, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v[0:1]25; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dword v2, v0, s[16:17]27; GFX900-NEXT: s_waitcnt vmcnt(0)28; GFX900-NEXT: s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v2, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v[0:1]36; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]38; GFX90A-NEXT: s_waitcnt vmcnt(0)39; GFX90A-NEXT: s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v2, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v[0:1]47; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dword v2, v0, s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()52 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 poison>53 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 454 ret void55}56 57define void @v_shuffle_v2bf16_v4bf16__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: ;;#ASMSTART62; GFX900-NEXT: ; def v[0:1]63; GFX900-NEXT: ;;#ASMEND64; GFX900-NEXT: v_mov_b32_e32 v2, 065; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 1666; GFX900-NEXT: global_store_dword v2, v0, s[16:17]67; GFX900-NEXT: s_waitcnt vmcnt(0)68; GFX900-NEXT: s_setpc_b64 s[30:31]69;70; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_u:71; GFX90A: ; %bb.0:72; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; GFX90A-NEXT: ;;#ASMSTART74; GFX90A-NEXT: ; def v[0:1]75; GFX90A-NEXT: ;;#ASMEND76; GFX90A-NEXT: v_mov_b32_e32 v2, 077; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 1678; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]79; GFX90A-NEXT: s_waitcnt vmcnt(0)80; GFX90A-NEXT: s_setpc_b64 s[30:31]81;82; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_u:83; GFX942: ; %bb.0:84; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX942-NEXT: ;;#ASMSTART86; GFX942-NEXT: ; def v[0:1]87; GFX942-NEXT: ;;#ASMEND88; GFX942-NEXT: v_mov_b32_e32 v2, 089; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 1690; GFX942-NEXT: global_store_dword v2, v0, s[0:1]91; GFX942-NEXT: s_waitcnt vmcnt(0)92; GFX942-NEXT: s_setpc_b64 s[30:31]93 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()94 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 poison>95 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 496 ret void97}98 99define void @v_shuffle_v2bf16_v4bf16__2_u(ptr addrspace(1) inreg %ptr) {100; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_u:101; GFX900: ; %bb.0:102; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX900-NEXT: v_mov_b32_e32 v2, 0104; GFX900-NEXT: ;;#ASMSTART105; GFX900-NEXT: ; def v[0:1]106; GFX900-NEXT: ;;#ASMEND107; GFX900-NEXT: global_store_dword v2, v1, s[16:17]108; GFX900-NEXT: s_waitcnt vmcnt(0)109; GFX900-NEXT: s_setpc_b64 s[30:31]110;111; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_u:112; GFX90A: ; %bb.0:113; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX90A-NEXT: v_mov_b32_e32 v2, 0115; GFX90A-NEXT: ;;#ASMSTART116; GFX90A-NEXT: ; def v[0:1]117; GFX90A-NEXT: ;;#ASMEND118; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]119; GFX90A-NEXT: s_waitcnt vmcnt(0)120; GFX90A-NEXT: s_setpc_b64 s[30:31]121;122; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_u:123; GFX942: ; %bb.0:124; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)125; GFX942-NEXT: v_mov_b32_e32 v2, 0126; GFX942-NEXT: ;;#ASMSTART127; GFX942-NEXT: ; def v[0:1]128; GFX942-NEXT: ;;#ASMEND129; GFX942-NEXT: global_store_dword v2, v1, s[0:1]130; GFX942-NEXT: s_waitcnt vmcnt(0)131; GFX942-NEXT: s_setpc_b64 s[30:31]132 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()133 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 poison>134 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4135 ret void136}137 138define void @v_shuffle_v2bf16_v4bf16__3_u(ptr addrspace(1) inreg %ptr) {139; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_u:140; GFX900: ; %bb.0:141; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)142; GFX900-NEXT: ;;#ASMSTART143; GFX900-NEXT: ; def v[0:1]144; GFX900-NEXT: ;;#ASMEND145; GFX900-NEXT: v_mov_b32_e32 v2, 0146; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 16147; GFX900-NEXT: global_store_dword v2, v0, s[16:17]148; GFX900-NEXT: s_waitcnt vmcnt(0)149; GFX900-NEXT: s_setpc_b64 s[30:31]150;151; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_u:152; GFX90A: ; %bb.0:153; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)154; GFX90A-NEXT: ;;#ASMSTART155; GFX90A-NEXT: ; def v[0:1]156; GFX90A-NEXT: ;;#ASMEND157; GFX90A-NEXT: v_mov_b32_e32 v2, 0158; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 16159; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]160; GFX90A-NEXT: s_waitcnt vmcnt(0)161; GFX90A-NEXT: s_setpc_b64 s[30:31]162;163; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_u:164; GFX942: ; %bb.0:165; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)166; GFX942-NEXT: ;;#ASMSTART167; GFX942-NEXT: ; def v[0:1]168; GFX942-NEXT: ;;#ASMEND169; GFX942-NEXT: v_mov_b32_e32 v2, 0170; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 16171; GFX942-NEXT: global_store_dword v2, v0, s[0:1]172; GFX942-NEXT: s_waitcnt vmcnt(0)173; GFX942-NEXT: s_setpc_b64 s[30:31]174 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()175 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 poison>176 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4177 ret void178}179 180define void @v_shuffle_v2bf16_v4bf16__4_u(ptr addrspace(1) inreg %ptr) {181; GFX9-LABEL: v_shuffle_v2bf16_v4bf16__4_u:182; GFX9: ; %bb.0:183; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)184; GFX9-NEXT: s_setpc_b64 s[30:31]185 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()186 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 poison>187 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4188 ret void189}190 191define void @v_shuffle_v2bf16_v4bf16__5_u(ptr addrspace(1) inreg %ptr) {192; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_u:193; GFX900: ; %bb.0:194; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)195; GFX900-NEXT: ;;#ASMSTART196; GFX900-NEXT: ; def v[0:1]197; GFX900-NEXT: ;;#ASMEND198; GFX900-NEXT: v_mov_b32_e32 v2, 0199; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 16200; GFX900-NEXT: global_store_dword v2, v0, s[16:17]201; GFX900-NEXT: s_waitcnt vmcnt(0)202; GFX900-NEXT: s_setpc_b64 s[30:31]203;204; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_u:205; GFX90A: ; %bb.0:206; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)207; GFX90A-NEXT: ;;#ASMSTART208; GFX90A-NEXT: ; def v[0:1]209; GFX90A-NEXT: ;;#ASMEND210; GFX90A-NEXT: v_mov_b32_e32 v2, 0211; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 16212; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]213; GFX90A-NEXT: s_waitcnt vmcnt(0)214; GFX90A-NEXT: s_setpc_b64 s[30:31]215;216; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_u:217; GFX942: ; %bb.0:218; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)219; GFX942-NEXT: ;;#ASMSTART220; GFX942-NEXT: ; def v[0:1]221; GFX942-NEXT: ;;#ASMEND222; GFX942-NEXT: v_mov_b32_e32 v2, 0223; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 16224; GFX942-NEXT: global_store_dword v2, v0, s[0:1]225; GFX942-NEXT: s_waitcnt vmcnt(0)226; GFX942-NEXT: s_setpc_b64 s[30:31]227 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()228 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()229 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 poison>230 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4231 ret void232}233 234define void @v_shuffle_v2bf16_v4bf16__6_u(ptr addrspace(1) inreg %ptr) {235; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_u:236; GFX900: ; %bb.0:237; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)238; GFX900-NEXT: v_mov_b32_e32 v2, 0239; GFX900-NEXT: ;;#ASMSTART240; GFX900-NEXT: ; def v[0:1]241; GFX900-NEXT: ;;#ASMEND242; GFX900-NEXT: global_store_dword v2, v1, s[16:17]243; GFX900-NEXT: s_waitcnt vmcnt(0)244; GFX900-NEXT: s_setpc_b64 s[30:31]245;246; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_u:247; GFX90A: ; %bb.0:248; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)249; GFX90A-NEXT: v_mov_b32_e32 v2, 0250; GFX90A-NEXT: ;;#ASMSTART251; GFX90A-NEXT: ; def v[0:1]252; GFX90A-NEXT: ;;#ASMEND253; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]254; GFX90A-NEXT: s_waitcnt vmcnt(0)255; GFX90A-NEXT: s_setpc_b64 s[30:31]256;257; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_u:258; GFX942: ; %bb.0:259; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)260; GFX942-NEXT: v_mov_b32_e32 v2, 0261; GFX942-NEXT: ;;#ASMSTART262; GFX942-NEXT: ; def v[0:1]263; GFX942-NEXT: ;;#ASMEND264; GFX942-NEXT: global_store_dword v2, v1, s[0:1]265; GFX942-NEXT: s_waitcnt vmcnt(0)266; GFX942-NEXT: s_setpc_b64 s[30:31]267 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()268 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()269 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 poison>270 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4271 ret void272}273 274define void @v_shuffle_v2bf16_v4bf16__7_u(ptr addrspace(1) inreg %ptr) {275; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_u:276; GFX900: ; %bb.0:277; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX900-NEXT: ;;#ASMSTART279; GFX900-NEXT: ; def v[0:1]280; GFX900-NEXT: ;;#ASMEND281; GFX900-NEXT: v_mov_b32_e32 v2, 0282; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 16283; GFX900-NEXT: global_store_dword v2, v0, s[16:17]284; GFX900-NEXT: s_waitcnt vmcnt(0)285; GFX900-NEXT: s_setpc_b64 s[30:31]286;287; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_u:288; GFX90A: ; %bb.0:289; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX90A-NEXT: ;;#ASMSTART291; GFX90A-NEXT: ; def v[0:1]292; GFX90A-NEXT: ;;#ASMEND293; GFX90A-NEXT: v_mov_b32_e32 v2, 0294; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 16295; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]296; GFX90A-NEXT: s_waitcnt vmcnt(0)297; GFX90A-NEXT: s_setpc_b64 s[30:31]298;299; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_u:300; GFX942: ; %bb.0:301; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)302; GFX942-NEXT: ;;#ASMSTART303; GFX942-NEXT: ; def v[0:1]304; GFX942-NEXT: ;;#ASMEND305; GFX942-NEXT: v_mov_b32_e32 v2, 0306; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 16307; GFX942-NEXT: global_store_dword v2, v0, s[0:1]308; GFX942-NEXT: s_waitcnt vmcnt(0)309; GFX942-NEXT: s_setpc_b64 s[30:31]310 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()311 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()312 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 poison>313 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4314 ret void315}316 317define void @v_shuffle_v2bf16_v4bf16__7_0(ptr addrspace(1) inreg %ptr) {318; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_0:319; GFX900: ; %bb.0:320; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)321; GFX900-NEXT: ;;#ASMSTART322; GFX900-NEXT: ; def v[0:1]323; GFX900-NEXT: ;;#ASMEND324; GFX900-NEXT: v_mov_b32_e32 v3, 0325; GFX900-NEXT: ;;#ASMSTART326; GFX900-NEXT: ; def v[1:2]327; GFX900-NEXT: ;;#ASMEND328; GFX900-NEXT: v_alignbit_b32 v0, v0, v2, 16329; GFX900-NEXT: global_store_dword v3, v0, s[16:17]330; GFX900-NEXT: s_waitcnt vmcnt(0)331; GFX900-NEXT: s_setpc_b64 s[30:31]332;333; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_0:334; GFX90A: ; %bb.0:335; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)336; GFX90A-NEXT: ;;#ASMSTART337; GFX90A-NEXT: ; def v[0:1]338; GFX90A-NEXT: ;;#ASMEND339; GFX90A-NEXT: v_mov_b32_e32 v4, 0340; GFX90A-NEXT: ;;#ASMSTART341; GFX90A-NEXT: ; def v[2:3]342; GFX90A-NEXT: ;;#ASMEND343; GFX90A-NEXT: v_alignbit_b32 v0, v0, v3, 16344; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]345; GFX90A-NEXT: s_waitcnt vmcnt(0)346; GFX90A-NEXT: s_setpc_b64 s[30:31]347;348; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_0:349; GFX942: ; %bb.0:350; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)351; GFX942-NEXT: ;;#ASMSTART352; GFX942-NEXT: ; def v[0:1]353; GFX942-NEXT: ;;#ASMEND354; GFX942-NEXT: v_mov_b32_e32 v4, 0355; GFX942-NEXT: ;;#ASMSTART356; GFX942-NEXT: ; def v[2:3]357; GFX942-NEXT: ;;#ASMEND358; GFX942-NEXT: s_nop 0359; GFX942-NEXT: v_alignbit_b32 v0, v0, v3, 16360; GFX942-NEXT: global_store_dword v4, v0, s[0:1]361; GFX942-NEXT: s_waitcnt vmcnt(0)362; GFX942-NEXT: s_setpc_b64 s[30:31]363 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()364 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()365 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 0>366 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4367 ret void368}369 370define void @v_shuffle_v2bf16_v4bf16__7_1(ptr addrspace(1) inreg %ptr) {371; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_1:372; GFX900: ; %bb.0:373; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)374; GFX900-NEXT: ;;#ASMSTART375; GFX900-NEXT: ; def v[0:1]376; GFX900-NEXT: ;;#ASMEND377; GFX900-NEXT: s_mov_b32 s4, 0x7060302378; GFX900-NEXT: v_mov_b32_e32 v3, 0379; GFX900-NEXT: ;;#ASMSTART380; GFX900-NEXT: ; def v[1:2]381; GFX900-NEXT: ;;#ASMEND382; GFX900-NEXT: v_perm_b32 v0, v0, v2, s4383; GFX900-NEXT: global_store_dword v3, v0, s[16:17]384; GFX900-NEXT: s_waitcnt vmcnt(0)385; GFX900-NEXT: s_setpc_b64 s[30:31]386;387; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_1:388; GFX90A: ; %bb.0:389; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)390; GFX90A-NEXT: ;;#ASMSTART391; GFX90A-NEXT: ; def v[0:1]392; GFX90A-NEXT: ;;#ASMEND393; GFX90A-NEXT: s_mov_b32 s4, 0x7060302394; GFX90A-NEXT: v_mov_b32_e32 v4, 0395; GFX90A-NEXT: ;;#ASMSTART396; GFX90A-NEXT: ; def v[2:3]397; GFX90A-NEXT: ;;#ASMEND398; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s4399; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]400; GFX90A-NEXT: s_waitcnt vmcnt(0)401; GFX90A-NEXT: s_setpc_b64 s[30:31]402;403; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_1:404; GFX942: ; %bb.0:405; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)406; GFX942-NEXT: ;;#ASMSTART407; GFX942-NEXT: ; def v[0:1]408; GFX942-NEXT: ;;#ASMEND409; GFX942-NEXT: s_mov_b32 s2, 0x7060302410; GFX942-NEXT: v_mov_b32_e32 v4, 0411; GFX942-NEXT: ;;#ASMSTART412; GFX942-NEXT: ; def v[2:3]413; GFX942-NEXT: ;;#ASMEND414; GFX942-NEXT: s_nop 0415; GFX942-NEXT: v_perm_b32 v0, v0, v3, s2416; GFX942-NEXT: global_store_dword v4, v0, s[0:1]417; GFX942-NEXT: s_waitcnt vmcnt(0)418; GFX942-NEXT: s_setpc_b64 s[30:31]419 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()420 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()421 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 1>422 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4423 ret void424}425 426define void @v_shuffle_v2bf16_v4bf16__7_2(ptr addrspace(1) inreg %ptr) {427; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_2:428; GFX900: ; %bb.0:429; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)430; GFX900-NEXT: ;;#ASMSTART431; GFX900-NEXT: ; def v[0:1]432; GFX900-NEXT: ;;#ASMEND433; GFX900-NEXT: v_mov_b32_e32 v4, 0434; GFX900-NEXT: ;;#ASMSTART435; GFX900-NEXT: ; def v[2:3]436; GFX900-NEXT: ;;#ASMEND437; GFX900-NEXT: v_alignbit_b32 v0, v1, v3, 16438; GFX900-NEXT: global_store_dword v4, v0, s[16:17]439; GFX900-NEXT: s_waitcnt vmcnt(0)440; GFX900-NEXT: s_setpc_b64 s[30:31]441;442; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_2:443; GFX90A: ; %bb.0:444; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)445; GFX90A-NEXT: ;;#ASMSTART446; GFX90A-NEXT: ; def v[0:1]447; GFX90A-NEXT: ;;#ASMEND448; GFX90A-NEXT: v_mov_b32_e32 v4, 0449; GFX90A-NEXT: ;;#ASMSTART450; GFX90A-NEXT: ; def v[2:3]451; GFX90A-NEXT: ;;#ASMEND452; GFX90A-NEXT: v_alignbit_b32 v0, v1, v3, 16453; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]454; GFX90A-NEXT: s_waitcnt vmcnt(0)455; GFX90A-NEXT: s_setpc_b64 s[30:31]456;457; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_2:458; GFX942: ; %bb.0:459; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)460; GFX942-NEXT: ;;#ASMSTART461; GFX942-NEXT: ; def v[0:1]462; GFX942-NEXT: ;;#ASMEND463; GFX942-NEXT: v_mov_b32_e32 v4, 0464; GFX942-NEXT: ;;#ASMSTART465; GFX942-NEXT: ; def v[2:3]466; GFX942-NEXT: ;;#ASMEND467; GFX942-NEXT: s_nop 0468; GFX942-NEXT: v_alignbit_b32 v0, v1, v3, 16469; GFX942-NEXT: global_store_dword v4, v0, s[0:1]470; GFX942-NEXT: s_waitcnt vmcnt(0)471; GFX942-NEXT: s_setpc_b64 s[30:31]472 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()473 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()474 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 2>475 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4476 ret void477}478 479define void @v_shuffle_v2bf16_v4bf16__7_3(ptr addrspace(1) inreg %ptr) {480; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_3:481; GFX900: ; %bb.0:482; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)483; GFX900-NEXT: ;;#ASMSTART484; GFX900-NEXT: ; def v[0:1]485; GFX900-NEXT: ;;#ASMEND486; GFX900-NEXT: s_mov_b32 s4, 0x7060302487; GFX900-NEXT: v_mov_b32_e32 v4, 0488; GFX900-NEXT: ;;#ASMSTART489; GFX900-NEXT: ; def v[2:3]490; GFX900-NEXT: ;;#ASMEND491; GFX900-NEXT: v_perm_b32 v0, v1, v3, s4492; GFX900-NEXT: global_store_dword v4, v0, s[16:17]493; GFX900-NEXT: s_waitcnt vmcnt(0)494; GFX900-NEXT: s_setpc_b64 s[30:31]495;496; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_3:497; GFX90A: ; %bb.0:498; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)499; GFX90A-NEXT: ;;#ASMSTART500; GFX90A-NEXT: ; def v[0:1]501; GFX90A-NEXT: ;;#ASMEND502; GFX90A-NEXT: s_mov_b32 s4, 0x7060302503; GFX90A-NEXT: v_mov_b32_e32 v4, 0504; GFX90A-NEXT: ;;#ASMSTART505; GFX90A-NEXT: ; def v[2:3]506; GFX90A-NEXT: ;;#ASMEND507; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s4508; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]509; GFX90A-NEXT: s_waitcnt vmcnt(0)510; GFX90A-NEXT: s_setpc_b64 s[30:31]511;512; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_3:513; GFX942: ; %bb.0:514; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)515; GFX942-NEXT: ;;#ASMSTART516; GFX942-NEXT: ; def v[0:1]517; GFX942-NEXT: ;;#ASMEND518; GFX942-NEXT: s_mov_b32 s2, 0x7060302519; GFX942-NEXT: v_mov_b32_e32 v4, 0520; GFX942-NEXT: ;;#ASMSTART521; GFX942-NEXT: ; def v[2:3]522; GFX942-NEXT: ;;#ASMEND523; GFX942-NEXT: s_nop 0524; GFX942-NEXT: v_perm_b32 v0, v1, v3, s2525; GFX942-NEXT: global_store_dword v4, v0, s[0:1]526; GFX942-NEXT: s_waitcnt vmcnt(0)527; GFX942-NEXT: s_setpc_b64 s[30:31]528 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()529 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()530 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 3>531 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4532 ret void533}534 535define void @v_shuffle_v2bf16_v4bf16__7_4(ptr addrspace(1) inreg %ptr) {536; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_4:537; GFX900: ; %bb.0:538; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)539; GFX900-NEXT: ;;#ASMSTART540; GFX900-NEXT: ; def v[0:1]541; GFX900-NEXT: ;;#ASMEND542; GFX900-NEXT: v_mov_b32_e32 v2, 0543; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16544; GFX900-NEXT: global_store_dword v2, v0, s[16:17]545; GFX900-NEXT: s_waitcnt vmcnt(0)546; GFX900-NEXT: s_setpc_b64 s[30:31]547;548; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_4:549; GFX90A: ; %bb.0:550; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)551; GFX90A-NEXT: ;;#ASMSTART552; GFX90A-NEXT: ; def v[0:1]553; GFX90A-NEXT: ;;#ASMEND554; GFX90A-NEXT: v_mov_b32_e32 v2, 0555; GFX90A-NEXT: v_alignbit_b32 v0, v0, v1, 16556; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]557; GFX90A-NEXT: s_waitcnt vmcnt(0)558; GFX90A-NEXT: s_setpc_b64 s[30:31]559;560; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_4:561; GFX942: ; %bb.0:562; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)563; GFX942-NEXT: ;;#ASMSTART564; GFX942-NEXT: ; def v[0:1]565; GFX942-NEXT: ;;#ASMEND566; GFX942-NEXT: v_mov_b32_e32 v2, 0567; GFX942-NEXT: v_alignbit_b32 v0, v0, v1, 16568; GFX942-NEXT: global_store_dword v2, v0, s[0:1]569; GFX942-NEXT: s_waitcnt vmcnt(0)570; GFX942-NEXT: s_setpc_b64 s[30:31]571 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()572 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()573 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 4>574 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4575 ret void576}577 578define void @v_shuffle_v2bf16_v4bf16__7_5(ptr addrspace(1) inreg %ptr) {579; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_5:580; GFX900: ; %bb.0:581; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)582; GFX900-NEXT: ;;#ASMSTART583; GFX900-NEXT: ; def v[0:1]584; GFX900-NEXT: ;;#ASMEND585; GFX900-NEXT: s_mov_b32 s4, 0x7060302586; GFX900-NEXT: v_mov_b32_e32 v2, 0587; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4588; GFX900-NEXT: global_store_dword v2, v0, s[16:17]589; GFX900-NEXT: s_waitcnt vmcnt(0)590; GFX900-NEXT: s_setpc_b64 s[30:31]591;592; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_5:593; GFX90A: ; %bb.0:594; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)595; GFX90A-NEXT: ;;#ASMSTART596; GFX90A-NEXT: ; def v[0:1]597; GFX90A-NEXT: ;;#ASMEND598; GFX90A-NEXT: s_mov_b32 s4, 0x7060302599; GFX90A-NEXT: v_mov_b32_e32 v2, 0600; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4601; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]602; GFX90A-NEXT: s_waitcnt vmcnt(0)603; GFX90A-NEXT: s_setpc_b64 s[30:31]604;605; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_5:606; GFX942: ; %bb.0:607; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)608; GFX942-NEXT: ;;#ASMSTART609; GFX942-NEXT: ; def v[0:1]610; GFX942-NEXT: ;;#ASMEND611; GFX942-NEXT: s_mov_b32 s2, 0x7060302612; GFX942-NEXT: v_mov_b32_e32 v2, 0613; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2614; GFX942-NEXT: global_store_dword v2, v0, s[0:1]615; GFX942-NEXT: s_waitcnt vmcnt(0)616; GFX942-NEXT: s_setpc_b64 s[30:31]617 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()618 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()619 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 5>620 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4621 ret void622}623 624define void @v_shuffle_v2bf16_v4bf16__7_6(ptr addrspace(1) inreg %ptr) {625; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_6:626; GFX900: ; %bb.0:627; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)628; GFX900-NEXT: ;;#ASMSTART629; GFX900-NEXT: ; def v[0:1]630; GFX900-NEXT: ;;#ASMEND631; GFX900-NEXT: v_mov_b32_e32 v2, 0632; GFX900-NEXT: v_alignbit_b32 v0, v1, v1, 16633; GFX900-NEXT: global_store_dword v2, v0, s[16:17]634; GFX900-NEXT: s_waitcnt vmcnt(0)635; GFX900-NEXT: s_setpc_b64 s[30:31]636;637; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_6:638; GFX90A: ; %bb.0:639; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)640; GFX90A-NEXT: ;;#ASMSTART641; GFX90A-NEXT: ; def v[0:1]642; GFX90A-NEXT: ;;#ASMEND643; GFX90A-NEXT: v_mov_b32_e32 v2, 0644; GFX90A-NEXT: v_alignbit_b32 v0, v1, v1, 16645; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]646; GFX90A-NEXT: s_waitcnt vmcnt(0)647; GFX90A-NEXT: s_setpc_b64 s[30:31]648;649; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_6:650; GFX942: ; %bb.0:651; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)652; GFX942-NEXT: ;;#ASMSTART653; GFX942-NEXT: ; def v[0:1]654; GFX942-NEXT: ;;#ASMEND655; GFX942-NEXT: v_mov_b32_e32 v2, 0656; GFX942-NEXT: v_alignbit_b32 v0, v1, v1, 16657; GFX942-NEXT: global_store_dword v2, v0, s[0:1]658; GFX942-NEXT: s_waitcnt vmcnt(0)659; GFX942-NEXT: s_setpc_b64 s[30:31]660 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()661 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()662 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 6>663 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4664 ret void665}666 667define void @v_shuffle_v2bf16_v4bf16__7_7(ptr addrspace(1) inreg %ptr) {668; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__7_7:669; GFX900: ; %bb.0:670; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX900-NEXT: ;;#ASMSTART672; GFX900-NEXT: ; def v[0:1]673; GFX900-NEXT: ;;#ASMEND674; GFX900-NEXT: s_mov_b32 s4, 0x7060302675; GFX900-NEXT: v_mov_b32_e32 v2, 0676; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4677; GFX900-NEXT: global_store_dword v2, v0, s[16:17]678; GFX900-NEXT: s_waitcnt vmcnt(0)679; GFX900-NEXT: s_setpc_b64 s[30:31]680;681; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__7_7:682; GFX90A: ; %bb.0:683; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)684; GFX90A-NEXT: ;;#ASMSTART685; GFX90A-NEXT: ; def v[0:1]686; GFX90A-NEXT: ;;#ASMEND687; GFX90A-NEXT: s_mov_b32 s4, 0x7060302688; GFX90A-NEXT: v_mov_b32_e32 v2, 0689; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4690; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]691; GFX90A-NEXT: s_waitcnt vmcnt(0)692; GFX90A-NEXT: s_setpc_b64 s[30:31]693;694; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__7_7:695; GFX942: ; %bb.0:696; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)697; GFX942-NEXT: ;;#ASMSTART698; GFX942-NEXT: ; def v[0:1]699; GFX942-NEXT: ;;#ASMEND700; GFX942-NEXT: s_mov_b32 s2, 0x7060302701; GFX942-NEXT: v_mov_b32_e32 v2, 0702; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2703; GFX942-NEXT: global_store_dword v2, v0, s[0:1]704; GFX942-NEXT: s_waitcnt vmcnt(0)705; GFX942-NEXT: s_setpc_b64 s[30:31]706 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()707 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()708 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 7>709 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4710 ret void711}712 713define void @v_shuffle_v2bf16_v4bf16__u_0(ptr addrspace(1) inreg %ptr) {714; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_0:715; GFX900: ; %bb.0:716; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)717; GFX900-NEXT: ;;#ASMSTART718; GFX900-NEXT: ; def v[0:1]719; GFX900-NEXT: ;;#ASMEND720; GFX900-NEXT: v_mov_b32_e32 v2, 0721; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0722; GFX900-NEXT: global_store_dword v2, v0, s[16:17]723; GFX900-NEXT: s_waitcnt vmcnt(0)724; GFX900-NEXT: s_setpc_b64 s[30:31]725;726; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_0:727; GFX90A: ; %bb.0:728; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)729; GFX90A-NEXT: ;;#ASMSTART730; GFX90A-NEXT: ; def v[0:1]731; GFX90A-NEXT: ;;#ASMEND732; GFX90A-NEXT: v_mov_b32_e32 v2, 0733; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0734; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]735; GFX90A-NEXT: s_waitcnt vmcnt(0)736; GFX90A-NEXT: s_setpc_b64 s[30:31]737;738; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_0:739; GFX942: ; %bb.0:740; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)741; GFX942-NEXT: ;;#ASMSTART742; GFX942-NEXT: ; def v[0:1]743; GFX942-NEXT: ;;#ASMEND744; GFX942-NEXT: v_mov_b32_e32 v2, 0745; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0746; GFX942-NEXT: global_store_dword v2, v0, s[0:1]747; GFX942-NEXT: s_waitcnt vmcnt(0)748; GFX942-NEXT: s_setpc_b64 s[30:31]749 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()750 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 0>751 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4752 ret void753}754 755define void @v_shuffle_v2bf16_v4bf16__0_0(ptr addrspace(1) inreg %ptr) {756; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_0:757; GFX900: ; %bb.0:758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)759; GFX900-NEXT: ;;#ASMSTART760; GFX900-NEXT: ; def v[0:1]761; GFX900-NEXT: ;;#ASMEND762; GFX900-NEXT: s_mov_b32 s4, 0x5040100763; GFX900-NEXT: v_mov_b32_e32 v2, 0764; GFX900-NEXT: v_perm_b32 v0, v0, v0, s4765; GFX900-NEXT: global_store_dword v2, v0, s[16:17]766; GFX900-NEXT: s_waitcnt vmcnt(0)767; GFX900-NEXT: s_setpc_b64 s[30:31]768;769; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_0:770; GFX90A: ; %bb.0:771; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)772; GFX90A-NEXT: ;;#ASMSTART773; GFX90A-NEXT: ; def v[0:1]774; GFX90A-NEXT: ;;#ASMEND775; GFX90A-NEXT: s_mov_b32 s4, 0x5040100776; GFX90A-NEXT: v_mov_b32_e32 v2, 0777; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s4778; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]779; GFX90A-NEXT: s_waitcnt vmcnt(0)780; GFX90A-NEXT: s_setpc_b64 s[30:31]781;782; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_0:783; GFX942: ; %bb.0:784; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)785; GFX942-NEXT: ;;#ASMSTART786; GFX942-NEXT: ; def v[0:1]787; GFX942-NEXT: ;;#ASMEND788; GFX942-NEXT: s_mov_b32 s2, 0x5040100789; GFX942-NEXT: v_mov_b32_e32 v2, 0790; GFX942-NEXT: v_perm_b32 v0, v0, v0, s2791; GFX942-NEXT: global_store_dword v2, v0, s[0:1]792; GFX942-NEXT: s_waitcnt vmcnt(0)793; GFX942-NEXT: s_setpc_b64 s[30:31]794 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()795 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> zeroinitializer796 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4797 ret void798}799 800define void @v_shuffle_v2bf16_v4bf16__1_0(ptr addrspace(1) inreg %ptr) {801; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_0:802; GFX900: ; %bb.0:803; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)804; GFX900-NEXT: ;;#ASMSTART805; GFX900-NEXT: ; def v[0:1]806; GFX900-NEXT: ;;#ASMEND807; GFX900-NEXT: v_mov_b32_e32 v2, 0808; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 16809; GFX900-NEXT: global_store_dword v2, v0, s[16:17]810; GFX900-NEXT: s_waitcnt vmcnt(0)811; GFX900-NEXT: s_setpc_b64 s[30:31]812;813; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_0:814; GFX90A: ; %bb.0:815; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)816; GFX90A-NEXT: ;;#ASMSTART817; GFX90A-NEXT: ; def v[0:1]818; GFX90A-NEXT: ;;#ASMEND819; GFX90A-NEXT: v_mov_b32_e32 v2, 0820; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 16821; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]822; GFX90A-NEXT: s_waitcnt vmcnt(0)823; GFX90A-NEXT: s_setpc_b64 s[30:31]824;825; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_0:826; GFX942: ; %bb.0:827; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)828; GFX942-NEXT: ;;#ASMSTART829; GFX942-NEXT: ; def v[0:1]830; GFX942-NEXT: ;;#ASMEND831; GFX942-NEXT: v_mov_b32_e32 v2, 0832; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 16833; GFX942-NEXT: global_store_dword v2, v0, s[0:1]834; GFX942-NEXT: s_waitcnt vmcnt(0)835; GFX942-NEXT: s_setpc_b64 s[30:31]836 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()837 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 0>838 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4839 ret void840}841 842define void @v_shuffle_v2bf16_v4bf16__2_0(ptr addrspace(1) inreg %ptr) {843; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_0:844; GFX900: ; %bb.0:845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)846; GFX900-NEXT: ;;#ASMSTART847; GFX900-NEXT: ; def v[0:1]848; GFX900-NEXT: ;;#ASMEND849; GFX900-NEXT: s_mov_b32 s4, 0x5040100850; GFX900-NEXT: v_mov_b32_e32 v2, 0851; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4852; GFX900-NEXT: global_store_dword v2, v0, s[16:17]853; GFX900-NEXT: s_waitcnt vmcnt(0)854; GFX900-NEXT: s_setpc_b64 s[30:31]855;856; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_0:857; GFX90A: ; %bb.0:858; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)859; GFX90A-NEXT: ;;#ASMSTART860; GFX90A-NEXT: ; def v[0:1]861; GFX90A-NEXT: ;;#ASMEND862; GFX90A-NEXT: s_mov_b32 s4, 0x5040100863; GFX90A-NEXT: v_mov_b32_e32 v2, 0864; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4865; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]866; GFX90A-NEXT: s_waitcnt vmcnt(0)867; GFX90A-NEXT: s_setpc_b64 s[30:31]868;869; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_0:870; GFX942: ; %bb.0:871; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)872; GFX942-NEXT: ;;#ASMSTART873; GFX942-NEXT: ; def v[0:1]874; GFX942-NEXT: ;;#ASMEND875; GFX942-NEXT: s_mov_b32 s2, 0x5040100876; GFX942-NEXT: v_mov_b32_e32 v2, 0877; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2878; GFX942-NEXT: global_store_dword v2, v0, s[0:1]879; GFX942-NEXT: s_waitcnt vmcnt(0)880; GFX942-NEXT: s_setpc_b64 s[30:31]881 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()882 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 0>883 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4884 ret void885}886 887define void @v_shuffle_v2bf16_v4bf16__3_0(ptr addrspace(1) inreg %ptr) {888; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_0:889; GFX900: ; %bb.0:890; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)891; GFX900-NEXT: ;;#ASMSTART892; GFX900-NEXT: ; def v[0:1]893; GFX900-NEXT: ;;#ASMEND894; GFX900-NEXT: v_mov_b32_e32 v2, 0895; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16896; GFX900-NEXT: global_store_dword v2, v0, s[16:17]897; GFX900-NEXT: s_waitcnt vmcnt(0)898; GFX900-NEXT: s_setpc_b64 s[30:31]899;900; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_0:901; GFX90A: ; %bb.0:902; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)903; GFX90A-NEXT: ;;#ASMSTART904; GFX90A-NEXT: ; def v[0:1]905; GFX90A-NEXT: ;;#ASMEND906; GFX90A-NEXT: v_mov_b32_e32 v2, 0907; GFX90A-NEXT: v_alignbit_b32 v0, v0, v1, 16908; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]909; GFX90A-NEXT: s_waitcnt vmcnt(0)910; GFX90A-NEXT: s_setpc_b64 s[30:31]911;912; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_0:913; GFX942: ; %bb.0:914; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)915; GFX942-NEXT: ;;#ASMSTART916; GFX942-NEXT: ; def v[0:1]917; GFX942-NEXT: ;;#ASMEND918; GFX942-NEXT: v_mov_b32_e32 v2, 0919; GFX942-NEXT: v_alignbit_b32 v0, v0, v1, 16920; GFX942-NEXT: global_store_dword v2, v0, s[0:1]921; GFX942-NEXT: s_waitcnt vmcnt(0)922; GFX942-NEXT: s_setpc_b64 s[30:31]923 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()924 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 0>925 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4926 ret void927}928 929define void @v_shuffle_v2bf16_v4bf16__4_0(ptr addrspace(1) inreg %ptr) {930; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_0:931; GFX900: ; %bb.0:932; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)933; GFX900-NEXT: ;;#ASMSTART934; GFX900-NEXT: ; def v[0:1]935; GFX900-NEXT: ;;#ASMEND936; GFX900-NEXT: v_mov_b32_e32 v2, 0937; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v0938; GFX900-NEXT: global_store_dword v2, v0, s[16:17]939; GFX900-NEXT: s_waitcnt vmcnt(0)940; GFX900-NEXT: s_setpc_b64 s[30:31]941;942; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_0:943; GFX90A: ; %bb.0:944; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)945; GFX90A-NEXT: ;;#ASMSTART946; GFX90A-NEXT: ; def v[0:1]947; GFX90A-NEXT: ;;#ASMEND948; GFX90A-NEXT: v_mov_b32_e32 v2, 0949; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v0950; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]951; GFX90A-NEXT: s_waitcnt vmcnt(0)952; GFX90A-NEXT: s_setpc_b64 s[30:31]953;954; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_0:955; GFX942: ; %bb.0:956; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)957; GFX942-NEXT: ;;#ASMSTART958; GFX942-NEXT: ; def v[0:1]959; GFX942-NEXT: ;;#ASMEND960; GFX942-NEXT: v_mov_b32_e32 v2, 0961; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v0962; GFX942-NEXT: global_store_dword v2, v0, s[0:1]963; GFX942-NEXT: s_waitcnt vmcnt(0)964; GFX942-NEXT: s_setpc_b64 s[30:31]965 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()966 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 0>967 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4968 ret void969}970 971define void @v_shuffle_v2bf16_v4bf16__5_0(ptr addrspace(1) inreg %ptr) {972; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_0:973; GFX900: ; %bb.0:974; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)975; GFX900-NEXT: ;;#ASMSTART976; GFX900-NEXT: ; def v[0:1]977; GFX900-NEXT: ;;#ASMEND978; GFX900-NEXT: v_mov_b32_e32 v3, 0979; GFX900-NEXT: ;;#ASMSTART980; GFX900-NEXT: ; def v[1:2]981; GFX900-NEXT: ;;#ASMEND982; GFX900-NEXT: v_alignbit_b32 v0, v0, v1, 16983; GFX900-NEXT: global_store_dword v3, v0, s[16:17]984; GFX900-NEXT: s_waitcnt vmcnt(0)985; GFX900-NEXT: s_setpc_b64 s[30:31]986;987; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_0:988; GFX90A: ; %bb.0:989; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)990; GFX90A-NEXT: ;;#ASMSTART991; GFX90A-NEXT: ; def v[0:1]992; GFX90A-NEXT: ;;#ASMEND993; GFX90A-NEXT: v_mov_b32_e32 v4, 0994; GFX90A-NEXT: ;;#ASMSTART995; GFX90A-NEXT: ; def v[2:3]996; GFX90A-NEXT: ;;#ASMEND997; GFX90A-NEXT: v_alignbit_b32 v0, v0, v2, 16998; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]999; GFX90A-NEXT: s_waitcnt vmcnt(0)1000; GFX90A-NEXT: s_setpc_b64 s[30:31]1001;1002; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_0:1003; GFX942: ; %bb.0:1004; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1005; GFX942-NEXT: ;;#ASMSTART1006; GFX942-NEXT: ; def v[0:1]1007; GFX942-NEXT: ;;#ASMEND1008; GFX942-NEXT: v_mov_b32_e32 v4, 01009; GFX942-NEXT: ;;#ASMSTART1010; GFX942-NEXT: ; def v[2:3]1011; GFX942-NEXT: ;;#ASMEND1012; GFX942-NEXT: s_nop 01013; GFX942-NEXT: v_alignbit_b32 v0, v0, v2, 161014; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1015; GFX942-NEXT: s_waitcnt vmcnt(0)1016; GFX942-NEXT: s_setpc_b64 s[30:31]1017 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1018 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1019 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 0>1020 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41021 ret void1022}1023 1024define void @v_shuffle_v2bf16_v4bf16__6_0(ptr addrspace(1) inreg %ptr) {1025; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_0:1026; GFX900: ; %bb.0:1027; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1028; GFX900-NEXT: ;;#ASMSTART1029; GFX900-NEXT: ; def v[0:1]1030; GFX900-NEXT: ;;#ASMEND1031; GFX900-NEXT: s_mov_b32 s4, 0x50401001032; GFX900-NEXT: v_mov_b32_e32 v3, 01033; GFX900-NEXT: ;;#ASMSTART1034; GFX900-NEXT: ; def v[1:2]1035; GFX900-NEXT: ;;#ASMEND1036; GFX900-NEXT: v_perm_b32 v0, v0, v2, s41037; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1038; GFX900-NEXT: s_waitcnt vmcnt(0)1039; GFX900-NEXT: s_setpc_b64 s[30:31]1040;1041; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_0:1042; GFX90A: ; %bb.0:1043; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1044; GFX90A-NEXT: ;;#ASMSTART1045; GFX90A-NEXT: ; def v[0:1]1046; GFX90A-NEXT: ;;#ASMEND1047; GFX90A-NEXT: s_mov_b32 s4, 0x50401001048; GFX90A-NEXT: v_mov_b32_e32 v4, 01049; GFX90A-NEXT: ;;#ASMSTART1050; GFX90A-NEXT: ; def v[2:3]1051; GFX90A-NEXT: ;;#ASMEND1052; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s41053; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1054; GFX90A-NEXT: s_waitcnt vmcnt(0)1055; GFX90A-NEXT: s_setpc_b64 s[30:31]1056;1057; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_0:1058; GFX942: ; %bb.0:1059; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1060; GFX942-NEXT: ;;#ASMSTART1061; GFX942-NEXT: ; def v[0:1]1062; GFX942-NEXT: ;;#ASMEND1063; GFX942-NEXT: s_mov_b32 s2, 0x50401001064; GFX942-NEXT: v_mov_b32_e32 v4, 01065; GFX942-NEXT: ;;#ASMSTART1066; GFX942-NEXT: ; def v[2:3]1067; GFX942-NEXT: ;;#ASMEND1068; GFX942-NEXT: s_nop 01069; GFX942-NEXT: v_perm_b32 v0, v0, v3, s21070; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1071; GFX942-NEXT: s_waitcnt vmcnt(0)1072; GFX942-NEXT: s_setpc_b64 s[30:31]1073 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1074 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1075 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 0>1076 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41077 ret void1078}1079 1080define void @v_shuffle_v2bf16_v4bf16__u_1(ptr addrspace(1) inreg %ptr) {1081; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_1:1082; GFX900: ; %bb.0:1083; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1084; GFX900-NEXT: v_mov_b32_e32 v2, 01085; GFX900-NEXT: ;;#ASMSTART1086; GFX900-NEXT: ; def v[0:1]1087; GFX900-NEXT: ;;#ASMEND1088; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1089; GFX900-NEXT: s_waitcnt vmcnt(0)1090; GFX900-NEXT: s_setpc_b64 s[30:31]1091;1092; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_1:1093; GFX90A: ; %bb.0:1094; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1095; GFX90A-NEXT: v_mov_b32_e32 v2, 01096; GFX90A-NEXT: ;;#ASMSTART1097; GFX90A-NEXT: ; def v[0:1]1098; GFX90A-NEXT: ;;#ASMEND1099; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1100; GFX90A-NEXT: s_waitcnt vmcnt(0)1101; GFX90A-NEXT: s_setpc_b64 s[30:31]1102;1103; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_1:1104; GFX942: ; %bb.0:1105; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1106; GFX942-NEXT: v_mov_b32_e32 v2, 01107; GFX942-NEXT: ;;#ASMSTART1108; GFX942-NEXT: ; def v[0:1]1109; GFX942-NEXT: ;;#ASMEND1110; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1111; GFX942-NEXT: s_waitcnt vmcnt(0)1112; GFX942-NEXT: s_setpc_b64 s[30:31]1113 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1114 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 1>1115 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41116 ret void1117}1118 1119define void @v_shuffle_v2bf16_v4bf16__0_1(ptr addrspace(1) inreg %ptr) {1120; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_1:1121; GFX900: ; %bb.0:1122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1123; GFX900-NEXT: v_mov_b32_e32 v2, 01124; GFX900-NEXT: ;;#ASMSTART1125; GFX900-NEXT: ; def v[0:1]1126; GFX900-NEXT: ;;#ASMEND1127; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1128; GFX900-NEXT: s_waitcnt vmcnt(0)1129; GFX900-NEXT: s_setpc_b64 s[30:31]1130;1131; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_1:1132; GFX90A: ; %bb.0:1133; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1134; GFX90A-NEXT: v_mov_b32_e32 v2, 01135; GFX90A-NEXT: ;;#ASMSTART1136; GFX90A-NEXT: ; def v[0:1]1137; GFX90A-NEXT: ;;#ASMEND1138; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1139; GFX90A-NEXT: s_waitcnt vmcnt(0)1140; GFX90A-NEXT: s_setpc_b64 s[30:31]1141;1142; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_1:1143; GFX942: ; %bb.0:1144; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1145; GFX942-NEXT: v_mov_b32_e32 v2, 01146; GFX942-NEXT: ;;#ASMSTART1147; GFX942-NEXT: ; def v[0:1]1148; GFX942-NEXT: ;;#ASMEND1149; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1150; GFX942-NEXT: s_waitcnt vmcnt(0)1151; GFX942-NEXT: s_setpc_b64 s[30:31]1152 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1153 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 1>1154 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41155 ret void1156}1157 1158define void @v_shuffle_v2bf16_v4bf16__1_1(ptr addrspace(1) inreg %ptr) {1159; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_1:1160; GFX900: ; %bb.0:1161; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1162; GFX900-NEXT: ;;#ASMSTART1163; GFX900-NEXT: ; def v[0:1]1164; GFX900-NEXT: ;;#ASMEND1165; GFX900-NEXT: s_mov_b32 s4, 0x70603021166; GFX900-NEXT: v_mov_b32_e32 v2, 01167; GFX900-NEXT: v_perm_b32 v0, v0, v0, s41168; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1169; GFX900-NEXT: s_waitcnt vmcnt(0)1170; GFX900-NEXT: s_setpc_b64 s[30:31]1171;1172; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_1:1173; GFX90A: ; %bb.0:1174; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1175; GFX90A-NEXT: ;;#ASMSTART1176; GFX90A-NEXT: ; def v[0:1]1177; GFX90A-NEXT: ;;#ASMEND1178; GFX90A-NEXT: s_mov_b32 s4, 0x70603021179; GFX90A-NEXT: v_mov_b32_e32 v2, 01180; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s41181; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1182; GFX90A-NEXT: s_waitcnt vmcnt(0)1183; GFX90A-NEXT: s_setpc_b64 s[30:31]1184;1185; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_1:1186; GFX942: ; %bb.0:1187; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1188; GFX942-NEXT: ;;#ASMSTART1189; GFX942-NEXT: ; def v[0:1]1190; GFX942-NEXT: ;;#ASMEND1191; GFX942-NEXT: s_mov_b32 s2, 0x70603021192; GFX942-NEXT: v_mov_b32_e32 v2, 01193; GFX942-NEXT: v_perm_b32 v0, v0, v0, s21194; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1195; GFX942-NEXT: s_waitcnt vmcnt(0)1196; GFX942-NEXT: s_setpc_b64 s[30:31]1197 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1198 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 1>1199 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41200 ret void1201}1202 1203define void @v_shuffle_v2bf16_v4bf16__2_1(ptr addrspace(1) inreg %ptr) {1204; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_1:1205; GFX900: ; %bb.0:1206; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1207; GFX900-NEXT: ;;#ASMSTART1208; GFX900-NEXT: ; def v[0:1]1209; GFX900-NEXT: ;;#ASMEND1210; GFX900-NEXT: s_mov_b32 s4, 0xffff1211; GFX900-NEXT: v_mov_b32_e32 v2, 01212; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v01213; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1214; GFX900-NEXT: s_waitcnt vmcnt(0)1215; GFX900-NEXT: s_setpc_b64 s[30:31]1216;1217; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_1:1218; GFX90A: ; %bb.0:1219; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1220; GFX90A-NEXT: ;;#ASMSTART1221; GFX90A-NEXT: ; def v[0:1]1222; GFX90A-NEXT: ;;#ASMEND1223; GFX90A-NEXT: s_mov_b32 s4, 0xffff1224; GFX90A-NEXT: v_mov_b32_e32 v2, 01225; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v01226; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1227; GFX90A-NEXT: s_waitcnt vmcnt(0)1228; GFX90A-NEXT: s_setpc_b64 s[30:31]1229;1230; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_1:1231; GFX942: ; %bb.0:1232; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1233; GFX942-NEXT: ;;#ASMSTART1234; GFX942-NEXT: ; def v[0:1]1235; GFX942-NEXT: ;;#ASMEND1236; GFX942-NEXT: s_mov_b32 s2, 0xffff1237; GFX942-NEXT: v_mov_b32_e32 v2, 01238; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v01239; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1240; GFX942-NEXT: s_waitcnt vmcnt(0)1241; GFX942-NEXT: s_setpc_b64 s[30:31]1242 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1243 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 1>1244 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41245 ret void1246}1247 1248define void @v_shuffle_v2bf16_v4bf16__3_1(ptr addrspace(1) inreg %ptr) {1249; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_1:1250; GFX900: ; %bb.0:1251; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1252; GFX900-NEXT: ;;#ASMSTART1253; GFX900-NEXT: ; def v[0:1]1254; GFX900-NEXT: ;;#ASMEND1255; GFX900-NEXT: s_mov_b32 s4, 0x70603021256; GFX900-NEXT: v_mov_b32_e32 v2, 01257; GFX900-NEXT: v_perm_b32 v0, v0, v1, s41258; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1259; GFX900-NEXT: s_waitcnt vmcnt(0)1260; GFX900-NEXT: s_setpc_b64 s[30:31]1261;1262; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_1:1263; GFX90A: ; %bb.0:1264; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1265; GFX90A-NEXT: ;;#ASMSTART1266; GFX90A-NEXT: ; def v[0:1]1267; GFX90A-NEXT: ;;#ASMEND1268; GFX90A-NEXT: s_mov_b32 s4, 0x70603021269; GFX90A-NEXT: v_mov_b32_e32 v2, 01270; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s41271; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1272; GFX90A-NEXT: s_waitcnt vmcnt(0)1273; GFX90A-NEXT: s_setpc_b64 s[30:31]1274;1275; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_1:1276; GFX942: ; %bb.0:1277; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1278; GFX942-NEXT: ;;#ASMSTART1279; GFX942-NEXT: ; def v[0:1]1280; GFX942-NEXT: ;;#ASMEND1281; GFX942-NEXT: s_mov_b32 s2, 0x70603021282; GFX942-NEXT: v_mov_b32_e32 v2, 01283; GFX942-NEXT: v_perm_b32 v0, v0, v1, s21284; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1285; GFX942-NEXT: s_waitcnt vmcnt(0)1286; GFX942-NEXT: s_setpc_b64 s[30:31]1287 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1288 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 1>1289 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41290 ret void1291}1292 1293define void @v_shuffle_v2bf16_v4bf16__4_1(ptr addrspace(1) inreg %ptr) {1294; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_1:1295; GFX900: ; %bb.0:1296; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1297; GFX900-NEXT: v_mov_b32_e32 v2, 01298; GFX900-NEXT: ;;#ASMSTART1299; GFX900-NEXT: ; def v[0:1]1300; GFX900-NEXT: ;;#ASMEND1301; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1302; GFX900-NEXT: s_waitcnt vmcnt(0)1303; GFX900-NEXT: s_setpc_b64 s[30:31]1304;1305; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_1:1306; GFX90A: ; %bb.0:1307; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1308; GFX90A-NEXT: v_mov_b32_e32 v2, 01309; GFX90A-NEXT: ;;#ASMSTART1310; GFX90A-NEXT: ; def v[0:1]1311; GFX90A-NEXT: ;;#ASMEND1312; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1313; GFX90A-NEXT: s_waitcnt vmcnt(0)1314; GFX90A-NEXT: s_setpc_b64 s[30:31]1315;1316; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_1:1317; GFX942: ; %bb.0:1318; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1319; GFX942-NEXT: v_mov_b32_e32 v2, 01320; GFX942-NEXT: ;;#ASMSTART1321; GFX942-NEXT: ; def v[0:1]1322; GFX942-NEXT: ;;#ASMEND1323; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1324; GFX942-NEXT: s_waitcnt vmcnt(0)1325; GFX942-NEXT: s_setpc_b64 s[30:31]1326 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1327 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 1>1328 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41329 ret void1330}1331 1332define void @v_shuffle_v2bf16_v4bf16__5_1(ptr addrspace(1) inreg %ptr) {1333; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_1:1334; GFX900: ; %bb.0:1335; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1336; GFX900-NEXT: ;;#ASMSTART1337; GFX900-NEXT: ; def v[0:1]1338; GFX900-NEXT: ;;#ASMEND1339; GFX900-NEXT: s_mov_b32 s4, 0x70603021340; GFX900-NEXT: v_mov_b32_e32 v3, 01341; GFX900-NEXT: ;;#ASMSTART1342; GFX900-NEXT: ; def v[1:2]1343; GFX900-NEXT: ;;#ASMEND1344; GFX900-NEXT: v_perm_b32 v0, v0, v1, s41345; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1346; GFX900-NEXT: s_waitcnt vmcnt(0)1347; GFX900-NEXT: s_setpc_b64 s[30:31]1348;1349; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_1:1350; GFX90A: ; %bb.0:1351; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1352; GFX90A-NEXT: ;;#ASMSTART1353; GFX90A-NEXT: ; def v[0:1]1354; GFX90A-NEXT: ;;#ASMEND1355; GFX90A-NEXT: s_mov_b32 s4, 0x70603021356; GFX90A-NEXT: v_mov_b32_e32 v4, 01357; GFX90A-NEXT: ;;#ASMSTART1358; GFX90A-NEXT: ; def v[2:3]1359; GFX90A-NEXT: ;;#ASMEND1360; GFX90A-NEXT: v_perm_b32 v0, v0, v2, s41361; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1362; GFX90A-NEXT: s_waitcnt vmcnt(0)1363; GFX90A-NEXT: s_setpc_b64 s[30:31]1364;1365; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_1:1366; GFX942: ; %bb.0:1367; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1368; GFX942-NEXT: ;;#ASMSTART1369; GFX942-NEXT: ; def v[0:1]1370; GFX942-NEXT: ;;#ASMEND1371; GFX942-NEXT: s_mov_b32 s2, 0x70603021372; GFX942-NEXT: v_mov_b32_e32 v4, 01373; GFX942-NEXT: ;;#ASMSTART1374; GFX942-NEXT: ; def v[2:3]1375; GFX942-NEXT: ;;#ASMEND1376; GFX942-NEXT: s_nop 01377; GFX942-NEXT: v_perm_b32 v0, v0, v2, s21378; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1379; GFX942-NEXT: s_waitcnt vmcnt(0)1380; GFX942-NEXT: s_setpc_b64 s[30:31]1381 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1382 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1383 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 1>1384 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41385 ret void1386}1387 1388define void @v_shuffle_v2bf16_v4bf16__6_1(ptr addrspace(1) inreg %ptr) {1389; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_1:1390; GFX900: ; %bb.0:1391; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1392; GFX900-NEXT: ;;#ASMSTART1393; GFX900-NEXT: ; def v[0:1]1394; GFX900-NEXT: ;;#ASMEND1395; GFX900-NEXT: s_mov_b32 s4, 0xffff1396; GFX900-NEXT: v_mov_b32_e32 v3, 01397; GFX900-NEXT: ;;#ASMSTART1398; GFX900-NEXT: ; def v[1:2]1399; GFX900-NEXT: ;;#ASMEND1400; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v01401; GFX900-NEXT: global_store_dword v3, v0, s[16:17]1402; GFX900-NEXT: s_waitcnt vmcnt(0)1403; GFX900-NEXT: s_setpc_b64 s[30:31]1404;1405; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_1:1406; GFX90A: ; %bb.0:1407; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1408; GFX90A-NEXT: ;;#ASMSTART1409; GFX90A-NEXT: ; def v[0:1]1410; GFX90A-NEXT: ;;#ASMEND1411; GFX90A-NEXT: s_mov_b32 s4, 0xffff1412; GFX90A-NEXT: v_mov_b32_e32 v4, 01413; GFX90A-NEXT: ;;#ASMSTART1414; GFX90A-NEXT: ; def v[2:3]1415; GFX90A-NEXT: ;;#ASMEND1416; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v01417; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1418; GFX90A-NEXT: s_waitcnt vmcnt(0)1419; GFX90A-NEXT: s_setpc_b64 s[30:31]1420;1421; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_1:1422; GFX942: ; %bb.0:1423; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1424; GFX942-NEXT: ;;#ASMSTART1425; GFX942-NEXT: ; def v[0:1]1426; GFX942-NEXT: ;;#ASMEND1427; GFX942-NEXT: s_mov_b32 s2, 0xffff1428; GFX942-NEXT: v_mov_b32_e32 v4, 01429; GFX942-NEXT: ;;#ASMSTART1430; GFX942-NEXT: ; def v[2:3]1431; GFX942-NEXT: ;;#ASMEND1432; GFX942-NEXT: s_nop 01433; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v01434; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1435; GFX942-NEXT: s_waitcnt vmcnt(0)1436; GFX942-NEXT: s_setpc_b64 s[30:31]1437 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1438 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1439 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 1>1440 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41441 ret void1442}1443 1444define void @v_shuffle_v2bf16_v4bf16__u_2(ptr addrspace(1) inreg %ptr) {1445; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_2:1446; GFX900: ; %bb.0:1447; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1448; GFX900-NEXT: ;;#ASMSTART1449; GFX900-NEXT: ; def v[0:1]1450; GFX900-NEXT: ;;#ASMEND1451; GFX900-NEXT: v_mov_b32_e32 v2, 01452; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11453; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1454; GFX900-NEXT: s_waitcnt vmcnt(0)1455; GFX900-NEXT: s_setpc_b64 s[30:31]1456;1457; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_2:1458; GFX90A: ; %bb.0:1459; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1460; GFX90A-NEXT: ;;#ASMSTART1461; GFX90A-NEXT: ; def v[0:1]1462; GFX90A-NEXT: ;;#ASMEND1463; GFX90A-NEXT: v_mov_b32_e32 v2, 01464; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11465; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1466; GFX90A-NEXT: s_waitcnt vmcnt(0)1467; GFX90A-NEXT: s_setpc_b64 s[30:31]1468;1469; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_2:1470; GFX942: ; %bb.0:1471; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1472; GFX942-NEXT: ;;#ASMSTART1473; GFX942-NEXT: ; def v[0:1]1474; GFX942-NEXT: ;;#ASMEND1475; GFX942-NEXT: v_mov_b32_e32 v2, 01476; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11477; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1478; GFX942-NEXT: s_waitcnt vmcnt(0)1479; GFX942-NEXT: s_setpc_b64 s[30:31]1480 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1481 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 2>1482 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41483 ret void1484}1485 1486define void @v_shuffle_v2bf16_v4bf16__0_2(ptr addrspace(1) inreg %ptr) {1487; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_2:1488; GFX900: ; %bb.0:1489; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1490; GFX900-NEXT: ;;#ASMSTART1491; GFX900-NEXT: ; def v[0:1]1492; GFX900-NEXT: ;;#ASMEND1493; GFX900-NEXT: s_mov_b32 s4, 0x50401001494; GFX900-NEXT: v_mov_b32_e32 v2, 01495; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41496; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1497; GFX900-NEXT: s_waitcnt vmcnt(0)1498; GFX900-NEXT: s_setpc_b64 s[30:31]1499;1500; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_2:1501; GFX90A: ; %bb.0:1502; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1503; GFX90A-NEXT: ;;#ASMSTART1504; GFX90A-NEXT: ; def v[0:1]1505; GFX90A-NEXT: ;;#ASMEND1506; GFX90A-NEXT: s_mov_b32 s4, 0x50401001507; GFX90A-NEXT: v_mov_b32_e32 v2, 01508; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41509; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1510; GFX90A-NEXT: s_waitcnt vmcnt(0)1511; GFX90A-NEXT: s_setpc_b64 s[30:31]1512;1513; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_2:1514; GFX942: ; %bb.0:1515; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1516; GFX942-NEXT: ;;#ASMSTART1517; GFX942-NEXT: ; def v[0:1]1518; GFX942-NEXT: ;;#ASMEND1519; GFX942-NEXT: s_mov_b32 s2, 0x50401001520; GFX942-NEXT: v_mov_b32_e32 v2, 01521; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21522; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1523; GFX942-NEXT: s_waitcnt vmcnt(0)1524; GFX942-NEXT: s_setpc_b64 s[30:31]1525 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1526 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 2>1527 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41528 ret void1529}1530 1531define void @v_shuffle_v2bf16_v4bf16__1_2(ptr addrspace(1) inreg %ptr) {1532; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_2:1533; GFX900: ; %bb.0:1534; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1535; GFX900-NEXT: ;;#ASMSTART1536; GFX900-NEXT: ; def v[0:1]1537; GFX900-NEXT: ;;#ASMEND1538; GFX900-NEXT: v_mov_b32_e32 v2, 01539; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 161540; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1541; GFX900-NEXT: s_waitcnt vmcnt(0)1542; GFX900-NEXT: s_setpc_b64 s[30:31]1543;1544; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_2:1545; GFX90A: ; %bb.0:1546; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1547; GFX90A-NEXT: ;;#ASMSTART1548; GFX90A-NEXT: ; def v[0:1]1549; GFX90A-NEXT: ;;#ASMEND1550; GFX90A-NEXT: v_mov_b32_e32 v2, 01551; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 161552; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1553; GFX90A-NEXT: s_waitcnt vmcnt(0)1554; GFX90A-NEXT: s_setpc_b64 s[30:31]1555;1556; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_2:1557; GFX942: ; %bb.0:1558; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1559; GFX942-NEXT: ;;#ASMSTART1560; GFX942-NEXT: ; def v[0:1]1561; GFX942-NEXT: ;;#ASMEND1562; GFX942-NEXT: v_mov_b32_e32 v2, 01563; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 161564; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1565; GFX942-NEXT: s_waitcnt vmcnt(0)1566; GFX942-NEXT: s_setpc_b64 s[30:31]1567 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1568 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 2>1569 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41570 ret void1571}1572 1573define void @v_shuffle_v2bf16_v4bf16__2_2(ptr addrspace(1) inreg %ptr) {1574; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_2:1575; GFX900: ; %bb.0:1576; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1577; GFX900-NEXT: ;;#ASMSTART1578; GFX900-NEXT: ; def v[0:1]1579; GFX900-NEXT: ;;#ASMEND1580; GFX900-NEXT: s_mov_b32 s4, 0x50401001581; GFX900-NEXT: v_mov_b32_e32 v2, 01582; GFX900-NEXT: v_perm_b32 v0, v1, v1, s41583; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1584; GFX900-NEXT: s_waitcnt vmcnt(0)1585; GFX900-NEXT: s_setpc_b64 s[30:31]1586;1587; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_2:1588; GFX90A: ; %bb.0:1589; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1590; GFX90A-NEXT: ;;#ASMSTART1591; GFX90A-NEXT: ; def v[0:1]1592; GFX90A-NEXT: ;;#ASMEND1593; GFX90A-NEXT: s_mov_b32 s4, 0x50401001594; GFX90A-NEXT: v_mov_b32_e32 v2, 01595; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s41596; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1597; GFX90A-NEXT: s_waitcnt vmcnt(0)1598; GFX90A-NEXT: s_setpc_b64 s[30:31]1599;1600; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_2:1601; GFX942: ; %bb.0:1602; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1603; GFX942-NEXT: ;;#ASMSTART1604; GFX942-NEXT: ; def v[0:1]1605; GFX942-NEXT: ;;#ASMEND1606; GFX942-NEXT: s_mov_b32 s2, 0x50401001607; GFX942-NEXT: v_mov_b32_e32 v2, 01608; GFX942-NEXT: v_perm_b32 v0, v1, v1, s21609; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1610; GFX942-NEXT: s_waitcnt vmcnt(0)1611; GFX942-NEXT: s_setpc_b64 s[30:31]1612 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1613 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 2>1614 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41615 ret void1616}1617 1618define void @v_shuffle_v2bf16_v4bf16__3_2(ptr addrspace(1) inreg %ptr) {1619; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_2:1620; GFX900: ; %bb.0:1621; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1622; GFX900-NEXT: ;;#ASMSTART1623; GFX900-NEXT: ; def v[0:1]1624; GFX900-NEXT: ;;#ASMEND1625; GFX900-NEXT: v_mov_b32_e32 v2, 01626; GFX900-NEXT: v_alignbit_b32 v0, v1, v1, 161627; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1628; GFX900-NEXT: s_waitcnt vmcnt(0)1629; GFX900-NEXT: s_setpc_b64 s[30:31]1630;1631; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_2:1632; GFX90A: ; %bb.0:1633; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1634; GFX90A-NEXT: ;;#ASMSTART1635; GFX90A-NEXT: ; def v[0:1]1636; GFX90A-NEXT: ;;#ASMEND1637; GFX90A-NEXT: v_mov_b32_e32 v2, 01638; GFX90A-NEXT: v_alignbit_b32 v0, v1, v1, 161639; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1640; GFX90A-NEXT: s_waitcnt vmcnt(0)1641; GFX90A-NEXT: s_setpc_b64 s[30:31]1642;1643; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_2:1644; GFX942: ; %bb.0:1645; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1646; GFX942-NEXT: ;;#ASMSTART1647; GFX942-NEXT: ; def v[0:1]1648; GFX942-NEXT: ;;#ASMEND1649; GFX942-NEXT: v_mov_b32_e32 v2, 01650; GFX942-NEXT: v_alignbit_b32 v0, v1, v1, 161651; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1652; GFX942-NEXT: s_waitcnt vmcnt(0)1653; GFX942-NEXT: s_setpc_b64 s[30:31]1654 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1655 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 2>1656 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41657 ret void1658}1659 1660define void @v_shuffle_v2bf16_v4bf16__4_2(ptr addrspace(1) inreg %ptr) {1661; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_2:1662; GFX900: ; %bb.0:1663; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1664; GFX900-NEXT: ;;#ASMSTART1665; GFX900-NEXT: ; def v[0:1]1666; GFX900-NEXT: ;;#ASMEND1667; GFX900-NEXT: v_mov_b32_e32 v2, 01668; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v11669; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1670; GFX900-NEXT: s_waitcnt vmcnt(0)1671; GFX900-NEXT: s_setpc_b64 s[30:31]1672;1673; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_2:1674; GFX90A: ; %bb.0:1675; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1676; GFX90A-NEXT: ;;#ASMSTART1677; GFX90A-NEXT: ; def v[0:1]1678; GFX90A-NEXT: ;;#ASMEND1679; GFX90A-NEXT: v_mov_b32_e32 v2, 01680; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v11681; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1682; GFX90A-NEXT: s_waitcnt vmcnt(0)1683; GFX90A-NEXT: s_setpc_b64 s[30:31]1684;1685; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_2:1686; GFX942: ; %bb.0:1687; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1688; GFX942-NEXT: ;;#ASMSTART1689; GFX942-NEXT: ; def v[0:1]1690; GFX942-NEXT: ;;#ASMEND1691; GFX942-NEXT: v_mov_b32_e32 v2, 01692; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v11693; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1694; GFX942-NEXT: s_waitcnt vmcnt(0)1695; GFX942-NEXT: s_setpc_b64 s[30:31]1696 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1697 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 2>1698 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41699 ret void1700}1701 1702define void @v_shuffle_v2bf16_v4bf16__5_2(ptr addrspace(1) inreg %ptr) {1703; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_2:1704; GFX900: ; %bb.0:1705; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1706; GFX900-NEXT: ;;#ASMSTART1707; GFX900-NEXT: ; def v[0:1]1708; GFX900-NEXT: ;;#ASMEND1709; GFX900-NEXT: v_mov_b32_e32 v4, 01710; GFX900-NEXT: ;;#ASMSTART1711; GFX900-NEXT: ; def v[2:3]1712; GFX900-NEXT: ;;#ASMEND1713; GFX900-NEXT: v_alignbit_b32 v0, v1, v2, 161714; GFX900-NEXT: global_store_dword v4, v0, s[16:17]1715; GFX900-NEXT: s_waitcnt vmcnt(0)1716; GFX900-NEXT: s_setpc_b64 s[30:31]1717;1718; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_2:1719; GFX90A: ; %bb.0:1720; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1721; GFX90A-NEXT: ;;#ASMSTART1722; GFX90A-NEXT: ; def v[0:1]1723; GFX90A-NEXT: ;;#ASMEND1724; GFX90A-NEXT: v_mov_b32_e32 v4, 01725; GFX90A-NEXT: ;;#ASMSTART1726; GFX90A-NEXT: ; def v[2:3]1727; GFX90A-NEXT: ;;#ASMEND1728; GFX90A-NEXT: v_alignbit_b32 v0, v1, v2, 161729; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1730; GFX90A-NEXT: s_waitcnt vmcnt(0)1731; GFX90A-NEXT: s_setpc_b64 s[30:31]1732;1733; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_2:1734; GFX942: ; %bb.0:1735; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1736; GFX942-NEXT: ;;#ASMSTART1737; GFX942-NEXT: ; def v[0:1]1738; GFX942-NEXT: ;;#ASMEND1739; GFX942-NEXT: v_mov_b32_e32 v4, 01740; GFX942-NEXT: ;;#ASMSTART1741; GFX942-NEXT: ; def v[2:3]1742; GFX942-NEXT: ;;#ASMEND1743; GFX942-NEXT: s_nop 01744; GFX942-NEXT: v_alignbit_b32 v0, v1, v2, 161745; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1746; GFX942-NEXT: s_waitcnt vmcnt(0)1747; GFX942-NEXT: s_setpc_b64 s[30:31]1748 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1749 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1750 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 2>1751 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41752 ret void1753}1754 1755define void @v_shuffle_v2bf16_v4bf16__6_2(ptr addrspace(1) inreg %ptr) {1756; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_2:1757; GFX900: ; %bb.0:1758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1759; GFX900-NEXT: ;;#ASMSTART1760; GFX900-NEXT: ; def v[0:1]1761; GFX900-NEXT: ;;#ASMEND1762; GFX900-NEXT: s_mov_b32 s4, 0x50401001763; GFX900-NEXT: v_mov_b32_e32 v4, 01764; GFX900-NEXT: ;;#ASMSTART1765; GFX900-NEXT: ; def v[2:3]1766; GFX900-NEXT: ;;#ASMEND1767; GFX900-NEXT: v_perm_b32 v0, v1, v3, s41768; GFX900-NEXT: global_store_dword v4, v0, s[16:17]1769; GFX900-NEXT: s_waitcnt vmcnt(0)1770; GFX900-NEXT: s_setpc_b64 s[30:31]1771;1772; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_2:1773; GFX90A: ; %bb.0:1774; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1775; GFX90A-NEXT: ;;#ASMSTART1776; GFX90A-NEXT: ; def v[0:1]1777; GFX90A-NEXT: ;;#ASMEND1778; GFX90A-NEXT: s_mov_b32 s4, 0x50401001779; GFX90A-NEXT: v_mov_b32_e32 v4, 01780; GFX90A-NEXT: ;;#ASMSTART1781; GFX90A-NEXT: ; def v[2:3]1782; GFX90A-NEXT: ;;#ASMEND1783; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s41784; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]1785; GFX90A-NEXT: s_waitcnt vmcnt(0)1786; GFX90A-NEXT: s_setpc_b64 s[30:31]1787;1788; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_2:1789; GFX942: ; %bb.0:1790; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1791; GFX942-NEXT: ;;#ASMSTART1792; GFX942-NEXT: ; def v[0:1]1793; GFX942-NEXT: ;;#ASMEND1794; GFX942-NEXT: s_mov_b32 s2, 0x50401001795; GFX942-NEXT: v_mov_b32_e32 v4, 01796; GFX942-NEXT: ;;#ASMSTART1797; GFX942-NEXT: ; def v[2:3]1798; GFX942-NEXT: ;;#ASMEND1799; GFX942-NEXT: s_nop 01800; GFX942-NEXT: v_perm_b32 v0, v1, v3, s21801; GFX942-NEXT: global_store_dword v4, v0, s[0:1]1802; GFX942-NEXT: s_waitcnt vmcnt(0)1803; GFX942-NEXT: s_setpc_b64 s[30:31]1804 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1805 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1806 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 2>1807 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41808 ret void1809}1810 1811define void @v_shuffle_v2bf16_v4bf16__u_3(ptr addrspace(1) inreg %ptr) {1812; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_3:1813; GFX900: ; %bb.0:1814; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1815; GFX900-NEXT: v_mov_b32_e32 v2, 01816; GFX900-NEXT: ;;#ASMSTART1817; GFX900-NEXT: ; def v[0:1]1818; GFX900-NEXT: ;;#ASMEND1819; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1820; GFX900-NEXT: s_waitcnt vmcnt(0)1821; GFX900-NEXT: s_setpc_b64 s[30:31]1822;1823; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_3:1824; GFX90A: ; %bb.0:1825; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1826; GFX90A-NEXT: v_mov_b32_e32 v2, 01827; GFX90A-NEXT: ;;#ASMSTART1828; GFX90A-NEXT: ; def v[0:1]1829; GFX90A-NEXT: ;;#ASMEND1830; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1831; GFX90A-NEXT: s_waitcnt vmcnt(0)1832; GFX90A-NEXT: s_setpc_b64 s[30:31]1833;1834; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_3:1835; GFX942: ; %bb.0:1836; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1837; GFX942-NEXT: v_mov_b32_e32 v2, 01838; GFX942-NEXT: ;;#ASMSTART1839; GFX942-NEXT: ; def v[0:1]1840; GFX942-NEXT: ;;#ASMEND1841; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1842; GFX942-NEXT: s_waitcnt vmcnt(0)1843; GFX942-NEXT: s_setpc_b64 s[30:31]1844 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1845 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 3>1846 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41847 ret void1848}1849 1850define void @v_shuffle_v2bf16_v4bf16__0_3(ptr addrspace(1) inreg %ptr) {1851; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_3:1852; GFX900: ; %bb.0:1853; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1854; GFX900-NEXT: ;;#ASMSTART1855; GFX900-NEXT: ; def v[0:1]1856; GFX900-NEXT: ;;#ASMEND1857; GFX900-NEXT: s_mov_b32 s4, 0xffff1858; GFX900-NEXT: v_mov_b32_e32 v2, 01859; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v11860; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1861; GFX900-NEXT: s_waitcnt vmcnt(0)1862; GFX900-NEXT: s_setpc_b64 s[30:31]1863;1864; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_3:1865; GFX90A: ; %bb.0:1866; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1867; GFX90A-NEXT: ;;#ASMSTART1868; GFX90A-NEXT: ; def v[0:1]1869; GFX90A-NEXT: ;;#ASMEND1870; GFX90A-NEXT: s_mov_b32 s4, 0xffff1871; GFX90A-NEXT: v_mov_b32_e32 v2, 01872; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v11873; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1874; GFX90A-NEXT: s_waitcnt vmcnt(0)1875; GFX90A-NEXT: s_setpc_b64 s[30:31]1876;1877; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_3:1878; GFX942: ; %bb.0:1879; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1880; GFX942-NEXT: ;;#ASMSTART1881; GFX942-NEXT: ; def v[0:1]1882; GFX942-NEXT: ;;#ASMEND1883; GFX942-NEXT: s_mov_b32 s2, 0xffff1884; GFX942-NEXT: v_mov_b32_e32 v2, 01885; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v11886; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1887; GFX942-NEXT: s_waitcnt vmcnt(0)1888; GFX942-NEXT: s_setpc_b64 s[30:31]1889 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1890 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 3>1891 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41892 ret void1893}1894 1895define void @v_shuffle_v2bf16_v4bf16__1_3(ptr addrspace(1) inreg %ptr) {1896; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_3:1897; GFX900: ; %bb.0:1898; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1899; GFX900-NEXT: ;;#ASMSTART1900; GFX900-NEXT: ; def v[0:1]1901; GFX900-NEXT: ;;#ASMEND1902; GFX900-NEXT: s_mov_b32 s4, 0x70603021903; GFX900-NEXT: v_mov_b32_e32 v2, 01904; GFX900-NEXT: v_perm_b32 v0, v1, v0, s41905; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1906; GFX900-NEXT: s_waitcnt vmcnt(0)1907; GFX900-NEXT: s_setpc_b64 s[30:31]1908;1909; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_3:1910; GFX90A: ; %bb.0:1911; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1912; GFX90A-NEXT: ;;#ASMSTART1913; GFX90A-NEXT: ; def v[0:1]1914; GFX90A-NEXT: ;;#ASMEND1915; GFX90A-NEXT: s_mov_b32 s4, 0x70603021916; GFX90A-NEXT: v_mov_b32_e32 v2, 01917; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s41918; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1919; GFX90A-NEXT: s_waitcnt vmcnt(0)1920; GFX90A-NEXT: s_setpc_b64 s[30:31]1921;1922; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_3:1923; GFX942: ; %bb.0:1924; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1925; GFX942-NEXT: ;;#ASMSTART1926; GFX942-NEXT: ; def v[0:1]1927; GFX942-NEXT: ;;#ASMEND1928; GFX942-NEXT: s_mov_b32 s2, 0x70603021929; GFX942-NEXT: v_mov_b32_e32 v2, 01930; GFX942-NEXT: v_perm_b32 v0, v1, v0, s21931; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1932; GFX942-NEXT: s_waitcnt vmcnt(0)1933; GFX942-NEXT: s_setpc_b64 s[30:31]1934 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1935 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 3>1936 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41937 ret void1938}1939 1940define void @v_shuffle_v2bf16_v4bf16__2_3(ptr addrspace(1) inreg %ptr) {1941; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_3:1942; GFX900: ; %bb.0:1943; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1944; GFX900-NEXT: v_mov_b32_e32 v2, 01945; GFX900-NEXT: ;;#ASMSTART1946; GFX900-NEXT: ; def v[0:1]1947; GFX900-NEXT: ;;#ASMEND1948; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1949; GFX900-NEXT: s_waitcnt vmcnt(0)1950; GFX900-NEXT: s_setpc_b64 s[30:31]1951;1952; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_3:1953; GFX90A: ; %bb.0:1954; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1955; GFX90A-NEXT: v_mov_b32_e32 v2, 01956; GFX90A-NEXT: ;;#ASMSTART1957; GFX90A-NEXT: ; def v[0:1]1958; GFX90A-NEXT: ;;#ASMEND1959; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1960; GFX90A-NEXT: s_waitcnt vmcnt(0)1961; GFX90A-NEXT: s_setpc_b64 s[30:31]1962;1963; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_3:1964; GFX942: ; %bb.0:1965; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1966; GFX942-NEXT: v_mov_b32_e32 v2, 01967; GFX942-NEXT: ;;#ASMSTART1968; GFX942-NEXT: ; def v[0:1]1969; GFX942-NEXT: ;;#ASMEND1970; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1971; GFX942-NEXT: s_waitcnt vmcnt(0)1972; GFX942-NEXT: s_setpc_b64 s[30:31]1973 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1974 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 3>1975 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 41976 ret void1977}1978 1979define void @v_shuffle_v2bf16_v4bf16__3_3(ptr addrspace(1) inreg %ptr) {1980; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_3:1981; GFX900: ; %bb.0:1982; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1983; GFX900-NEXT: ;;#ASMSTART1984; GFX900-NEXT: ; def v[0:1]1985; GFX900-NEXT: ;;#ASMEND1986; GFX900-NEXT: s_mov_b32 s4, 0x70603021987; GFX900-NEXT: v_mov_b32_e32 v2, 01988; GFX900-NEXT: v_perm_b32 v0, v1, v1, s41989; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1990; GFX900-NEXT: s_waitcnt vmcnt(0)1991; GFX900-NEXT: s_setpc_b64 s[30:31]1992;1993; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_3:1994; GFX90A: ; %bb.0:1995; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1996; GFX90A-NEXT: ;;#ASMSTART1997; GFX90A-NEXT: ; def v[0:1]1998; GFX90A-NEXT: ;;#ASMEND1999; GFX90A-NEXT: s_mov_b32 s4, 0x70603022000; GFX90A-NEXT: v_mov_b32_e32 v2, 02001; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s42002; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2003; GFX90A-NEXT: s_waitcnt vmcnt(0)2004; GFX90A-NEXT: s_setpc_b64 s[30:31]2005;2006; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_3:2007; GFX942: ; %bb.0:2008; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2009; GFX942-NEXT: ;;#ASMSTART2010; GFX942-NEXT: ; def v[0:1]2011; GFX942-NEXT: ;;#ASMEND2012; GFX942-NEXT: s_mov_b32 s2, 0x70603022013; GFX942-NEXT: v_mov_b32_e32 v2, 02014; GFX942-NEXT: v_perm_b32 v0, v1, v1, s22015; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2016; GFX942-NEXT: s_waitcnt vmcnt(0)2017; GFX942-NEXT: s_setpc_b64 s[30:31]2018 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2019 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 3>2020 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42021 ret void2022}2023 2024define void @v_shuffle_v2bf16_v4bf16__4_3(ptr addrspace(1) inreg %ptr) {2025; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_3:2026; GFX900: ; %bb.0:2027; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2028; GFX900-NEXT: v_mov_b32_e32 v2, 02029; GFX900-NEXT: ;;#ASMSTART2030; GFX900-NEXT: ; def v[0:1]2031; GFX900-NEXT: ;;#ASMEND2032; GFX900-NEXT: global_store_dword v2, v1, s[16:17]2033; GFX900-NEXT: s_waitcnt vmcnt(0)2034; GFX900-NEXT: s_setpc_b64 s[30:31]2035;2036; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_3:2037; GFX90A: ; %bb.0:2038; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2039; GFX90A-NEXT: v_mov_b32_e32 v2, 02040; GFX90A-NEXT: ;;#ASMSTART2041; GFX90A-NEXT: ; def v[0:1]2042; GFX90A-NEXT: ;;#ASMEND2043; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]2044; GFX90A-NEXT: s_waitcnt vmcnt(0)2045; GFX90A-NEXT: s_setpc_b64 s[30:31]2046;2047; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_3:2048; GFX942: ; %bb.0:2049; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2050; GFX942-NEXT: v_mov_b32_e32 v2, 02051; GFX942-NEXT: ;;#ASMSTART2052; GFX942-NEXT: ; def v[0:1]2053; GFX942-NEXT: ;;#ASMEND2054; GFX942-NEXT: global_store_dword v2, v1, s[0:1]2055; GFX942-NEXT: s_waitcnt vmcnt(0)2056; GFX942-NEXT: s_setpc_b64 s[30:31]2057 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2058 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 3>2059 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42060 ret void2061}2062 2063define void @v_shuffle_v2bf16_v4bf16__5_3(ptr addrspace(1) inreg %ptr) {2064; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_3:2065; GFX900: ; %bb.0:2066; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2067; GFX900-NEXT: ;;#ASMSTART2068; GFX900-NEXT: ; def v[0:1]2069; GFX900-NEXT: ;;#ASMEND2070; GFX900-NEXT: s_mov_b32 s4, 0x70603022071; GFX900-NEXT: v_mov_b32_e32 v4, 02072; GFX900-NEXT: ;;#ASMSTART2073; GFX900-NEXT: ; def v[2:3]2074; GFX900-NEXT: ;;#ASMEND2075; GFX900-NEXT: v_perm_b32 v0, v1, v2, s42076; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2077; GFX900-NEXT: s_waitcnt vmcnt(0)2078; GFX900-NEXT: s_setpc_b64 s[30:31]2079;2080; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_3:2081; GFX90A: ; %bb.0:2082; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2083; GFX90A-NEXT: ;;#ASMSTART2084; GFX90A-NEXT: ; def v[0:1]2085; GFX90A-NEXT: ;;#ASMEND2086; GFX90A-NEXT: s_mov_b32 s4, 0x70603022087; GFX90A-NEXT: v_mov_b32_e32 v4, 02088; GFX90A-NEXT: ;;#ASMSTART2089; GFX90A-NEXT: ; def v[2:3]2090; GFX90A-NEXT: ;;#ASMEND2091; GFX90A-NEXT: v_perm_b32 v0, v1, v2, s42092; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2093; GFX90A-NEXT: s_waitcnt vmcnt(0)2094; GFX90A-NEXT: s_setpc_b64 s[30:31]2095;2096; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_3:2097; GFX942: ; %bb.0:2098; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2099; GFX942-NEXT: ;;#ASMSTART2100; GFX942-NEXT: ; def v[0:1]2101; GFX942-NEXT: ;;#ASMEND2102; GFX942-NEXT: s_mov_b32 s2, 0x70603022103; GFX942-NEXT: v_mov_b32_e32 v4, 02104; GFX942-NEXT: ;;#ASMSTART2105; GFX942-NEXT: ; def v[2:3]2106; GFX942-NEXT: ;;#ASMEND2107; GFX942-NEXT: s_nop 02108; GFX942-NEXT: v_perm_b32 v0, v1, v2, s22109; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2110; GFX942-NEXT: s_waitcnt vmcnt(0)2111; GFX942-NEXT: s_setpc_b64 s[30:31]2112 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2113 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2114 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 3>2115 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42116 ret void2117}2118 2119define void @v_shuffle_v2bf16_v4bf16__6_3(ptr addrspace(1) inreg %ptr) {2120; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_3:2121; GFX900: ; %bb.0:2122; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2123; GFX900-NEXT: ;;#ASMSTART2124; GFX900-NEXT: ; def v[0:1]2125; GFX900-NEXT: ;;#ASMEND2126; GFX900-NEXT: s_mov_b32 s4, 0xffff2127; GFX900-NEXT: v_mov_b32_e32 v4, 02128; GFX900-NEXT: ;;#ASMSTART2129; GFX900-NEXT: ; def v[2:3]2130; GFX900-NEXT: ;;#ASMEND2131; GFX900-NEXT: v_bfi_b32 v0, s4, v3, v12132; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2133; GFX900-NEXT: s_waitcnt vmcnt(0)2134; GFX900-NEXT: s_setpc_b64 s[30:31]2135;2136; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_3:2137; GFX90A: ; %bb.0:2138; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2139; GFX90A-NEXT: ;;#ASMSTART2140; GFX90A-NEXT: ; def v[0:1]2141; GFX90A-NEXT: ;;#ASMEND2142; GFX90A-NEXT: s_mov_b32 s4, 0xffff2143; GFX90A-NEXT: v_mov_b32_e32 v4, 02144; GFX90A-NEXT: ;;#ASMSTART2145; GFX90A-NEXT: ; def v[2:3]2146; GFX90A-NEXT: ;;#ASMEND2147; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v12148; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2149; GFX90A-NEXT: s_waitcnt vmcnt(0)2150; GFX90A-NEXT: s_setpc_b64 s[30:31]2151;2152; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_3:2153; GFX942: ; %bb.0:2154; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2155; GFX942-NEXT: ;;#ASMSTART2156; GFX942-NEXT: ; def v[0:1]2157; GFX942-NEXT: ;;#ASMEND2158; GFX942-NEXT: s_mov_b32 s2, 0xffff2159; GFX942-NEXT: v_mov_b32_e32 v4, 02160; GFX942-NEXT: ;;#ASMSTART2161; GFX942-NEXT: ; def v[2:3]2162; GFX942-NEXT: ;;#ASMEND2163; GFX942-NEXT: s_nop 02164; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v12165; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2166; GFX942-NEXT: s_waitcnt vmcnt(0)2167; GFX942-NEXT: s_setpc_b64 s[30:31]2168 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2169 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2170 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 3>2171 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42172 ret void2173}2174 2175define void @v_shuffle_v2bf16_v4bf16__u_4(ptr addrspace(1) inreg %ptr) {2176; GFX9-LABEL: v_shuffle_v2bf16_v4bf16__u_4:2177; GFX9: ; %bb.0:2178; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2179; GFX9-NEXT: s_setpc_b64 s[30:31]2180 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2181 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 4>2182 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42183 ret void2184}2185 2186define void @v_shuffle_v2bf16_v4bf16__0_4(ptr addrspace(1) inreg %ptr) {2187; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_4:2188; GFX900: ; %bb.0:2189; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2190; GFX900-NEXT: v_mov_b32_e32 v2, 02191; GFX900-NEXT: ;;#ASMSTART2192; GFX900-NEXT: ; def v[0:1]2193; GFX900-NEXT: ;;#ASMEND2194; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2195; GFX900-NEXT: s_waitcnt vmcnt(0)2196; GFX900-NEXT: s_setpc_b64 s[30:31]2197;2198; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_4:2199; GFX90A: ; %bb.0:2200; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2201; GFX90A-NEXT: v_mov_b32_e32 v2, 02202; GFX90A-NEXT: ;;#ASMSTART2203; GFX90A-NEXT: ; def v[0:1]2204; GFX90A-NEXT: ;;#ASMEND2205; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2206; GFX90A-NEXT: s_waitcnt vmcnt(0)2207; GFX90A-NEXT: s_setpc_b64 s[30:31]2208;2209; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_4:2210; GFX942: ; %bb.0:2211; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2212; GFX942-NEXT: v_mov_b32_e32 v2, 02213; GFX942-NEXT: ;;#ASMSTART2214; GFX942-NEXT: ; def v[0:1]2215; GFX942-NEXT: ;;#ASMEND2216; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2217; GFX942-NEXT: s_waitcnt vmcnt(0)2218; GFX942-NEXT: s_setpc_b64 s[30:31]2219 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2220 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 4>2221 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42222 ret void2223}2224 2225define void @v_shuffle_v2bf16_v4bf16__1_4(ptr addrspace(1) inreg %ptr) {2226; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_4:2227; GFX900: ; %bb.0:2228; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2229; GFX900-NEXT: ;;#ASMSTART2230; GFX900-NEXT: ; def v[0:1]2231; GFX900-NEXT: ;;#ASMEND2232; GFX900-NEXT: v_mov_b32_e32 v2, 02233; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 162234; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2235; GFX900-NEXT: s_waitcnt vmcnt(0)2236; GFX900-NEXT: s_setpc_b64 s[30:31]2237;2238; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_4:2239; GFX90A: ; %bb.0:2240; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2241; GFX90A-NEXT: ;;#ASMSTART2242; GFX90A-NEXT: ; def v[0:1]2243; GFX90A-NEXT: ;;#ASMEND2244; GFX90A-NEXT: v_mov_b32_e32 v2, 02245; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 162246; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2247; GFX90A-NEXT: s_waitcnt vmcnt(0)2248; GFX90A-NEXT: s_setpc_b64 s[30:31]2249;2250; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_4:2251; GFX942: ; %bb.0:2252; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2253; GFX942-NEXT: ;;#ASMSTART2254; GFX942-NEXT: ; def v[0:1]2255; GFX942-NEXT: ;;#ASMEND2256; GFX942-NEXT: v_mov_b32_e32 v2, 02257; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 162258; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2259; GFX942-NEXT: s_waitcnt vmcnt(0)2260; GFX942-NEXT: s_setpc_b64 s[30:31]2261 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2262 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 4>2263 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42264 ret void2265}2266 2267define void @v_shuffle_v2bf16_v4bf16__2_4(ptr addrspace(1) inreg %ptr) {2268; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_4:2269; GFX900: ; %bb.0:2270; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2271; GFX900-NEXT: v_mov_b32_e32 v2, 02272; GFX900-NEXT: ;;#ASMSTART2273; GFX900-NEXT: ; def v[0:1]2274; GFX900-NEXT: ;;#ASMEND2275; GFX900-NEXT: global_store_dword v2, v1, s[16:17]2276; GFX900-NEXT: s_waitcnt vmcnt(0)2277; GFX900-NEXT: s_setpc_b64 s[30:31]2278;2279; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_4:2280; GFX90A: ; %bb.0:2281; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2282; GFX90A-NEXT: v_mov_b32_e32 v2, 02283; GFX90A-NEXT: ;;#ASMSTART2284; GFX90A-NEXT: ; def v[0:1]2285; GFX90A-NEXT: ;;#ASMEND2286; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]2287; GFX90A-NEXT: s_waitcnt vmcnt(0)2288; GFX90A-NEXT: s_setpc_b64 s[30:31]2289;2290; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_4:2291; GFX942: ; %bb.0:2292; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2293; GFX942-NEXT: v_mov_b32_e32 v2, 02294; GFX942-NEXT: ;;#ASMSTART2295; GFX942-NEXT: ; def v[0:1]2296; GFX942-NEXT: ;;#ASMEND2297; GFX942-NEXT: global_store_dword v2, v1, s[0:1]2298; GFX942-NEXT: s_waitcnt vmcnt(0)2299; GFX942-NEXT: s_setpc_b64 s[30:31]2300 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2301 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 4>2302 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42303 ret void2304}2305 2306define void @v_shuffle_v2bf16_v4bf16__3_4(ptr addrspace(1) inreg %ptr) {2307; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_4:2308; GFX900: ; %bb.0:2309; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2310; GFX900-NEXT: ;;#ASMSTART2311; GFX900-NEXT: ; def v[0:1]2312; GFX900-NEXT: ;;#ASMEND2313; GFX900-NEXT: v_mov_b32_e32 v2, 02314; GFX900-NEXT: v_alignbit_b32 v0, s4, v1, 162315; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2316; GFX900-NEXT: s_waitcnt vmcnt(0)2317; GFX900-NEXT: s_setpc_b64 s[30:31]2318;2319; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_4:2320; GFX90A: ; %bb.0:2321; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2322; GFX90A-NEXT: ;;#ASMSTART2323; GFX90A-NEXT: ; def v[0:1]2324; GFX90A-NEXT: ;;#ASMEND2325; GFX90A-NEXT: v_mov_b32_e32 v2, 02326; GFX90A-NEXT: v_alignbit_b32 v0, s4, v1, 162327; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2328; GFX90A-NEXT: s_waitcnt vmcnt(0)2329; GFX90A-NEXT: s_setpc_b64 s[30:31]2330;2331; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_4:2332; GFX942: ; %bb.0:2333; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2334; GFX942-NEXT: ;;#ASMSTART2335; GFX942-NEXT: ; def v[0:1]2336; GFX942-NEXT: ;;#ASMEND2337; GFX942-NEXT: v_mov_b32_e32 v2, 02338; GFX942-NEXT: v_alignbit_b32 v0, s0, v1, 162339; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2340; GFX942-NEXT: s_waitcnt vmcnt(0)2341; GFX942-NEXT: s_setpc_b64 s[30:31]2342 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2343 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 4>2344 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42345 ret void2346}2347 2348define void @v_shuffle_v2bf16_v4bf16__4_4(ptr addrspace(1) inreg %ptr) {2349; GFX9-LABEL: v_shuffle_v2bf16_v4bf16__4_4:2350; GFX9: ; %bb.0:2351; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2352; GFX9-NEXT: s_setpc_b64 s[30:31]2353 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2354 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 4>2355 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42356 ret void2357}2358 2359define void @v_shuffle_v2bf16_v4bf16__5_4(ptr addrspace(1) inreg %ptr) {2360; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_4:2361; GFX900: ; %bb.0:2362; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2363; GFX900-NEXT: ;;#ASMSTART2364; GFX900-NEXT: ; def v[0:1]2365; GFX900-NEXT: ;;#ASMEND2366; GFX900-NEXT: v_mov_b32_e32 v2, 02367; GFX900-NEXT: v_alignbit_b32 v0, v0, v0, 162368; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2369; GFX900-NEXT: s_waitcnt vmcnt(0)2370; GFX900-NEXT: s_setpc_b64 s[30:31]2371;2372; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_4:2373; GFX90A: ; %bb.0:2374; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2375; GFX90A-NEXT: ;;#ASMSTART2376; GFX90A-NEXT: ; def v[0:1]2377; GFX90A-NEXT: ;;#ASMEND2378; GFX90A-NEXT: v_mov_b32_e32 v2, 02379; GFX90A-NEXT: v_alignbit_b32 v0, v0, v0, 162380; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2381; GFX90A-NEXT: s_waitcnt vmcnt(0)2382; GFX90A-NEXT: s_setpc_b64 s[30:31]2383;2384; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_4:2385; GFX942: ; %bb.0:2386; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2387; GFX942-NEXT: ;;#ASMSTART2388; GFX942-NEXT: ; def v[0:1]2389; GFX942-NEXT: ;;#ASMEND2390; GFX942-NEXT: v_mov_b32_e32 v2, 02391; GFX942-NEXT: v_alignbit_b32 v0, v0, v0, 162392; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2393; GFX942-NEXT: s_waitcnt vmcnt(0)2394; GFX942-NEXT: s_setpc_b64 s[30:31]2395 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2396 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2397 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 4>2398 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42399 ret void2400}2401 2402define void @v_shuffle_v2bf16_v4bf16__6_4(ptr addrspace(1) inreg %ptr) {2403; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_4:2404; GFX900: ; %bb.0:2405; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX900-NEXT: ;;#ASMSTART2407; GFX900-NEXT: ; def v[0:1]2408; GFX900-NEXT: ;;#ASMEND2409; GFX900-NEXT: s_mov_b32 s4, 0x50401002410; GFX900-NEXT: v_mov_b32_e32 v2, 02411; GFX900-NEXT: v_perm_b32 v0, v0, v1, s42412; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2413; GFX900-NEXT: s_waitcnt vmcnt(0)2414; GFX900-NEXT: s_setpc_b64 s[30:31]2415;2416; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_4:2417; GFX90A: ; %bb.0:2418; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2419; GFX90A-NEXT: ;;#ASMSTART2420; GFX90A-NEXT: ; def v[0:1]2421; GFX90A-NEXT: ;;#ASMEND2422; GFX90A-NEXT: s_mov_b32 s4, 0x50401002423; GFX90A-NEXT: v_mov_b32_e32 v2, 02424; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s42425; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2426; GFX90A-NEXT: s_waitcnt vmcnt(0)2427; GFX90A-NEXT: s_setpc_b64 s[30:31]2428;2429; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_4:2430; GFX942: ; %bb.0:2431; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2432; GFX942-NEXT: ;;#ASMSTART2433; GFX942-NEXT: ; def v[0:1]2434; GFX942-NEXT: ;;#ASMEND2435; GFX942-NEXT: s_mov_b32 s2, 0x50401002436; GFX942-NEXT: v_mov_b32_e32 v2, 02437; GFX942-NEXT: v_perm_b32 v0, v0, v1, s22438; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2439; GFX942-NEXT: s_waitcnt vmcnt(0)2440; GFX942-NEXT: s_setpc_b64 s[30:31]2441 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2442 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2443 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 4>2444 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42445 ret void2446}2447 2448define void @v_shuffle_v2bf16_v4bf16__u_5(ptr addrspace(1) inreg %ptr) {2449; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_5:2450; GFX900: ; %bb.0:2451; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2452; GFX900-NEXT: v_mov_b32_e32 v2, 02453; GFX900-NEXT: ;;#ASMSTART2454; GFX900-NEXT: ; def v[0:1]2455; GFX900-NEXT: ;;#ASMEND2456; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2457; GFX900-NEXT: s_waitcnt vmcnt(0)2458; GFX900-NEXT: s_setpc_b64 s[30:31]2459;2460; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_5:2461; GFX90A: ; %bb.0:2462; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2463; GFX90A-NEXT: v_mov_b32_e32 v2, 02464; GFX90A-NEXT: ;;#ASMSTART2465; GFX90A-NEXT: ; def v[0:1]2466; GFX90A-NEXT: ;;#ASMEND2467; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2468; GFX90A-NEXT: s_waitcnt vmcnt(0)2469; GFX90A-NEXT: s_setpc_b64 s[30:31]2470;2471; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_5:2472; GFX942: ; %bb.0:2473; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2474; GFX942-NEXT: v_mov_b32_e32 v2, 02475; GFX942-NEXT: ;;#ASMSTART2476; GFX942-NEXT: ; def v[0:1]2477; GFX942-NEXT: ;;#ASMEND2478; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2479; GFX942-NEXT: s_waitcnt vmcnt(0)2480; GFX942-NEXT: s_setpc_b64 s[30:31]2481 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2482 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2483 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 poison, i32 5>2484 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42485 ret void2486}2487 2488define void @v_shuffle_v2bf16_v4bf16__0_5(ptr addrspace(1) inreg %ptr) {2489; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_5:2490; GFX900: ; %bb.0:2491; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2492; GFX900-NEXT: ;;#ASMSTART2493; GFX900-NEXT: ; def v[0:1]2494; GFX900-NEXT: ;;#ASMEND2495; GFX900-NEXT: s_mov_b32 s4, 0xffff2496; GFX900-NEXT: v_mov_b32_e32 v3, 02497; GFX900-NEXT: ;;#ASMSTART2498; GFX900-NEXT: ; def v[1:2]2499; GFX900-NEXT: ;;#ASMEND2500; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v12501; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2502; GFX900-NEXT: s_waitcnt vmcnt(0)2503; GFX900-NEXT: s_setpc_b64 s[30:31]2504;2505; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_5:2506; GFX90A: ; %bb.0:2507; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2508; GFX90A-NEXT: ;;#ASMSTART2509; GFX90A-NEXT: ; def v[0:1]2510; GFX90A-NEXT: ;;#ASMEND2511; GFX90A-NEXT: s_mov_b32 s4, 0xffff2512; GFX90A-NEXT: v_mov_b32_e32 v4, 02513; GFX90A-NEXT: ;;#ASMSTART2514; GFX90A-NEXT: ; def v[2:3]2515; GFX90A-NEXT: ;;#ASMEND2516; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v22517; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2518; GFX90A-NEXT: s_waitcnt vmcnt(0)2519; GFX90A-NEXT: s_setpc_b64 s[30:31]2520;2521; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_5:2522; GFX942: ; %bb.0:2523; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2524; GFX942-NEXT: ;;#ASMSTART2525; GFX942-NEXT: ; def v[0:1]2526; GFX942-NEXT: ;;#ASMEND2527; GFX942-NEXT: s_mov_b32 s2, 0xffff2528; GFX942-NEXT: v_mov_b32_e32 v4, 02529; GFX942-NEXT: ;;#ASMSTART2530; GFX942-NEXT: ; def v[2:3]2531; GFX942-NEXT: ;;#ASMEND2532; GFX942-NEXT: s_nop 02533; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v22534; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2535; GFX942-NEXT: s_waitcnt vmcnt(0)2536; GFX942-NEXT: s_setpc_b64 s[30:31]2537 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2538 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2539 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 0, i32 5>2540 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42541 ret void2542}2543 2544define void @v_shuffle_v2bf16_v4bf16__1_5(ptr addrspace(1) inreg %ptr) {2545; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_5:2546; GFX900: ; %bb.0:2547; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2548; GFX900-NEXT: ;;#ASMSTART2549; GFX900-NEXT: ; def v[0:1]2550; GFX900-NEXT: ;;#ASMEND2551; GFX900-NEXT: s_mov_b32 s4, 0x70603022552; GFX900-NEXT: v_mov_b32_e32 v3, 02553; GFX900-NEXT: ;;#ASMSTART2554; GFX900-NEXT: ; def v[1:2]2555; GFX900-NEXT: ;;#ASMEND2556; GFX900-NEXT: v_perm_b32 v0, v1, v0, s42557; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2558; GFX900-NEXT: s_waitcnt vmcnt(0)2559; GFX900-NEXT: s_setpc_b64 s[30:31]2560;2561; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_5:2562; GFX90A: ; %bb.0:2563; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2564; GFX90A-NEXT: ;;#ASMSTART2565; GFX90A-NEXT: ; def v[0:1]2566; GFX90A-NEXT: ;;#ASMEND2567; GFX90A-NEXT: s_mov_b32 s4, 0x70603022568; GFX90A-NEXT: v_mov_b32_e32 v4, 02569; GFX90A-NEXT: ;;#ASMSTART2570; GFX90A-NEXT: ; def v[2:3]2571; GFX90A-NEXT: ;;#ASMEND2572; GFX90A-NEXT: v_perm_b32 v0, v2, v0, s42573; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2574; GFX90A-NEXT: s_waitcnt vmcnt(0)2575; GFX90A-NEXT: s_setpc_b64 s[30:31]2576;2577; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_5:2578; GFX942: ; %bb.0:2579; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2580; GFX942-NEXT: ;;#ASMSTART2581; GFX942-NEXT: ; def v[0:1]2582; GFX942-NEXT: ;;#ASMEND2583; GFX942-NEXT: s_mov_b32 s2, 0x70603022584; GFX942-NEXT: v_mov_b32_e32 v4, 02585; GFX942-NEXT: ;;#ASMSTART2586; GFX942-NEXT: ; def v[2:3]2587; GFX942-NEXT: ;;#ASMEND2588; GFX942-NEXT: s_nop 02589; GFX942-NEXT: v_perm_b32 v0, v2, v0, s22590; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2591; GFX942-NEXT: s_waitcnt vmcnt(0)2592; GFX942-NEXT: s_setpc_b64 s[30:31]2593 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2594 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2595 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 1, i32 5>2596 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42597 ret void2598}2599 2600define void @v_shuffle_v2bf16_v4bf16__2_5(ptr addrspace(1) inreg %ptr) {2601; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_5:2602; GFX900: ; %bb.0:2603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2604; GFX900-NEXT: ;;#ASMSTART2605; GFX900-NEXT: ; def v[0:1]2606; GFX900-NEXT: ;;#ASMEND2607; GFX900-NEXT: s_mov_b32 s4, 0xffff2608; GFX900-NEXT: v_mov_b32_e32 v4, 02609; GFX900-NEXT: ;;#ASMSTART2610; GFX900-NEXT: ; def v[2:3]2611; GFX900-NEXT: ;;#ASMEND2612; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v22613; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2614; GFX900-NEXT: s_waitcnt vmcnt(0)2615; GFX900-NEXT: s_setpc_b64 s[30:31]2616;2617; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_5:2618; GFX90A: ; %bb.0:2619; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2620; GFX90A-NEXT: ;;#ASMSTART2621; GFX90A-NEXT: ; def v[0:1]2622; GFX90A-NEXT: ;;#ASMEND2623; GFX90A-NEXT: s_mov_b32 s4, 0xffff2624; GFX90A-NEXT: v_mov_b32_e32 v4, 02625; GFX90A-NEXT: ;;#ASMSTART2626; GFX90A-NEXT: ; def v[2:3]2627; GFX90A-NEXT: ;;#ASMEND2628; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v22629; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2630; GFX90A-NEXT: s_waitcnt vmcnt(0)2631; GFX90A-NEXT: s_setpc_b64 s[30:31]2632;2633; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_5:2634; GFX942: ; %bb.0:2635; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2636; GFX942-NEXT: ;;#ASMSTART2637; GFX942-NEXT: ; def v[0:1]2638; GFX942-NEXT: ;;#ASMEND2639; GFX942-NEXT: s_mov_b32 s2, 0xffff2640; GFX942-NEXT: v_mov_b32_e32 v4, 02641; GFX942-NEXT: ;;#ASMSTART2642; GFX942-NEXT: ; def v[2:3]2643; GFX942-NEXT: ;;#ASMEND2644; GFX942-NEXT: s_nop 02645; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v22646; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2647; GFX942-NEXT: s_waitcnt vmcnt(0)2648; GFX942-NEXT: s_setpc_b64 s[30:31]2649 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2650 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2651 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 2, i32 5>2652 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42653 ret void2654}2655 2656define void @v_shuffle_v2bf16_v4bf16__3_5(ptr addrspace(1) inreg %ptr) {2657; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_5:2658; GFX900: ; %bb.0:2659; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2660; GFX900-NEXT: ;;#ASMSTART2661; GFX900-NEXT: ; def v[0:1]2662; GFX900-NEXT: ;;#ASMEND2663; GFX900-NEXT: s_mov_b32 s4, 0x70603022664; GFX900-NEXT: v_mov_b32_e32 v4, 02665; GFX900-NEXT: ;;#ASMSTART2666; GFX900-NEXT: ; def v[2:3]2667; GFX900-NEXT: ;;#ASMEND2668; GFX900-NEXT: v_perm_b32 v0, v2, v1, s42669; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2670; GFX900-NEXT: s_waitcnt vmcnt(0)2671; GFX900-NEXT: s_setpc_b64 s[30:31]2672;2673; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_5:2674; GFX90A: ; %bb.0:2675; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2676; GFX90A-NEXT: ;;#ASMSTART2677; GFX90A-NEXT: ; def v[0:1]2678; GFX90A-NEXT: ;;#ASMEND2679; GFX90A-NEXT: s_mov_b32 s4, 0x70603022680; GFX90A-NEXT: v_mov_b32_e32 v4, 02681; GFX90A-NEXT: ;;#ASMSTART2682; GFX90A-NEXT: ; def v[2:3]2683; GFX90A-NEXT: ;;#ASMEND2684; GFX90A-NEXT: v_perm_b32 v0, v2, v1, s42685; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2686; GFX90A-NEXT: s_waitcnt vmcnt(0)2687; GFX90A-NEXT: s_setpc_b64 s[30:31]2688;2689; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_5:2690; GFX942: ; %bb.0:2691; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2692; GFX942-NEXT: ;;#ASMSTART2693; GFX942-NEXT: ; def v[0:1]2694; GFX942-NEXT: ;;#ASMEND2695; GFX942-NEXT: s_mov_b32 s2, 0x70603022696; GFX942-NEXT: v_mov_b32_e32 v4, 02697; GFX942-NEXT: ;;#ASMSTART2698; GFX942-NEXT: ; def v[2:3]2699; GFX942-NEXT: ;;#ASMEND2700; GFX942-NEXT: s_nop 02701; GFX942-NEXT: v_perm_b32 v0, v2, v1, s22702; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2703; GFX942-NEXT: s_waitcnt vmcnt(0)2704; GFX942-NEXT: s_setpc_b64 s[30:31]2705 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2706 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2707 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 3, i32 5>2708 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42709 ret void2710}2711 2712define void @v_shuffle_v2bf16_v4bf16__4_5(ptr addrspace(1) inreg %ptr) {2713; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_5:2714; GFX900: ; %bb.0:2715; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2716; GFX900-NEXT: v_mov_b32_e32 v2, 02717; GFX900-NEXT: ;;#ASMSTART2718; GFX900-NEXT: ; def v[0:1]2719; GFX900-NEXT: ;;#ASMEND2720; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2721; GFX900-NEXT: s_waitcnt vmcnt(0)2722; GFX900-NEXT: s_setpc_b64 s[30:31]2723;2724; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_5:2725; GFX90A: ; %bb.0:2726; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2727; GFX90A-NEXT: v_mov_b32_e32 v2, 02728; GFX90A-NEXT: ;;#ASMSTART2729; GFX90A-NEXT: ; def v[0:1]2730; GFX90A-NEXT: ;;#ASMEND2731; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2732; GFX90A-NEXT: s_waitcnt vmcnt(0)2733; GFX90A-NEXT: s_setpc_b64 s[30:31]2734;2735; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_5:2736; GFX942: ; %bb.0:2737; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2738; GFX942-NEXT: v_mov_b32_e32 v2, 02739; GFX942-NEXT: ;;#ASMSTART2740; GFX942-NEXT: ; def v[0:1]2741; GFX942-NEXT: ;;#ASMEND2742; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2743; GFX942-NEXT: s_waitcnt vmcnt(0)2744; GFX942-NEXT: s_setpc_b64 s[30:31]2745 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2746 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2747 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 4, i32 5>2748 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42749 ret void2750}2751 2752define void @v_shuffle_v2bf16_v4bf16__5_5(ptr addrspace(1) inreg %ptr) {2753; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_5:2754; GFX900: ; %bb.0:2755; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2756; GFX900-NEXT: ;;#ASMSTART2757; GFX900-NEXT: ; def v[0:1]2758; GFX900-NEXT: ;;#ASMEND2759; GFX900-NEXT: s_mov_b32 s4, 0x70603022760; GFX900-NEXT: v_mov_b32_e32 v2, 02761; GFX900-NEXT: v_perm_b32 v0, v0, v0, s42762; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2763; GFX900-NEXT: s_waitcnt vmcnt(0)2764; GFX900-NEXT: s_setpc_b64 s[30:31]2765;2766; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_5:2767; GFX90A: ; %bb.0:2768; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX90A-NEXT: ;;#ASMSTART2770; GFX90A-NEXT: ; def v[0:1]2771; GFX90A-NEXT: ;;#ASMEND2772; GFX90A-NEXT: s_mov_b32 s4, 0x70603022773; GFX90A-NEXT: v_mov_b32_e32 v2, 02774; GFX90A-NEXT: v_perm_b32 v0, v0, v0, s42775; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2776; GFX90A-NEXT: s_waitcnt vmcnt(0)2777; GFX90A-NEXT: s_setpc_b64 s[30:31]2778;2779; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_5:2780; GFX942: ; %bb.0:2781; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2782; GFX942-NEXT: ;;#ASMSTART2783; GFX942-NEXT: ; def v[0:1]2784; GFX942-NEXT: ;;#ASMEND2785; GFX942-NEXT: s_mov_b32 s2, 0x70603022786; GFX942-NEXT: v_mov_b32_e32 v2, 02787; GFX942-NEXT: v_perm_b32 v0, v0, v0, s22788; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2789; GFX942-NEXT: s_waitcnt vmcnt(0)2790; GFX942-NEXT: s_setpc_b64 s[30:31]2791 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2792 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2793 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 5>2794 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42795 ret void2796}2797 2798define void @v_shuffle_v2bf16_v4bf16__6_5(ptr addrspace(1) inreg %ptr) {2799; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_5:2800; GFX900: ; %bb.0:2801; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2802; GFX900-NEXT: ;;#ASMSTART2803; GFX900-NEXT: ; def v[0:1]2804; GFX900-NEXT: ;;#ASMEND2805; GFX900-NEXT: s_mov_b32 s4, 0xffff2806; GFX900-NEXT: v_mov_b32_e32 v2, 02807; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v02808; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2809; GFX900-NEXT: s_waitcnt vmcnt(0)2810; GFX900-NEXT: s_setpc_b64 s[30:31]2811;2812; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_5:2813; GFX90A: ; %bb.0:2814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2815; GFX90A-NEXT: ;;#ASMSTART2816; GFX90A-NEXT: ; def v[0:1]2817; GFX90A-NEXT: ;;#ASMEND2818; GFX90A-NEXT: s_mov_b32 s4, 0xffff2819; GFX90A-NEXT: v_mov_b32_e32 v2, 02820; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v02821; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2822; GFX90A-NEXT: s_waitcnt vmcnt(0)2823; GFX90A-NEXT: s_setpc_b64 s[30:31]2824;2825; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_5:2826; GFX942: ; %bb.0:2827; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2828; GFX942-NEXT: ;;#ASMSTART2829; GFX942-NEXT: ; def v[0:1]2830; GFX942-NEXT: ;;#ASMEND2831; GFX942-NEXT: s_mov_b32 s2, 0xffff2832; GFX942-NEXT: v_mov_b32_e32 v2, 02833; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v02834; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2835; GFX942-NEXT: s_waitcnt vmcnt(0)2836; GFX942-NEXT: s_setpc_b64 s[30:31]2837 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2838 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2839 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 5>2840 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42841 ret void2842}2843 2844define void @v_shuffle_v2bf16_v4bf16__u_6(ptr addrspace(1) inreg %ptr) {2845; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_6:2846; GFX900: ; %bb.0:2847; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2848; GFX900-NEXT: ;;#ASMSTART2849; GFX900-NEXT: ; def v[0:1]2850; GFX900-NEXT: ;;#ASMEND2851; GFX900-NEXT: v_mov_b32_e32 v2, 02852; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v12853; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2854; GFX900-NEXT: s_waitcnt vmcnt(0)2855; GFX900-NEXT: s_setpc_b64 s[30:31]2856;2857; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_6:2858; GFX90A: ; %bb.0:2859; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2860; GFX90A-NEXT: ;;#ASMSTART2861; GFX90A-NEXT: ; def v[0:1]2862; GFX90A-NEXT: ;;#ASMEND2863; GFX90A-NEXT: v_mov_b32_e32 v2, 02864; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v12865; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2866; GFX90A-NEXT: s_waitcnt vmcnt(0)2867; GFX90A-NEXT: s_setpc_b64 s[30:31]2868;2869; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_6:2870; GFX942: ; %bb.0:2871; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2872; GFX942-NEXT: ;;#ASMSTART2873; GFX942-NEXT: ; def v[0:1]2874; GFX942-NEXT: ;;#ASMEND2875; GFX942-NEXT: v_mov_b32_e32 v2, 02876; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v12877; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2878; GFX942-NEXT: s_waitcnt vmcnt(0)2879; GFX942-NEXT: s_setpc_b64 s[30:31]2880 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2881 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2882 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 poison, i32 6>2883 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42884 ret void2885}2886 2887define void @v_shuffle_v2bf16_v4bf16__0_6(ptr addrspace(1) inreg %ptr) {2888; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_6:2889; GFX900: ; %bb.0:2890; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2891; GFX900-NEXT: ;;#ASMSTART2892; GFX900-NEXT: ; def v[0:1]2893; GFX900-NEXT: ;;#ASMEND2894; GFX900-NEXT: s_mov_b32 s4, 0x50401002895; GFX900-NEXT: v_mov_b32_e32 v3, 02896; GFX900-NEXT: ;;#ASMSTART2897; GFX900-NEXT: ; def v[1:2]2898; GFX900-NEXT: ;;#ASMEND2899; GFX900-NEXT: v_perm_b32 v0, v2, v0, s42900; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2901; GFX900-NEXT: s_waitcnt vmcnt(0)2902; GFX900-NEXT: s_setpc_b64 s[30:31]2903;2904; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_6:2905; GFX90A: ; %bb.0:2906; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2907; GFX90A-NEXT: ;;#ASMSTART2908; GFX90A-NEXT: ; def v[0:1]2909; GFX90A-NEXT: ;;#ASMEND2910; GFX90A-NEXT: s_mov_b32 s4, 0x50401002911; GFX90A-NEXT: v_mov_b32_e32 v4, 02912; GFX90A-NEXT: ;;#ASMSTART2913; GFX90A-NEXT: ; def v[2:3]2914; GFX90A-NEXT: ;;#ASMEND2915; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s42916; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2917; GFX90A-NEXT: s_waitcnt vmcnt(0)2918; GFX90A-NEXT: s_setpc_b64 s[30:31]2919;2920; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_6:2921; GFX942: ; %bb.0:2922; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2923; GFX942-NEXT: ;;#ASMSTART2924; GFX942-NEXT: ; def v[0:1]2925; GFX942-NEXT: ;;#ASMEND2926; GFX942-NEXT: s_mov_b32 s2, 0x50401002927; GFX942-NEXT: v_mov_b32_e32 v4, 02928; GFX942-NEXT: ;;#ASMSTART2929; GFX942-NEXT: ; def v[2:3]2930; GFX942-NEXT: ;;#ASMEND2931; GFX942-NEXT: s_nop 02932; GFX942-NEXT: v_perm_b32 v0, v3, v0, s22933; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2934; GFX942-NEXT: s_waitcnt vmcnt(0)2935; GFX942-NEXT: s_setpc_b64 s[30:31]2936 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2937 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2938 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 0, i32 6>2939 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42940 ret void2941}2942 2943define void @v_shuffle_v2bf16_v4bf16__1_6(ptr addrspace(1) inreg %ptr) {2944; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_6:2945; GFX900: ; %bb.0:2946; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2947; GFX900-NEXT: ;;#ASMSTART2948; GFX900-NEXT: ; def v[0:1]2949; GFX900-NEXT: ;;#ASMEND2950; GFX900-NEXT: v_mov_b32_e32 v3, 02951; GFX900-NEXT: ;;#ASMSTART2952; GFX900-NEXT: ; def v[1:2]2953; GFX900-NEXT: ;;#ASMEND2954; GFX900-NEXT: v_alignbit_b32 v0, v2, v0, 162955; GFX900-NEXT: global_store_dword v3, v0, s[16:17]2956; GFX900-NEXT: s_waitcnt vmcnt(0)2957; GFX900-NEXT: s_setpc_b64 s[30:31]2958;2959; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_6:2960; GFX90A: ; %bb.0:2961; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2962; GFX90A-NEXT: ;;#ASMSTART2963; GFX90A-NEXT: ; def v[0:1]2964; GFX90A-NEXT: ;;#ASMEND2965; GFX90A-NEXT: v_mov_b32_e32 v4, 02966; GFX90A-NEXT: ;;#ASMSTART2967; GFX90A-NEXT: ; def v[2:3]2968; GFX90A-NEXT: ;;#ASMEND2969; GFX90A-NEXT: v_alignbit_b32 v0, v3, v0, 162970; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2971; GFX90A-NEXT: s_waitcnt vmcnt(0)2972; GFX90A-NEXT: s_setpc_b64 s[30:31]2973;2974; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_6:2975; GFX942: ; %bb.0:2976; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2977; GFX942-NEXT: ;;#ASMSTART2978; GFX942-NEXT: ; def v[0:1]2979; GFX942-NEXT: ;;#ASMEND2980; GFX942-NEXT: v_mov_b32_e32 v4, 02981; GFX942-NEXT: ;;#ASMSTART2982; GFX942-NEXT: ; def v[2:3]2983; GFX942-NEXT: ;;#ASMEND2984; GFX942-NEXT: s_nop 02985; GFX942-NEXT: v_alignbit_b32 v0, v3, v0, 162986; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2987; GFX942-NEXT: s_waitcnt vmcnt(0)2988; GFX942-NEXT: s_setpc_b64 s[30:31]2989 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2990 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2991 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 1, i32 6>2992 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 42993 ret void2994}2995 2996define void @v_shuffle_v2bf16_v4bf16__2_6(ptr addrspace(1) inreg %ptr) {2997; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_6:2998; GFX900: ; %bb.0:2999; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3000; GFX900-NEXT: ;;#ASMSTART3001; GFX900-NEXT: ; def v[0:1]3002; GFX900-NEXT: ;;#ASMEND3003; GFX900-NEXT: s_mov_b32 s4, 0x50401003004; GFX900-NEXT: v_mov_b32_e32 v4, 03005; GFX900-NEXT: ;;#ASMSTART3006; GFX900-NEXT: ; def v[2:3]3007; GFX900-NEXT: ;;#ASMEND3008; GFX900-NEXT: v_perm_b32 v0, v3, v1, s43009; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3010; GFX900-NEXT: s_waitcnt vmcnt(0)3011; GFX900-NEXT: s_setpc_b64 s[30:31]3012;3013; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_6:3014; GFX90A: ; %bb.0:3015; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3016; GFX90A-NEXT: ;;#ASMSTART3017; GFX90A-NEXT: ; def v[0:1]3018; GFX90A-NEXT: ;;#ASMEND3019; GFX90A-NEXT: s_mov_b32 s4, 0x50401003020; GFX90A-NEXT: v_mov_b32_e32 v4, 03021; GFX90A-NEXT: ;;#ASMSTART3022; GFX90A-NEXT: ; def v[2:3]3023; GFX90A-NEXT: ;;#ASMEND3024; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s43025; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3026; GFX90A-NEXT: s_waitcnt vmcnt(0)3027; GFX90A-NEXT: s_setpc_b64 s[30:31]3028;3029; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_6:3030; GFX942: ; %bb.0:3031; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3032; GFX942-NEXT: ;;#ASMSTART3033; GFX942-NEXT: ; def v[0:1]3034; GFX942-NEXT: ;;#ASMEND3035; GFX942-NEXT: s_mov_b32 s2, 0x50401003036; GFX942-NEXT: v_mov_b32_e32 v4, 03037; GFX942-NEXT: ;;#ASMSTART3038; GFX942-NEXT: ; def v[2:3]3039; GFX942-NEXT: ;;#ASMEND3040; GFX942-NEXT: s_nop 03041; GFX942-NEXT: v_perm_b32 v0, v3, v1, s23042; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3043; GFX942-NEXT: s_waitcnt vmcnt(0)3044; GFX942-NEXT: s_setpc_b64 s[30:31]3045 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3046 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3047 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 2, i32 6>3048 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43049 ret void3050}3051 3052define void @v_shuffle_v2bf16_v4bf16__3_6(ptr addrspace(1) inreg %ptr) {3053; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_6:3054; GFX900: ; %bb.0:3055; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3056; GFX900-NEXT: ;;#ASMSTART3057; GFX900-NEXT: ; def v[0:1]3058; GFX900-NEXT: ;;#ASMEND3059; GFX900-NEXT: v_mov_b32_e32 v4, 03060; GFX900-NEXT: ;;#ASMSTART3061; GFX900-NEXT: ; def v[2:3]3062; GFX900-NEXT: ;;#ASMEND3063; GFX900-NEXT: v_alignbit_b32 v0, v3, v1, 163064; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3065; GFX900-NEXT: s_waitcnt vmcnt(0)3066; GFX900-NEXT: s_setpc_b64 s[30:31]3067;3068; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_6:3069; GFX90A: ; %bb.0:3070; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3071; GFX90A-NEXT: ;;#ASMSTART3072; GFX90A-NEXT: ; def v[0:1]3073; GFX90A-NEXT: ;;#ASMEND3074; GFX90A-NEXT: v_mov_b32_e32 v4, 03075; GFX90A-NEXT: ;;#ASMSTART3076; GFX90A-NEXT: ; def v[2:3]3077; GFX90A-NEXT: ;;#ASMEND3078; GFX90A-NEXT: v_alignbit_b32 v0, v3, v1, 163079; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3080; GFX90A-NEXT: s_waitcnt vmcnt(0)3081; GFX90A-NEXT: s_setpc_b64 s[30:31]3082;3083; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_6:3084; GFX942: ; %bb.0:3085; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3086; GFX942-NEXT: ;;#ASMSTART3087; GFX942-NEXT: ; def v[0:1]3088; GFX942-NEXT: ;;#ASMEND3089; GFX942-NEXT: v_mov_b32_e32 v4, 03090; GFX942-NEXT: ;;#ASMSTART3091; GFX942-NEXT: ; def v[2:3]3092; GFX942-NEXT: ;;#ASMEND3093; GFX942-NEXT: s_nop 03094; GFX942-NEXT: v_alignbit_b32 v0, v3, v1, 163095; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3096; GFX942-NEXT: s_waitcnt vmcnt(0)3097; GFX942-NEXT: s_setpc_b64 s[30:31]3098 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3099 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3100 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 3, i32 6>3101 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43102 ret void3103}3104 3105define void @v_shuffle_v2bf16_v4bf16__4_6(ptr addrspace(1) inreg %ptr) {3106; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_6:3107; GFX900: ; %bb.0:3108; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3109; GFX900-NEXT: ;;#ASMSTART3110; GFX900-NEXT: ; def v[0:1]3111; GFX900-NEXT: ;;#ASMEND3112; GFX900-NEXT: s_mov_b32 s4, 0x50401003113; GFX900-NEXT: v_mov_b32_e32 v2, 03114; GFX900-NEXT: v_perm_b32 v0, v1, v0, s43115; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3116; GFX900-NEXT: s_waitcnt vmcnt(0)3117; GFX900-NEXT: s_setpc_b64 s[30:31]3118;3119; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_6:3120; GFX90A: ; %bb.0:3121; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3122; GFX90A-NEXT: ;;#ASMSTART3123; GFX90A-NEXT: ; def v[0:1]3124; GFX90A-NEXT: ;;#ASMEND3125; GFX90A-NEXT: s_mov_b32 s4, 0x50401003126; GFX90A-NEXT: v_mov_b32_e32 v2, 03127; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s43128; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3129; GFX90A-NEXT: s_waitcnt vmcnt(0)3130; GFX90A-NEXT: s_setpc_b64 s[30:31]3131;3132; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_6:3133; GFX942: ; %bb.0:3134; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3135; GFX942-NEXT: ;;#ASMSTART3136; GFX942-NEXT: ; def v[0:1]3137; GFX942-NEXT: ;;#ASMEND3138; GFX942-NEXT: s_mov_b32 s2, 0x50401003139; GFX942-NEXT: v_mov_b32_e32 v2, 03140; GFX942-NEXT: v_perm_b32 v0, v1, v0, s23141; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3142; GFX942-NEXT: s_waitcnt vmcnt(0)3143; GFX942-NEXT: s_setpc_b64 s[30:31]3144 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3145 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3146 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 4, i32 6>3147 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43148 ret void3149}3150 3151define void @v_shuffle_v2bf16_v4bf16__5_6(ptr addrspace(1) inreg %ptr) {3152; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_6:3153; GFX900: ; %bb.0:3154; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3155; GFX900-NEXT: ;;#ASMSTART3156; GFX900-NEXT: ; def v[0:1]3157; GFX900-NEXT: ;;#ASMEND3158; GFX900-NEXT: v_mov_b32_e32 v2, 03159; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 163160; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3161; GFX900-NEXT: s_waitcnt vmcnt(0)3162; GFX900-NEXT: s_setpc_b64 s[30:31]3163;3164; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_6:3165; GFX90A: ; %bb.0:3166; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3167; GFX90A-NEXT: ;;#ASMSTART3168; GFX90A-NEXT: ; def v[0:1]3169; GFX90A-NEXT: ;;#ASMEND3170; GFX90A-NEXT: v_mov_b32_e32 v2, 03171; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 163172; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3173; GFX90A-NEXT: s_waitcnt vmcnt(0)3174; GFX90A-NEXT: s_setpc_b64 s[30:31]3175;3176; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_6:3177; GFX942: ; %bb.0:3178; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3179; GFX942-NEXT: ;;#ASMSTART3180; GFX942-NEXT: ; def v[0:1]3181; GFX942-NEXT: ;;#ASMEND3182; GFX942-NEXT: v_mov_b32_e32 v2, 03183; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 163184; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3185; GFX942-NEXT: s_waitcnt vmcnt(0)3186; GFX942-NEXT: s_setpc_b64 s[30:31]3187 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3188 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3189 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 6>3190 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43191 ret void3192}3193 3194define void @v_shuffle_v2bf16_v4bf16__6_6(ptr addrspace(1) inreg %ptr) {3195; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_6:3196; GFX900: ; %bb.0:3197; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3198; GFX900-NEXT: ;;#ASMSTART3199; GFX900-NEXT: ; def v[0:1]3200; GFX900-NEXT: ;;#ASMEND3201; GFX900-NEXT: s_mov_b32 s4, 0x50401003202; GFX900-NEXT: v_mov_b32_e32 v2, 03203; GFX900-NEXT: v_perm_b32 v0, v1, v1, s43204; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3205; GFX900-NEXT: s_waitcnt vmcnt(0)3206; GFX900-NEXT: s_setpc_b64 s[30:31]3207;3208; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_6:3209; GFX90A: ; %bb.0:3210; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3211; GFX90A-NEXT: ;;#ASMSTART3212; GFX90A-NEXT: ; def v[0:1]3213; GFX90A-NEXT: ;;#ASMEND3214; GFX90A-NEXT: s_mov_b32 s4, 0x50401003215; GFX90A-NEXT: v_mov_b32_e32 v2, 03216; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s43217; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3218; GFX90A-NEXT: s_waitcnt vmcnt(0)3219; GFX90A-NEXT: s_setpc_b64 s[30:31]3220;3221; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_6:3222; GFX942: ; %bb.0:3223; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3224; GFX942-NEXT: ;;#ASMSTART3225; GFX942-NEXT: ; def v[0:1]3226; GFX942-NEXT: ;;#ASMEND3227; GFX942-NEXT: s_mov_b32 s2, 0x50401003228; GFX942-NEXT: v_mov_b32_e32 v2, 03229; GFX942-NEXT: v_perm_b32 v0, v1, v1, s23230; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3231; GFX942-NEXT: s_waitcnt vmcnt(0)3232; GFX942-NEXT: s_setpc_b64 s[30:31]3233 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3234 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3235 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 6>3236 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43237 ret void3238}3239 3240define void @v_shuffle_v2bf16_v4bf16__u_7(ptr addrspace(1) inreg %ptr) {3241; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__u_7:3242; GFX900: ; %bb.0:3243; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3244; GFX900-NEXT: v_mov_b32_e32 v2, 03245; GFX900-NEXT: ;;#ASMSTART3246; GFX900-NEXT: ; def v[0:1]3247; GFX900-NEXT: ;;#ASMEND3248; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3249; GFX900-NEXT: s_waitcnt vmcnt(0)3250; GFX900-NEXT: s_setpc_b64 s[30:31]3251;3252; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__u_7:3253; GFX90A: ; %bb.0:3254; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3255; GFX90A-NEXT: v_mov_b32_e32 v2, 03256; GFX90A-NEXT: ;;#ASMSTART3257; GFX90A-NEXT: ; def v[0:1]3258; GFX90A-NEXT: ;;#ASMEND3259; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3260; GFX90A-NEXT: s_waitcnt vmcnt(0)3261; GFX90A-NEXT: s_setpc_b64 s[30:31]3262;3263; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__u_7:3264; GFX942: ; %bb.0:3265; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3266; GFX942-NEXT: v_mov_b32_e32 v2, 03267; GFX942-NEXT: ;;#ASMSTART3268; GFX942-NEXT: ; def v[0:1]3269; GFX942-NEXT: ;;#ASMEND3270; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3271; GFX942-NEXT: s_waitcnt vmcnt(0)3272; GFX942-NEXT: s_setpc_b64 s[30:31]3273 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3274 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3275 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 poison, i32 7>3276 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43277 ret void3278}3279 3280define void @v_shuffle_v2bf16_v4bf16__0_7(ptr addrspace(1) inreg %ptr) {3281; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__0_7:3282; GFX900: ; %bb.0:3283; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3284; GFX900-NEXT: ;;#ASMSTART3285; GFX900-NEXT: ; def v[0:1]3286; GFX900-NEXT: ;;#ASMEND3287; GFX900-NEXT: s_mov_b32 s4, 0xffff3288; GFX900-NEXT: v_mov_b32_e32 v3, 03289; GFX900-NEXT: ;;#ASMSTART3290; GFX900-NEXT: ; def v[1:2]3291; GFX900-NEXT: ;;#ASMEND3292; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v23293; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3294; GFX900-NEXT: s_waitcnt vmcnt(0)3295; GFX900-NEXT: s_setpc_b64 s[30:31]3296;3297; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__0_7:3298; GFX90A: ; %bb.0:3299; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3300; GFX90A-NEXT: ;;#ASMSTART3301; GFX90A-NEXT: ; def v[0:1]3302; GFX90A-NEXT: ;;#ASMEND3303; GFX90A-NEXT: s_mov_b32 s4, 0xffff3304; GFX90A-NEXT: v_mov_b32_e32 v4, 03305; GFX90A-NEXT: ;;#ASMSTART3306; GFX90A-NEXT: ; def v[2:3]3307; GFX90A-NEXT: ;;#ASMEND3308; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v33309; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3310; GFX90A-NEXT: s_waitcnt vmcnt(0)3311; GFX90A-NEXT: s_setpc_b64 s[30:31]3312;3313; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__0_7:3314; GFX942: ; %bb.0:3315; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3316; GFX942-NEXT: ;;#ASMSTART3317; GFX942-NEXT: ; def v[0:1]3318; GFX942-NEXT: ;;#ASMEND3319; GFX942-NEXT: s_mov_b32 s2, 0xffff3320; GFX942-NEXT: v_mov_b32_e32 v4, 03321; GFX942-NEXT: ;;#ASMSTART3322; GFX942-NEXT: ; def v[2:3]3323; GFX942-NEXT: ;;#ASMEND3324; GFX942-NEXT: s_nop 03325; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v33326; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3327; GFX942-NEXT: s_waitcnt vmcnt(0)3328; GFX942-NEXT: s_setpc_b64 s[30:31]3329 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3330 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3331 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 0, i32 7>3332 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43333 ret void3334}3335 3336define void @v_shuffle_v2bf16_v4bf16__1_7(ptr addrspace(1) inreg %ptr) {3337; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__1_7:3338; GFX900: ; %bb.0:3339; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; GFX900-NEXT: ;;#ASMSTART3341; GFX900-NEXT: ; def v[0:1]3342; GFX900-NEXT: ;;#ASMEND3343; GFX900-NEXT: s_mov_b32 s4, 0x70603023344; GFX900-NEXT: v_mov_b32_e32 v3, 03345; GFX900-NEXT: ;;#ASMSTART3346; GFX900-NEXT: ; def v[1:2]3347; GFX900-NEXT: ;;#ASMEND3348; GFX900-NEXT: v_perm_b32 v0, v2, v0, s43349; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3350; GFX900-NEXT: s_waitcnt vmcnt(0)3351; GFX900-NEXT: s_setpc_b64 s[30:31]3352;3353; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__1_7:3354; GFX90A: ; %bb.0:3355; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3356; GFX90A-NEXT: ;;#ASMSTART3357; GFX90A-NEXT: ; def v[0:1]3358; GFX90A-NEXT: ;;#ASMEND3359; GFX90A-NEXT: s_mov_b32 s4, 0x70603023360; GFX90A-NEXT: v_mov_b32_e32 v4, 03361; GFX90A-NEXT: ;;#ASMSTART3362; GFX90A-NEXT: ; def v[2:3]3363; GFX90A-NEXT: ;;#ASMEND3364; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s43365; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3366; GFX90A-NEXT: s_waitcnt vmcnt(0)3367; GFX90A-NEXT: s_setpc_b64 s[30:31]3368;3369; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__1_7:3370; GFX942: ; %bb.0:3371; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3372; GFX942-NEXT: ;;#ASMSTART3373; GFX942-NEXT: ; def v[0:1]3374; GFX942-NEXT: ;;#ASMEND3375; GFX942-NEXT: s_mov_b32 s2, 0x70603023376; GFX942-NEXT: v_mov_b32_e32 v4, 03377; GFX942-NEXT: ;;#ASMSTART3378; GFX942-NEXT: ; def v[2:3]3379; GFX942-NEXT: ;;#ASMEND3380; GFX942-NEXT: s_nop 03381; GFX942-NEXT: v_perm_b32 v0, v3, v0, s23382; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3383; GFX942-NEXT: s_waitcnt vmcnt(0)3384; GFX942-NEXT: s_setpc_b64 s[30:31]3385 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3386 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3387 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 1, i32 7>3388 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43389 ret void3390}3391 3392define void @v_shuffle_v2bf16_v4bf16__2_7(ptr addrspace(1) inreg %ptr) {3393; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__2_7:3394; GFX900: ; %bb.0:3395; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3396; GFX900-NEXT: ;;#ASMSTART3397; GFX900-NEXT: ; def v[0:1]3398; GFX900-NEXT: ;;#ASMEND3399; GFX900-NEXT: s_mov_b32 s4, 0xffff3400; GFX900-NEXT: v_mov_b32_e32 v4, 03401; GFX900-NEXT: ;;#ASMSTART3402; GFX900-NEXT: ; def v[2:3]3403; GFX900-NEXT: ;;#ASMEND3404; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v33405; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3406; GFX900-NEXT: s_waitcnt vmcnt(0)3407; GFX900-NEXT: s_setpc_b64 s[30:31]3408;3409; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__2_7:3410; GFX90A: ; %bb.0:3411; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3412; GFX90A-NEXT: ;;#ASMSTART3413; GFX90A-NEXT: ; def v[0:1]3414; GFX90A-NEXT: ;;#ASMEND3415; GFX90A-NEXT: s_mov_b32 s4, 0xffff3416; GFX90A-NEXT: v_mov_b32_e32 v4, 03417; GFX90A-NEXT: ;;#ASMSTART3418; GFX90A-NEXT: ; def v[2:3]3419; GFX90A-NEXT: ;;#ASMEND3420; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v33421; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3422; GFX90A-NEXT: s_waitcnt vmcnt(0)3423; GFX90A-NEXT: s_setpc_b64 s[30:31]3424;3425; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__2_7:3426; GFX942: ; %bb.0:3427; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3428; GFX942-NEXT: ;;#ASMSTART3429; GFX942-NEXT: ; def v[0:1]3430; GFX942-NEXT: ;;#ASMEND3431; GFX942-NEXT: s_mov_b32 s2, 0xffff3432; GFX942-NEXT: v_mov_b32_e32 v4, 03433; GFX942-NEXT: ;;#ASMSTART3434; GFX942-NEXT: ; def v[2:3]3435; GFX942-NEXT: ;;#ASMEND3436; GFX942-NEXT: s_nop 03437; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v33438; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3439; GFX942-NEXT: s_waitcnt vmcnt(0)3440; GFX942-NEXT: s_setpc_b64 s[30:31]3441 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3442 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3443 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 2, i32 7>3444 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43445 ret void3446}3447 3448define void @v_shuffle_v2bf16_v4bf16__3_7(ptr addrspace(1) inreg %ptr) {3449; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__3_7:3450; GFX900: ; %bb.0:3451; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3452; GFX900-NEXT: ;;#ASMSTART3453; GFX900-NEXT: ; def v[0:1]3454; GFX900-NEXT: ;;#ASMEND3455; GFX900-NEXT: s_mov_b32 s4, 0x70603023456; GFX900-NEXT: v_mov_b32_e32 v4, 03457; GFX900-NEXT: ;;#ASMSTART3458; GFX900-NEXT: ; def v[2:3]3459; GFX900-NEXT: ;;#ASMEND3460; GFX900-NEXT: v_perm_b32 v0, v3, v1, s43461; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3462; GFX900-NEXT: s_waitcnt vmcnt(0)3463; GFX900-NEXT: s_setpc_b64 s[30:31]3464;3465; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__3_7:3466; GFX90A: ; %bb.0:3467; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3468; GFX90A-NEXT: ;;#ASMSTART3469; GFX90A-NEXT: ; def v[0:1]3470; GFX90A-NEXT: ;;#ASMEND3471; GFX90A-NEXT: s_mov_b32 s4, 0x70603023472; GFX90A-NEXT: v_mov_b32_e32 v4, 03473; GFX90A-NEXT: ;;#ASMSTART3474; GFX90A-NEXT: ; def v[2:3]3475; GFX90A-NEXT: ;;#ASMEND3476; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s43477; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3478; GFX90A-NEXT: s_waitcnt vmcnt(0)3479; GFX90A-NEXT: s_setpc_b64 s[30:31]3480;3481; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__3_7:3482; GFX942: ; %bb.0:3483; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3484; GFX942-NEXT: ;;#ASMSTART3485; GFX942-NEXT: ; def v[0:1]3486; GFX942-NEXT: ;;#ASMEND3487; GFX942-NEXT: s_mov_b32 s2, 0x70603023488; GFX942-NEXT: v_mov_b32_e32 v4, 03489; GFX942-NEXT: ;;#ASMSTART3490; GFX942-NEXT: ; def v[2:3]3491; GFX942-NEXT: ;;#ASMEND3492; GFX942-NEXT: s_nop 03493; GFX942-NEXT: v_perm_b32 v0, v3, v1, s23494; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3495; GFX942-NEXT: s_waitcnt vmcnt(0)3496; GFX942-NEXT: s_setpc_b64 s[30:31]3497 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3498 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3499 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 3, i32 7>3500 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43501 ret void3502}3503 3504define void @v_shuffle_v2bf16_v4bf16__4_7(ptr addrspace(1) inreg %ptr) {3505; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__4_7:3506; GFX900: ; %bb.0:3507; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3508; GFX900-NEXT: ;;#ASMSTART3509; GFX900-NEXT: ; def v[0:1]3510; GFX900-NEXT: ;;#ASMEND3511; GFX900-NEXT: s_mov_b32 s4, 0xffff3512; GFX900-NEXT: v_mov_b32_e32 v2, 03513; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v13514; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3515; GFX900-NEXT: s_waitcnt vmcnt(0)3516; GFX900-NEXT: s_setpc_b64 s[30:31]3517;3518; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__4_7:3519; GFX90A: ; %bb.0:3520; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3521; GFX90A-NEXT: ;;#ASMSTART3522; GFX90A-NEXT: ; def v[0:1]3523; GFX90A-NEXT: ;;#ASMEND3524; GFX90A-NEXT: s_mov_b32 s4, 0xffff3525; GFX90A-NEXT: v_mov_b32_e32 v2, 03526; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v13527; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3528; GFX90A-NEXT: s_waitcnt vmcnt(0)3529; GFX90A-NEXT: s_setpc_b64 s[30:31]3530;3531; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__4_7:3532; GFX942: ; %bb.0:3533; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3534; GFX942-NEXT: ;;#ASMSTART3535; GFX942-NEXT: ; def v[0:1]3536; GFX942-NEXT: ;;#ASMEND3537; GFX942-NEXT: s_mov_b32 s2, 0xffff3538; GFX942-NEXT: v_mov_b32_e32 v2, 03539; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v13540; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3541; GFX942-NEXT: s_waitcnt vmcnt(0)3542; GFX942-NEXT: s_setpc_b64 s[30:31]3543 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3544 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3545 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 4, i32 7>3546 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43547 ret void3548}3549 3550define void @v_shuffle_v2bf16_v4bf16__5_7(ptr addrspace(1) inreg %ptr) {3551; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__5_7:3552; GFX900: ; %bb.0:3553; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3554; GFX900-NEXT: ;;#ASMSTART3555; GFX900-NEXT: ; def v[0:1]3556; GFX900-NEXT: ;;#ASMEND3557; GFX900-NEXT: s_mov_b32 s4, 0x70603023558; GFX900-NEXT: v_mov_b32_e32 v2, 03559; GFX900-NEXT: v_perm_b32 v0, v1, v0, s43560; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3561; GFX900-NEXT: s_waitcnt vmcnt(0)3562; GFX900-NEXT: s_setpc_b64 s[30:31]3563;3564; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__5_7:3565; GFX90A: ; %bb.0:3566; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3567; GFX90A-NEXT: ;;#ASMSTART3568; GFX90A-NEXT: ; def v[0:1]3569; GFX90A-NEXT: ;;#ASMEND3570; GFX90A-NEXT: s_mov_b32 s4, 0x70603023571; GFX90A-NEXT: v_mov_b32_e32 v2, 03572; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s43573; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3574; GFX90A-NEXT: s_waitcnt vmcnt(0)3575; GFX90A-NEXT: s_setpc_b64 s[30:31]3576;3577; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__5_7:3578; GFX942: ; %bb.0:3579; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3580; GFX942-NEXT: ;;#ASMSTART3581; GFX942-NEXT: ; def v[0:1]3582; GFX942-NEXT: ;;#ASMEND3583; GFX942-NEXT: s_mov_b32 s2, 0x70603023584; GFX942-NEXT: v_mov_b32_e32 v2, 03585; GFX942-NEXT: v_perm_b32 v0, v1, v0, s23586; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3587; GFX942-NEXT: s_waitcnt vmcnt(0)3588; GFX942-NEXT: s_setpc_b64 s[30:31]3589 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3590 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3591 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 7>3592 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43593 ret void3594}3595 3596define void @v_shuffle_v2bf16_v4bf16__6_7(ptr addrspace(1) inreg %ptr) {3597; GFX900-LABEL: v_shuffle_v2bf16_v4bf16__6_7:3598; GFX900: ; %bb.0:3599; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3600; GFX900-NEXT: v_mov_b32_e32 v2, 03601; GFX900-NEXT: ;;#ASMSTART3602; GFX900-NEXT: ; def v[0:1]3603; GFX900-NEXT: ;;#ASMEND3604; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3605; GFX900-NEXT: s_waitcnt vmcnt(0)3606; GFX900-NEXT: s_setpc_b64 s[30:31]3607;3608; GFX90A-LABEL: v_shuffle_v2bf16_v4bf16__6_7:3609; GFX90A: ; %bb.0:3610; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3611; GFX90A-NEXT: v_mov_b32_e32 v2, 03612; GFX90A-NEXT: ;;#ASMSTART3613; GFX90A-NEXT: ; def v[0:1]3614; GFX90A-NEXT: ;;#ASMEND3615; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3616; GFX90A-NEXT: s_waitcnt vmcnt(0)3617; GFX90A-NEXT: s_setpc_b64 s[30:31]3618;3619; GFX942-LABEL: v_shuffle_v2bf16_v4bf16__6_7:3620; GFX942: ; %bb.0:3621; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3622; GFX942-NEXT: v_mov_b32_e32 v2, 03623; GFX942-NEXT: ;;#ASMSTART3624; GFX942-NEXT: ; def v[0:1]3625; GFX942-NEXT: ;;#ASMEND3626; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3627; GFX942-NEXT: s_waitcnt vmcnt(0)3628; GFX942-NEXT: s_setpc_b64 s[30:31]3629 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3630 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3631 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 7>3632 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 43633 ret void3634}3635 3636define void @s_shuffle_v2bf16_v4bf16__u_u() {3637; GFX9-LABEL: s_shuffle_v2bf16_v4bf16__u_u:3638; GFX9: ; %bb.0:3639; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3640; GFX9-NEXT: ;;#ASMSTART3641; GFX9-NEXT: ; use s83642; GFX9-NEXT: ;;#ASMEND3643; GFX9-NEXT: s_setpc_b64 s[30:31]3644 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3645 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> poison3646 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3647 ret void3648}3649 3650define void @s_shuffle_v2bf16_v4bf16__0_u() {3651; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_u:3652; GFX900: ; %bb.0:3653; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3654; GFX900-NEXT: ;;#ASMSTART3655; GFX900-NEXT: ; def s[8:9]3656; GFX900-NEXT: ;;#ASMEND3657; GFX900-NEXT: ;;#ASMSTART3658; GFX900-NEXT: ; use s83659; GFX900-NEXT: ;;#ASMEND3660; GFX900-NEXT: s_setpc_b64 s[30:31]3661;3662; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_u:3663; GFX90A: ; %bb.0:3664; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3665; GFX90A-NEXT: ;;#ASMSTART3666; GFX90A-NEXT: ; def s[8:9]3667; GFX90A-NEXT: ;;#ASMEND3668; GFX90A-NEXT: ;;#ASMSTART3669; GFX90A-NEXT: ; use s83670; GFX90A-NEXT: ;;#ASMEND3671; GFX90A-NEXT: s_setpc_b64 s[30:31]3672;3673; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_u:3674; GFX942: ; %bb.0:3675; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3676; GFX942-NEXT: ;;#ASMSTART3677; GFX942-NEXT: ; def s[8:9]3678; GFX942-NEXT: ;;#ASMEND3679; GFX942-NEXT: s_nop 03680; GFX942-NEXT: ;;#ASMSTART3681; GFX942-NEXT: ; use s83682; GFX942-NEXT: ;;#ASMEND3683; GFX942-NEXT: s_setpc_b64 s[30:31]3684 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3685 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 poison>3686 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3687 ret void3688}3689 3690define void @s_shuffle_v2bf16_v4bf16__1_u() {3691; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_u:3692; GFX900: ; %bb.0:3693; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3694; GFX900-NEXT: ;;#ASMSTART3695; GFX900-NEXT: ; def s[4:5]3696; GFX900-NEXT: ;;#ASMEND3697; GFX900-NEXT: s_lshr_b32 s8, s4, 163698; GFX900-NEXT: ;;#ASMSTART3699; GFX900-NEXT: ; use s83700; GFX900-NEXT: ;;#ASMEND3701; GFX900-NEXT: s_setpc_b64 s[30:31]3702;3703; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_u:3704; GFX90A: ; %bb.0:3705; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3706; GFX90A-NEXT: ;;#ASMSTART3707; GFX90A-NEXT: ; def s[4:5]3708; GFX90A-NEXT: ;;#ASMEND3709; GFX90A-NEXT: s_lshr_b32 s8, s4, 163710; GFX90A-NEXT: ;;#ASMSTART3711; GFX90A-NEXT: ; use s83712; GFX90A-NEXT: ;;#ASMEND3713; GFX90A-NEXT: s_setpc_b64 s[30:31]3714;3715; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_u:3716; GFX942: ; %bb.0:3717; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3718; GFX942-NEXT: ;;#ASMSTART3719; GFX942-NEXT: ; def s[0:1]3720; GFX942-NEXT: ;;#ASMEND3721; GFX942-NEXT: s_lshr_b32 s8, s0, 163722; GFX942-NEXT: ;;#ASMSTART3723; GFX942-NEXT: ; use s83724; GFX942-NEXT: ;;#ASMEND3725; GFX942-NEXT: s_setpc_b64 s[30:31]3726 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3727 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 poison>3728 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3729 ret void3730}3731 3732define void @s_shuffle_v2bf16_v4bf16__2_u() {3733; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_u:3734; GFX900: ; %bb.0:3735; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3736; GFX900-NEXT: ;;#ASMSTART3737; GFX900-NEXT: ; def s[4:5]3738; GFX900-NEXT: ;;#ASMEND3739; GFX900-NEXT: s_mov_b32 s8, s53740; GFX900-NEXT: ;;#ASMSTART3741; GFX900-NEXT: ; use s83742; GFX900-NEXT: ;;#ASMEND3743; GFX900-NEXT: s_setpc_b64 s[30:31]3744;3745; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_u:3746; GFX90A: ; %bb.0:3747; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3748; GFX90A-NEXT: ;;#ASMSTART3749; GFX90A-NEXT: ; def s[4:5]3750; GFX90A-NEXT: ;;#ASMEND3751; GFX90A-NEXT: s_mov_b32 s8, s53752; GFX90A-NEXT: ;;#ASMSTART3753; GFX90A-NEXT: ; use s83754; GFX90A-NEXT: ;;#ASMEND3755; GFX90A-NEXT: s_setpc_b64 s[30:31]3756;3757; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_u:3758; GFX942: ; %bb.0:3759; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3760; GFX942-NEXT: ;;#ASMSTART3761; GFX942-NEXT: ; def s[0:1]3762; GFX942-NEXT: ;;#ASMEND3763; GFX942-NEXT: s_mov_b32 s8, s13764; GFX942-NEXT: ;;#ASMSTART3765; GFX942-NEXT: ; use s83766; GFX942-NEXT: ;;#ASMEND3767; GFX942-NEXT: s_setpc_b64 s[30:31]3768 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3769 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 poison>3770 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3771 ret void3772}3773 3774define void @s_shuffle_v2bf16_v4bf16__3_u() {3775; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_u:3776; GFX900: ; %bb.0:3777; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3778; GFX900-NEXT: ;;#ASMSTART3779; GFX900-NEXT: ; def s[4:5]3780; GFX900-NEXT: ;;#ASMEND3781; GFX900-NEXT: s_lshr_b32 s8, s5, 163782; GFX900-NEXT: ;;#ASMSTART3783; GFX900-NEXT: ; use s83784; GFX900-NEXT: ;;#ASMEND3785; GFX900-NEXT: s_setpc_b64 s[30:31]3786;3787; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_u:3788; GFX90A: ; %bb.0:3789; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3790; GFX90A-NEXT: ;;#ASMSTART3791; GFX90A-NEXT: ; def s[4:5]3792; GFX90A-NEXT: ;;#ASMEND3793; GFX90A-NEXT: s_lshr_b32 s8, s5, 163794; GFX90A-NEXT: ;;#ASMSTART3795; GFX90A-NEXT: ; use s83796; GFX90A-NEXT: ;;#ASMEND3797; GFX90A-NEXT: s_setpc_b64 s[30:31]3798;3799; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_u:3800; GFX942: ; %bb.0:3801; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3802; GFX942-NEXT: ;;#ASMSTART3803; GFX942-NEXT: ; def s[0:1]3804; GFX942-NEXT: ;;#ASMEND3805; GFX942-NEXT: s_lshr_b32 s8, s1, 163806; GFX942-NEXT: ;;#ASMSTART3807; GFX942-NEXT: ; use s83808; GFX942-NEXT: ;;#ASMEND3809; GFX942-NEXT: s_setpc_b64 s[30:31]3810 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3811 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 poison>3812 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3813 ret void3814}3815 3816define void @s_shuffle_v2bf16_v4bf16__4_u() {3817; GFX9-LABEL: s_shuffle_v2bf16_v4bf16__4_u:3818; GFX9: ; %bb.0:3819; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3820; GFX9-NEXT: ;;#ASMSTART3821; GFX9-NEXT: ; use s83822; GFX9-NEXT: ;;#ASMEND3823; GFX9-NEXT: s_setpc_b64 s[30:31]3824 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3825 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 poison>3826 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3827 ret void3828}3829 3830define void @s_shuffle_v2bf16_v4bf16__5_u() {3831; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_u:3832; GFX900: ; %bb.0:3833; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3834; GFX900-NEXT: ;;#ASMSTART3835; GFX900-NEXT: ; def s[4:5]3836; GFX900-NEXT: ;;#ASMEND3837; GFX900-NEXT: s_lshr_b32 s8, s4, 163838; GFX900-NEXT: ;;#ASMSTART3839; GFX900-NEXT: ; use s83840; GFX900-NEXT: ;;#ASMEND3841; GFX900-NEXT: s_setpc_b64 s[30:31]3842;3843; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_u:3844; GFX90A: ; %bb.0:3845; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3846; GFX90A-NEXT: ;;#ASMSTART3847; GFX90A-NEXT: ; def s[4:5]3848; GFX90A-NEXT: ;;#ASMEND3849; GFX90A-NEXT: s_lshr_b32 s8, s4, 163850; GFX90A-NEXT: ;;#ASMSTART3851; GFX90A-NEXT: ; use s83852; GFX90A-NEXT: ;;#ASMEND3853; GFX90A-NEXT: s_setpc_b64 s[30:31]3854;3855; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_u:3856; GFX942: ; %bb.0:3857; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3858; GFX942-NEXT: ;;#ASMSTART3859; GFX942-NEXT: ; def s[0:1]3860; GFX942-NEXT: ;;#ASMEND3861; GFX942-NEXT: s_lshr_b32 s8, s0, 163862; GFX942-NEXT: ;;#ASMSTART3863; GFX942-NEXT: ; use s83864; GFX942-NEXT: ;;#ASMEND3865; GFX942-NEXT: s_setpc_b64 s[30:31]3866 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3867 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()3868 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 poison>3869 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3870 ret void3871}3872 3873define void @s_shuffle_v2bf16_v4bf16__6_u() {3874; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_u:3875; GFX900: ; %bb.0:3876; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3877; GFX900-NEXT: ;;#ASMSTART3878; GFX900-NEXT: ; def s[4:5]3879; GFX900-NEXT: ;;#ASMEND3880; GFX900-NEXT: s_mov_b32 s8, s53881; GFX900-NEXT: ;;#ASMSTART3882; GFX900-NEXT: ; use s83883; GFX900-NEXT: ;;#ASMEND3884; GFX900-NEXT: s_setpc_b64 s[30:31]3885;3886; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_u:3887; GFX90A: ; %bb.0:3888; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3889; GFX90A-NEXT: ;;#ASMSTART3890; GFX90A-NEXT: ; def s[4:5]3891; GFX90A-NEXT: ;;#ASMEND3892; GFX90A-NEXT: s_mov_b32 s8, s53893; GFX90A-NEXT: ;;#ASMSTART3894; GFX90A-NEXT: ; use s83895; GFX90A-NEXT: ;;#ASMEND3896; GFX90A-NEXT: s_setpc_b64 s[30:31]3897;3898; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_u:3899; GFX942: ; %bb.0:3900; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3901; GFX942-NEXT: ;;#ASMSTART3902; GFX942-NEXT: ; def s[0:1]3903; GFX942-NEXT: ;;#ASMEND3904; GFX942-NEXT: s_mov_b32 s8, s13905; GFX942-NEXT: ;;#ASMSTART3906; GFX942-NEXT: ; use s83907; GFX942-NEXT: ;;#ASMEND3908; GFX942-NEXT: s_setpc_b64 s[30:31]3909 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3910 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()3911 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 poison>3912 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3913 ret void3914}3915 3916define void @s_shuffle_v2bf16_v4bf16__7_u() {3917; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_u:3918; GFX900: ; %bb.0:3919; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3920; GFX900-NEXT: ;;#ASMSTART3921; GFX900-NEXT: ; def s[4:5]3922; GFX900-NEXT: ;;#ASMEND3923; GFX900-NEXT: s_lshr_b32 s8, s5, 163924; GFX900-NEXT: ;;#ASMSTART3925; GFX900-NEXT: ; use s83926; GFX900-NEXT: ;;#ASMEND3927; GFX900-NEXT: s_setpc_b64 s[30:31]3928;3929; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_u:3930; GFX90A: ; %bb.0:3931; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3932; GFX90A-NEXT: ;;#ASMSTART3933; GFX90A-NEXT: ; def s[4:5]3934; GFX90A-NEXT: ;;#ASMEND3935; GFX90A-NEXT: s_lshr_b32 s8, s5, 163936; GFX90A-NEXT: ;;#ASMSTART3937; GFX90A-NEXT: ; use s83938; GFX90A-NEXT: ;;#ASMEND3939; GFX90A-NEXT: s_setpc_b64 s[30:31]3940;3941; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_u:3942; GFX942: ; %bb.0:3943; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3944; GFX942-NEXT: ;;#ASMSTART3945; GFX942-NEXT: ; def s[0:1]3946; GFX942-NEXT: ;;#ASMEND3947; GFX942-NEXT: s_lshr_b32 s8, s1, 163948; GFX942-NEXT: ;;#ASMSTART3949; GFX942-NEXT: ; use s83950; GFX942-NEXT: ;;#ASMEND3951; GFX942-NEXT: s_setpc_b64 s[30:31]3952 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()3953 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()3954 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 poison>3955 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)3956 ret void3957}3958 3959define void @s_shuffle_v2bf16_v4bf16__7_0() {3960; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_0:3961; GFX900: ; %bb.0:3962; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3963; GFX900-NEXT: ;;#ASMSTART3964; GFX900-NEXT: ; def s[4:5]3965; GFX900-NEXT: ;;#ASMEND3966; GFX900-NEXT: ;;#ASMSTART3967; GFX900-NEXT: ; def s[6:7]3968; GFX900-NEXT: ;;#ASMEND3969; GFX900-NEXT: s_lshr_b32 s5, s7, 163970; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s43971; GFX900-NEXT: ;;#ASMSTART3972; GFX900-NEXT: ; use s83973; GFX900-NEXT: ;;#ASMEND3974; GFX900-NEXT: s_setpc_b64 s[30:31]3975;3976; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_0:3977; GFX90A: ; %bb.0:3978; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3979; GFX90A-NEXT: ;;#ASMSTART3980; GFX90A-NEXT: ; def s[4:5]3981; GFX90A-NEXT: ;;#ASMEND3982; GFX90A-NEXT: ;;#ASMSTART3983; GFX90A-NEXT: ; def s[6:7]3984; GFX90A-NEXT: ;;#ASMEND3985; GFX90A-NEXT: s_lshr_b32 s5, s7, 163986; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s43987; GFX90A-NEXT: ;;#ASMSTART3988; GFX90A-NEXT: ; use s83989; GFX90A-NEXT: ;;#ASMEND3990; GFX90A-NEXT: s_setpc_b64 s[30:31]3991;3992; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_0:3993; GFX942: ; %bb.0:3994; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3995; GFX942-NEXT: ;;#ASMSTART3996; GFX942-NEXT: ; def s[0:1]3997; GFX942-NEXT: ;;#ASMEND3998; GFX942-NEXT: ;;#ASMSTART3999; GFX942-NEXT: ; def s[2:3]4000; GFX942-NEXT: ;;#ASMEND4001; GFX942-NEXT: s_lshr_b32 s1, s3, 164002; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04003; GFX942-NEXT: ;;#ASMSTART4004; GFX942-NEXT: ; use s84005; GFX942-NEXT: ;;#ASMEND4006; GFX942-NEXT: s_setpc_b64 s[30:31]4007 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4008 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4009 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 0>4010 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4011 ret void4012}4013 4014define void @s_shuffle_v2bf16_v4bf16__7_1() {4015; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_1:4016; GFX900: ; %bb.0:4017; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4018; GFX900-NEXT: ;;#ASMSTART4019; GFX900-NEXT: ; def s[4:5]4020; GFX900-NEXT: ;;#ASMEND4021; GFX900-NEXT: ;;#ASMSTART4022; GFX900-NEXT: ; def s[6:7]4023; GFX900-NEXT: ;;#ASMEND4024; GFX900-NEXT: s_lshr_b32 s4, s4, 164025; GFX900-NEXT: s_lshr_b32 s5, s7, 164026; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44027; GFX900-NEXT: ;;#ASMSTART4028; GFX900-NEXT: ; use s84029; GFX900-NEXT: ;;#ASMEND4030; GFX900-NEXT: s_setpc_b64 s[30:31]4031;4032; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_1:4033; GFX90A: ; %bb.0:4034; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4035; GFX90A-NEXT: ;;#ASMSTART4036; GFX90A-NEXT: ; def s[4:5]4037; GFX90A-NEXT: ;;#ASMEND4038; GFX90A-NEXT: ;;#ASMSTART4039; GFX90A-NEXT: ; def s[6:7]4040; GFX90A-NEXT: ;;#ASMEND4041; GFX90A-NEXT: s_lshr_b32 s4, s4, 164042; GFX90A-NEXT: s_lshr_b32 s5, s7, 164043; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44044; GFX90A-NEXT: ;;#ASMSTART4045; GFX90A-NEXT: ; use s84046; GFX90A-NEXT: ;;#ASMEND4047; GFX90A-NEXT: s_setpc_b64 s[30:31]4048;4049; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_1:4050; GFX942: ; %bb.0:4051; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4052; GFX942-NEXT: ;;#ASMSTART4053; GFX942-NEXT: ; def s[0:1]4054; GFX942-NEXT: ;;#ASMEND4055; GFX942-NEXT: ;;#ASMSTART4056; GFX942-NEXT: ; def s[2:3]4057; GFX942-NEXT: ;;#ASMEND4058; GFX942-NEXT: s_lshr_b32 s0, s0, 164059; GFX942-NEXT: s_lshr_b32 s1, s3, 164060; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04061; GFX942-NEXT: ;;#ASMSTART4062; GFX942-NEXT: ; use s84063; GFX942-NEXT: ;;#ASMEND4064; GFX942-NEXT: s_setpc_b64 s[30:31]4065 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4066 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4067 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 1>4068 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4069 ret void4070}4071 4072define void @s_shuffle_v2bf16_v4bf16__7_2() {4073; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_2:4074; GFX900: ; %bb.0:4075; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4076; GFX900-NEXT: ;;#ASMSTART4077; GFX900-NEXT: ; def s[4:5]4078; GFX900-NEXT: ;;#ASMEND4079; GFX900-NEXT: ;;#ASMSTART4080; GFX900-NEXT: ; def s[6:7]4081; GFX900-NEXT: ;;#ASMEND4082; GFX900-NEXT: s_lshr_b32 s4, s7, 164083; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s54084; GFX900-NEXT: ;;#ASMSTART4085; GFX900-NEXT: ; use s84086; GFX900-NEXT: ;;#ASMEND4087; GFX900-NEXT: s_setpc_b64 s[30:31]4088;4089; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_2:4090; GFX90A: ; %bb.0:4091; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4092; GFX90A-NEXT: ;;#ASMSTART4093; GFX90A-NEXT: ; def s[4:5]4094; GFX90A-NEXT: ;;#ASMEND4095; GFX90A-NEXT: ;;#ASMSTART4096; GFX90A-NEXT: ; def s[6:7]4097; GFX90A-NEXT: ;;#ASMEND4098; GFX90A-NEXT: s_lshr_b32 s4, s7, 164099; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s54100; GFX90A-NEXT: ;;#ASMSTART4101; GFX90A-NEXT: ; use s84102; GFX90A-NEXT: ;;#ASMEND4103; GFX90A-NEXT: s_setpc_b64 s[30:31]4104;4105; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_2:4106; GFX942: ; %bb.0:4107; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4108; GFX942-NEXT: ;;#ASMSTART4109; GFX942-NEXT: ; def s[0:1]4110; GFX942-NEXT: ;;#ASMEND4111; GFX942-NEXT: ;;#ASMSTART4112; GFX942-NEXT: ; def s[2:3]4113; GFX942-NEXT: ;;#ASMEND4114; GFX942-NEXT: s_lshr_b32 s0, s3, 164115; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s14116; GFX942-NEXT: ;;#ASMSTART4117; GFX942-NEXT: ; use s84118; GFX942-NEXT: ;;#ASMEND4119; GFX942-NEXT: s_setpc_b64 s[30:31]4120 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4121 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4122 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 2>4123 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4124 ret void4125}4126 4127define void @s_shuffle_v2bf16_v4bf16__7_3() {4128; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_3:4129; GFX900: ; %bb.0:4130; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4131; GFX900-NEXT: ;;#ASMSTART4132; GFX900-NEXT: ; def s[4:5]4133; GFX900-NEXT: ;;#ASMEND4134; GFX900-NEXT: ;;#ASMSTART4135; GFX900-NEXT: ; def s[6:7]4136; GFX900-NEXT: ;;#ASMEND4137; GFX900-NEXT: s_lshr_b32 s4, s5, 164138; GFX900-NEXT: s_lshr_b32 s5, s7, 164139; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44140; GFX900-NEXT: ;;#ASMSTART4141; GFX900-NEXT: ; use s84142; GFX900-NEXT: ;;#ASMEND4143; GFX900-NEXT: s_setpc_b64 s[30:31]4144;4145; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_3:4146; GFX90A: ; %bb.0:4147; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4148; GFX90A-NEXT: ;;#ASMSTART4149; GFX90A-NEXT: ; def s[4:5]4150; GFX90A-NEXT: ;;#ASMEND4151; GFX90A-NEXT: ;;#ASMSTART4152; GFX90A-NEXT: ; def s[6:7]4153; GFX90A-NEXT: ;;#ASMEND4154; GFX90A-NEXT: s_lshr_b32 s4, s5, 164155; GFX90A-NEXT: s_lshr_b32 s5, s7, 164156; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44157; GFX90A-NEXT: ;;#ASMSTART4158; GFX90A-NEXT: ; use s84159; GFX90A-NEXT: ;;#ASMEND4160; GFX90A-NEXT: s_setpc_b64 s[30:31]4161;4162; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_3:4163; GFX942: ; %bb.0:4164; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4165; GFX942-NEXT: ;;#ASMSTART4166; GFX942-NEXT: ; def s[0:1]4167; GFX942-NEXT: ;;#ASMEND4168; GFX942-NEXT: ;;#ASMSTART4169; GFX942-NEXT: ; def s[2:3]4170; GFX942-NEXT: ;;#ASMEND4171; GFX942-NEXT: s_lshr_b32 s0, s1, 164172; GFX942-NEXT: s_lshr_b32 s1, s3, 164173; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04174; GFX942-NEXT: ;;#ASMSTART4175; GFX942-NEXT: ; use s84176; GFX942-NEXT: ;;#ASMEND4177; GFX942-NEXT: s_setpc_b64 s[30:31]4178 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4179 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4180 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 3>4181 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4182 ret void4183}4184 4185define void @s_shuffle_v2bf16_v4bf16__7_4() {4186; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_4:4187; GFX900: ; %bb.0:4188; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4189; GFX900-NEXT: ;;#ASMSTART4190; GFX900-NEXT: ; def s[4:5]4191; GFX900-NEXT: ;;#ASMEND4192; GFX900-NEXT: s_lshr_b32 s5, s5, 164193; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44194; GFX900-NEXT: ;;#ASMSTART4195; GFX900-NEXT: ; use s84196; GFX900-NEXT: ;;#ASMEND4197; GFX900-NEXT: s_setpc_b64 s[30:31]4198;4199; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_4:4200; GFX90A: ; %bb.0:4201; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4202; GFX90A-NEXT: ;;#ASMSTART4203; GFX90A-NEXT: ; def s[4:5]4204; GFX90A-NEXT: ;;#ASMEND4205; GFX90A-NEXT: s_lshr_b32 s5, s5, 164206; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44207; GFX90A-NEXT: ;;#ASMSTART4208; GFX90A-NEXT: ; use s84209; GFX90A-NEXT: ;;#ASMEND4210; GFX90A-NEXT: s_setpc_b64 s[30:31]4211;4212; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_4:4213; GFX942: ; %bb.0:4214; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4215; GFX942-NEXT: ;;#ASMSTART4216; GFX942-NEXT: ; def s[0:1]4217; GFX942-NEXT: ;;#ASMEND4218; GFX942-NEXT: s_lshr_b32 s1, s1, 164219; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04220; GFX942-NEXT: ;;#ASMSTART4221; GFX942-NEXT: ; use s84222; GFX942-NEXT: ;;#ASMEND4223; GFX942-NEXT: s_setpc_b64 s[30:31]4224 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4225 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4226 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 4>4227 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4228 ret void4229}4230 4231define void @s_shuffle_v2bf16_v4bf16__7_5() {4232; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_5:4233; GFX900: ; %bb.0:4234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4235; GFX900-NEXT: ;;#ASMSTART4236; GFX900-NEXT: ; def s[4:5]4237; GFX900-NEXT: ;;#ASMEND4238; GFX900-NEXT: s_lshr_b32 s4, s4, 164239; GFX900-NEXT: s_lshr_b32 s5, s5, 164240; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44241; GFX900-NEXT: ;;#ASMSTART4242; GFX900-NEXT: ; use s84243; GFX900-NEXT: ;;#ASMEND4244; GFX900-NEXT: s_setpc_b64 s[30:31]4245;4246; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_5:4247; GFX90A: ; %bb.0:4248; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4249; GFX90A-NEXT: ;;#ASMSTART4250; GFX90A-NEXT: ; def s[4:5]4251; GFX90A-NEXT: ;;#ASMEND4252; GFX90A-NEXT: s_lshr_b32 s4, s4, 164253; GFX90A-NEXT: s_lshr_b32 s5, s5, 164254; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44255; GFX90A-NEXT: ;;#ASMSTART4256; GFX90A-NEXT: ; use s84257; GFX90A-NEXT: ;;#ASMEND4258; GFX90A-NEXT: s_setpc_b64 s[30:31]4259;4260; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_5:4261; GFX942: ; %bb.0:4262; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4263; GFX942-NEXT: ;;#ASMSTART4264; GFX942-NEXT: ; def s[0:1]4265; GFX942-NEXT: ;;#ASMEND4266; GFX942-NEXT: s_lshr_b32 s0, s0, 164267; GFX942-NEXT: s_lshr_b32 s1, s1, 164268; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04269; GFX942-NEXT: ;;#ASMSTART4270; GFX942-NEXT: ; use s84271; GFX942-NEXT: ;;#ASMEND4272; GFX942-NEXT: s_setpc_b64 s[30:31]4273 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4274 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4275 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 5>4276 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4277 ret void4278}4279 4280define void @s_shuffle_v2bf16_v4bf16__7_6() {4281; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_6:4282; GFX900: ; %bb.0:4283; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4284; GFX900-NEXT: ;;#ASMSTART4285; GFX900-NEXT: ; def s[4:5]4286; GFX900-NEXT: ;;#ASMEND4287; GFX900-NEXT: s_lshr_b32 s4, s5, 164288; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s54289; GFX900-NEXT: ;;#ASMSTART4290; GFX900-NEXT: ; use s84291; GFX900-NEXT: ;;#ASMEND4292; GFX900-NEXT: s_setpc_b64 s[30:31]4293;4294; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_6:4295; GFX90A: ; %bb.0:4296; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4297; GFX90A-NEXT: ;;#ASMSTART4298; GFX90A-NEXT: ; def s[4:5]4299; GFX90A-NEXT: ;;#ASMEND4300; GFX90A-NEXT: s_lshr_b32 s4, s5, 164301; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s54302; GFX90A-NEXT: ;;#ASMSTART4303; GFX90A-NEXT: ; use s84304; GFX90A-NEXT: ;;#ASMEND4305; GFX90A-NEXT: s_setpc_b64 s[30:31]4306;4307; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_6:4308; GFX942: ; %bb.0:4309; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4310; GFX942-NEXT: ;;#ASMSTART4311; GFX942-NEXT: ; def s[0:1]4312; GFX942-NEXT: ;;#ASMEND4313; GFX942-NEXT: s_lshr_b32 s0, s1, 164314; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s14315; GFX942-NEXT: ;;#ASMSTART4316; GFX942-NEXT: ; use s84317; GFX942-NEXT: ;;#ASMEND4318; GFX942-NEXT: s_setpc_b64 s[30:31]4319 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4320 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4321 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 6>4322 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4323 ret void4324}4325 4326define void @s_shuffle_v2bf16_v4bf16__7_7() {4327; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__7_7:4328; GFX900: ; %bb.0:4329; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4330; GFX900-NEXT: ;;#ASMSTART4331; GFX900-NEXT: ; def s[4:5]4332; GFX900-NEXT: ;;#ASMEND4333; GFX900-NEXT: s_lshr_b32 s4, s5, 164334; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44335; GFX900-NEXT: ;;#ASMSTART4336; GFX900-NEXT: ; use s84337; GFX900-NEXT: ;;#ASMEND4338; GFX900-NEXT: s_setpc_b64 s[30:31]4339;4340; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__7_7:4341; GFX90A: ; %bb.0:4342; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4343; GFX90A-NEXT: ;;#ASMSTART4344; GFX90A-NEXT: ; def s[4:5]4345; GFX90A-NEXT: ;;#ASMEND4346; GFX90A-NEXT: s_lshr_b32 s4, s5, 164347; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44348; GFX90A-NEXT: ;;#ASMSTART4349; GFX90A-NEXT: ; use s84350; GFX90A-NEXT: ;;#ASMEND4351; GFX90A-NEXT: s_setpc_b64 s[30:31]4352;4353; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__7_7:4354; GFX942: ; %bb.0:4355; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4356; GFX942-NEXT: ;;#ASMSTART4357; GFX942-NEXT: ; def s[0:1]4358; GFX942-NEXT: ;;#ASMEND4359; GFX942-NEXT: s_lshr_b32 s0, s1, 164360; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04361; GFX942-NEXT: ;;#ASMSTART4362; GFX942-NEXT: ; use s84363; GFX942-NEXT: ;;#ASMEND4364; GFX942-NEXT: s_setpc_b64 s[30:31]4365 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4366 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4367 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 7, i32 7>4368 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4369 ret void4370}4371 4372define void @s_shuffle_v2bf16_v4bf16__u_0() {4373; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_0:4374; GFX900: ; %bb.0:4375; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4376; GFX900-NEXT: ;;#ASMSTART4377; GFX900-NEXT: ; def s[4:5]4378; GFX900-NEXT: ;;#ASMEND4379; GFX900-NEXT: s_lshl_b32 s8, s4, 164380; GFX900-NEXT: ;;#ASMSTART4381; GFX900-NEXT: ; use s84382; GFX900-NEXT: ;;#ASMEND4383; GFX900-NEXT: s_setpc_b64 s[30:31]4384;4385; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_0:4386; GFX90A: ; %bb.0:4387; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4388; GFX90A-NEXT: ;;#ASMSTART4389; GFX90A-NEXT: ; def s[4:5]4390; GFX90A-NEXT: ;;#ASMEND4391; GFX90A-NEXT: s_lshl_b32 s8, s4, 164392; GFX90A-NEXT: ;;#ASMSTART4393; GFX90A-NEXT: ; use s84394; GFX90A-NEXT: ;;#ASMEND4395; GFX90A-NEXT: s_setpc_b64 s[30:31]4396;4397; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_0:4398; GFX942: ; %bb.0:4399; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4400; GFX942-NEXT: ;;#ASMSTART4401; GFX942-NEXT: ; def s[0:1]4402; GFX942-NEXT: ;;#ASMEND4403; GFX942-NEXT: s_lshl_b32 s8, s0, 164404; GFX942-NEXT: ;;#ASMSTART4405; GFX942-NEXT: ; use s84406; GFX942-NEXT: ;;#ASMEND4407; GFX942-NEXT: s_setpc_b64 s[30:31]4408 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4409 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 0>4410 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4411 ret void4412}4413 4414define void @s_shuffle_v2bf16_v4bf16__0_0() {4415; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_0:4416; GFX900: ; %bb.0:4417; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4418; GFX900-NEXT: ;;#ASMSTART4419; GFX900-NEXT: ; def s[4:5]4420; GFX900-NEXT: ;;#ASMEND4421; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44422; GFX900-NEXT: ;;#ASMSTART4423; GFX900-NEXT: ; use s84424; GFX900-NEXT: ;;#ASMEND4425; GFX900-NEXT: s_setpc_b64 s[30:31]4426;4427; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_0:4428; GFX90A: ; %bb.0:4429; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4430; GFX90A-NEXT: ;;#ASMSTART4431; GFX90A-NEXT: ; def s[4:5]4432; GFX90A-NEXT: ;;#ASMEND4433; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44434; GFX90A-NEXT: ;;#ASMSTART4435; GFX90A-NEXT: ; use s84436; GFX90A-NEXT: ;;#ASMEND4437; GFX90A-NEXT: s_setpc_b64 s[30:31]4438;4439; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_0:4440; GFX942: ; %bb.0:4441; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4442; GFX942-NEXT: ;;#ASMSTART4443; GFX942-NEXT: ; def s[0:1]4444; GFX942-NEXT: ;;#ASMEND4445; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04446; GFX942-NEXT: ;;#ASMSTART4447; GFX942-NEXT: ; use s84448; GFX942-NEXT: ;;#ASMEND4449; GFX942-NEXT: s_setpc_b64 s[30:31]4450 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4451 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> zeroinitializer4452 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4453 ret void4454}4455 4456define void @s_shuffle_v2bf16_v4bf16__1_0() {4457; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_0:4458; GFX900: ; %bb.0:4459; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4460; GFX900-NEXT: ;;#ASMSTART4461; GFX900-NEXT: ; def s[4:5]4462; GFX900-NEXT: ;;#ASMEND4463; GFX900-NEXT: s_lshr_b32 s5, s4, 164464; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44465; GFX900-NEXT: ;;#ASMSTART4466; GFX900-NEXT: ; use s84467; GFX900-NEXT: ;;#ASMEND4468; GFX900-NEXT: s_setpc_b64 s[30:31]4469;4470; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_0:4471; GFX90A: ; %bb.0:4472; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4473; GFX90A-NEXT: ;;#ASMSTART4474; GFX90A-NEXT: ; def s[4:5]4475; GFX90A-NEXT: ;;#ASMEND4476; GFX90A-NEXT: s_lshr_b32 s5, s4, 164477; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44478; GFX90A-NEXT: ;;#ASMSTART4479; GFX90A-NEXT: ; use s84480; GFX90A-NEXT: ;;#ASMEND4481; GFX90A-NEXT: s_setpc_b64 s[30:31]4482;4483; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_0:4484; GFX942: ; %bb.0:4485; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4486; GFX942-NEXT: ;;#ASMSTART4487; GFX942-NEXT: ; def s[0:1]4488; GFX942-NEXT: ;;#ASMEND4489; GFX942-NEXT: s_lshr_b32 s1, s0, 164490; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04491; GFX942-NEXT: ;;#ASMSTART4492; GFX942-NEXT: ; use s84493; GFX942-NEXT: ;;#ASMEND4494; GFX942-NEXT: s_setpc_b64 s[30:31]4495 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4496 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 0>4497 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4498 ret void4499}4500 4501define void @s_shuffle_v2bf16_v4bf16__2_0() {4502; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_0:4503; GFX900: ; %bb.0:4504; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4505; GFX900-NEXT: ;;#ASMSTART4506; GFX900-NEXT: ; def s[4:5]4507; GFX900-NEXT: ;;#ASMEND4508; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44509; GFX900-NEXT: ;;#ASMSTART4510; GFX900-NEXT: ; use s84511; GFX900-NEXT: ;;#ASMEND4512; GFX900-NEXT: s_setpc_b64 s[30:31]4513;4514; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_0:4515; GFX90A: ; %bb.0:4516; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4517; GFX90A-NEXT: ;;#ASMSTART4518; GFX90A-NEXT: ; def s[4:5]4519; GFX90A-NEXT: ;;#ASMEND4520; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44521; GFX90A-NEXT: ;;#ASMSTART4522; GFX90A-NEXT: ; use s84523; GFX90A-NEXT: ;;#ASMEND4524; GFX90A-NEXT: s_setpc_b64 s[30:31]4525;4526; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_0:4527; GFX942: ; %bb.0:4528; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4529; GFX942-NEXT: ;;#ASMSTART4530; GFX942-NEXT: ; def s[0:1]4531; GFX942-NEXT: ;;#ASMEND4532; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04533; GFX942-NEXT: ;;#ASMSTART4534; GFX942-NEXT: ; use s84535; GFX942-NEXT: ;;#ASMEND4536; GFX942-NEXT: s_setpc_b64 s[30:31]4537 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4538 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 0>4539 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4540 ret void4541}4542 4543define void @s_shuffle_v2bf16_v4bf16__3_0() {4544; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_0:4545; GFX900: ; %bb.0:4546; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4547; GFX900-NEXT: ;;#ASMSTART4548; GFX900-NEXT: ; def s[4:5]4549; GFX900-NEXT: ;;#ASMEND4550; GFX900-NEXT: s_lshr_b32 s5, s5, 164551; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44552; GFX900-NEXT: ;;#ASMSTART4553; GFX900-NEXT: ; use s84554; GFX900-NEXT: ;;#ASMEND4555; GFX900-NEXT: s_setpc_b64 s[30:31]4556;4557; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_0:4558; GFX90A: ; %bb.0:4559; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4560; GFX90A-NEXT: ;;#ASMSTART4561; GFX90A-NEXT: ; def s[4:5]4562; GFX90A-NEXT: ;;#ASMEND4563; GFX90A-NEXT: s_lshr_b32 s5, s5, 164564; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44565; GFX90A-NEXT: ;;#ASMSTART4566; GFX90A-NEXT: ; use s84567; GFX90A-NEXT: ;;#ASMEND4568; GFX90A-NEXT: s_setpc_b64 s[30:31]4569;4570; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_0:4571; GFX942: ; %bb.0:4572; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4573; GFX942-NEXT: ;;#ASMSTART4574; GFX942-NEXT: ; def s[0:1]4575; GFX942-NEXT: ;;#ASMEND4576; GFX942-NEXT: s_lshr_b32 s1, s1, 164577; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04578; GFX942-NEXT: ;;#ASMSTART4579; GFX942-NEXT: ; use s84580; GFX942-NEXT: ;;#ASMEND4581; GFX942-NEXT: s_setpc_b64 s[30:31]4582 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4583 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 0>4584 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4585 ret void4586}4587 4588define void @s_shuffle_v2bf16_v4bf16__4_0() {4589; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_0:4590; GFX900: ; %bb.0:4591; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4592; GFX900-NEXT: ;;#ASMSTART4593; GFX900-NEXT: ; def s[4:5]4594; GFX900-NEXT: ;;#ASMEND4595; GFX900-NEXT: s_lshl_b32 s8, s4, 164596; GFX900-NEXT: ;;#ASMSTART4597; GFX900-NEXT: ; use s84598; GFX900-NEXT: ;;#ASMEND4599; GFX900-NEXT: s_setpc_b64 s[30:31]4600;4601; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_0:4602; GFX90A: ; %bb.0:4603; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4604; GFX90A-NEXT: ;;#ASMSTART4605; GFX90A-NEXT: ; def s[4:5]4606; GFX90A-NEXT: ;;#ASMEND4607; GFX90A-NEXT: s_lshl_b32 s8, s4, 164608; GFX90A-NEXT: ;;#ASMSTART4609; GFX90A-NEXT: ; use s84610; GFX90A-NEXT: ;;#ASMEND4611; GFX90A-NEXT: s_setpc_b64 s[30:31]4612;4613; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_0:4614; GFX942: ; %bb.0:4615; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4616; GFX942-NEXT: ;;#ASMSTART4617; GFX942-NEXT: ; def s[0:1]4618; GFX942-NEXT: ;;#ASMEND4619; GFX942-NEXT: s_lshl_b32 s8, s0, 164620; GFX942-NEXT: ;;#ASMSTART4621; GFX942-NEXT: ; use s84622; GFX942-NEXT: ;;#ASMEND4623; GFX942-NEXT: s_setpc_b64 s[30:31]4624 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4625 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 0>4626 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4627 ret void4628}4629 4630define void @s_shuffle_v2bf16_v4bf16__5_0() {4631; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_0:4632; GFX900: ; %bb.0:4633; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4634; GFX900-NEXT: ;;#ASMSTART4635; GFX900-NEXT: ; def s[4:5]4636; GFX900-NEXT: ;;#ASMEND4637; GFX900-NEXT: ;;#ASMSTART4638; GFX900-NEXT: ; def s[6:7]4639; GFX900-NEXT: ;;#ASMEND4640; GFX900-NEXT: s_lshr_b32 s5, s6, 164641; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44642; GFX900-NEXT: ;;#ASMSTART4643; GFX900-NEXT: ; use s84644; GFX900-NEXT: ;;#ASMEND4645; GFX900-NEXT: s_setpc_b64 s[30:31]4646;4647; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_0:4648; GFX90A: ; %bb.0:4649; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4650; GFX90A-NEXT: ;;#ASMSTART4651; GFX90A-NEXT: ; def s[4:5]4652; GFX90A-NEXT: ;;#ASMEND4653; GFX90A-NEXT: ;;#ASMSTART4654; GFX90A-NEXT: ; def s[6:7]4655; GFX90A-NEXT: ;;#ASMEND4656; GFX90A-NEXT: s_lshr_b32 s5, s6, 164657; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44658; GFX90A-NEXT: ;;#ASMSTART4659; GFX90A-NEXT: ; use s84660; GFX90A-NEXT: ;;#ASMEND4661; GFX90A-NEXT: s_setpc_b64 s[30:31]4662;4663; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_0:4664; GFX942: ; %bb.0:4665; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4666; GFX942-NEXT: ;;#ASMSTART4667; GFX942-NEXT: ; def s[0:1]4668; GFX942-NEXT: ;;#ASMEND4669; GFX942-NEXT: ;;#ASMSTART4670; GFX942-NEXT: ; def s[2:3]4671; GFX942-NEXT: ;;#ASMEND4672; GFX942-NEXT: s_lshr_b32 s1, s2, 164673; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04674; GFX942-NEXT: ;;#ASMSTART4675; GFX942-NEXT: ; use s84676; GFX942-NEXT: ;;#ASMEND4677; GFX942-NEXT: s_setpc_b64 s[30:31]4678 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4679 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4680 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 0>4681 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4682 ret void4683}4684 4685define void @s_shuffle_v2bf16_v4bf16__6_0() {4686; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_0:4687; GFX900: ; %bb.0:4688; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4689; GFX900-NEXT: ;;#ASMSTART4690; GFX900-NEXT: ; def s[4:5]4691; GFX900-NEXT: ;;#ASMEND4692; GFX900-NEXT: ;;#ASMSTART4693; GFX900-NEXT: ; def s[6:7]4694; GFX900-NEXT: ;;#ASMEND4695; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s44696; GFX900-NEXT: ;;#ASMSTART4697; GFX900-NEXT: ; use s84698; GFX900-NEXT: ;;#ASMEND4699; GFX900-NEXT: s_setpc_b64 s[30:31]4700;4701; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_0:4702; GFX90A: ; %bb.0:4703; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4704; GFX90A-NEXT: ;;#ASMSTART4705; GFX90A-NEXT: ; def s[4:5]4706; GFX90A-NEXT: ;;#ASMEND4707; GFX90A-NEXT: ;;#ASMSTART4708; GFX90A-NEXT: ; def s[6:7]4709; GFX90A-NEXT: ;;#ASMEND4710; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s44711; GFX90A-NEXT: ;;#ASMSTART4712; GFX90A-NEXT: ; use s84713; GFX90A-NEXT: ;;#ASMEND4714; GFX90A-NEXT: s_setpc_b64 s[30:31]4715;4716; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_0:4717; GFX942: ; %bb.0:4718; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4719; GFX942-NEXT: ;;#ASMSTART4720; GFX942-NEXT: ; def s[0:1]4721; GFX942-NEXT: ;;#ASMEND4722; GFX942-NEXT: ;;#ASMSTART4723; GFX942-NEXT: ; def s[2:3]4724; GFX942-NEXT: ;;#ASMEND4725; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s04726; GFX942-NEXT: ;;#ASMSTART4727; GFX942-NEXT: ; use s84728; GFX942-NEXT: ;;#ASMEND4729; GFX942-NEXT: s_setpc_b64 s[30:31]4730 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4731 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4732 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 0>4733 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4734 ret void4735}4736 4737define void @s_shuffle_v2bf16_v4bf16__u_1() {4738; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_1:4739; GFX900: ; %bb.0:4740; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4741; GFX900-NEXT: ;;#ASMSTART4742; GFX900-NEXT: ; def s[8:9]4743; GFX900-NEXT: ;;#ASMEND4744; GFX900-NEXT: ;;#ASMSTART4745; GFX900-NEXT: ; use s84746; GFX900-NEXT: ;;#ASMEND4747; GFX900-NEXT: s_setpc_b64 s[30:31]4748;4749; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_1:4750; GFX90A: ; %bb.0:4751; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4752; GFX90A-NEXT: ;;#ASMSTART4753; GFX90A-NEXT: ; def s[8:9]4754; GFX90A-NEXT: ;;#ASMEND4755; GFX90A-NEXT: ;;#ASMSTART4756; GFX90A-NEXT: ; use s84757; GFX90A-NEXT: ;;#ASMEND4758; GFX90A-NEXT: s_setpc_b64 s[30:31]4759;4760; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_1:4761; GFX942: ; %bb.0:4762; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4763; GFX942-NEXT: ;;#ASMSTART4764; GFX942-NEXT: ; def s[8:9]4765; GFX942-NEXT: ;;#ASMEND4766; GFX942-NEXT: s_nop 04767; GFX942-NEXT: ;;#ASMSTART4768; GFX942-NEXT: ; use s84769; GFX942-NEXT: ;;#ASMEND4770; GFX942-NEXT: s_setpc_b64 s[30:31]4771 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4772 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 1>4773 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4774 ret void4775}4776 4777define void @s_shuffle_v2bf16_v4bf16__0_1() {4778; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_1:4779; GFX900: ; %bb.0:4780; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4781; GFX900-NEXT: ;;#ASMSTART4782; GFX900-NEXT: ; def s[8:9]4783; GFX900-NEXT: ;;#ASMEND4784; GFX900-NEXT: ;;#ASMSTART4785; GFX900-NEXT: ; use s84786; GFX900-NEXT: ;;#ASMEND4787; GFX900-NEXT: s_setpc_b64 s[30:31]4788;4789; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_1:4790; GFX90A: ; %bb.0:4791; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4792; GFX90A-NEXT: ;;#ASMSTART4793; GFX90A-NEXT: ; def s[8:9]4794; GFX90A-NEXT: ;;#ASMEND4795; GFX90A-NEXT: ;;#ASMSTART4796; GFX90A-NEXT: ; use s84797; GFX90A-NEXT: ;;#ASMEND4798; GFX90A-NEXT: s_setpc_b64 s[30:31]4799;4800; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_1:4801; GFX942: ; %bb.0:4802; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4803; GFX942-NEXT: ;;#ASMSTART4804; GFX942-NEXT: ; def s[8:9]4805; GFX942-NEXT: ;;#ASMEND4806; GFX942-NEXT: s_nop 04807; GFX942-NEXT: ;;#ASMSTART4808; GFX942-NEXT: ; use s84809; GFX942-NEXT: ;;#ASMEND4810; GFX942-NEXT: s_setpc_b64 s[30:31]4811 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4812 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 1>4813 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4814 ret void4815}4816 4817define void @s_shuffle_v2bf16_v4bf16__1_1() {4818; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_1:4819; GFX900: ; %bb.0:4820; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4821; GFX900-NEXT: ;;#ASMSTART4822; GFX900-NEXT: ; def s[4:5]4823; GFX900-NEXT: ;;#ASMEND4824; GFX900-NEXT: s_lshr_b32 s4, s4, 164825; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s44826; GFX900-NEXT: ;;#ASMSTART4827; GFX900-NEXT: ; use s84828; GFX900-NEXT: ;;#ASMEND4829; GFX900-NEXT: s_setpc_b64 s[30:31]4830;4831; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_1:4832; GFX90A: ; %bb.0:4833; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4834; GFX90A-NEXT: ;;#ASMSTART4835; GFX90A-NEXT: ; def s[4:5]4836; GFX90A-NEXT: ;;#ASMEND4837; GFX90A-NEXT: s_lshr_b32 s4, s4, 164838; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s44839; GFX90A-NEXT: ;;#ASMSTART4840; GFX90A-NEXT: ; use s84841; GFX90A-NEXT: ;;#ASMEND4842; GFX90A-NEXT: s_setpc_b64 s[30:31]4843;4844; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_1:4845; GFX942: ; %bb.0:4846; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4847; GFX942-NEXT: ;;#ASMSTART4848; GFX942-NEXT: ; def s[0:1]4849; GFX942-NEXT: ;;#ASMEND4850; GFX942-NEXT: s_lshr_b32 s0, s0, 164851; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s04852; GFX942-NEXT: ;;#ASMSTART4853; GFX942-NEXT: ; use s84854; GFX942-NEXT: ;;#ASMEND4855; GFX942-NEXT: s_setpc_b64 s[30:31]4856 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4857 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 1>4858 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4859 ret void4860}4861 4862define void @s_shuffle_v2bf16_v4bf16__2_1() {4863; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_1:4864; GFX900: ; %bb.0:4865; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4866; GFX900-NEXT: ;;#ASMSTART4867; GFX900-NEXT: ; def s[4:5]4868; GFX900-NEXT: ;;#ASMEND4869; GFX900-NEXT: s_lshr_b32 s4, s4, 164870; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44871; GFX900-NEXT: ;;#ASMSTART4872; GFX900-NEXT: ; use s84873; GFX900-NEXT: ;;#ASMEND4874; GFX900-NEXT: s_setpc_b64 s[30:31]4875;4876; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_1:4877; GFX90A: ; %bb.0:4878; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4879; GFX90A-NEXT: ;;#ASMSTART4880; GFX90A-NEXT: ; def s[4:5]4881; GFX90A-NEXT: ;;#ASMEND4882; GFX90A-NEXT: s_lshr_b32 s4, s4, 164883; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44884; GFX90A-NEXT: ;;#ASMSTART4885; GFX90A-NEXT: ; use s84886; GFX90A-NEXT: ;;#ASMEND4887; GFX90A-NEXT: s_setpc_b64 s[30:31]4888;4889; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_1:4890; GFX942: ; %bb.0:4891; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4892; GFX942-NEXT: ;;#ASMSTART4893; GFX942-NEXT: ; def s[0:1]4894; GFX942-NEXT: ;;#ASMEND4895; GFX942-NEXT: s_lshr_b32 s0, s0, 164896; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04897; GFX942-NEXT: ;;#ASMSTART4898; GFX942-NEXT: ; use s84899; GFX942-NEXT: ;;#ASMEND4900; GFX942-NEXT: s_setpc_b64 s[30:31]4901 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4902 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 1>4903 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4904 ret void4905}4906 4907define void @s_shuffle_v2bf16_v4bf16__3_1() {4908; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_1:4909; GFX900: ; %bb.0:4910; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4911; GFX900-NEXT: ;;#ASMSTART4912; GFX900-NEXT: ; def s[4:5]4913; GFX900-NEXT: ;;#ASMEND4914; GFX900-NEXT: s_lshr_b32 s4, s4, 164915; GFX900-NEXT: s_lshr_b32 s5, s5, 164916; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s44917; GFX900-NEXT: ;;#ASMSTART4918; GFX900-NEXT: ; use s84919; GFX900-NEXT: ;;#ASMEND4920; GFX900-NEXT: s_setpc_b64 s[30:31]4921;4922; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_1:4923; GFX90A: ; %bb.0:4924; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4925; GFX90A-NEXT: ;;#ASMSTART4926; GFX90A-NEXT: ; def s[4:5]4927; GFX90A-NEXT: ;;#ASMEND4928; GFX90A-NEXT: s_lshr_b32 s4, s4, 164929; GFX90A-NEXT: s_lshr_b32 s5, s5, 164930; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s44931; GFX90A-NEXT: ;;#ASMSTART4932; GFX90A-NEXT: ; use s84933; GFX90A-NEXT: ;;#ASMEND4934; GFX90A-NEXT: s_setpc_b64 s[30:31]4935;4936; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_1:4937; GFX942: ; %bb.0:4938; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4939; GFX942-NEXT: ;;#ASMSTART4940; GFX942-NEXT: ; def s[0:1]4941; GFX942-NEXT: ;;#ASMEND4942; GFX942-NEXT: s_lshr_b32 s0, s0, 164943; GFX942-NEXT: s_lshr_b32 s1, s1, 164944; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s04945; GFX942-NEXT: ;;#ASMSTART4946; GFX942-NEXT: ; use s84947; GFX942-NEXT: ;;#ASMEND4948; GFX942-NEXT: s_setpc_b64 s[30:31]4949 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4950 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 1>4951 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4952 ret void4953}4954 4955define void @s_shuffle_v2bf16_v4bf16__4_1() {4956; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_1:4957; GFX900: ; %bb.0:4958; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4959; GFX900-NEXT: ;;#ASMSTART4960; GFX900-NEXT: ; def s[8:9]4961; GFX900-NEXT: ;;#ASMEND4962; GFX900-NEXT: ;;#ASMSTART4963; GFX900-NEXT: ; use s84964; GFX900-NEXT: ;;#ASMEND4965; GFX900-NEXT: s_setpc_b64 s[30:31]4966;4967; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_1:4968; GFX90A: ; %bb.0:4969; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4970; GFX90A-NEXT: ;;#ASMSTART4971; GFX90A-NEXT: ; def s[8:9]4972; GFX90A-NEXT: ;;#ASMEND4973; GFX90A-NEXT: ;;#ASMSTART4974; GFX90A-NEXT: ; use s84975; GFX90A-NEXT: ;;#ASMEND4976; GFX90A-NEXT: s_setpc_b64 s[30:31]4977;4978; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_1:4979; GFX942: ; %bb.0:4980; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4981; GFX942-NEXT: ;;#ASMSTART4982; GFX942-NEXT: ; def s[8:9]4983; GFX942-NEXT: ;;#ASMEND4984; GFX942-NEXT: s_nop 04985; GFX942-NEXT: ;;#ASMSTART4986; GFX942-NEXT: ; use s84987; GFX942-NEXT: ;;#ASMEND4988; GFX942-NEXT: s_setpc_b64 s[30:31]4989 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4990 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 1>4991 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)4992 ret void4993}4994 4995define void @s_shuffle_v2bf16_v4bf16__5_1() {4996; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_1:4997; GFX900: ; %bb.0:4998; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4999; GFX900-NEXT: ;;#ASMSTART5000; GFX900-NEXT: ; def s[4:5]5001; GFX900-NEXT: ;;#ASMEND5002; GFX900-NEXT: ;;#ASMSTART5003; GFX900-NEXT: ; def s[6:7]5004; GFX900-NEXT: ;;#ASMEND5005; GFX900-NEXT: s_lshr_b32 s4, s4, 165006; GFX900-NEXT: s_lshr_b32 s5, s6, 165007; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45008; GFX900-NEXT: ;;#ASMSTART5009; GFX900-NEXT: ; use s85010; GFX900-NEXT: ;;#ASMEND5011; GFX900-NEXT: s_setpc_b64 s[30:31]5012;5013; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_1:5014; GFX90A: ; %bb.0:5015; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5016; GFX90A-NEXT: ;;#ASMSTART5017; GFX90A-NEXT: ; def s[4:5]5018; GFX90A-NEXT: ;;#ASMEND5019; GFX90A-NEXT: ;;#ASMSTART5020; GFX90A-NEXT: ; def s[6:7]5021; GFX90A-NEXT: ;;#ASMEND5022; GFX90A-NEXT: s_lshr_b32 s4, s4, 165023; GFX90A-NEXT: s_lshr_b32 s5, s6, 165024; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45025; GFX90A-NEXT: ;;#ASMSTART5026; GFX90A-NEXT: ; use s85027; GFX90A-NEXT: ;;#ASMEND5028; GFX90A-NEXT: s_setpc_b64 s[30:31]5029;5030; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_1:5031; GFX942: ; %bb.0:5032; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5033; GFX942-NEXT: ;;#ASMSTART5034; GFX942-NEXT: ; def s[0:1]5035; GFX942-NEXT: ;;#ASMEND5036; GFX942-NEXT: ;;#ASMSTART5037; GFX942-NEXT: ; def s[2:3]5038; GFX942-NEXT: ;;#ASMEND5039; GFX942-NEXT: s_lshr_b32 s0, s0, 165040; GFX942-NEXT: s_lshr_b32 s1, s2, 165041; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05042; GFX942-NEXT: ;;#ASMSTART5043; GFX942-NEXT: ; use s85044; GFX942-NEXT: ;;#ASMEND5045; GFX942-NEXT: s_setpc_b64 s[30:31]5046 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5047 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5048 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 1>5049 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5050 ret void5051}5052 5053define void @s_shuffle_v2bf16_v4bf16__6_1() {5054; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_1:5055; GFX900: ; %bb.0:5056; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5057; GFX900-NEXT: ;;#ASMSTART5058; GFX900-NEXT: ; def s[4:5]5059; GFX900-NEXT: ;;#ASMEND5060; GFX900-NEXT: s_lshr_b32 s4, s4, 165061; GFX900-NEXT: ;;#ASMSTART5062; GFX900-NEXT: ; def s[6:7]5063; GFX900-NEXT: ;;#ASMEND5064; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s45065; GFX900-NEXT: ;;#ASMSTART5066; GFX900-NEXT: ; use s85067; GFX900-NEXT: ;;#ASMEND5068; GFX900-NEXT: s_setpc_b64 s[30:31]5069;5070; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_1:5071; GFX90A: ; %bb.0:5072; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5073; GFX90A-NEXT: ;;#ASMSTART5074; GFX90A-NEXT: ; def s[4:5]5075; GFX90A-NEXT: ;;#ASMEND5076; GFX90A-NEXT: s_lshr_b32 s4, s4, 165077; GFX90A-NEXT: ;;#ASMSTART5078; GFX90A-NEXT: ; def s[6:7]5079; GFX90A-NEXT: ;;#ASMEND5080; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s45081; GFX90A-NEXT: ;;#ASMSTART5082; GFX90A-NEXT: ; use s85083; GFX90A-NEXT: ;;#ASMEND5084; GFX90A-NEXT: s_setpc_b64 s[30:31]5085;5086; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_1:5087; GFX942: ; %bb.0:5088; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5089; GFX942-NEXT: ;;#ASMSTART5090; GFX942-NEXT: ; def s[0:1]5091; GFX942-NEXT: ;;#ASMEND5092; GFX942-NEXT: s_lshr_b32 s0, s0, 165093; GFX942-NEXT: ;;#ASMSTART5094; GFX942-NEXT: ; def s[2:3]5095; GFX942-NEXT: ;;#ASMEND5096; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s05097; GFX942-NEXT: ;;#ASMSTART5098; GFX942-NEXT: ; use s85099; GFX942-NEXT: ;;#ASMEND5100; GFX942-NEXT: s_setpc_b64 s[30:31]5101 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5102 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5103 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 1>5104 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5105 ret void5106}5107 5108define void @s_shuffle_v2bf16_v4bf16__u_2() {5109; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_2:5110; GFX900: ; %bb.0:5111; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5112; GFX900-NEXT: ;;#ASMSTART5113; GFX900-NEXT: ; def s[4:5]5114; GFX900-NEXT: ;;#ASMEND5115; GFX900-NEXT: s_lshl_b32 s8, s5, 165116; GFX900-NEXT: ;;#ASMSTART5117; GFX900-NEXT: ; use s85118; GFX900-NEXT: ;;#ASMEND5119; GFX900-NEXT: s_setpc_b64 s[30:31]5120;5121; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_2:5122; GFX90A: ; %bb.0:5123; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5124; GFX90A-NEXT: ;;#ASMSTART5125; GFX90A-NEXT: ; def s[4:5]5126; GFX90A-NEXT: ;;#ASMEND5127; GFX90A-NEXT: s_lshl_b32 s8, s5, 165128; GFX90A-NEXT: ;;#ASMSTART5129; GFX90A-NEXT: ; use s85130; GFX90A-NEXT: ;;#ASMEND5131; GFX90A-NEXT: s_setpc_b64 s[30:31]5132;5133; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_2:5134; GFX942: ; %bb.0:5135; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5136; GFX942-NEXT: ;;#ASMSTART5137; GFX942-NEXT: ; def s[0:1]5138; GFX942-NEXT: ;;#ASMEND5139; GFX942-NEXT: s_lshl_b32 s8, s1, 165140; GFX942-NEXT: ;;#ASMSTART5141; GFX942-NEXT: ; use s85142; GFX942-NEXT: ;;#ASMEND5143; GFX942-NEXT: s_setpc_b64 s[30:31]5144 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5145 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 2>5146 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5147 ret void5148}5149 5150define void @s_shuffle_v2bf16_v4bf16__0_2() {5151; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_2:5152; GFX900: ; %bb.0:5153; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5154; GFX900-NEXT: ;;#ASMSTART5155; GFX900-NEXT: ; def s[4:5]5156; GFX900-NEXT: ;;#ASMEND5157; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55158; GFX900-NEXT: ;;#ASMSTART5159; GFX900-NEXT: ; use s85160; GFX900-NEXT: ;;#ASMEND5161; GFX900-NEXT: s_setpc_b64 s[30:31]5162;5163; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_2:5164; GFX90A: ; %bb.0:5165; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5166; GFX90A-NEXT: ;;#ASMSTART5167; GFX90A-NEXT: ; def s[4:5]5168; GFX90A-NEXT: ;;#ASMEND5169; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55170; GFX90A-NEXT: ;;#ASMSTART5171; GFX90A-NEXT: ; use s85172; GFX90A-NEXT: ;;#ASMEND5173; GFX90A-NEXT: s_setpc_b64 s[30:31]5174;5175; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_2:5176; GFX942: ; %bb.0:5177; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5178; GFX942-NEXT: ;;#ASMSTART5179; GFX942-NEXT: ; def s[0:1]5180; GFX942-NEXT: ;;#ASMEND5181; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15182; GFX942-NEXT: ;;#ASMSTART5183; GFX942-NEXT: ; use s85184; GFX942-NEXT: ;;#ASMEND5185; GFX942-NEXT: s_setpc_b64 s[30:31]5186 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5187 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 2>5188 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5189 ret void5190}5191 5192define void @s_shuffle_v2bf16_v4bf16__1_2() {5193; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_2:5194; GFX900: ; %bb.0:5195; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5196; GFX900-NEXT: ;;#ASMSTART5197; GFX900-NEXT: ; def s[4:5]5198; GFX900-NEXT: ;;#ASMEND5199; GFX900-NEXT: s_lshr_b32 s4, s4, 165200; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55201; GFX900-NEXT: ;;#ASMSTART5202; GFX900-NEXT: ; use s85203; GFX900-NEXT: ;;#ASMEND5204; GFX900-NEXT: s_setpc_b64 s[30:31]5205;5206; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_2:5207; GFX90A: ; %bb.0:5208; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5209; GFX90A-NEXT: ;;#ASMSTART5210; GFX90A-NEXT: ; def s[4:5]5211; GFX90A-NEXT: ;;#ASMEND5212; GFX90A-NEXT: s_lshr_b32 s4, s4, 165213; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55214; GFX90A-NEXT: ;;#ASMSTART5215; GFX90A-NEXT: ; use s85216; GFX90A-NEXT: ;;#ASMEND5217; GFX90A-NEXT: s_setpc_b64 s[30:31]5218;5219; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_2:5220; GFX942: ; %bb.0:5221; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5222; GFX942-NEXT: ;;#ASMSTART5223; GFX942-NEXT: ; def s[0:1]5224; GFX942-NEXT: ;;#ASMEND5225; GFX942-NEXT: s_lshr_b32 s0, s0, 165226; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15227; GFX942-NEXT: ;;#ASMSTART5228; GFX942-NEXT: ; use s85229; GFX942-NEXT: ;;#ASMEND5230; GFX942-NEXT: s_setpc_b64 s[30:31]5231 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5232 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 2>5233 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5234 ret void5235}5236 5237define void @s_shuffle_v2bf16_v4bf16__2_2() {5238; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_2:5239; GFX900: ; %bb.0:5240; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5241; GFX900-NEXT: ;;#ASMSTART5242; GFX900-NEXT: ; def s[4:5]5243; GFX900-NEXT: ;;#ASMEND5244; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55245; GFX900-NEXT: ;;#ASMSTART5246; GFX900-NEXT: ; use s85247; GFX900-NEXT: ;;#ASMEND5248; GFX900-NEXT: s_setpc_b64 s[30:31]5249;5250; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_2:5251; GFX90A: ; %bb.0:5252; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5253; GFX90A-NEXT: ;;#ASMSTART5254; GFX90A-NEXT: ; def s[4:5]5255; GFX90A-NEXT: ;;#ASMEND5256; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55257; GFX90A-NEXT: ;;#ASMSTART5258; GFX90A-NEXT: ; use s85259; GFX90A-NEXT: ;;#ASMEND5260; GFX90A-NEXT: s_setpc_b64 s[30:31]5261;5262; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_2:5263; GFX942: ; %bb.0:5264; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5265; GFX942-NEXT: ;;#ASMSTART5266; GFX942-NEXT: ; def s[0:1]5267; GFX942-NEXT: ;;#ASMEND5268; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15269; GFX942-NEXT: ;;#ASMSTART5270; GFX942-NEXT: ; use s85271; GFX942-NEXT: ;;#ASMEND5272; GFX942-NEXT: s_setpc_b64 s[30:31]5273 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5274 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 2>5275 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5276 ret void5277}5278 5279define void @s_shuffle_v2bf16_v4bf16__3_2() {5280; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_2:5281; GFX900: ; %bb.0:5282; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5283; GFX900-NEXT: ;;#ASMSTART5284; GFX900-NEXT: ; def s[4:5]5285; GFX900-NEXT: ;;#ASMEND5286; GFX900-NEXT: s_lshr_b32 s4, s5, 165287; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55288; GFX900-NEXT: ;;#ASMSTART5289; GFX900-NEXT: ; use s85290; GFX900-NEXT: ;;#ASMEND5291; GFX900-NEXT: s_setpc_b64 s[30:31]5292;5293; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_2:5294; GFX90A: ; %bb.0:5295; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5296; GFX90A-NEXT: ;;#ASMSTART5297; GFX90A-NEXT: ; def s[4:5]5298; GFX90A-NEXT: ;;#ASMEND5299; GFX90A-NEXT: s_lshr_b32 s4, s5, 165300; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55301; GFX90A-NEXT: ;;#ASMSTART5302; GFX90A-NEXT: ; use s85303; GFX90A-NEXT: ;;#ASMEND5304; GFX90A-NEXT: s_setpc_b64 s[30:31]5305;5306; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_2:5307; GFX942: ; %bb.0:5308; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5309; GFX942-NEXT: ;;#ASMSTART5310; GFX942-NEXT: ; def s[0:1]5311; GFX942-NEXT: ;;#ASMEND5312; GFX942-NEXT: s_lshr_b32 s0, s1, 165313; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15314; GFX942-NEXT: ;;#ASMSTART5315; GFX942-NEXT: ; use s85316; GFX942-NEXT: ;;#ASMEND5317; GFX942-NEXT: s_setpc_b64 s[30:31]5318 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5319 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 2>5320 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5321 ret void5322}5323 5324define void @s_shuffle_v2bf16_v4bf16__4_2() {5325; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_2:5326; GFX900: ; %bb.0:5327; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5328; GFX900-NEXT: ;;#ASMSTART5329; GFX900-NEXT: ; def s[4:5]5330; GFX900-NEXT: ;;#ASMEND5331; GFX900-NEXT: s_lshl_b32 s8, s5, 165332; GFX900-NEXT: ;;#ASMSTART5333; GFX900-NEXT: ; use s85334; GFX900-NEXT: ;;#ASMEND5335; GFX900-NEXT: s_setpc_b64 s[30:31]5336;5337; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_2:5338; GFX90A: ; %bb.0:5339; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5340; GFX90A-NEXT: ;;#ASMSTART5341; GFX90A-NEXT: ; def s[4:5]5342; GFX90A-NEXT: ;;#ASMEND5343; GFX90A-NEXT: s_lshl_b32 s8, s5, 165344; GFX90A-NEXT: ;;#ASMSTART5345; GFX90A-NEXT: ; use s85346; GFX90A-NEXT: ;;#ASMEND5347; GFX90A-NEXT: s_setpc_b64 s[30:31]5348;5349; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_2:5350; GFX942: ; %bb.0:5351; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5352; GFX942-NEXT: ;;#ASMSTART5353; GFX942-NEXT: ; def s[0:1]5354; GFX942-NEXT: ;;#ASMEND5355; GFX942-NEXT: s_lshl_b32 s8, s1, 165356; GFX942-NEXT: ;;#ASMSTART5357; GFX942-NEXT: ; use s85358; GFX942-NEXT: ;;#ASMEND5359; GFX942-NEXT: s_setpc_b64 s[30:31]5360 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5361 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 2>5362 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5363 ret void5364}5365 5366define void @s_shuffle_v2bf16_v4bf16__5_2() {5367; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_2:5368; GFX900: ; %bb.0:5369; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5370; GFX900-NEXT: ;;#ASMSTART5371; GFX900-NEXT: ; def s[4:5]5372; GFX900-NEXT: ;;#ASMEND5373; GFX900-NEXT: ;;#ASMSTART5374; GFX900-NEXT: ; def s[6:7]5375; GFX900-NEXT: ;;#ASMEND5376; GFX900-NEXT: s_lshr_b32 s4, s6, 165377; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55378; GFX900-NEXT: ;;#ASMSTART5379; GFX900-NEXT: ; use s85380; GFX900-NEXT: ;;#ASMEND5381; GFX900-NEXT: s_setpc_b64 s[30:31]5382;5383; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_2:5384; GFX90A: ; %bb.0:5385; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5386; GFX90A-NEXT: ;;#ASMSTART5387; GFX90A-NEXT: ; def s[4:5]5388; GFX90A-NEXT: ;;#ASMEND5389; GFX90A-NEXT: ;;#ASMSTART5390; GFX90A-NEXT: ; def s[6:7]5391; GFX90A-NEXT: ;;#ASMEND5392; GFX90A-NEXT: s_lshr_b32 s4, s6, 165393; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55394; GFX90A-NEXT: ;;#ASMSTART5395; GFX90A-NEXT: ; use s85396; GFX90A-NEXT: ;;#ASMEND5397; GFX90A-NEXT: s_setpc_b64 s[30:31]5398;5399; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_2:5400; GFX942: ; %bb.0:5401; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5402; GFX942-NEXT: ;;#ASMSTART5403; GFX942-NEXT: ; def s[0:1]5404; GFX942-NEXT: ;;#ASMEND5405; GFX942-NEXT: ;;#ASMSTART5406; GFX942-NEXT: ; def s[2:3]5407; GFX942-NEXT: ;;#ASMEND5408; GFX942-NEXT: s_lshr_b32 s0, s2, 165409; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15410; GFX942-NEXT: ;;#ASMSTART5411; GFX942-NEXT: ; use s85412; GFX942-NEXT: ;;#ASMEND5413; GFX942-NEXT: s_setpc_b64 s[30:31]5414 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5415 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5416 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 2>5417 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5418 ret void5419}5420 5421define void @s_shuffle_v2bf16_v4bf16__6_2() {5422; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_2:5423; GFX900: ; %bb.0:5424; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5425; GFX900-NEXT: ;;#ASMSTART5426; GFX900-NEXT: ; def s[4:5]5427; GFX900-NEXT: ;;#ASMEND5428; GFX900-NEXT: ;;#ASMSTART5429; GFX900-NEXT: ; def s[6:7]5430; GFX900-NEXT: ;;#ASMEND5431; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s55432; GFX900-NEXT: ;;#ASMSTART5433; GFX900-NEXT: ; use s85434; GFX900-NEXT: ;;#ASMEND5435; GFX900-NEXT: s_setpc_b64 s[30:31]5436;5437; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_2:5438; GFX90A: ; %bb.0:5439; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5440; GFX90A-NEXT: ;;#ASMSTART5441; GFX90A-NEXT: ; def s[4:5]5442; GFX90A-NEXT: ;;#ASMEND5443; GFX90A-NEXT: ;;#ASMSTART5444; GFX90A-NEXT: ; def s[6:7]5445; GFX90A-NEXT: ;;#ASMEND5446; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s55447; GFX90A-NEXT: ;;#ASMSTART5448; GFX90A-NEXT: ; use s85449; GFX90A-NEXT: ;;#ASMEND5450; GFX90A-NEXT: s_setpc_b64 s[30:31]5451;5452; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_2:5453; GFX942: ; %bb.0:5454; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5455; GFX942-NEXT: ;;#ASMSTART5456; GFX942-NEXT: ; def s[0:1]5457; GFX942-NEXT: ;;#ASMEND5458; GFX942-NEXT: ;;#ASMSTART5459; GFX942-NEXT: ; def s[2:3]5460; GFX942-NEXT: ;;#ASMEND5461; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s15462; GFX942-NEXT: ;;#ASMSTART5463; GFX942-NEXT: ; use s85464; GFX942-NEXT: ;;#ASMEND5465; GFX942-NEXT: s_setpc_b64 s[30:31]5466 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5467 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5468 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 2>5469 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5470 ret void5471}5472 5473define void @s_shuffle_v2bf16_v4bf16__u_3() {5474; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_3:5475; GFX900: ; %bb.0:5476; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5477; GFX900-NEXT: ;;#ASMSTART5478; GFX900-NEXT: ; def s[4:5]5479; GFX900-NEXT: ;;#ASMEND5480; GFX900-NEXT: s_mov_b32 s8, s55481; GFX900-NEXT: ;;#ASMSTART5482; GFX900-NEXT: ; use s85483; GFX900-NEXT: ;;#ASMEND5484; GFX900-NEXT: s_setpc_b64 s[30:31]5485;5486; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_3:5487; GFX90A: ; %bb.0:5488; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5489; GFX90A-NEXT: ;;#ASMSTART5490; GFX90A-NEXT: ; def s[4:5]5491; GFX90A-NEXT: ;;#ASMEND5492; GFX90A-NEXT: s_mov_b32 s8, s55493; GFX90A-NEXT: ;;#ASMSTART5494; GFX90A-NEXT: ; use s85495; GFX90A-NEXT: ;;#ASMEND5496; GFX90A-NEXT: s_setpc_b64 s[30:31]5497;5498; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_3:5499; GFX942: ; %bb.0:5500; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5501; GFX942-NEXT: ;;#ASMSTART5502; GFX942-NEXT: ; def s[0:1]5503; GFX942-NEXT: ;;#ASMEND5504; GFX942-NEXT: s_mov_b32 s8, s15505; GFX942-NEXT: ;;#ASMSTART5506; GFX942-NEXT: ; use s85507; GFX942-NEXT: ;;#ASMEND5508; GFX942-NEXT: s_setpc_b64 s[30:31]5509 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5510 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 3>5511 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5512 ret void5513}5514 5515define void @s_shuffle_v2bf16_v4bf16__0_3() {5516; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_3:5517; GFX900: ; %bb.0:5518; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5519; GFX900-NEXT: ;;#ASMSTART5520; GFX900-NEXT: ; def s[4:5]5521; GFX900-NEXT: ;;#ASMEND5522; GFX900-NEXT: s_lshr_b32 s5, s5, 165523; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55524; GFX900-NEXT: ;;#ASMSTART5525; GFX900-NEXT: ; use s85526; GFX900-NEXT: ;;#ASMEND5527; GFX900-NEXT: s_setpc_b64 s[30:31]5528;5529; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_3:5530; GFX90A: ; %bb.0:5531; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5532; GFX90A-NEXT: ;;#ASMSTART5533; GFX90A-NEXT: ; def s[4:5]5534; GFX90A-NEXT: ;;#ASMEND5535; GFX90A-NEXT: s_lshr_b32 s5, s5, 165536; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55537; GFX90A-NEXT: ;;#ASMSTART5538; GFX90A-NEXT: ; use s85539; GFX90A-NEXT: ;;#ASMEND5540; GFX90A-NEXT: s_setpc_b64 s[30:31]5541;5542; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_3:5543; GFX942: ; %bb.0:5544; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5545; GFX942-NEXT: ;;#ASMSTART5546; GFX942-NEXT: ; def s[0:1]5547; GFX942-NEXT: ;;#ASMEND5548; GFX942-NEXT: s_lshr_b32 s1, s1, 165549; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15550; GFX942-NEXT: ;;#ASMSTART5551; GFX942-NEXT: ; use s85552; GFX942-NEXT: ;;#ASMEND5553; GFX942-NEXT: s_setpc_b64 s[30:31]5554 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5555 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 3>5556 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5557 ret void5558}5559 5560define void @s_shuffle_v2bf16_v4bf16__1_3() {5561; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_3:5562; GFX900: ; %bb.0:5563; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5564; GFX900-NEXT: ;;#ASMSTART5565; GFX900-NEXT: ; def s[4:5]5566; GFX900-NEXT: ;;#ASMEND5567; GFX900-NEXT: s_lshr_b32 s5, s5, 165568; GFX900-NEXT: s_lshr_b32 s4, s4, 165569; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s55570; GFX900-NEXT: ;;#ASMSTART5571; GFX900-NEXT: ; use s85572; GFX900-NEXT: ;;#ASMEND5573; GFX900-NEXT: s_setpc_b64 s[30:31]5574;5575; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_3:5576; GFX90A: ; %bb.0:5577; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5578; GFX90A-NEXT: ;;#ASMSTART5579; GFX90A-NEXT: ; def s[4:5]5580; GFX90A-NEXT: ;;#ASMEND5581; GFX90A-NEXT: s_lshr_b32 s5, s5, 165582; GFX90A-NEXT: s_lshr_b32 s4, s4, 165583; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s55584; GFX90A-NEXT: ;;#ASMSTART5585; GFX90A-NEXT: ; use s85586; GFX90A-NEXT: ;;#ASMEND5587; GFX90A-NEXT: s_setpc_b64 s[30:31]5588;5589; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_3:5590; GFX942: ; %bb.0:5591; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5592; GFX942-NEXT: ;;#ASMSTART5593; GFX942-NEXT: ; def s[0:1]5594; GFX942-NEXT: ;;#ASMEND5595; GFX942-NEXT: s_lshr_b32 s1, s1, 165596; GFX942-NEXT: s_lshr_b32 s0, s0, 165597; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s15598; GFX942-NEXT: ;;#ASMSTART5599; GFX942-NEXT: ; use s85600; GFX942-NEXT: ;;#ASMEND5601; GFX942-NEXT: s_setpc_b64 s[30:31]5602 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5603 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 3>5604 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5605 ret void5606}5607 5608define void @s_shuffle_v2bf16_v4bf16__2_3() {5609; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_3:5610; GFX900: ; %bb.0:5611; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5612; GFX900-NEXT: ;;#ASMSTART5613; GFX900-NEXT: ; def s[4:5]5614; GFX900-NEXT: ;;#ASMEND5615; GFX900-NEXT: s_mov_b32 s8, s55616; GFX900-NEXT: ;;#ASMSTART5617; GFX900-NEXT: ; use s85618; GFX900-NEXT: ;;#ASMEND5619; GFX900-NEXT: s_setpc_b64 s[30:31]5620;5621; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_3:5622; GFX90A: ; %bb.0:5623; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5624; GFX90A-NEXT: ;;#ASMSTART5625; GFX90A-NEXT: ; def s[4:5]5626; GFX90A-NEXT: ;;#ASMEND5627; GFX90A-NEXT: s_mov_b32 s8, s55628; GFX90A-NEXT: ;;#ASMSTART5629; GFX90A-NEXT: ; use s85630; GFX90A-NEXT: ;;#ASMEND5631; GFX90A-NEXT: s_setpc_b64 s[30:31]5632;5633; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_3:5634; GFX942: ; %bb.0:5635; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5636; GFX942-NEXT: ;;#ASMSTART5637; GFX942-NEXT: ; def s[0:1]5638; GFX942-NEXT: ;;#ASMEND5639; GFX942-NEXT: s_mov_b32 s8, s15640; GFX942-NEXT: ;;#ASMSTART5641; GFX942-NEXT: ; use s85642; GFX942-NEXT: ;;#ASMEND5643; GFX942-NEXT: s_setpc_b64 s[30:31]5644 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5645 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 3>5646 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5647 ret void5648}5649 5650define void @s_shuffle_v2bf16_v4bf16__3_3() {5651; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_3:5652; GFX900: ; %bb.0:5653; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5654; GFX900-NEXT: ;;#ASMSTART5655; GFX900-NEXT: ; def s[4:5]5656; GFX900-NEXT: ;;#ASMEND5657; GFX900-NEXT: s_lshr_b32 s4, s5, 165658; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45659; GFX900-NEXT: ;;#ASMSTART5660; GFX900-NEXT: ; use s85661; GFX900-NEXT: ;;#ASMEND5662; GFX900-NEXT: s_setpc_b64 s[30:31]5663;5664; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_3:5665; GFX90A: ; %bb.0:5666; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5667; GFX90A-NEXT: ;;#ASMSTART5668; GFX90A-NEXT: ; def s[4:5]5669; GFX90A-NEXT: ;;#ASMEND5670; GFX90A-NEXT: s_lshr_b32 s4, s5, 165671; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45672; GFX90A-NEXT: ;;#ASMSTART5673; GFX90A-NEXT: ; use s85674; GFX90A-NEXT: ;;#ASMEND5675; GFX90A-NEXT: s_setpc_b64 s[30:31]5676;5677; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_3:5678; GFX942: ; %bb.0:5679; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5680; GFX942-NEXT: ;;#ASMSTART5681; GFX942-NEXT: ; def s[0:1]5682; GFX942-NEXT: ;;#ASMEND5683; GFX942-NEXT: s_lshr_b32 s0, s1, 165684; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05685; GFX942-NEXT: ;;#ASMSTART5686; GFX942-NEXT: ; use s85687; GFX942-NEXT: ;;#ASMEND5688; GFX942-NEXT: s_setpc_b64 s[30:31]5689 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5690 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 3>5691 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5692 ret void5693}5694 5695define void @s_shuffle_v2bf16_v4bf16__4_3() {5696; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_3:5697; GFX900: ; %bb.0:5698; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5699; GFX900-NEXT: ;;#ASMSTART5700; GFX900-NEXT: ; def s[4:5]5701; GFX900-NEXT: ;;#ASMEND5702; GFX900-NEXT: s_mov_b32 s8, s55703; GFX900-NEXT: ;;#ASMSTART5704; GFX900-NEXT: ; use s85705; GFX900-NEXT: ;;#ASMEND5706; GFX900-NEXT: s_setpc_b64 s[30:31]5707;5708; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_3:5709; GFX90A: ; %bb.0:5710; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5711; GFX90A-NEXT: ;;#ASMSTART5712; GFX90A-NEXT: ; def s[4:5]5713; GFX90A-NEXT: ;;#ASMEND5714; GFX90A-NEXT: s_mov_b32 s8, s55715; GFX90A-NEXT: ;;#ASMSTART5716; GFX90A-NEXT: ; use s85717; GFX90A-NEXT: ;;#ASMEND5718; GFX90A-NEXT: s_setpc_b64 s[30:31]5719;5720; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_3:5721; GFX942: ; %bb.0:5722; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5723; GFX942-NEXT: ;;#ASMSTART5724; GFX942-NEXT: ; def s[0:1]5725; GFX942-NEXT: ;;#ASMEND5726; GFX942-NEXT: s_mov_b32 s8, s15727; GFX942-NEXT: ;;#ASMSTART5728; GFX942-NEXT: ; use s85729; GFX942-NEXT: ;;#ASMEND5730; GFX942-NEXT: s_setpc_b64 s[30:31]5731 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5732 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 3>5733 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5734 ret void5735}5736 5737define void @s_shuffle_v2bf16_v4bf16__5_3() {5738; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_3:5739; GFX900: ; %bb.0:5740; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5741; GFX900-NEXT: ;;#ASMSTART5742; GFX900-NEXT: ; def s[4:5]5743; GFX900-NEXT: ;;#ASMEND5744; GFX900-NEXT: ;;#ASMSTART5745; GFX900-NEXT: ; def s[6:7]5746; GFX900-NEXT: ;;#ASMEND5747; GFX900-NEXT: s_lshr_b32 s4, s5, 165748; GFX900-NEXT: s_lshr_b32 s5, s6, 165749; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45750; GFX900-NEXT: ;;#ASMSTART5751; GFX900-NEXT: ; use s85752; GFX900-NEXT: ;;#ASMEND5753; GFX900-NEXT: s_setpc_b64 s[30:31]5754;5755; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_3:5756; GFX90A: ; %bb.0:5757; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5758; GFX90A-NEXT: ;;#ASMSTART5759; GFX90A-NEXT: ; def s[4:5]5760; GFX90A-NEXT: ;;#ASMEND5761; GFX90A-NEXT: ;;#ASMSTART5762; GFX90A-NEXT: ; def s[6:7]5763; GFX90A-NEXT: ;;#ASMEND5764; GFX90A-NEXT: s_lshr_b32 s4, s5, 165765; GFX90A-NEXT: s_lshr_b32 s5, s6, 165766; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45767; GFX90A-NEXT: ;;#ASMSTART5768; GFX90A-NEXT: ; use s85769; GFX90A-NEXT: ;;#ASMEND5770; GFX90A-NEXT: s_setpc_b64 s[30:31]5771;5772; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_3:5773; GFX942: ; %bb.0:5774; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5775; GFX942-NEXT: ;;#ASMSTART5776; GFX942-NEXT: ; def s[0:1]5777; GFX942-NEXT: ;;#ASMEND5778; GFX942-NEXT: ;;#ASMSTART5779; GFX942-NEXT: ; def s[2:3]5780; GFX942-NEXT: ;;#ASMEND5781; GFX942-NEXT: s_lshr_b32 s0, s1, 165782; GFX942-NEXT: s_lshr_b32 s1, s2, 165783; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05784; GFX942-NEXT: ;;#ASMSTART5785; GFX942-NEXT: ; use s85786; GFX942-NEXT: ;;#ASMEND5787; GFX942-NEXT: s_setpc_b64 s[30:31]5788 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5789 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5790 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 3>5791 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5792 ret void5793}5794 5795define void @s_shuffle_v2bf16_v4bf16__6_3() {5796; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_3:5797; GFX900: ; %bb.0:5798; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5799; GFX900-NEXT: ;;#ASMSTART5800; GFX900-NEXT: ; def s[4:5]5801; GFX900-NEXT: ;;#ASMEND5802; GFX900-NEXT: s_lshr_b32 s4, s5, 165803; GFX900-NEXT: ;;#ASMSTART5804; GFX900-NEXT: ; def s[6:7]5805; GFX900-NEXT: ;;#ASMEND5806; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s45807; GFX900-NEXT: ;;#ASMSTART5808; GFX900-NEXT: ; use s85809; GFX900-NEXT: ;;#ASMEND5810; GFX900-NEXT: s_setpc_b64 s[30:31]5811;5812; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_3:5813; GFX90A: ; %bb.0:5814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5815; GFX90A-NEXT: ;;#ASMSTART5816; GFX90A-NEXT: ; def s[4:5]5817; GFX90A-NEXT: ;;#ASMEND5818; GFX90A-NEXT: s_lshr_b32 s4, s5, 165819; GFX90A-NEXT: ;;#ASMSTART5820; GFX90A-NEXT: ; def s[6:7]5821; GFX90A-NEXT: ;;#ASMEND5822; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s45823; GFX90A-NEXT: ;;#ASMSTART5824; GFX90A-NEXT: ; use s85825; GFX90A-NEXT: ;;#ASMEND5826; GFX90A-NEXT: s_setpc_b64 s[30:31]5827;5828; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_3:5829; GFX942: ; %bb.0:5830; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5831; GFX942-NEXT: ;;#ASMSTART5832; GFX942-NEXT: ; def s[0:1]5833; GFX942-NEXT: ;;#ASMEND5834; GFX942-NEXT: s_lshr_b32 s0, s1, 165835; GFX942-NEXT: ;;#ASMSTART5836; GFX942-NEXT: ; def s[2:3]5837; GFX942-NEXT: ;;#ASMEND5838; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s05839; GFX942-NEXT: ;;#ASMSTART5840; GFX942-NEXT: ; use s85841; GFX942-NEXT: ;;#ASMEND5842; GFX942-NEXT: s_setpc_b64 s[30:31]5843 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5844 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5845 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 3>5846 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5847 ret void5848}5849 5850define void @s_shuffle_v2bf16_v4bf16__u_4() {5851; GFX9-LABEL: s_shuffle_v2bf16_v4bf16__u_4:5852; GFX9: ; %bb.0:5853; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5854; GFX9-NEXT: ;;#ASMSTART5855; GFX9-NEXT: ; use s85856; GFX9-NEXT: ;;#ASMEND5857; GFX9-NEXT: s_setpc_b64 s[30:31]5858 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5859 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 poison, i32 4>5860 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5861 ret void5862}5863 5864define void @s_shuffle_v2bf16_v4bf16__0_4() {5865; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_4:5866; GFX900: ; %bb.0:5867; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5868; GFX900-NEXT: ;;#ASMSTART5869; GFX900-NEXT: ; def s[8:9]5870; GFX900-NEXT: ;;#ASMEND5871; GFX900-NEXT: ;;#ASMSTART5872; GFX900-NEXT: ; use s85873; GFX900-NEXT: ;;#ASMEND5874; GFX900-NEXT: s_setpc_b64 s[30:31]5875;5876; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_4:5877; GFX90A: ; %bb.0:5878; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5879; GFX90A-NEXT: ;;#ASMSTART5880; GFX90A-NEXT: ; def s[8:9]5881; GFX90A-NEXT: ;;#ASMEND5882; GFX90A-NEXT: ;;#ASMSTART5883; GFX90A-NEXT: ; use s85884; GFX90A-NEXT: ;;#ASMEND5885; GFX90A-NEXT: s_setpc_b64 s[30:31]5886;5887; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_4:5888; GFX942: ; %bb.0:5889; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5890; GFX942-NEXT: ;;#ASMSTART5891; GFX942-NEXT: ; def s[8:9]5892; GFX942-NEXT: ;;#ASMEND5893; GFX942-NEXT: s_nop 05894; GFX942-NEXT: ;;#ASMSTART5895; GFX942-NEXT: ; use s85896; GFX942-NEXT: ;;#ASMEND5897; GFX942-NEXT: s_setpc_b64 s[30:31]5898 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5899 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 0, i32 4>5900 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5901 ret void5902}5903 5904define void @s_shuffle_v2bf16_v4bf16__1_4() {5905; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_4:5906; GFX900: ; %bb.0:5907; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5908; GFX900-NEXT: ;;#ASMSTART5909; GFX900-NEXT: ; def s[4:5]5910; GFX900-NEXT: ;;#ASMEND5911; GFX900-NEXT: s_lshr_b32 s8, s4, 165912; GFX900-NEXT: ;;#ASMSTART5913; GFX900-NEXT: ; use s85914; GFX900-NEXT: ;;#ASMEND5915; GFX900-NEXT: s_setpc_b64 s[30:31]5916;5917; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_4:5918; GFX90A: ; %bb.0:5919; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5920; GFX90A-NEXT: ;;#ASMSTART5921; GFX90A-NEXT: ; def s[4:5]5922; GFX90A-NEXT: ;;#ASMEND5923; GFX90A-NEXT: s_lshr_b32 s8, s4, 165924; GFX90A-NEXT: ;;#ASMSTART5925; GFX90A-NEXT: ; use s85926; GFX90A-NEXT: ;;#ASMEND5927; GFX90A-NEXT: s_setpc_b64 s[30:31]5928;5929; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_4:5930; GFX942: ; %bb.0:5931; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5932; GFX942-NEXT: ;;#ASMSTART5933; GFX942-NEXT: ; def s[0:1]5934; GFX942-NEXT: ;;#ASMEND5935; GFX942-NEXT: s_lshr_b32 s8, s0, 165936; GFX942-NEXT: ;;#ASMSTART5937; GFX942-NEXT: ; use s85938; GFX942-NEXT: ;;#ASMEND5939; GFX942-NEXT: s_setpc_b64 s[30:31]5940 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5941 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 1, i32 4>5942 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5943 ret void5944}5945 5946define void @s_shuffle_v2bf16_v4bf16__2_4() {5947; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_4:5948; GFX900: ; %bb.0:5949; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5950; GFX900-NEXT: ;;#ASMSTART5951; GFX900-NEXT: ; def s[4:5]5952; GFX900-NEXT: ;;#ASMEND5953; GFX900-NEXT: s_mov_b32 s8, s55954; GFX900-NEXT: ;;#ASMSTART5955; GFX900-NEXT: ; use s85956; GFX900-NEXT: ;;#ASMEND5957; GFX900-NEXT: s_setpc_b64 s[30:31]5958;5959; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_4:5960; GFX90A: ; %bb.0:5961; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5962; GFX90A-NEXT: ;;#ASMSTART5963; GFX90A-NEXT: ; def s[4:5]5964; GFX90A-NEXT: ;;#ASMEND5965; GFX90A-NEXT: s_mov_b32 s8, s55966; GFX90A-NEXT: ;;#ASMSTART5967; GFX90A-NEXT: ; use s85968; GFX90A-NEXT: ;;#ASMEND5969; GFX90A-NEXT: s_setpc_b64 s[30:31]5970;5971; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_4:5972; GFX942: ; %bb.0:5973; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5974; GFX942-NEXT: ;;#ASMSTART5975; GFX942-NEXT: ; def s[0:1]5976; GFX942-NEXT: ;;#ASMEND5977; GFX942-NEXT: s_mov_b32 s8, s15978; GFX942-NEXT: ;;#ASMSTART5979; GFX942-NEXT: ; use s85980; GFX942-NEXT: ;;#ASMEND5981; GFX942-NEXT: s_setpc_b64 s[30:31]5982 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5983 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 2, i32 4>5984 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)5985 ret void5986}5987 5988define void @s_shuffle_v2bf16_v4bf16__3_4() {5989; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_4:5990; GFX900: ; %bb.0:5991; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5992; GFX900-NEXT: ;;#ASMSTART5993; GFX900-NEXT: ; def s[4:5]5994; GFX900-NEXT: ;;#ASMEND5995; GFX900-NEXT: s_lshr_b32 s8, s5, 165996; GFX900-NEXT: ;;#ASMSTART5997; GFX900-NEXT: ; use s85998; GFX900-NEXT: ;;#ASMEND5999; GFX900-NEXT: s_setpc_b64 s[30:31]6000;6001; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_4:6002; GFX90A: ; %bb.0:6003; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6004; GFX90A-NEXT: ;;#ASMSTART6005; GFX90A-NEXT: ; def s[4:5]6006; GFX90A-NEXT: ;;#ASMEND6007; GFX90A-NEXT: s_lshr_b32 s8, s5, 166008; GFX90A-NEXT: ;;#ASMSTART6009; GFX90A-NEXT: ; use s86010; GFX90A-NEXT: ;;#ASMEND6011; GFX90A-NEXT: s_setpc_b64 s[30:31]6012;6013; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_4:6014; GFX942: ; %bb.0:6015; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6016; GFX942-NEXT: ;;#ASMSTART6017; GFX942-NEXT: ; def s[0:1]6018; GFX942-NEXT: ;;#ASMEND6019; GFX942-NEXT: s_lshr_b32 s8, s1, 166020; GFX942-NEXT: ;;#ASMSTART6021; GFX942-NEXT: ; use s86022; GFX942-NEXT: ;;#ASMEND6023; GFX942-NEXT: s_setpc_b64 s[30:31]6024 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6025 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 3, i32 4>6026 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6027 ret void6028}6029 6030define void @s_shuffle_v2bf16_v4bf16__4_4() {6031; GFX9-LABEL: s_shuffle_v2bf16_v4bf16__4_4:6032; GFX9: ; %bb.0:6033; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6034; GFX9-NEXT: ;;#ASMSTART6035; GFX9-NEXT: ; use s86036; GFX9-NEXT: ;;#ASMEND6037; GFX9-NEXT: s_setpc_b64 s[30:31]6038 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6039 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <2 x i32> <i32 4, i32 4>6040 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6041 ret void6042}6043 6044define void @s_shuffle_v2bf16_v4bf16__5_4() {6045; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_4:6046; GFX900: ; %bb.0:6047; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6048; GFX900-NEXT: ;;#ASMSTART6049; GFX900-NEXT: ; def s[4:5]6050; GFX900-NEXT: ;;#ASMEND6051; GFX900-NEXT: s_lshr_b32 s5, s4, 166052; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46053; GFX900-NEXT: ;;#ASMSTART6054; GFX900-NEXT: ; use s86055; GFX900-NEXT: ;;#ASMEND6056; GFX900-NEXT: s_setpc_b64 s[30:31]6057;6058; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_4:6059; GFX90A: ; %bb.0:6060; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6061; GFX90A-NEXT: ;;#ASMSTART6062; GFX90A-NEXT: ; def s[4:5]6063; GFX90A-NEXT: ;;#ASMEND6064; GFX90A-NEXT: s_lshr_b32 s5, s4, 166065; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46066; GFX90A-NEXT: ;;#ASMSTART6067; GFX90A-NEXT: ; use s86068; GFX90A-NEXT: ;;#ASMEND6069; GFX90A-NEXT: s_setpc_b64 s[30:31]6070;6071; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_4:6072; GFX942: ; %bb.0:6073; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6074; GFX942-NEXT: ;;#ASMSTART6075; GFX942-NEXT: ; def s[0:1]6076; GFX942-NEXT: ;;#ASMEND6077; GFX942-NEXT: s_lshr_b32 s1, s0, 166078; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06079; GFX942-NEXT: ;;#ASMSTART6080; GFX942-NEXT: ; use s86081; GFX942-NEXT: ;;#ASMEND6082; GFX942-NEXT: s_setpc_b64 s[30:31]6083 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6084 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6085 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 4>6086 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6087 ret void6088}6089 6090define void @s_shuffle_v2bf16_v4bf16__6_4() {6091; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_4:6092; GFX900: ; %bb.0:6093; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6094; GFX900-NEXT: ;;#ASMSTART6095; GFX900-NEXT: ; def s[4:5]6096; GFX900-NEXT: ;;#ASMEND6097; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46098; GFX900-NEXT: ;;#ASMSTART6099; GFX900-NEXT: ; use s86100; GFX900-NEXT: ;;#ASMEND6101; GFX900-NEXT: s_setpc_b64 s[30:31]6102;6103; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_4:6104; GFX90A: ; %bb.0:6105; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6106; GFX90A-NEXT: ;;#ASMSTART6107; GFX90A-NEXT: ; def s[4:5]6108; GFX90A-NEXT: ;;#ASMEND6109; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46110; GFX90A-NEXT: ;;#ASMSTART6111; GFX90A-NEXT: ; use s86112; GFX90A-NEXT: ;;#ASMEND6113; GFX90A-NEXT: s_setpc_b64 s[30:31]6114;6115; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_4:6116; GFX942: ; %bb.0:6117; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6118; GFX942-NEXT: ;;#ASMSTART6119; GFX942-NEXT: ; def s[0:1]6120; GFX942-NEXT: ;;#ASMEND6121; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06122; GFX942-NEXT: ;;#ASMSTART6123; GFX942-NEXT: ; use s86124; GFX942-NEXT: ;;#ASMEND6125; GFX942-NEXT: s_setpc_b64 s[30:31]6126 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6127 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6128 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 4>6129 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6130 ret void6131}6132 6133define void @s_shuffle_v2bf16_v4bf16__u_5() {6134; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_5:6135; GFX900: ; %bb.0:6136; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6137; GFX900-NEXT: ;;#ASMSTART6138; GFX900-NEXT: ; def s[8:9]6139; GFX900-NEXT: ;;#ASMEND6140; GFX900-NEXT: ;;#ASMSTART6141; GFX900-NEXT: ; use s86142; GFX900-NEXT: ;;#ASMEND6143; GFX900-NEXT: s_setpc_b64 s[30:31]6144;6145; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_5:6146; GFX90A: ; %bb.0:6147; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6148; GFX90A-NEXT: ;;#ASMSTART6149; GFX90A-NEXT: ; def s[8:9]6150; GFX90A-NEXT: ;;#ASMEND6151; GFX90A-NEXT: ;;#ASMSTART6152; GFX90A-NEXT: ; use s86153; GFX90A-NEXT: ;;#ASMEND6154; GFX90A-NEXT: s_setpc_b64 s[30:31]6155;6156; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_5:6157; GFX942: ; %bb.0:6158; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6159; GFX942-NEXT: ;;#ASMSTART6160; GFX942-NEXT: ; def s[8:9]6161; GFX942-NEXT: ;;#ASMEND6162; GFX942-NEXT: s_nop 06163; GFX942-NEXT: ;;#ASMSTART6164; GFX942-NEXT: ; use s86165; GFX942-NEXT: ;;#ASMEND6166; GFX942-NEXT: s_setpc_b64 s[30:31]6167 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6168 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6169 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 poison, i32 5>6170 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6171 ret void6172}6173 6174define void @s_shuffle_v2bf16_v4bf16__0_5() {6175; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_5:6176; GFX900: ; %bb.0:6177; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6178; GFX900-NEXT: ;;#ASMSTART6179; GFX900-NEXT: ; def s[4:5]6180; GFX900-NEXT: ;;#ASMEND6181; GFX900-NEXT: ;;#ASMSTART6182; GFX900-NEXT: ; def s[6:7]6183; GFX900-NEXT: ;;#ASMEND6184; GFX900-NEXT: s_lshr_b32 s5, s6, 166185; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56186; GFX900-NEXT: ;;#ASMSTART6187; GFX900-NEXT: ; use s86188; GFX900-NEXT: ;;#ASMEND6189; GFX900-NEXT: s_setpc_b64 s[30:31]6190;6191; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_5:6192; GFX90A: ; %bb.0:6193; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6194; GFX90A-NEXT: ;;#ASMSTART6195; GFX90A-NEXT: ; def s[4:5]6196; GFX90A-NEXT: ;;#ASMEND6197; GFX90A-NEXT: ;;#ASMSTART6198; GFX90A-NEXT: ; def s[6:7]6199; GFX90A-NEXT: ;;#ASMEND6200; GFX90A-NEXT: s_lshr_b32 s5, s6, 166201; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56202; GFX90A-NEXT: ;;#ASMSTART6203; GFX90A-NEXT: ; use s86204; GFX90A-NEXT: ;;#ASMEND6205; GFX90A-NEXT: s_setpc_b64 s[30:31]6206;6207; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_5:6208; GFX942: ; %bb.0:6209; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6210; GFX942-NEXT: ;;#ASMSTART6211; GFX942-NEXT: ; def s[0:1]6212; GFX942-NEXT: ;;#ASMEND6213; GFX942-NEXT: ;;#ASMSTART6214; GFX942-NEXT: ; def s[2:3]6215; GFX942-NEXT: ;;#ASMEND6216; GFX942-NEXT: s_lshr_b32 s1, s2, 166217; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16218; GFX942-NEXT: ;;#ASMSTART6219; GFX942-NEXT: ; use s86220; GFX942-NEXT: ;;#ASMEND6221; GFX942-NEXT: s_setpc_b64 s[30:31]6222 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6223 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6224 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 0, i32 5>6225 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6226 ret void6227}6228 6229define void @s_shuffle_v2bf16_v4bf16__1_5() {6230; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_5:6231; GFX900: ; %bb.0:6232; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6233; GFX900-NEXT: ;;#ASMSTART6234; GFX900-NEXT: ; def s[4:5]6235; GFX900-NEXT: ;;#ASMEND6236; GFX900-NEXT: ;;#ASMSTART6237; GFX900-NEXT: ; def s[6:7]6238; GFX900-NEXT: ;;#ASMEND6239; GFX900-NEXT: s_lshr_b32 s5, s6, 166240; GFX900-NEXT: s_lshr_b32 s4, s4, 166241; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56242; GFX900-NEXT: ;;#ASMSTART6243; GFX900-NEXT: ; use s86244; GFX900-NEXT: ;;#ASMEND6245; GFX900-NEXT: s_setpc_b64 s[30:31]6246;6247; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_5:6248; GFX90A: ; %bb.0:6249; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6250; GFX90A-NEXT: ;;#ASMSTART6251; GFX90A-NEXT: ; def s[4:5]6252; GFX90A-NEXT: ;;#ASMEND6253; GFX90A-NEXT: ;;#ASMSTART6254; GFX90A-NEXT: ; def s[6:7]6255; GFX90A-NEXT: ;;#ASMEND6256; GFX90A-NEXT: s_lshr_b32 s5, s6, 166257; GFX90A-NEXT: s_lshr_b32 s4, s4, 166258; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56259; GFX90A-NEXT: ;;#ASMSTART6260; GFX90A-NEXT: ; use s86261; GFX90A-NEXT: ;;#ASMEND6262; GFX90A-NEXT: s_setpc_b64 s[30:31]6263;6264; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_5:6265; GFX942: ; %bb.0:6266; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6267; GFX942-NEXT: ;;#ASMSTART6268; GFX942-NEXT: ; def s[0:1]6269; GFX942-NEXT: ;;#ASMEND6270; GFX942-NEXT: ;;#ASMSTART6271; GFX942-NEXT: ; def s[2:3]6272; GFX942-NEXT: ;;#ASMEND6273; GFX942-NEXT: s_lshr_b32 s1, s2, 166274; GFX942-NEXT: s_lshr_b32 s0, s0, 166275; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16276; GFX942-NEXT: ;;#ASMSTART6277; GFX942-NEXT: ; use s86278; GFX942-NEXT: ;;#ASMEND6279; GFX942-NEXT: s_setpc_b64 s[30:31]6280 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6281 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6282 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 1, i32 5>6283 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6284 ret void6285}6286 6287define void @s_shuffle_v2bf16_v4bf16__2_5() {6288; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_5:6289; GFX900: ; %bb.0:6290; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6291; GFX900-NEXT: ;;#ASMSTART6292; GFX900-NEXT: ; def s[4:5]6293; GFX900-NEXT: ;;#ASMEND6294; GFX900-NEXT: ;;#ASMSTART6295; GFX900-NEXT: ; def s[6:7]6296; GFX900-NEXT: ;;#ASMEND6297; GFX900-NEXT: s_lshr_b32 s4, s6, 166298; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46299; GFX900-NEXT: ;;#ASMSTART6300; GFX900-NEXT: ; use s86301; GFX900-NEXT: ;;#ASMEND6302; GFX900-NEXT: s_setpc_b64 s[30:31]6303;6304; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_5:6305; GFX90A: ; %bb.0:6306; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6307; GFX90A-NEXT: ;;#ASMSTART6308; GFX90A-NEXT: ; def s[4:5]6309; GFX90A-NEXT: ;;#ASMEND6310; GFX90A-NEXT: ;;#ASMSTART6311; GFX90A-NEXT: ; def s[6:7]6312; GFX90A-NEXT: ;;#ASMEND6313; GFX90A-NEXT: s_lshr_b32 s4, s6, 166314; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46315; GFX90A-NEXT: ;;#ASMSTART6316; GFX90A-NEXT: ; use s86317; GFX90A-NEXT: ;;#ASMEND6318; GFX90A-NEXT: s_setpc_b64 s[30:31]6319;6320; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_5:6321; GFX942: ; %bb.0:6322; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6323; GFX942-NEXT: ;;#ASMSTART6324; GFX942-NEXT: ; def s[0:1]6325; GFX942-NEXT: ;;#ASMEND6326; GFX942-NEXT: ;;#ASMSTART6327; GFX942-NEXT: ; def s[2:3]6328; GFX942-NEXT: ;;#ASMEND6329; GFX942-NEXT: s_lshr_b32 s0, s2, 166330; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06331; GFX942-NEXT: ;;#ASMSTART6332; GFX942-NEXT: ; use s86333; GFX942-NEXT: ;;#ASMEND6334; GFX942-NEXT: s_setpc_b64 s[30:31]6335 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6336 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6337 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 2, i32 5>6338 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6339 ret void6340}6341 6342define void @s_shuffle_v2bf16_v4bf16__3_5() {6343; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_5:6344; GFX900: ; %bb.0:6345; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6346; GFX900-NEXT: ;;#ASMSTART6347; GFX900-NEXT: ; def s[4:5]6348; GFX900-NEXT: ;;#ASMEND6349; GFX900-NEXT: ;;#ASMSTART6350; GFX900-NEXT: ; def s[6:7]6351; GFX900-NEXT: ;;#ASMEND6352; GFX900-NEXT: s_lshr_b32 s4, s6, 166353; GFX900-NEXT: s_lshr_b32 s5, s5, 166354; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46355; GFX900-NEXT: ;;#ASMSTART6356; GFX900-NEXT: ; use s86357; GFX900-NEXT: ;;#ASMEND6358; GFX900-NEXT: s_setpc_b64 s[30:31]6359;6360; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_5:6361; GFX90A: ; %bb.0:6362; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6363; GFX90A-NEXT: ;;#ASMSTART6364; GFX90A-NEXT: ; def s[4:5]6365; GFX90A-NEXT: ;;#ASMEND6366; GFX90A-NEXT: ;;#ASMSTART6367; GFX90A-NEXT: ; def s[6:7]6368; GFX90A-NEXT: ;;#ASMEND6369; GFX90A-NEXT: s_lshr_b32 s4, s6, 166370; GFX90A-NEXT: s_lshr_b32 s5, s5, 166371; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46372; GFX90A-NEXT: ;;#ASMSTART6373; GFX90A-NEXT: ; use s86374; GFX90A-NEXT: ;;#ASMEND6375; GFX90A-NEXT: s_setpc_b64 s[30:31]6376;6377; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_5:6378; GFX942: ; %bb.0:6379; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6380; GFX942-NEXT: ;;#ASMSTART6381; GFX942-NEXT: ; def s[0:1]6382; GFX942-NEXT: ;;#ASMEND6383; GFX942-NEXT: ;;#ASMSTART6384; GFX942-NEXT: ; def s[2:3]6385; GFX942-NEXT: ;;#ASMEND6386; GFX942-NEXT: s_lshr_b32 s0, s2, 166387; GFX942-NEXT: s_lshr_b32 s1, s1, 166388; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06389; GFX942-NEXT: ;;#ASMSTART6390; GFX942-NEXT: ; use s86391; GFX942-NEXT: ;;#ASMEND6392; GFX942-NEXT: s_setpc_b64 s[30:31]6393 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6394 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6395 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 3, i32 5>6396 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6397 ret void6398}6399 6400define void @s_shuffle_v2bf16_v4bf16__4_5() {6401; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_5:6402; GFX900: ; %bb.0:6403; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6404; GFX900-NEXT: ;;#ASMSTART6405; GFX900-NEXT: ; def s[8:9]6406; GFX900-NEXT: ;;#ASMEND6407; GFX900-NEXT: ;;#ASMSTART6408; GFX900-NEXT: ; use s86409; GFX900-NEXT: ;;#ASMEND6410; GFX900-NEXT: s_setpc_b64 s[30:31]6411;6412; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_5:6413; GFX90A: ; %bb.0:6414; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6415; GFX90A-NEXT: ;;#ASMSTART6416; GFX90A-NEXT: ; def s[8:9]6417; GFX90A-NEXT: ;;#ASMEND6418; GFX90A-NEXT: ;;#ASMSTART6419; GFX90A-NEXT: ; use s86420; GFX90A-NEXT: ;;#ASMEND6421; GFX90A-NEXT: s_setpc_b64 s[30:31]6422;6423; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_5:6424; GFX942: ; %bb.0:6425; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6426; GFX942-NEXT: ;;#ASMSTART6427; GFX942-NEXT: ; def s[8:9]6428; GFX942-NEXT: ;;#ASMEND6429; GFX942-NEXT: s_nop 06430; GFX942-NEXT: ;;#ASMSTART6431; GFX942-NEXT: ; use s86432; GFX942-NEXT: ;;#ASMEND6433; GFX942-NEXT: s_setpc_b64 s[30:31]6434 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6435 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6436 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 4, i32 5>6437 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6438 ret void6439}6440 6441define void @s_shuffle_v2bf16_v4bf16__5_5() {6442; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_5:6443; GFX900: ; %bb.0:6444; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6445; GFX900-NEXT: ;;#ASMSTART6446; GFX900-NEXT: ; def s[4:5]6447; GFX900-NEXT: ;;#ASMEND6448; GFX900-NEXT: s_lshr_b32 s4, s4, 166449; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s46450; GFX900-NEXT: ;;#ASMSTART6451; GFX900-NEXT: ; use s86452; GFX900-NEXT: ;;#ASMEND6453; GFX900-NEXT: s_setpc_b64 s[30:31]6454;6455; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_5:6456; GFX90A: ; %bb.0:6457; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6458; GFX90A-NEXT: ;;#ASMSTART6459; GFX90A-NEXT: ; def s[4:5]6460; GFX90A-NEXT: ;;#ASMEND6461; GFX90A-NEXT: s_lshr_b32 s4, s4, 166462; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s46463; GFX90A-NEXT: ;;#ASMSTART6464; GFX90A-NEXT: ; use s86465; GFX90A-NEXT: ;;#ASMEND6466; GFX90A-NEXT: s_setpc_b64 s[30:31]6467;6468; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_5:6469; GFX942: ; %bb.0:6470; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6471; GFX942-NEXT: ;;#ASMSTART6472; GFX942-NEXT: ; def s[0:1]6473; GFX942-NEXT: ;;#ASMEND6474; GFX942-NEXT: s_lshr_b32 s0, s0, 166475; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s06476; GFX942-NEXT: ;;#ASMSTART6477; GFX942-NEXT: ; use s86478; GFX942-NEXT: ;;#ASMEND6479; GFX942-NEXT: s_setpc_b64 s[30:31]6480 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6481 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6482 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 5>6483 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6484 ret void6485}6486 6487define void @s_shuffle_v2bf16_v4bf16__6_5() {6488; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_5:6489; GFX900: ; %bb.0:6490; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6491; GFX900-NEXT: ;;#ASMSTART6492; GFX900-NEXT: ; def s[4:5]6493; GFX900-NEXT: ;;#ASMEND6494; GFX900-NEXT: s_lshr_b32 s4, s4, 166495; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s46496; GFX900-NEXT: ;;#ASMSTART6497; GFX900-NEXT: ; use s86498; GFX900-NEXT: ;;#ASMEND6499; GFX900-NEXT: s_setpc_b64 s[30:31]6500;6501; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_5:6502; GFX90A: ; %bb.0:6503; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6504; GFX90A-NEXT: ;;#ASMSTART6505; GFX90A-NEXT: ; def s[4:5]6506; GFX90A-NEXT: ;;#ASMEND6507; GFX90A-NEXT: s_lshr_b32 s4, s4, 166508; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s46509; GFX90A-NEXT: ;;#ASMSTART6510; GFX90A-NEXT: ; use s86511; GFX90A-NEXT: ;;#ASMEND6512; GFX90A-NEXT: s_setpc_b64 s[30:31]6513;6514; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_5:6515; GFX942: ; %bb.0:6516; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6517; GFX942-NEXT: ;;#ASMSTART6518; GFX942-NEXT: ; def s[0:1]6519; GFX942-NEXT: ;;#ASMEND6520; GFX942-NEXT: s_lshr_b32 s0, s0, 166521; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s06522; GFX942-NEXT: ;;#ASMSTART6523; GFX942-NEXT: ; use s86524; GFX942-NEXT: ;;#ASMEND6525; GFX942-NEXT: s_setpc_b64 s[30:31]6526 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6527 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6528 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 5>6529 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6530 ret void6531}6532 6533define void @s_shuffle_v2bf16_v4bf16__u_6() {6534; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_6:6535; GFX900: ; %bb.0:6536; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6537; GFX900-NEXT: ;;#ASMSTART6538; GFX900-NEXT: ; def s[4:5]6539; GFX900-NEXT: ;;#ASMEND6540; GFX900-NEXT: s_lshl_b32 s8, s5, 166541; GFX900-NEXT: ;;#ASMSTART6542; GFX900-NEXT: ; use s86543; GFX900-NEXT: ;;#ASMEND6544; GFX900-NEXT: s_setpc_b64 s[30:31]6545;6546; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_6:6547; GFX90A: ; %bb.0:6548; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6549; GFX90A-NEXT: ;;#ASMSTART6550; GFX90A-NEXT: ; def s[4:5]6551; GFX90A-NEXT: ;;#ASMEND6552; GFX90A-NEXT: s_lshl_b32 s8, s5, 166553; GFX90A-NEXT: ;;#ASMSTART6554; GFX90A-NEXT: ; use s86555; GFX90A-NEXT: ;;#ASMEND6556; GFX90A-NEXT: s_setpc_b64 s[30:31]6557;6558; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_6:6559; GFX942: ; %bb.0:6560; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6561; GFX942-NEXT: ;;#ASMSTART6562; GFX942-NEXT: ; def s[0:1]6563; GFX942-NEXT: ;;#ASMEND6564; GFX942-NEXT: s_lshl_b32 s8, s1, 166565; GFX942-NEXT: ;;#ASMSTART6566; GFX942-NEXT: ; use s86567; GFX942-NEXT: ;;#ASMEND6568; GFX942-NEXT: s_setpc_b64 s[30:31]6569 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6570 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6571 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 poison, i32 6>6572 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6573 ret void6574}6575 6576define void @s_shuffle_v2bf16_v4bf16__0_6() {6577; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_6:6578; GFX900: ; %bb.0:6579; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6580; GFX900-NEXT: ;;#ASMSTART6581; GFX900-NEXT: ; def s[4:5]6582; GFX900-NEXT: ;;#ASMEND6583; GFX900-NEXT: ;;#ASMSTART6584; GFX900-NEXT: ; def s[6:7]6585; GFX900-NEXT: ;;#ASMEND6586; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s76587; GFX900-NEXT: ;;#ASMSTART6588; GFX900-NEXT: ; use s86589; GFX900-NEXT: ;;#ASMEND6590; GFX900-NEXT: s_setpc_b64 s[30:31]6591;6592; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_6:6593; GFX90A: ; %bb.0:6594; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6595; GFX90A-NEXT: ;;#ASMSTART6596; GFX90A-NEXT: ; def s[4:5]6597; GFX90A-NEXT: ;;#ASMEND6598; GFX90A-NEXT: ;;#ASMSTART6599; GFX90A-NEXT: ; def s[6:7]6600; GFX90A-NEXT: ;;#ASMEND6601; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s76602; GFX90A-NEXT: ;;#ASMSTART6603; GFX90A-NEXT: ; use s86604; GFX90A-NEXT: ;;#ASMEND6605; GFX90A-NEXT: s_setpc_b64 s[30:31]6606;6607; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_6:6608; GFX942: ; %bb.0:6609; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6610; GFX942-NEXT: ;;#ASMSTART6611; GFX942-NEXT: ; def s[0:1]6612; GFX942-NEXT: ;;#ASMEND6613; GFX942-NEXT: ;;#ASMSTART6614; GFX942-NEXT: ; def s[2:3]6615; GFX942-NEXT: ;;#ASMEND6616; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s36617; GFX942-NEXT: ;;#ASMSTART6618; GFX942-NEXT: ; use s86619; GFX942-NEXT: ;;#ASMEND6620; GFX942-NEXT: s_setpc_b64 s[30:31]6621 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6622 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6623 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 0, i32 6>6624 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6625 ret void6626}6627 6628define void @s_shuffle_v2bf16_v4bf16__1_6() {6629; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_6:6630; GFX900: ; %bb.0:6631; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6632; GFX900-NEXT: ;;#ASMSTART6633; GFX900-NEXT: ; def s[4:5]6634; GFX900-NEXT: ;;#ASMEND6635; GFX900-NEXT: s_lshr_b32 s4, s4, 166636; GFX900-NEXT: ;;#ASMSTART6637; GFX900-NEXT: ; def s[6:7]6638; GFX900-NEXT: ;;#ASMEND6639; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s76640; GFX900-NEXT: ;;#ASMSTART6641; GFX900-NEXT: ; use s86642; GFX900-NEXT: ;;#ASMEND6643; GFX900-NEXT: s_setpc_b64 s[30:31]6644;6645; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_6:6646; GFX90A: ; %bb.0:6647; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6648; GFX90A-NEXT: ;;#ASMSTART6649; GFX90A-NEXT: ; def s[4:5]6650; GFX90A-NEXT: ;;#ASMEND6651; GFX90A-NEXT: s_lshr_b32 s4, s4, 166652; GFX90A-NEXT: ;;#ASMSTART6653; GFX90A-NEXT: ; def s[6:7]6654; GFX90A-NEXT: ;;#ASMEND6655; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s76656; GFX90A-NEXT: ;;#ASMSTART6657; GFX90A-NEXT: ; use s86658; GFX90A-NEXT: ;;#ASMEND6659; GFX90A-NEXT: s_setpc_b64 s[30:31]6660;6661; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_6:6662; GFX942: ; %bb.0:6663; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6664; GFX942-NEXT: ;;#ASMSTART6665; GFX942-NEXT: ; def s[0:1]6666; GFX942-NEXT: ;;#ASMEND6667; GFX942-NEXT: s_lshr_b32 s0, s0, 166668; GFX942-NEXT: ;;#ASMSTART6669; GFX942-NEXT: ; def s[2:3]6670; GFX942-NEXT: ;;#ASMEND6671; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s36672; GFX942-NEXT: ;;#ASMSTART6673; GFX942-NEXT: ; use s86674; GFX942-NEXT: ;;#ASMEND6675; GFX942-NEXT: s_setpc_b64 s[30:31]6676 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6677 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6678 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 1, i32 6>6679 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6680 ret void6681}6682 6683define void @s_shuffle_v2bf16_v4bf16__2_6() {6684; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_6:6685; GFX900: ; %bb.0:6686; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6687; GFX900-NEXT: ;;#ASMSTART6688; GFX900-NEXT: ; def s[4:5]6689; GFX900-NEXT: ;;#ASMEND6690; GFX900-NEXT: ;;#ASMSTART6691; GFX900-NEXT: ; def s[6:7]6692; GFX900-NEXT: ;;#ASMEND6693; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s76694; GFX900-NEXT: ;;#ASMSTART6695; GFX900-NEXT: ; use s86696; GFX900-NEXT: ;;#ASMEND6697; GFX900-NEXT: s_setpc_b64 s[30:31]6698;6699; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_6:6700; GFX90A: ; %bb.0:6701; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6702; GFX90A-NEXT: ;;#ASMSTART6703; GFX90A-NEXT: ; def s[4:5]6704; GFX90A-NEXT: ;;#ASMEND6705; GFX90A-NEXT: ;;#ASMSTART6706; GFX90A-NEXT: ; def s[6:7]6707; GFX90A-NEXT: ;;#ASMEND6708; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s76709; GFX90A-NEXT: ;;#ASMSTART6710; GFX90A-NEXT: ; use s86711; GFX90A-NEXT: ;;#ASMEND6712; GFX90A-NEXT: s_setpc_b64 s[30:31]6713;6714; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_6:6715; GFX942: ; %bb.0:6716; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6717; GFX942-NEXT: ;;#ASMSTART6718; GFX942-NEXT: ; def s[0:1]6719; GFX942-NEXT: ;;#ASMEND6720; GFX942-NEXT: ;;#ASMSTART6721; GFX942-NEXT: ; def s[2:3]6722; GFX942-NEXT: ;;#ASMEND6723; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s36724; GFX942-NEXT: ;;#ASMSTART6725; GFX942-NEXT: ; use s86726; GFX942-NEXT: ;;#ASMEND6727; GFX942-NEXT: s_setpc_b64 s[30:31]6728 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6729 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6730 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 2, i32 6>6731 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6732 ret void6733}6734 6735define void @s_shuffle_v2bf16_v4bf16__3_6() {6736; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_6:6737; GFX900: ; %bb.0:6738; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6739; GFX900-NEXT: ;;#ASMSTART6740; GFX900-NEXT: ; def s[4:5]6741; GFX900-NEXT: ;;#ASMEND6742; GFX900-NEXT: s_lshr_b32 s4, s5, 166743; GFX900-NEXT: ;;#ASMSTART6744; GFX900-NEXT: ; def s[6:7]6745; GFX900-NEXT: ;;#ASMEND6746; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s76747; GFX900-NEXT: ;;#ASMSTART6748; GFX900-NEXT: ; use s86749; GFX900-NEXT: ;;#ASMEND6750; GFX900-NEXT: s_setpc_b64 s[30:31]6751;6752; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_6:6753; GFX90A: ; %bb.0:6754; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6755; GFX90A-NEXT: ;;#ASMSTART6756; GFX90A-NEXT: ; def s[4:5]6757; GFX90A-NEXT: ;;#ASMEND6758; GFX90A-NEXT: s_lshr_b32 s4, s5, 166759; GFX90A-NEXT: ;;#ASMSTART6760; GFX90A-NEXT: ; def s[6:7]6761; GFX90A-NEXT: ;;#ASMEND6762; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s76763; GFX90A-NEXT: ;;#ASMSTART6764; GFX90A-NEXT: ; use s86765; GFX90A-NEXT: ;;#ASMEND6766; GFX90A-NEXT: s_setpc_b64 s[30:31]6767;6768; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_6:6769; GFX942: ; %bb.0:6770; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6771; GFX942-NEXT: ;;#ASMSTART6772; GFX942-NEXT: ; def s[0:1]6773; GFX942-NEXT: ;;#ASMEND6774; GFX942-NEXT: s_lshr_b32 s0, s1, 166775; GFX942-NEXT: ;;#ASMSTART6776; GFX942-NEXT: ; def s[2:3]6777; GFX942-NEXT: ;;#ASMEND6778; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s36779; GFX942-NEXT: ;;#ASMSTART6780; GFX942-NEXT: ; use s86781; GFX942-NEXT: ;;#ASMEND6782; GFX942-NEXT: s_setpc_b64 s[30:31]6783 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6784 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6785 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 3, i32 6>6786 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6787 ret void6788}6789 6790define void @s_shuffle_v2bf16_v4bf16__4_6() {6791; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_6:6792; GFX900: ; %bb.0:6793; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6794; GFX900-NEXT: ;;#ASMSTART6795; GFX900-NEXT: ; def s[4:5]6796; GFX900-NEXT: ;;#ASMEND6797; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56798; GFX900-NEXT: ;;#ASMSTART6799; GFX900-NEXT: ; use s86800; GFX900-NEXT: ;;#ASMEND6801; GFX900-NEXT: s_setpc_b64 s[30:31]6802;6803; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_6:6804; GFX90A: ; %bb.0:6805; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6806; GFX90A-NEXT: ;;#ASMSTART6807; GFX90A-NEXT: ; def s[4:5]6808; GFX90A-NEXT: ;;#ASMEND6809; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56810; GFX90A-NEXT: ;;#ASMSTART6811; GFX90A-NEXT: ; use s86812; GFX90A-NEXT: ;;#ASMEND6813; GFX90A-NEXT: s_setpc_b64 s[30:31]6814;6815; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_6:6816; GFX942: ; %bb.0:6817; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6818; GFX942-NEXT: ;;#ASMSTART6819; GFX942-NEXT: ; def s[0:1]6820; GFX942-NEXT: ;;#ASMEND6821; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16822; GFX942-NEXT: ;;#ASMSTART6823; GFX942-NEXT: ; use s86824; GFX942-NEXT: ;;#ASMEND6825; GFX942-NEXT: s_setpc_b64 s[30:31]6826 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6827 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6828 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 4, i32 6>6829 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6830 ret void6831}6832 6833define void @s_shuffle_v2bf16_v4bf16__5_6() {6834; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_6:6835; GFX900: ; %bb.0:6836; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6837; GFX900-NEXT: ;;#ASMSTART6838; GFX900-NEXT: ; def s[4:5]6839; GFX900-NEXT: ;;#ASMEND6840; GFX900-NEXT: s_lshr_b32 s4, s4, 166841; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56842; GFX900-NEXT: ;;#ASMSTART6843; GFX900-NEXT: ; use s86844; GFX900-NEXT: ;;#ASMEND6845; GFX900-NEXT: s_setpc_b64 s[30:31]6846;6847; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_6:6848; GFX90A: ; %bb.0:6849; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6850; GFX90A-NEXT: ;;#ASMSTART6851; GFX90A-NEXT: ; def s[4:5]6852; GFX90A-NEXT: ;;#ASMEND6853; GFX90A-NEXT: s_lshr_b32 s4, s4, 166854; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56855; GFX90A-NEXT: ;;#ASMSTART6856; GFX90A-NEXT: ; use s86857; GFX90A-NEXT: ;;#ASMEND6858; GFX90A-NEXT: s_setpc_b64 s[30:31]6859;6860; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_6:6861; GFX942: ; %bb.0:6862; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6863; GFX942-NEXT: ;;#ASMSTART6864; GFX942-NEXT: ; def s[0:1]6865; GFX942-NEXT: ;;#ASMEND6866; GFX942-NEXT: s_lshr_b32 s0, s0, 166867; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s16868; GFX942-NEXT: ;;#ASMSTART6869; GFX942-NEXT: ; use s86870; GFX942-NEXT: ;;#ASMEND6871; GFX942-NEXT: s_setpc_b64 s[30:31]6872 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6873 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6874 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 6>6875 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6876 ret void6877}6878 6879define void @s_shuffle_v2bf16_v4bf16__6_6() {6880; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_6:6881; GFX900: ; %bb.0:6882; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6883; GFX900-NEXT: ;;#ASMSTART6884; GFX900-NEXT: ; def s[4:5]6885; GFX900-NEXT: ;;#ASMEND6886; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s56887; GFX900-NEXT: ;;#ASMSTART6888; GFX900-NEXT: ; use s86889; GFX900-NEXT: ;;#ASMEND6890; GFX900-NEXT: s_setpc_b64 s[30:31]6891;6892; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_6:6893; GFX90A: ; %bb.0:6894; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6895; GFX90A-NEXT: ;;#ASMSTART6896; GFX90A-NEXT: ; def s[4:5]6897; GFX90A-NEXT: ;;#ASMEND6898; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s56899; GFX90A-NEXT: ;;#ASMSTART6900; GFX90A-NEXT: ; use s86901; GFX90A-NEXT: ;;#ASMEND6902; GFX90A-NEXT: s_setpc_b64 s[30:31]6903;6904; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_6:6905; GFX942: ; %bb.0:6906; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6907; GFX942-NEXT: ;;#ASMSTART6908; GFX942-NEXT: ; def s[0:1]6909; GFX942-NEXT: ;;#ASMEND6910; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s16911; GFX942-NEXT: ;;#ASMSTART6912; GFX942-NEXT: ; use s86913; GFX942-NEXT: ;;#ASMEND6914; GFX942-NEXT: s_setpc_b64 s[30:31]6915 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6916 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6917 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 6>6918 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6919 ret void6920}6921 6922define void @s_shuffle_v2bf16_v4bf16__u_7() {6923; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__u_7:6924; GFX900: ; %bb.0:6925; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6926; GFX900-NEXT: ;;#ASMSTART6927; GFX900-NEXT: ; def s[4:5]6928; GFX900-NEXT: ;;#ASMEND6929; GFX900-NEXT: s_mov_b32 s8, s56930; GFX900-NEXT: ;;#ASMSTART6931; GFX900-NEXT: ; use s86932; GFX900-NEXT: ;;#ASMEND6933; GFX900-NEXT: s_setpc_b64 s[30:31]6934;6935; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__u_7:6936; GFX90A: ; %bb.0:6937; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6938; GFX90A-NEXT: ;;#ASMSTART6939; GFX90A-NEXT: ; def s[4:5]6940; GFX90A-NEXT: ;;#ASMEND6941; GFX90A-NEXT: s_mov_b32 s8, s56942; GFX90A-NEXT: ;;#ASMSTART6943; GFX90A-NEXT: ; use s86944; GFX90A-NEXT: ;;#ASMEND6945; GFX90A-NEXT: s_setpc_b64 s[30:31]6946;6947; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__u_7:6948; GFX942: ; %bb.0:6949; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6950; GFX942-NEXT: ;;#ASMSTART6951; GFX942-NEXT: ; def s[0:1]6952; GFX942-NEXT: ;;#ASMEND6953; GFX942-NEXT: s_mov_b32 s8, s16954; GFX942-NEXT: ;;#ASMSTART6955; GFX942-NEXT: ; use s86956; GFX942-NEXT: ;;#ASMEND6957; GFX942-NEXT: s_setpc_b64 s[30:31]6958 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6959 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6960 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 poison, i32 7>6961 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)6962 ret void6963}6964 6965define void @s_shuffle_v2bf16_v4bf16__0_7() {6966; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__0_7:6967; GFX900: ; %bb.0:6968; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6969; GFX900-NEXT: ;;#ASMSTART6970; GFX900-NEXT: ; def s[4:5]6971; GFX900-NEXT: ;;#ASMEND6972; GFX900-NEXT: ;;#ASMSTART6973; GFX900-NEXT: ; def s[6:7]6974; GFX900-NEXT: ;;#ASMEND6975; GFX900-NEXT: s_lshr_b32 s5, s7, 166976; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s56977; GFX900-NEXT: ;;#ASMSTART6978; GFX900-NEXT: ; use s86979; GFX900-NEXT: ;;#ASMEND6980; GFX900-NEXT: s_setpc_b64 s[30:31]6981;6982; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__0_7:6983; GFX90A: ; %bb.0:6984; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6985; GFX90A-NEXT: ;;#ASMSTART6986; GFX90A-NEXT: ; def s[4:5]6987; GFX90A-NEXT: ;;#ASMEND6988; GFX90A-NEXT: ;;#ASMSTART6989; GFX90A-NEXT: ; def s[6:7]6990; GFX90A-NEXT: ;;#ASMEND6991; GFX90A-NEXT: s_lshr_b32 s5, s7, 166992; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s56993; GFX90A-NEXT: ;;#ASMSTART6994; GFX90A-NEXT: ; use s86995; GFX90A-NEXT: ;;#ASMEND6996; GFX90A-NEXT: s_setpc_b64 s[30:31]6997;6998; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__0_7:6999; GFX942: ; %bb.0:7000; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7001; GFX942-NEXT: ;;#ASMSTART7002; GFX942-NEXT: ; def s[0:1]7003; GFX942-NEXT: ;;#ASMEND7004; GFX942-NEXT: ;;#ASMSTART7005; GFX942-NEXT: ; def s[2:3]7006; GFX942-NEXT: ;;#ASMEND7007; GFX942-NEXT: s_lshr_b32 s1, s3, 167008; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s17009; GFX942-NEXT: ;;#ASMSTART7010; GFX942-NEXT: ; use s87011; GFX942-NEXT: ;;#ASMEND7012; GFX942-NEXT: s_setpc_b64 s[30:31]7013 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7014 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7015 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 0, i32 7>7016 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7017 ret void7018}7019 7020define void @s_shuffle_v2bf16_v4bf16__1_7() {7021; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__1_7:7022; GFX900: ; %bb.0:7023; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7024; GFX900-NEXT: ;;#ASMSTART7025; GFX900-NEXT: ; def s[4:5]7026; GFX900-NEXT: ;;#ASMEND7027; GFX900-NEXT: ;;#ASMSTART7028; GFX900-NEXT: ; def s[6:7]7029; GFX900-NEXT: ;;#ASMEND7030; GFX900-NEXT: s_lshr_b32 s5, s7, 167031; GFX900-NEXT: s_lshr_b32 s4, s4, 167032; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s57033; GFX900-NEXT: ;;#ASMSTART7034; GFX900-NEXT: ; use s87035; GFX900-NEXT: ;;#ASMEND7036; GFX900-NEXT: s_setpc_b64 s[30:31]7037;7038; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__1_7:7039; GFX90A: ; %bb.0:7040; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7041; GFX90A-NEXT: ;;#ASMSTART7042; GFX90A-NEXT: ; def s[4:5]7043; GFX90A-NEXT: ;;#ASMEND7044; GFX90A-NEXT: ;;#ASMSTART7045; GFX90A-NEXT: ; def s[6:7]7046; GFX90A-NEXT: ;;#ASMEND7047; GFX90A-NEXT: s_lshr_b32 s5, s7, 167048; GFX90A-NEXT: s_lshr_b32 s4, s4, 167049; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s57050; GFX90A-NEXT: ;;#ASMSTART7051; GFX90A-NEXT: ; use s87052; GFX90A-NEXT: ;;#ASMEND7053; GFX90A-NEXT: s_setpc_b64 s[30:31]7054;7055; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__1_7:7056; GFX942: ; %bb.0:7057; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7058; GFX942-NEXT: ;;#ASMSTART7059; GFX942-NEXT: ; def s[0:1]7060; GFX942-NEXT: ;;#ASMEND7061; GFX942-NEXT: ;;#ASMSTART7062; GFX942-NEXT: ; def s[2:3]7063; GFX942-NEXT: ;;#ASMEND7064; GFX942-NEXT: s_lshr_b32 s1, s3, 167065; GFX942-NEXT: s_lshr_b32 s0, s0, 167066; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s17067; GFX942-NEXT: ;;#ASMSTART7068; GFX942-NEXT: ; use s87069; GFX942-NEXT: ;;#ASMEND7070; GFX942-NEXT: s_setpc_b64 s[30:31]7071 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7072 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7073 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 1, i32 7>7074 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7075 ret void7076}7077 7078define void @s_shuffle_v2bf16_v4bf16__2_7() {7079; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__2_7:7080; GFX900: ; %bb.0:7081; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7082; GFX900-NEXT: ;;#ASMSTART7083; GFX900-NEXT: ; def s[4:5]7084; GFX900-NEXT: ;;#ASMEND7085; GFX900-NEXT: ;;#ASMSTART7086; GFX900-NEXT: ; def s[6:7]7087; GFX900-NEXT: ;;#ASMEND7088; GFX900-NEXT: s_lshr_b32 s4, s7, 167089; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47090; GFX900-NEXT: ;;#ASMSTART7091; GFX900-NEXT: ; use s87092; GFX900-NEXT: ;;#ASMEND7093; GFX900-NEXT: s_setpc_b64 s[30:31]7094;7095; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__2_7:7096; GFX90A: ; %bb.0:7097; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7098; GFX90A-NEXT: ;;#ASMSTART7099; GFX90A-NEXT: ; def s[4:5]7100; GFX90A-NEXT: ;;#ASMEND7101; GFX90A-NEXT: ;;#ASMSTART7102; GFX90A-NEXT: ; def s[6:7]7103; GFX90A-NEXT: ;;#ASMEND7104; GFX90A-NEXT: s_lshr_b32 s4, s7, 167105; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47106; GFX90A-NEXT: ;;#ASMSTART7107; GFX90A-NEXT: ; use s87108; GFX90A-NEXT: ;;#ASMEND7109; GFX90A-NEXT: s_setpc_b64 s[30:31]7110;7111; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__2_7:7112; GFX942: ; %bb.0:7113; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7114; GFX942-NEXT: ;;#ASMSTART7115; GFX942-NEXT: ; def s[0:1]7116; GFX942-NEXT: ;;#ASMEND7117; GFX942-NEXT: ;;#ASMSTART7118; GFX942-NEXT: ; def s[2:3]7119; GFX942-NEXT: ;;#ASMEND7120; GFX942-NEXT: s_lshr_b32 s0, s3, 167121; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07122; GFX942-NEXT: ;;#ASMSTART7123; GFX942-NEXT: ; use s87124; GFX942-NEXT: ;;#ASMEND7125; GFX942-NEXT: s_setpc_b64 s[30:31]7126 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7127 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7128 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 2, i32 7>7129 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7130 ret void7131}7132 7133define void @s_shuffle_v2bf16_v4bf16__3_7() {7134; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__3_7:7135; GFX900: ; %bb.0:7136; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7137; GFX900-NEXT: ;;#ASMSTART7138; GFX900-NEXT: ; def s[4:5]7139; GFX900-NEXT: ;;#ASMEND7140; GFX900-NEXT: ;;#ASMSTART7141; GFX900-NEXT: ; def s[6:7]7142; GFX900-NEXT: ;;#ASMEND7143; GFX900-NEXT: s_lshr_b32 s4, s7, 167144; GFX900-NEXT: s_lshr_b32 s5, s5, 167145; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47146; GFX900-NEXT: ;;#ASMSTART7147; GFX900-NEXT: ; use s87148; GFX900-NEXT: ;;#ASMEND7149; GFX900-NEXT: s_setpc_b64 s[30:31]7150;7151; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__3_7:7152; GFX90A: ; %bb.0:7153; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7154; GFX90A-NEXT: ;;#ASMSTART7155; GFX90A-NEXT: ; def s[4:5]7156; GFX90A-NEXT: ;;#ASMEND7157; GFX90A-NEXT: ;;#ASMSTART7158; GFX90A-NEXT: ; def s[6:7]7159; GFX90A-NEXT: ;;#ASMEND7160; GFX90A-NEXT: s_lshr_b32 s4, s7, 167161; GFX90A-NEXT: s_lshr_b32 s5, s5, 167162; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47163; GFX90A-NEXT: ;;#ASMSTART7164; GFX90A-NEXT: ; use s87165; GFX90A-NEXT: ;;#ASMEND7166; GFX90A-NEXT: s_setpc_b64 s[30:31]7167;7168; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__3_7:7169; GFX942: ; %bb.0:7170; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7171; GFX942-NEXT: ;;#ASMSTART7172; GFX942-NEXT: ; def s[0:1]7173; GFX942-NEXT: ;;#ASMEND7174; GFX942-NEXT: ;;#ASMSTART7175; GFX942-NEXT: ; def s[2:3]7176; GFX942-NEXT: ;;#ASMEND7177; GFX942-NEXT: s_lshr_b32 s0, s3, 167178; GFX942-NEXT: s_lshr_b32 s1, s1, 167179; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07180; GFX942-NEXT: ;;#ASMSTART7181; GFX942-NEXT: ; use s87182; GFX942-NEXT: ;;#ASMEND7183; GFX942-NEXT: s_setpc_b64 s[30:31]7184 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7185 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7186 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 3, i32 7>7187 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7188 ret void7189}7190 7191define void @s_shuffle_v2bf16_v4bf16__4_7() {7192; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__4_7:7193; GFX900: ; %bb.0:7194; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7195; GFX900-NEXT: ;;#ASMSTART7196; GFX900-NEXT: ; def s[4:5]7197; GFX900-NEXT: ;;#ASMEND7198; GFX900-NEXT: s_lshr_b32 s5, s5, 167199; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s57200; GFX900-NEXT: ;;#ASMSTART7201; GFX900-NEXT: ; use s87202; GFX900-NEXT: ;;#ASMEND7203; GFX900-NEXT: s_setpc_b64 s[30:31]7204;7205; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__4_7:7206; GFX90A: ; %bb.0:7207; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7208; GFX90A-NEXT: ;;#ASMSTART7209; GFX90A-NEXT: ; def s[4:5]7210; GFX90A-NEXT: ;;#ASMEND7211; GFX90A-NEXT: s_lshr_b32 s5, s5, 167212; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s57213; GFX90A-NEXT: ;;#ASMSTART7214; GFX90A-NEXT: ; use s87215; GFX90A-NEXT: ;;#ASMEND7216; GFX90A-NEXT: s_setpc_b64 s[30:31]7217;7218; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__4_7:7219; GFX942: ; %bb.0:7220; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7221; GFX942-NEXT: ;;#ASMSTART7222; GFX942-NEXT: ; def s[0:1]7223; GFX942-NEXT: ;;#ASMEND7224; GFX942-NEXT: s_lshr_b32 s1, s1, 167225; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s17226; GFX942-NEXT: ;;#ASMSTART7227; GFX942-NEXT: ; use s87228; GFX942-NEXT: ;;#ASMEND7229; GFX942-NEXT: s_setpc_b64 s[30:31]7230 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7231 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7232 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 4, i32 7>7233 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7234 ret void7235}7236 7237define void @s_shuffle_v2bf16_v4bf16__5_7() {7238; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__5_7:7239; GFX900: ; %bb.0:7240; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7241; GFX900-NEXT: ;;#ASMSTART7242; GFX900-NEXT: ; def s[4:5]7243; GFX900-NEXT: ;;#ASMEND7244; GFX900-NEXT: s_lshr_b32 s5, s5, 167245; GFX900-NEXT: s_lshr_b32 s4, s4, 167246; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s57247; GFX900-NEXT: ;;#ASMSTART7248; GFX900-NEXT: ; use s87249; GFX900-NEXT: ;;#ASMEND7250; GFX900-NEXT: s_setpc_b64 s[30:31]7251;7252; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__5_7:7253; GFX90A: ; %bb.0:7254; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7255; GFX90A-NEXT: ;;#ASMSTART7256; GFX90A-NEXT: ; def s[4:5]7257; GFX90A-NEXT: ;;#ASMEND7258; GFX90A-NEXT: s_lshr_b32 s5, s5, 167259; GFX90A-NEXT: s_lshr_b32 s4, s4, 167260; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s57261; GFX90A-NEXT: ;;#ASMSTART7262; GFX90A-NEXT: ; use s87263; GFX90A-NEXT: ;;#ASMEND7264; GFX90A-NEXT: s_setpc_b64 s[30:31]7265;7266; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__5_7:7267; GFX942: ; %bb.0:7268; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7269; GFX942-NEXT: ;;#ASMSTART7270; GFX942-NEXT: ; def s[0:1]7271; GFX942-NEXT: ;;#ASMEND7272; GFX942-NEXT: s_lshr_b32 s1, s1, 167273; GFX942-NEXT: s_lshr_b32 s0, s0, 167274; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s17275; GFX942-NEXT: ;;#ASMSTART7276; GFX942-NEXT: ; use s87277; GFX942-NEXT: ;;#ASMEND7278; GFX942-NEXT: s_setpc_b64 s[30:31]7279 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7280 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7281 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 5, i32 7>7282 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7283 ret void7284}7285 7286define void @s_shuffle_v2bf16_v4bf16__6_7() {7287; GFX900-LABEL: s_shuffle_v2bf16_v4bf16__6_7:7288; GFX900: ; %bb.0:7289; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7290; GFX900-NEXT: ;;#ASMSTART7291; GFX900-NEXT: ; def s[4:5]7292; GFX900-NEXT: ;;#ASMEND7293; GFX900-NEXT: s_mov_b32 s8, s57294; GFX900-NEXT: ;;#ASMSTART7295; GFX900-NEXT: ; use s87296; GFX900-NEXT: ;;#ASMEND7297; GFX900-NEXT: s_setpc_b64 s[30:31]7298;7299; GFX90A-LABEL: s_shuffle_v2bf16_v4bf16__6_7:7300; GFX90A: ; %bb.0:7301; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7302; GFX90A-NEXT: ;;#ASMSTART7303; GFX90A-NEXT: ; def s[4:5]7304; GFX90A-NEXT: ;;#ASMEND7305; GFX90A-NEXT: s_mov_b32 s8, s57306; GFX90A-NEXT: ;;#ASMSTART7307; GFX90A-NEXT: ; use s87308; GFX90A-NEXT: ;;#ASMEND7309; GFX90A-NEXT: s_setpc_b64 s[30:31]7310;7311; GFX942-LABEL: s_shuffle_v2bf16_v4bf16__6_7:7312; GFX942: ; %bb.0:7313; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7314; GFX942-NEXT: ;;#ASMSTART7315; GFX942-NEXT: ; def s[0:1]7316; GFX942-NEXT: ;;#ASMEND7317; GFX942-NEXT: s_mov_b32 s8, s17318; GFX942-NEXT: ;;#ASMSTART7319; GFX942-NEXT: ; use s87320; GFX942-NEXT: ;;#ASMEND7321; GFX942-NEXT: s_setpc_b64 s[30:31]7322 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7323 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7324 %shuf = shufflevector <4 x bfloat> %vec0, <4 x bfloat> %vec1, <2 x i32> <i32 6, i32 7>7325 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)7326 ret void7327}7328;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:7329; GFX90APLUS: {{.*}}7330