1979 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_v2bf16__u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v2bf16_v2bf16__u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()13 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> poison14 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 415 ret void16}17 18define void @v_shuffle_v2bf16_v2bf16__0_u(ptr addrspace(1) inreg %ptr) {19; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__0_u:20; GFX900: ; %bb.0:21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)22; GFX900-NEXT: v_mov_b32_e32 v0, 023; GFX900-NEXT: ;;#ASMSTART24; GFX900-NEXT: ; def v125; GFX900-NEXT: ;;#ASMEND26; GFX900-NEXT: global_store_dword v0, v1, s[16:17]27; GFX900-NEXT: s_waitcnt vmcnt(0)28; GFX900-NEXT: s_setpc_b64 s[30:31]29;30; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__0_u:31; GFX90A: ; %bb.0:32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)33; GFX90A-NEXT: v_mov_b32_e32 v0, 034; GFX90A-NEXT: ;;#ASMSTART35; GFX90A-NEXT: ; def v136; GFX90A-NEXT: ;;#ASMEND37; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]38; GFX90A-NEXT: s_waitcnt vmcnt(0)39; GFX90A-NEXT: s_setpc_b64 s[30:31]40;41; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__0_u:42; GFX942: ; %bb.0:43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)44; GFX942-NEXT: v_mov_b32_e32 v0, 045; GFX942-NEXT: ;;#ASMSTART46; GFX942-NEXT: ; def v147; GFX942-NEXT: ;;#ASMEND48; GFX942-NEXT: global_store_dword v0, v1, s[0:1]49; GFX942-NEXT: s_waitcnt vmcnt(0)50; GFX942-NEXT: s_setpc_b64 s[30:31]51 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()52 %shuf = shufflevector <2 x bfloat> %vec0, <2 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_v2bf16__1_u(ptr addrspace(1) inreg %ptr) {58; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__1_u:59; GFX900: ; %bb.0:60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)61; GFX900-NEXT: ;;#ASMSTART62; GFX900-NEXT: ; def v163; GFX900-NEXT: ;;#ASMEND64; GFX900-NEXT: v_mov_b32_e32 v0, 065; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 1666; GFX900-NEXT: global_store_dword v0, v1, s[16:17]67; GFX900-NEXT: s_waitcnt vmcnt(0)68; GFX900-NEXT: s_setpc_b64 s[30:31]69;70; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__1_u:71; GFX90A: ; %bb.0:72; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)73; GFX90A-NEXT: ;;#ASMSTART74; GFX90A-NEXT: ; def v175; GFX90A-NEXT: ;;#ASMEND76; GFX90A-NEXT: v_mov_b32_e32 v0, 077; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 1678; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]79; GFX90A-NEXT: s_waitcnt vmcnt(0)80; GFX90A-NEXT: s_setpc_b64 s[30:31]81;82; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__1_u:83; GFX942: ; %bb.0:84; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)85; GFX942-NEXT: ;;#ASMSTART86; GFX942-NEXT: ; def v187; GFX942-NEXT: ;;#ASMEND88; GFX942-NEXT: v_mov_b32_e32 v0, 089; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 1690; GFX942-NEXT: global_store_dword v0, v1, s[0:1]91; GFX942-NEXT: s_waitcnt vmcnt(0)92; GFX942-NEXT: s_setpc_b64 s[30:31]93 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()94 %shuf = shufflevector <2 x bfloat> %vec0, <2 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_v2bf16__2_u(ptr addrspace(1) inreg %ptr) {100; GFX9-LABEL: v_shuffle_v2bf16_v2bf16__2_u:101; GFX9: ; %bb.0:102; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)103; GFX9-NEXT: s_setpc_b64 s[30:31]104 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()105 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 poison>106 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4107 ret void108}109 110define void @v_shuffle_v2bf16_v2bf16__3_u(ptr addrspace(1) inreg %ptr) {111; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__3_u:112; GFX900: ; %bb.0:113; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)114; GFX900-NEXT: ;;#ASMSTART115; GFX900-NEXT: ; def v1116; GFX900-NEXT: ;;#ASMEND117; GFX900-NEXT: v_mov_b32_e32 v0, 0118; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 16119; GFX900-NEXT: global_store_dword v0, v1, s[16:17]120; GFX900-NEXT: s_waitcnt vmcnt(0)121; GFX900-NEXT: s_setpc_b64 s[30:31]122;123; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__3_u:124; GFX90A: ; %bb.0:125; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)126; GFX90A-NEXT: ;;#ASMSTART127; GFX90A-NEXT: ; def v1128; GFX90A-NEXT: ;;#ASMEND129; GFX90A-NEXT: v_mov_b32_e32 v0, 0130; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 16131; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]132; GFX90A-NEXT: s_waitcnt vmcnt(0)133; GFX90A-NEXT: s_setpc_b64 s[30:31]134;135; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__3_u:136; GFX942: ; %bb.0:137; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)138; GFX942-NEXT: ;;#ASMSTART139; GFX942-NEXT: ; def v1140; GFX942-NEXT: ;;#ASMEND141; GFX942-NEXT: v_mov_b32_e32 v0, 0142; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 16143; GFX942-NEXT: global_store_dword v0, v1, s[0:1]144; GFX942-NEXT: s_waitcnt vmcnt(0)145; GFX942-NEXT: s_setpc_b64 s[30:31]146 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()147 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()148 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 poison>149 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4150 ret void151}152 153define void @v_shuffle_v2bf16_v2bf16__3_0(ptr addrspace(1) inreg %ptr) {154; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__3_0:155; GFX900: ; %bb.0:156; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)157; GFX900-NEXT: ;;#ASMSTART158; GFX900-NEXT: ; def v1159; GFX900-NEXT: ;;#ASMEND160; GFX900-NEXT: v_mov_b32_e32 v0, 0161; GFX900-NEXT: ;;#ASMSTART162; GFX900-NEXT: ; def v2163; GFX900-NEXT: ;;#ASMEND164; GFX900-NEXT: v_alignbit_b32 v1, v1, v2, 16165; GFX900-NEXT: global_store_dword v0, v1, s[16:17]166; GFX900-NEXT: s_waitcnt vmcnt(0)167; GFX900-NEXT: s_setpc_b64 s[30:31]168;169; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__3_0:170; GFX90A: ; %bb.0:171; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)172; GFX90A-NEXT: ;;#ASMSTART173; GFX90A-NEXT: ; def v1174; GFX90A-NEXT: ;;#ASMEND175; GFX90A-NEXT: v_mov_b32_e32 v0, 0176; GFX90A-NEXT: ;;#ASMSTART177; GFX90A-NEXT: ; def v2178; GFX90A-NEXT: ;;#ASMEND179; GFX90A-NEXT: v_alignbit_b32 v1, v1, v2, 16180; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]181; GFX90A-NEXT: s_waitcnt vmcnt(0)182; GFX90A-NEXT: s_setpc_b64 s[30:31]183;184; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__3_0:185; GFX942: ; %bb.0:186; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)187; GFX942-NEXT: ;;#ASMSTART188; GFX942-NEXT: ; def v1189; GFX942-NEXT: ;;#ASMEND190; GFX942-NEXT: v_mov_b32_e32 v0, 0191; GFX942-NEXT: ;;#ASMSTART192; GFX942-NEXT: ; def v2193; GFX942-NEXT: ;;#ASMEND194; GFX942-NEXT: s_nop 0195; GFX942-NEXT: v_alignbit_b32 v1, v1, v2, 16196; GFX942-NEXT: global_store_dword v0, v1, s[0:1]197; GFX942-NEXT: s_waitcnt vmcnt(0)198; GFX942-NEXT: s_setpc_b64 s[30:31]199 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()200 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()201 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 0>202 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4203 ret void204}205 206define void @v_shuffle_v2bf16_v2bf16__3_1(ptr addrspace(1) inreg %ptr) {207; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__3_1:208; GFX900: ; %bb.0:209; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)210; GFX900-NEXT: ;;#ASMSTART211; GFX900-NEXT: ; def v1212; GFX900-NEXT: ;;#ASMEND213; GFX900-NEXT: s_mov_b32 s4, 0x7060302214; GFX900-NEXT: v_mov_b32_e32 v0, 0215; GFX900-NEXT: ;;#ASMSTART216; GFX900-NEXT: ; def v2217; GFX900-NEXT: ;;#ASMEND218; GFX900-NEXT: v_perm_b32 v1, v1, v2, s4219; GFX900-NEXT: global_store_dword v0, v1, s[16:17]220; GFX900-NEXT: s_waitcnt vmcnt(0)221; GFX900-NEXT: s_setpc_b64 s[30:31]222;223; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__3_1:224; GFX90A: ; %bb.0:225; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)226; GFX90A-NEXT: ;;#ASMSTART227; GFX90A-NEXT: ; def v1228; GFX90A-NEXT: ;;#ASMEND229; GFX90A-NEXT: s_mov_b32 s4, 0x7060302230; GFX90A-NEXT: v_mov_b32_e32 v0, 0231; GFX90A-NEXT: ;;#ASMSTART232; GFX90A-NEXT: ; def v2233; GFX90A-NEXT: ;;#ASMEND234; GFX90A-NEXT: v_perm_b32 v1, v1, v2, s4235; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]236; GFX90A-NEXT: s_waitcnt vmcnt(0)237; GFX90A-NEXT: s_setpc_b64 s[30:31]238;239; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__3_1:240; GFX942: ; %bb.0:241; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)242; GFX942-NEXT: ;;#ASMSTART243; GFX942-NEXT: ; def v1244; GFX942-NEXT: ;;#ASMEND245; GFX942-NEXT: s_mov_b32 s2, 0x7060302246; GFX942-NEXT: v_mov_b32_e32 v0, 0247; GFX942-NEXT: ;;#ASMSTART248; GFX942-NEXT: ; def v2249; GFX942-NEXT: ;;#ASMEND250; GFX942-NEXT: s_nop 0251; GFX942-NEXT: v_perm_b32 v1, v1, v2, s2252; GFX942-NEXT: global_store_dword v0, v1, s[0:1]253; GFX942-NEXT: s_waitcnt vmcnt(0)254; GFX942-NEXT: s_setpc_b64 s[30:31]255 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()256 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()257 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 1>258 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4259 ret void260}261 262define void @v_shuffle_v2bf16_v2bf16__3_2(ptr addrspace(1) inreg %ptr) {263; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__3_2:264; GFX900: ; %bb.0:265; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)266; GFX900-NEXT: ;;#ASMSTART267; GFX900-NEXT: ; def v1268; GFX900-NEXT: ;;#ASMEND269; GFX900-NEXT: v_mov_b32_e32 v0, 0270; GFX900-NEXT: v_alignbit_b32 v1, v1, v1, 16271; GFX900-NEXT: global_store_dword v0, v1, s[16:17]272; GFX900-NEXT: s_waitcnt vmcnt(0)273; GFX900-NEXT: s_setpc_b64 s[30:31]274;275; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__3_2:276; GFX90A: ; %bb.0:277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)278; GFX90A-NEXT: ;;#ASMSTART279; GFX90A-NEXT: ; def v1280; GFX90A-NEXT: ;;#ASMEND281; GFX90A-NEXT: v_mov_b32_e32 v0, 0282; GFX90A-NEXT: v_alignbit_b32 v1, v1, v1, 16283; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]284; GFX90A-NEXT: s_waitcnt vmcnt(0)285; GFX90A-NEXT: s_setpc_b64 s[30:31]286;287; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__3_2:288; GFX942: ; %bb.0:289; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)290; GFX942-NEXT: ;;#ASMSTART291; GFX942-NEXT: ; def v1292; GFX942-NEXT: ;;#ASMEND293; GFX942-NEXT: v_mov_b32_e32 v0, 0294; GFX942-NEXT: v_alignbit_b32 v1, v1, v1, 16295; GFX942-NEXT: global_store_dword v0, v1, s[0:1]296; GFX942-NEXT: s_waitcnt vmcnt(0)297; GFX942-NEXT: s_setpc_b64 s[30:31]298 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()299 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()300 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 2>301 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4302 ret void303}304 305define void @v_shuffle_v2bf16_v2bf16__3_3(ptr addrspace(1) inreg %ptr) {306; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__3_3:307; GFX900: ; %bb.0:308; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)309; GFX900-NEXT: ;;#ASMSTART310; GFX900-NEXT: ; def v1311; GFX900-NEXT: ;;#ASMEND312; GFX900-NEXT: s_mov_b32 s4, 0x7060302313; GFX900-NEXT: v_mov_b32_e32 v0, 0314; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4315; GFX900-NEXT: global_store_dword v0, v1, s[16:17]316; GFX900-NEXT: s_waitcnt vmcnt(0)317; GFX900-NEXT: s_setpc_b64 s[30:31]318;319; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__3_3:320; GFX90A: ; %bb.0:321; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX90A-NEXT: ;;#ASMSTART323; GFX90A-NEXT: ; def v1324; GFX90A-NEXT: ;;#ASMEND325; GFX90A-NEXT: s_mov_b32 s4, 0x7060302326; GFX90A-NEXT: v_mov_b32_e32 v0, 0327; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4328; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]329; GFX90A-NEXT: s_waitcnt vmcnt(0)330; GFX90A-NEXT: s_setpc_b64 s[30:31]331;332; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__3_3:333; GFX942: ; %bb.0:334; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)335; GFX942-NEXT: ;;#ASMSTART336; GFX942-NEXT: ; def v1337; GFX942-NEXT: ;;#ASMEND338; GFX942-NEXT: s_mov_b32 s2, 0x7060302339; GFX942-NEXT: v_mov_b32_e32 v0, 0340; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2341; GFX942-NEXT: global_store_dword v0, v1, s[0:1]342; GFX942-NEXT: s_waitcnt vmcnt(0)343; GFX942-NEXT: s_setpc_b64 s[30:31]344 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()345 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()346 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 3>347 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4348 ret void349}350 351define void @v_shuffle_v2bf16_v2bf16__u_0(ptr addrspace(1) inreg %ptr) {352; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__u_0:353; GFX900: ; %bb.0:354; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)355; GFX900-NEXT: ;;#ASMSTART356; GFX900-NEXT: ; def v1357; GFX900-NEXT: ;;#ASMEND358; GFX900-NEXT: v_mov_b32_e32 v0, 0359; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v1360; GFX900-NEXT: global_store_dword v0, v1, s[16:17]361; GFX900-NEXT: s_waitcnt vmcnt(0)362; GFX900-NEXT: s_setpc_b64 s[30:31]363;364; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__u_0:365; GFX90A: ; %bb.0:366; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)367; GFX90A-NEXT: ;;#ASMSTART368; GFX90A-NEXT: ; def v1369; GFX90A-NEXT: ;;#ASMEND370; GFX90A-NEXT: v_mov_b32_e32 v0, 0371; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v1372; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]373; GFX90A-NEXT: s_waitcnt vmcnt(0)374; GFX90A-NEXT: s_setpc_b64 s[30:31]375;376; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__u_0:377; GFX942: ; %bb.0:378; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)379; GFX942-NEXT: ;;#ASMSTART380; GFX942-NEXT: ; def v1381; GFX942-NEXT: ;;#ASMEND382; GFX942-NEXT: v_mov_b32_e32 v0, 0383; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v1384; GFX942-NEXT: global_store_dword v0, v1, s[0:1]385; GFX942-NEXT: s_waitcnt vmcnt(0)386; GFX942-NEXT: s_setpc_b64 s[30:31]387 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()388 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 poison, i32 0>389 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4390 ret void391}392 393define void @v_shuffle_v2bf16_v2bf16__0_0(ptr addrspace(1) inreg %ptr) {394; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__0_0:395; GFX900: ; %bb.0:396; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)397; GFX900-NEXT: ;;#ASMSTART398; GFX900-NEXT: ; def v1399; GFX900-NEXT: ;;#ASMEND400; GFX900-NEXT: s_mov_b32 s4, 0x5040100401; GFX900-NEXT: v_mov_b32_e32 v0, 0402; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4403; GFX900-NEXT: global_store_dword v0, v1, s[16:17]404; GFX900-NEXT: s_waitcnt vmcnt(0)405; GFX900-NEXT: s_setpc_b64 s[30:31]406;407; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__0_0:408; GFX90A: ; %bb.0:409; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)410; GFX90A-NEXT: ;;#ASMSTART411; GFX90A-NEXT: ; def v1412; GFX90A-NEXT: ;;#ASMEND413; GFX90A-NEXT: s_mov_b32 s4, 0x5040100414; GFX90A-NEXT: v_mov_b32_e32 v0, 0415; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4416; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]417; GFX90A-NEXT: s_waitcnt vmcnt(0)418; GFX90A-NEXT: s_setpc_b64 s[30:31]419;420; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__0_0:421; GFX942: ; %bb.0:422; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)423; GFX942-NEXT: ;;#ASMSTART424; GFX942-NEXT: ; def v1425; GFX942-NEXT: ;;#ASMEND426; GFX942-NEXT: s_mov_b32 s2, 0x5040100427; GFX942-NEXT: v_mov_b32_e32 v0, 0428; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2429; GFX942-NEXT: global_store_dword v0, v1, s[0:1]430; GFX942-NEXT: s_waitcnt vmcnt(0)431; GFX942-NEXT: s_setpc_b64 s[30:31]432 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()433 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> zeroinitializer434 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4435 ret void436}437 438define void @v_shuffle_v2bf16_v2bf16__1_0(ptr addrspace(1) inreg %ptr) {439; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__1_0:440; GFX900: ; %bb.0:441; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)442; GFX900-NEXT: ;;#ASMSTART443; GFX900-NEXT: ; def v1444; GFX900-NEXT: ;;#ASMEND445; GFX900-NEXT: v_mov_b32_e32 v0, 0446; GFX900-NEXT: v_alignbit_b32 v1, v1, v1, 16447; GFX900-NEXT: global_store_dword v0, v1, s[16:17]448; GFX900-NEXT: s_waitcnt vmcnt(0)449; GFX900-NEXT: s_setpc_b64 s[30:31]450;451; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__1_0:452; GFX90A: ; %bb.0:453; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)454; GFX90A-NEXT: ;;#ASMSTART455; GFX90A-NEXT: ; def v1456; GFX90A-NEXT: ;;#ASMEND457; GFX90A-NEXT: v_mov_b32_e32 v0, 0458; GFX90A-NEXT: v_alignbit_b32 v1, v1, v1, 16459; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]460; GFX90A-NEXT: s_waitcnt vmcnt(0)461; GFX90A-NEXT: s_setpc_b64 s[30:31]462;463; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__1_0:464; GFX942: ; %bb.0:465; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)466; GFX942-NEXT: ;;#ASMSTART467; GFX942-NEXT: ; def v1468; GFX942-NEXT: ;;#ASMEND469; GFX942-NEXT: v_mov_b32_e32 v0, 0470; GFX942-NEXT: v_alignbit_b32 v1, v1, v1, 16471; GFX942-NEXT: global_store_dword v0, v1, s[0:1]472; GFX942-NEXT: s_waitcnt vmcnt(0)473; GFX942-NEXT: s_setpc_b64 s[30:31]474 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()475 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 0>476 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4477 ret void478}479 480define void @v_shuffle_v2bf16_v2bf16__2_0(ptr addrspace(1) inreg %ptr) {481; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__2_0:482; GFX900: ; %bb.0:483; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)484; GFX900-NEXT: ;;#ASMSTART485; GFX900-NEXT: ; def v1486; GFX900-NEXT: ;;#ASMEND487; GFX900-NEXT: v_mov_b32_e32 v0, 0488; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v1489; GFX900-NEXT: global_store_dword v0, v1, s[16:17]490; GFX900-NEXT: s_waitcnt vmcnt(0)491; GFX900-NEXT: s_setpc_b64 s[30:31]492;493; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__2_0:494; GFX90A: ; %bb.0:495; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX90A-NEXT: ;;#ASMSTART497; GFX90A-NEXT: ; def v1498; GFX90A-NEXT: ;;#ASMEND499; GFX90A-NEXT: v_mov_b32_e32 v0, 0500; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v1501; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]502; GFX90A-NEXT: s_waitcnt vmcnt(0)503; GFX90A-NEXT: s_setpc_b64 s[30:31]504;505; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__2_0:506; GFX942: ; %bb.0:507; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)508; GFX942-NEXT: ;;#ASMSTART509; GFX942-NEXT: ; def v1510; GFX942-NEXT: ;;#ASMEND511; GFX942-NEXT: v_mov_b32_e32 v0, 0512; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v1513; GFX942-NEXT: global_store_dword v0, v1, s[0:1]514; GFX942-NEXT: s_waitcnt vmcnt(0)515; GFX942-NEXT: s_setpc_b64 s[30:31]516 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()517 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 0>518 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4519 ret void520}521 522define void @v_shuffle_v2bf16_v2bf16__u_1(ptr addrspace(1) inreg %ptr) {523; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__u_1:524; GFX900: ; %bb.0:525; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)526; GFX900-NEXT: v_mov_b32_e32 v0, 0527; GFX900-NEXT: ;;#ASMSTART528; GFX900-NEXT: ; def v1529; GFX900-NEXT: ;;#ASMEND530; GFX900-NEXT: global_store_dword v0, v1, s[16:17]531; GFX900-NEXT: s_waitcnt vmcnt(0)532; GFX900-NEXT: s_setpc_b64 s[30:31]533;534; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__u_1:535; GFX90A: ; %bb.0:536; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)537; GFX90A-NEXT: v_mov_b32_e32 v0, 0538; GFX90A-NEXT: ;;#ASMSTART539; GFX90A-NEXT: ; def v1540; GFX90A-NEXT: ;;#ASMEND541; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]542; GFX90A-NEXT: s_waitcnt vmcnt(0)543; GFX90A-NEXT: s_setpc_b64 s[30:31]544;545; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__u_1:546; GFX942: ; %bb.0:547; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)548; GFX942-NEXT: v_mov_b32_e32 v0, 0549; GFX942-NEXT: ;;#ASMSTART550; GFX942-NEXT: ; def v1551; GFX942-NEXT: ;;#ASMEND552; GFX942-NEXT: global_store_dword v0, v1, s[0:1]553; GFX942-NEXT: s_waitcnt vmcnt(0)554; GFX942-NEXT: s_setpc_b64 s[30:31]555 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()556 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 poison, i32 1>557 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4558 ret void559}560 561define void @v_shuffle_v2bf16_v2bf16__0_1(ptr addrspace(1) inreg %ptr) {562; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__0_1:563; GFX900: ; %bb.0:564; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)565; GFX900-NEXT: v_mov_b32_e32 v0, 0566; GFX900-NEXT: ;;#ASMSTART567; GFX900-NEXT: ; def v1568; GFX900-NEXT: ;;#ASMEND569; GFX900-NEXT: global_store_dword v0, v1, s[16:17]570; GFX900-NEXT: s_waitcnt vmcnt(0)571; GFX900-NEXT: s_setpc_b64 s[30:31]572;573; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__0_1:574; GFX90A: ; %bb.0:575; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)576; GFX90A-NEXT: v_mov_b32_e32 v0, 0577; GFX90A-NEXT: ;;#ASMSTART578; GFX90A-NEXT: ; def v1579; GFX90A-NEXT: ;;#ASMEND580; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]581; GFX90A-NEXT: s_waitcnt vmcnt(0)582; GFX90A-NEXT: s_setpc_b64 s[30:31]583;584; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__0_1:585; GFX942: ; %bb.0:586; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)587; GFX942-NEXT: v_mov_b32_e32 v0, 0588; GFX942-NEXT: ;;#ASMSTART589; GFX942-NEXT: ; def v1590; GFX942-NEXT: ;;#ASMEND591; GFX942-NEXT: global_store_dword v0, v1, s[0:1]592; GFX942-NEXT: s_waitcnt vmcnt(0)593; GFX942-NEXT: s_setpc_b64 s[30:31]594 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()595 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 1>596 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4597 ret void598}599 600define void @v_shuffle_v2bf16_v2bf16__1_1(ptr addrspace(1) inreg %ptr) {601; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__1_1:602; GFX900: ; %bb.0:603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)604; GFX900-NEXT: ;;#ASMSTART605; GFX900-NEXT: ; def v1606; GFX900-NEXT: ;;#ASMEND607; GFX900-NEXT: s_mov_b32 s4, 0x7060302608; GFX900-NEXT: v_mov_b32_e32 v0, 0609; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4610; GFX900-NEXT: global_store_dword v0, v1, s[16:17]611; GFX900-NEXT: s_waitcnt vmcnt(0)612; GFX900-NEXT: s_setpc_b64 s[30:31]613;614; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__1_1:615; GFX90A: ; %bb.0:616; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)617; GFX90A-NEXT: ;;#ASMSTART618; GFX90A-NEXT: ; def v1619; GFX90A-NEXT: ;;#ASMEND620; GFX90A-NEXT: s_mov_b32 s4, 0x7060302621; GFX90A-NEXT: v_mov_b32_e32 v0, 0622; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4623; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]624; GFX90A-NEXT: s_waitcnt vmcnt(0)625; GFX90A-NEXT: s_setpc_b64 s[30:31]626;627; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__1_1:628; GFX942: ; %bb.0:629; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)630; GFX942-NEXT: ;;#ASMSTART631; GFX942-NEXT: ; def v1632; GFX942-NEXT: ;;#ASMEND633; GFX942-NEXT: s_mov_b32 s2, 0x7060302634; GFX942-NEXT: v_mov_b32_e32 v0, 0635; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2636; GFX942-NEXT: global_store_dword v0, v1, s[0:1]637; GFX942-NEXT: s_waitcnt vmcnt(0)638; GFX942-NEXT: s_setpc_b64 s[30:31]639 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()640 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 1>641 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4642 ret void643}644 645define void @v_shuffle_v2bf16_v2bf16__2_1(ptr addrspace(1) inreg %ptr) {646; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__2_1:647; GFX900: ; %bb.0:648; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)649; GFX900-NEXT: v_mov_b32_e32 v0, 0650; GFX900-NEXT: ;;#ASMSTART651; GFX900-NEXT: ; def v1652; GFX900-NEXT: ;;#ASMEND653; GFX900-NEXT: global_store_dword v0, v1, s[16:17]654; GFX900-NEXT: s_waitcnt vmcnt(0)655; GFX900-NEXT: s_setpc_b64 s[30:31]656;657; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__2_1:658; GFX90A: ; %bb.0:659; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)660; GFX90A-NEXT: v_mov_b32_e32 v0, 0661; GFX90A-NEXT: ;;#ASMSTART662; GFX90A-NEXT: ; def v1663; GFX90A-NEXT: ;;#ASMEND664; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]665; GFX90A-NEXT: s_waitcnt vmcnt(0)666; GFX90A-NEXT: s_setpc_b64 s[30:31]667;668; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__2_1:669; GFX942: ; %bb.0:670; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)671; GFX942-NEXT: v_mov_b32_e32 v0, 0672; GFX942-NEXT: ;;#ASMSTART673; GFX942-NEXT: ; def v1674; GFX942-NEXT: ;;#ASMEND675; GFX942-NEXT: global_store_dword v0, v1, s[0:1]676; GFX942-NEXT: s_waitcnt vmcnt(0)677; GFX942-NEXT: s_setpc_b64 s[30:31]678 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()679 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 1>680 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4681 ret void682}683 684define void @v_shuffle_v2bf16_v2bf16__u_2(ptr addrspace(1) inreg %ptr) {685; GFX9-LABEL: v_shuffle_v2bf16_v2bf16__u_2:686; GFX9: ; %bb.0:687; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)688; GFX9-NEXT: s_setpc_b64 s[30:31]689 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()690 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 poison, i32 2>691 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4692 ret void693}694 695define void @v_shuffle_v2bf16_v2bf16__0_2(ptr addrspace(1) inreg %ptr) {696; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__0_2:697; GFX900: ; %bb.0:698; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)699; GFX900-NEXT: v_mov_b32_e32 v0, 0700; GFX900-NEXT: ;;#ASMSTART701; GFX900-NEXT: ; def v1702; GFX900-NEXT: ;;#ASMEND703; GFX900-NEXT: global_store_dword v0, v1, s[16:17]704; GFX900-NEXT: s_waitcnt vmcnt(0)705; GFX900-NEXT: s_setpc_b64 s[30:31]706;707; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__0_2:708; GFX90A: ; %bb.0:709; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)710; GFX90A-NEXT: v_mov_b32_e32 v0, 0711; GFX90A-NEXT: ;;#ASMSTART712; GFX90A-NEXT: ; def v1713; GFX90A-NEXT: ;;#ASMEND714; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]715; GFX90A-NEXT: s_waitcnt vmcnt(0)716; GFX90A-NEXT: s_setpc_b64 s[30:31]717;718; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__0_2:719; GFX942: ; %bb.0:720; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)721; GFX942-NEXT: v_mov_b32_e32 v0, 0722; GFX942-NEXT: ;;#ASMSTART723; GFX942-NEXT: ; def v1724; GFX942-NEXT: ;;#ASMEND725; GFX942-NEXT: global_store_dword v0, v1, s[0:1]726; GFX942-NEXT: s_waitcnt vmcnt(0)727; GFX942-NEXT: s_setpc_b64 s[30:31]728 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()729 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 2>730 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4731 ret void732}733 734define void @v_shuffle_v2bf16_v2bf16__1_2(ptr addrspace(1) inreg %ptr) {735; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__1_2:736; GFX900: ; %bb.0:737; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)738; GFX900-NEXT: ;;#ASMSTART739; GFX900-NEXT: ; def v1740; GFX900-NEXT: ;;#ASMEND741; GFX900-NEXT: v_mov_b32_e32 v0, 0742; GFX900-NEXT: v_alignbit_b32 v1, s4, v1, 16743; GFX900-NEXT: global_store_dword v0, v1, s[16:17]744; GFX900-NEXT: s_waitcnt vmcnt(0)745; GFX900-NEXT: s_setpc_b64 s[30:31]746;747; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__1_2:748; GFX90A: ; %bb.0:749; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)750; GFX90A-NEXT: ;;#ASMSTART751; GFX90A-NEXT: ; def v1752; GFX90A-NEXT: ;;#ASMEND753; GFX90A-NEXT: v_mov_b32_e32 v0, 0754; GFX90A-NEXT: v_alignbit_b32 v1, s4, v1, 16755; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]756; GFX90A-NEXT: s_waitcnt vmcnt(0)757; GFX90A-NEXT: s_setpc_b64 s[30:31]758;759; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__1_2:760; GFX942: ; %bb.0:761; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)762; GFX942-NEXT: ;;#ASMSTART763; GFX942-NEXT: ; def v1764; GFX942-NEXT: ;;#ASMEND765; GFX942-NEXT: v_mov_b32_e32 v0, 0766; GFX942-NEXT: v_alignbit_b32 v1, s0, v1, 16767; GFX942-NEXT: global_store_dword v0, v1, s[0:1]768; GFX942-NEXT: s_waitcnt vmcnt(0)769; GFX942-NEXT: s_setpc_b64 s[30:31]770 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()771 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 2>772 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4773 ret void774}775 776define void @v_shuffle_v2bf16_v2bf16__2_2(ptr addrspace(1) inreg %ptr) {777; GFX9-LABEL: v_shuffle_v2bf16_v2bf16__2_2:778; GFX9: ; %bb.0:779; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)780; GFX9-NEXT: s_setpc_b64 s[30:31]781 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()782 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 2>783 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4784 ret void785}786 787define void @v_shuffle_v2bf16_v2bf16__u_3(ptr addrspace(1) inreg %ptr) {788; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__u_3:789; GFX900: ; %bb.0:790; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)791; GFX900-NEXT: v_mov_b32_e32 v0, 0792; GFX900-NEXT: ;;#ASMSTART793; GFX900-NEXT: ; def v1794; GFX900-NEXT: ;;#ASMEND795; GFX900-NEXT: global_store_dword v0, v1, s[16:17]796; GFX900-NEXT: s_waitcnt vmcnt(0)797; GFX900-NEXT: s_setpc_b64 s[30:31]798;799; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__u_3:800; GFX90A: ; %bb.0:801; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)802; GFX90A-NEXT: v_mov_b32_e32 v0, 0803; GFX90A-NEXT: ;;#ASMSTART804; GFX90A-NEXT: ; def v1805; GFX90A-NEXT: ;;#ASMEND806; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]807; GFX90A-NEXT: s_waitcnt vmcnt(0)808; GFX90A-NEXT: s_setpc_b64 s[30:31]809;810; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__u_3:811; GFX942: ; %bb.0:812; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)813; GFX942-NEXT: v_mov_b32_e32 v0, 0814; GFX942-NEXT: ;;#ASMSTART815; GFX942-NEXT: ; def v1816; GFX942-NEXT: ;;#ASMEND817; GFX942-NEXT: global_store_dword v0, v1, s[0:1]818; GFX942-NEXT: s_waitcnt vmcnt(0)819; GFX942-NEXT: s_setpc_b64 s[30:31]820 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()821 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()822 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 poison, i32 3>823 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4824 ret void825}826 827define void @v_shuffle_v2bf16_v2bf16__0_3(ptr addrspace(1) inreg %ptr) {828; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__0_3:829; GFX900: ; %bb.0:830; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)831; GFX900-NEXT: ;;#ASMSTART832; GFX900-NEXT: ; def v1833; GFX900-NEXT: ;;#ASMEND834; GFX900-NEXT: s_mov_b32 s4, 0xffff835; GFX900-NEXT: v_mov_b32_e32 v0, 0836; GFX900-NEXT: ;;#ASMSTART837; GFX900-NEXT: ; def v2838; GFX900-NEXT: ;;#ASMEND839; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v2840; GFX900-NEXT: global_store_dword v0, v1, s[16:17]841; GFX900-NEXT: s_waitcnt vmcnt(0)842; GFX900-NEXT: s_setpc_b64 s[30:31]843;844; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__0_3:845; GFX90A: ; %bb.0:846; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)847; GFX90A-NEXT: ;;#ASMSTART848; GFX90A-NEXT: ; def v1849; GFX90A-NEXT: ;;#ASMEND850; GFX90A-NEXT: s_mov_b32 s4, 0xffff851; GFX90A-NEXT: v_mov_b32_e32 v0, 0852; GFX90A-NEXT: ;;#ASMSTART853; GFX90A-NEXT: ; def v2854; GFX90A-NEXT: ;;#ASMEND855; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v2856; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]857; GFX90A-NEXT: s_waitcnt vmcnt(0)858; GFX90A-NEXT: s_setpc_b64 s[30:31]859;860; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__0_3:861; GFX942: ; %bb.0:862; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)863; GFX942-NEXT: ;;#ASMSTART864; GFX942-NEXT: ; def v1865; GFX942-NEXT: ;;#ASMEND866; GFX942-NEXT: s_mov_b32 s2, 0xffff867; GFX942-NEXT: v_mov_b32_e32 v0, 0868; GFX942-NEXT: ;;#ASMSTART869; GFX942-NEXT: ; def v2870; GFX942-NEXT: ;;#ASMEND871; GFX942-NEXT: s_nop 0872; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v2873; GFX942-NEXT: global_store_dword v0, v1, s[0:1]874; GFX942-NEXT: s_waitcnt vmcnt(0)875; GFX942-NEXT: s_setpc_b64 s[30:31]876 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()877 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()878 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 0, i32 3>879 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4880 ret void881}882 883define void @v_shuffle_v2bf16_v2bf16__1_3(ptr addrspace(1) inreg %ptr) {884; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__1_3:885; GFX900: ; %bb.0:886; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)887; GFX900-NEXT: ;;#ASMSTART888; GFX900-NEXT: ; def v1889; GFX900-NEXT: ;;#ASMEND890; GFX900-NEXT: s_mov_b32 s4, 0x7060302891; GFX900-NEXT: v_mov_b32_e32 v0, 0892; GFX900-NEXT: ;;#ASMSTART893; GFX900-NEXT: ; def v2894; GFX900-NEXT: ;;#ASMEND895; GFX900-NEXT: v_perm_b32 v1, v2, v1, s4896; GFX900-NEXT: global_store_dword v0, v1, s[16:17]897; GFX900-NEXT: s_waitcnt vmcnt(0)898; GFX900-NEXT: s_setpc_b64 s[30:31]899;900; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__1_3:901; GFX90A: ; %bb.0:902; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)903; GFX90A-NEXT: ;;#ASMSTART904; GFX90A-NEXT: ; def v1905; GFX90A-NEXT: ;;#ASMEND906; GFX90A-NEXT: s_mov_b32 s4, 0x7060302907; GFX90A-NEXT: v_mov_b32_e32 v0, 0908; GFX90A-NEXT: ;;#ASMSTART909; GFX90A-NEXT: ; def v2910; GFX90A-NEXT: ;;#ASMEND911; GFX90A-NEXT: v_perm_b32 v1, v2, v1, s4912; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]913; GFX90A-NEXT: s_waitcnt vmcnt(0)914; GFX90A-NEXT: s_setpc_b64 s[30:31]915;916; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__1_3:917; GFX942: ; %bb.0:918; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)919; GFX942-NEXT: ;;#ASMSTART920; GFX942-NEXT: ; def v1921; GFX942-NEXT: ;;#ASMEND922; GFX942-NEXT: s_mov_b32 s2, 0x7060302923; GFX942-NEXT: v_mov_b32_e32 v0, 0924; GFX942-NEXT: ;;#ASMSTART925; GFX942-NEXT: ; def v2926; GFX942-NEXT: ;;#ASMEND927; GFX942-NEXT: s_nop 0928; GFX942-NEXT: v_perm_b32 v1, v2, v1, s2929; GFX942-NEXT: global_store_dword v0, v1, s[0:1]930; GFX942-NEXT: s_waitcnt vmcnt(0)931; GFX942-NEXT: s_setpc_b64 s[30:31]932 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()933 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()934 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 1, i32 3>935 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4936 ret void937}938 939define void @v_shuffle_v2bf16_v2bf16__2_3(ptr addrspace(1) inreg %ptr) {940; GFX900-LABEL: v_shuffle_v2bf16_v2bf16__2_3:941; GFX900: ; %bb.0:942; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)943; GFX900-NEXT: v_mov_b32_e32 v0, 0944; GFX900-NEXT: ;;#ASMSTART945; GFX900-NEXT: ; def v1946; GFX900-NEXT: ;;#ASMEND947; GFX900-NEXT: global_store_dword v0, v1, s[16:17]948; GFX900-NEXT: s_waitcnt vmcnt(0)949; GFX900-NEXT: s_setpc_b64 s[30:31]950;951; GFX90A-LABEL: v_shuffle_v2bf16_v2bf16__2_3:952; GFX90A: ; %bb.0:953; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)954; GFX90A-NEXT: v_mov_b32_e32 v0, 0955; GFX90A-NEXT: ;;#ASMSTART956; GFX90A-NEXT: ; def v1957; GFX90A-NEXT: ;;#ASMEND958; GFX90A-NEXT: global_store_dword v0, v1, s[16:17]959; GFX90A-NEXT: s_waitcnt vmcnt(0)960; GFX90A-NEXT: s_setpc_b64 s[30:31]961;962; GFX942-LABEL: v_shuffle_v2bf16_v2bf16__2_3:963; GFX942: ; %bb.0:964; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)965; GFX942-NEXT: v_mov_b32_e32 v0, 0966; GFX942-NEXT: ;;#ASMSTART967; GFX942-NEXT: ; def v1968; GFX942-NEXT: ;;#ASMEND969; GFX942-NEXT: global_store_dword v0, v1, s[0:1]970; GFX942-NEXT: s_waitcnt vmcnt(0)971; GFX942-NEXT: s_setpc_b64 s[30:31]972 %vec0 = call <2 x bfloat> asm "; def $0", "=v"()973 %vec1 = call <2 x bfloat> asm "; def $0", "=v"()974 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 2, i32 3>975 store <2 x bfloat> %shuf, ptr addrspace(1) %ptr, align 4976 ret void977}978 979define void @s_shuffle_v2bf16_v2bf16__u_u() {980; GFX9-LABEL: s_shuffle_v2bf16_v2bf16__u_u:981; GFX9: ; %bb.0:982; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)983; GFX9-NEXT: ;;#ASMSTART984; GFX9-NEXT: ; use s8985; GFX9-NEXT: ;;#ASMEND986; GFX9-NEXT: s_setpc_b64 s[30:31]987 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()988 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> poison989 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)990 ret void991}992 993define void @s_shuffle_v2bf16_v2bf16__0_u() {994; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__0_u:995; GFX900: ; %bb.0:996; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)997; GFX900-NEXT: ;;#ASMSTART998; GFX900-NEXT: ; def s8999; GFX900-NEXT: ;;#ASMEND1000; GFX900-NEXT: ;;#ASMSTART1001; GFX900-NEXT: ; use s81002; GFX900-NEXT: ;;#ASMEND1003; GFX900-NEXT: s_setpc_b64 s[30:31]1004;1005; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__0_u:1006; GFX90A: ; %bb.0:1007; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1008; GFX90A-NEXT: ;;#ASMSTART1009; GFX90A-NEXT: ; def s81010; GFX90A-NEXT: ;;#ASMEND1011; GFX90A-NEXT: ;;#ASMSTART1012; GFX90A-NEXT: ; use s81013; GFX90A-NEXT: ;;#ASMEND1014; GFX90A-NEXT: s_setpc_b64 s[30:31]1015;1016; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__0_u:1017; GFX942: ; %bb.0:1018; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1019; GFX942-NEXT: ;;#ASMSTART1020; GFX942-NEXT: ; def s81021; GFX942-NEXT: ;;#ASMEND1022; GFX942-NEXT: s_nop 01023; GFX942-NEXT: ;;#ASMSTART1024; GFX942-NEXT: ; use s81025; GFX942-NEXT: ;;#ASMEND1026; GFX942-NEXT: s_setpc_b64 s[30:31]1027 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1028 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 poison>1029 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1030 ret void1031}1032 1033define void @s_shuffle_v2bf16_v2bf16__1_u() {1034; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__1_u:1035; GFX900: ; %bb.0:1036; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1037; GFX900-NEXT: ;;#ASMSTART1038; GFX900-NEXT: ; def s41039; GFX900-NEXT: ;;#ASMEND1040; GFX900-NEXT: s_lshr_b32 s8, s4, 161041; GFX900-NEXT: ;;#ASMSTART1042; GFX900-NEXT: ; use s81043; GFX900-NEXT: ;;#ASMEND1044; GFX900-NEXT: s_setpc_b64 s[30:31]1045;1046; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__1_u:1047; GFX90A: ; %bb.0:1048; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1049; GFX90A-NEXT: ;;#ASMSTART1050; GFX90A-NEXT: ; def s41051; GFX90A-NEXT: ;;#ASMEND1052; GFX90A-NEXT: s_lshr_b32 s8, s4, 161053; GFX90A-NEXT: ;;#ASMSTART1054; GFX90A-NEXT: ; use s81055; GFX90A-NEXT: ;;#ASMEND1056; GFX90A-NEXT: s_setpc_b64 s[30:31]1057;1058; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__1_u:1059; GFX942: ; %bb.0:1060; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1061; GFX942-NEXT: ;;#ASMSTART1062; GFX942-NEXT: ; def s01063; GFX942-NEXT: ;;#ASMEND1064; GFX942-NEXT: s_lshr_b32 s8, s0, 161065; GFX942-NEXT: ;;#ASMSTART1066; GFX942-NEXT: ; use s81067; GFX942-NEXT: ;;#ASMEND1068; GFX942-NEXT: s_setpc_b64 s[30:31]1069 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1070 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 poison>1071 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1072 ret void1073}1074 1075define void @s_shuffle_v2bf16_v2bf16__2_u() {1076; GFX9-LABEL: s_shuffle_v2bf16_v2bf16__2_u:1077; GFX9: ; %bb.0:1078; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1079; GFX9-NEXT: ;;#ASMSTART1080; GFX9-NEXT: ; use s81081; GFX9-NEXT: ;;#ASMEND1082; GFX9-NEXT: s_setpc_b64 s[30:31]1083 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1084 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 poison>1085 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1086 ret void1087}1088 1089define void @s_shuffle_v2bf16_v2bf16__3_u() {1090; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__3_u:1091; GFX900: ; %bb.0:1092; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1093; GFX900-NEXT: ;;#ASMSTART1094; GFX900-NEXT: ; def s41095; GFX900-NEXT: ;;#ASMEND1096; GFX900-NEXT: s_lshr_b32 s8, s4, 161097; GFX900-NEXT: ;;#ASMSTART1098; GFX900-NEXT: ; use s81099; GFX900-NEXT: ;;#ASMEND1100; GFX900-NEXT: s_setpc_b64 s[30:31]1101;1102; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__3_u:1103; GFX90A: ; %bb.0:1104; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1105; GFX90A-NEXT: ;;#ASMSTART1106; GFX90A-NEXT: ; def s41107; GFX90A-NEXT: ;;#ASMEND1108; GFX90A-NEXT: s_lshr_b32 s8, s4, 161109; GFX90A-NEXT: ;;#ASMSTART1110; GFX90A-NEXT: ; use s81111; GFX90A-NEXT: ;;#ASMEND1112; GFX90A-NEXT: s_setpc_b64 s[30:31]1113;1114; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__3_u:1115; GFX942: ; %bb.0:1116; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1117; GFX942-NEXT: ;;#ASMSTART1118; GFX942-NEXT: ; def s01119; GFX942-NEXT: ;;#ASMEND1120; GFX942-NEXT: s_lshr_b32 s8, s0, 161121; GFX942-NEXT: ;;#ASMSTART1122; GFX942-NEXT: ; use s81123; GFX942-NEXT: ;;#ASMEND1124; GFX942-NEXT: s_setpc_b64 s[30:31]1125 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1126 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1127 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 poison>1128 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1129 ret void1130}1131 1132define void @s_shuffle_v2bf16_v2bf16__3_0() {1133; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__3_0:1134; GFX900: ; %bb.0:1135; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1136; GFX900-NEXT: ;;#ASMSTART1137; GFX900-NEXT: ; def s51138; GFX900-NEXT: ;;#ASMEND1139; GFX900-NEXT: s_lshr_b32 s5, s5, 161140; GFX900-NEXT: ;;#ASMSTART1141; GFX900-NEXT: ; def s41142; GFX900-NEXT: ;;#ASMEND1143; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41144; GFX900-NEXT: ;;#ASMSTART1145; GFX900-NEXT: ; use s81146; GFX900-NEXT: ;;#ASMEND1147; GFX900-NEXT: s_setpc_b64 s[30:31]1148;1149; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__3_0:1150; GFX90A: ; %bb.0:1151; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1152; GFX90A-NEXT: ;;#ASMSTART1153; GFX90A-NEXT: ; def s51154; GFX90A-NEXT: ;;#ASMEND1155; GFX90A-NEXT: s_lshr_b32 s5, s5, 161156; GFX90A-NEXT: ;;#ASMSTART1157; GFX90A-NEXT: ; def s41158; GFX90A-NEXT: ;;#ASMEND1159; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41160; GFX90A-NEXT: ;;#ASMSTART1161; GFX90A-NEXT: ; use s81162; GFX90A-NEXT: ;;#ASMEND1163; GFX90A-NEXT: s_setpc_b64 s[30:31]1164;1165; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__3_0:1166; GFX942: ; %bb.0:1167; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1168; GFX942-NEXT: ;;#ASMSTART1169; GFX942-NEXT: ; def s11170; GFX942-NEXT: ;;#ASMEND1171; GFX942-NEXT: s_lshr_b32 s1, s1, 161172; GFX942-NEXT: ;;#ASMSTART1173; GFX942-NEXT: ; def s01174; GFX942-NEXT: ;;#ASMEND1175; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01176; GFX942-NEXT: ;;#ASMSTART1177; GFX942-NEXT: ; use s81178; GFX942-NEXT: ;;#ASMEND1179; GFX942-NEXT: s_setpc_b64 s[30:31]1180 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1181 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1182 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 0>1183 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1184 ret void1185}1186 1187define void @s_shuffle_v2bf16_v2bf16__3_1() {1188; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__3_1:1189; GFX900: ; %bb.0:1190; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1191; GFX900-NEXT: ;;#ASMSTART1192; GFX900-NEXT: ; def s41193; GFX900-NEXT: ;;#ASMEND1194; GFX900-NEXT: ;;#ASMSTART1195; GFX900-NEXT: ; def s51196; GFX900-NEXT: ;;#ASMEND1197; GFX900-NEXT: s_lshr_b32 s4, s4, 161198; GFX900-NEXT: s_lshr_b32 s5, s5, 161199; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41200; GFX900-NEXT: ;;#ASMSTART1201; GFX900-NEXT: ; use s81202; GFX900-NEXT: ;;#ASMEND1203; GFX900-NEXT: s_setpc_b64 s[30:31]1204;1205; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__3_1:1206; GFX90A: ; %bb.0:1207; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1208; GFX90A-NEXT: ;;#ASMSTART1209; GFX90A-NEXT: ; def s41210; GFX90A-NEXT: ;;#ASMEND1211; GFX90A-NEXT: ;;#ASMSTART1212; GFX90A-NEXT: ; def s51213; GFX90A-NEXT: ;;#ASMEND1214; GFX90A-NEXT: s_lshr_b32 s4, s4, 161215; GFX90A-NEXT: s_lshr_b32 s5, s5, 161216; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41217; GFX90A-NEXT: ;;#ASMSTART1218; GFX90A-NEXT: ; use s81219; GFX90A-NEXT: ;;#ASMEND1220; GFX90A-NEXT: s_setpc_b64 s[30:31]1221;1222; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__3_1:1223; GFX942: ; %bb.0:1224; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1225; GFX942-NEXT: ;;#ASMSTART1226; GFX942-NEXT: ; def s01227; GFX942-NEXT: ;;#ASMEND1228; GFX942-NEXT: ;;#ASMSTART1229; GFX942-NEXT: ; def s11230; GFX942-NEXT: ;;#ASMEND1231; GFX942-NEXT: s_lshr_b32 s0, s0, 161232; GFX942-NEXT: s_lshr_b32 s1, s1, 161233; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01234; GFX942-NEXT: ;;#ASMSTART1235; GFX942-NEXT: ; use s81236; GFX942-NEXT: ;;#ASMEND1237; GFX942-NEXT: s_setpc_b64 s[30:31]1238 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1239 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1240 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 1>1241 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1242 ret void1243}1244 1245define void @s_shuffle_v2bf16_v2bf16__3_2() {1246; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__3_2:1247; GFX900: ; %bb.0:1248; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1249; GFX900-NEXT: ;;#ASMSTART1250; GFX900-NEXT: ; def s41251; GFX900-NEXT: ;;#ASMEND1252; GFX900-NEXT: s_lshr_b32 s5, s4, 161253; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41254; GFX900-NEXT: ;;#ASMSTART1255; GFX900-NEXT: ; use s81256; GFX900-NEXT: ;;#ASMEND1257; GFX900-NEXT: s_setpc_b64 s[30:31]1258;1259; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__3_2:1260; GFX90A: ; %bb.0:1261; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1262; GFX90A-NEXT: ;;#ASMSTART1263; GFX90A-NEXT: ; def s41264; GFX90A-NEXT: ;;#ASMEND1265; GFX90A-NEXT: s_lshr_b32 s5, s4, 161266; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41267; GFX90A-NEXT: ;;#ASMSTART1268; GFX90A-NEXT: ; use s81269; GFX90A-NEXT: ;;#ASMEND1270; GFX90A-NEXT: s_setpc_b64 s[30:31]1271;1272; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__3_2:1273; GFX942: ; %bb.0:1274; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1275; GFX942-NEXT: ;;#ASMSTART1276; GFX942-NEXT: ; def s01277; GFX942-NEXT: ;;#ASMEND1278; GFX942-NEXT: s_lshr_b32 s1, s0, 161279; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01280; GFX942-NEXT: ;;#ASMSTART1281; GFX942-NEXT: ; use s81282; GFX942-NEXT: ;;#ASMEND1283; GFX942-NEXT: s_setpc_b64 s[30:31]1284 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1285 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1286 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 2>1287 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1288 ret void1289}1290 1291define void @s_shuffle_v2bf16_v2bf16__3_3() {1292; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__3_3:1293; GFX900: ; %bb.0:1294; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1295; GFX900-NEXT: ;;#ASMSTART1296; GFX900-NEXT: ; def s41297; GFX900-NEXT: ;;#ASMEND1298; GFX900-NEXT: s_lshr_b32 s4, s4, 161299; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s41300; GFX900-NEXT: ;;#ASMSTART1301; GFX900-NEXT: ; use s81302; GFX900-NEXT: ;;#ASMEND1303; GFX900-NEXT: s_setpc_b64 s[30:31]1304;1305; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__3_3:1306; GFX90A: ; %bb.0:1307; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1308; GFX90A-NEXT: ;;#ASMSTART1309; GFX90A-NEXT: ; def s41310; GFX90A-NEXT: ;;#ASMEND1311; GFX90A-NEXT: s_lshr_b32 s4, s4, 161312; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s41313; GFX90A-NEXT: ;;#ASMSTART1314; GFX90A-NEXT: ; use s81315; GFX90A-NEXT: ;;#ASMEND1316; GFX90A-NEXT: s_setpc_b64 s[30:31]1317;1318; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__3_3:1319; GFX942: ; %bb.0:1320; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1321; GFX942-NEXT: ;;#ASMSTART1322; GFX942-NEXT: ; def s01323; GFX942-NEXT: ;;#ASMEND1324; GFX942-NEXT: s_lshr_b32 s0, s0, 161325; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s01326; GFX942-NEXT: ;;#ASMSTART1327; GFX942-NEXT: ; use s81328; GFX942-NEXT: ;;#ASMEND1329; GFX942-NEXT: s_setpc_b64 s[30:31]1330 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1331 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1332 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 3, i32 3>1333 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1334 ret void1335}1336 1337define void @s_shuffle_v2bf16_v2bf16__u_0() {1338; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__u_0:1339; GFX900: ; %bb.0:1340; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1341; GFX900-NEXT: ;;#ASMSTART1342; GFX900-NEXT: ; def s41343; GFX900-NEXT: ;;#ASMEND1344; GFX900-NEXT: s_lshl_b32 s8, s4, 161345; GFX900-NEXT: ;;#ASMSTART1346; GFX900-NEXT: ; use s81347; GFX900-NEXT: ;;#ASMEND1348; GFX900-NEXT: s_setpc_b64 s[30:31]1349;1350; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__u_0:1351; GFX90A: ; %bb.0:1352; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1353; GFX90A-NEXT: ;;#ASMSTART1354; GFX90A-NEXT: ; def s41355; GFX90A-NEXT: ;;#ASMEND1356; GFX90A-NEXT: s_lshl_b32 s8, s4, 161357; GFX90A-NEXT: ;;#ASMSTART1358; GFX90A-NEXT: ; use s81359; GFX90A-NEXT: ;;#ASMEND1360; GFX90A-NEXT: s_setpc_b64 s[30:31]1361;1362; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__u_0:1363; GFX942: ; %bb.0:1364; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1365; GFX942-NEXT: ;;#ASMSTART1366; GFX942-NEXT: ; def s01367; GFX942-NEXT: ;;#ASMEND1368; GFX942-NEXT: s_lshl_b32 s8, s0, 161369; GFX942-NEXT: ;;#ASMSTART1370; GFX942-NEXT: ; use s81371; GFX942-NEXT: ;;#ASMEND1372; GFX942-NEXT: s_setpc_b64 s[30:31]1373 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1374 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 poison, i32 0>1375 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1376 ret void1377}1378 1379define void @s_shuffle_v2bf16_v2bf16__0_0() {1380; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__0_0:1381; GFX900: ; %bb.0:1382; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1383; GFX900-NEXT: ;;#ASMSTART1384; GFX900-NEXT: ; def s41385; GFX900-NEXT: ;;#ASMEND1386; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s41387; GFX900-NEXT: ;;#ASMSTART1388; GFX900-NEXT: ; use s81389; GFX900-NEXT: ;;#ASMEND1390; GFX900-NEXT: s_setpc_b64 s[30:31]1391;1392; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__0_0:1393; GFX90A: ; %bb.0:1394; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1395; GFX90A-NEXT: ;;#ASMSTART1396; GFX90A-NEXT: ; def s41397; GFX90A-NEXT: ;;#ASMEND1398; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s41399; GFX90A-NEXT: ;;#ASMSTART1400; GFX90A-NEXT: ; use s81401; GFX90A-NEXT: ;;#ASMEND1402; GFX90A-NEXT: s_setpc_b64 s[30:31]1403;1404; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__0_0:1405; GFX942: ; %bb.0:1406; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1407; GFX942-NEXT: ;;#ASMSTART1408; GFX942-NEXT: ; def s01409; GFX942-NEXT: ;;#ASMEND1410; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s01411; GFX942-NEXT: ;;#ASMSTART1412; GFX942-NEXT: ; use s81413; GFX942-NEXT: ;;#ASMEND1414; GFX942-NEXT: s_setpc_b64 s[30:31]1415 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1416 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> zeroinitializer1417 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1418 ret void1419}1420 1421define void @s_shuffle_v2bf16_v2bf16__1_0() {1422; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__1_0:1423; GFX900: ; %bb.0:1424; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1425; GFX900-NEXT: ;;#ASMSTART1426; GFX900-NEXT: ; def s41427; GFX900-NEXT: ;;#ASMEND1428; GFX900-NEXT: s_lshr_b32 s5, s4, 161429; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s41430; GFX900-NEXT: ;;#ASMSTART1431; GFX900-NEXT: ; use s81432; GFX900-NEXT: ;;#ASMEND1433; GFX900-NEXT: s_setpc_b64 s[30:31]1434;1435; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__1_0:1436; GFX90A: ; %bb.0:1437; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1438; GFX90A-NEXT: ;;#ASMSTART1439; GFX90A-NEXT: ; def s41440; GFX90A-NEXT: ;;#ASMEND1441; GFX90A-NEXT: s_lshr_b32 s5, s4, 161442; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s41443; GFX90A-NEXT: ;;#ASMSTART1444; GFX90A-NEXT: ; use s81445; GFX90A-NEXT: ;;#ASMEND1446; GFX90A-NEXT: s_setpc_b64 s[30:31]1447;1448; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__1_0:1449; GFX942: ; %bb.0:1450; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1451; GFX942-NEXT: ;;#ASMSTART1452; GFX942-NEXT: ; def s01453; GFX942-NEXT: ;;#ASMEND1454; GFX942-NEXT: s_lshr_b32 s1, s0, 161455; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s01456; GFX942-NEXT: ;;#ASMSTART1457; GFX942-NEXT: ; use s81458; GFX942-NEXT: ;;#ASMEND1459; GFX942-NEXT: s_setpc_b64 s[30:31]1460 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1461 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 0>1462 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1463 ret void1464}1465 1466define void @s_shuffle_v2bf16_v2bf16__2_0() {1467; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__2_0:1468; GFX900: ; %bb.0:1469; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1470; GFX900-NEXT: ;;#ASMSTART1471; GFX900-NEXT: ; def s41472; GFX900-NEXT: ;;#ASMEND1473; GFX900-NEXT: s_lshl_b32 s8, s4, 161474; GFX900-NEXT: ;;#ASMSTART1475; GFX900-NEXT: ; use s81476; GFX900-NEXT: ;;#ASMEND1477; GFX900-NEXT: s_setpc_b64 s[30:31]1478;1479; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__2_0:1480; GFX90A: ; %bb.0:1481; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1482; GFX90A-NEXT: ;;#ASMSTART1483; GFX90A-NEXT: ; def s41484; GFX90A-NEXT: ;;#ASMEND1485; GFX90A-NEXT: s_lshl_b32 s8, s4, 161486; GFX90A-NEXT: ;;#ASMSTART1487; GFX90A-NEXT: ; use s81488; GFX90A-NEXT: ;;#ASMEND1489; GFX90A-NEXT: s_setpc_b64 s[30:31]1490;1491; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__2_0:1492; GFX942: ; %bb.0:1493; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1494; GFX942-NEXT: ;;#ASMSTART1495; GFX942-NEXT: ; def s01496; GFX942-NEXT: ;;#ASMEND1497; GFX942-NEXT: s_lshl_b32 s8, s0, 161498; GFX942-NEXT: ;;#ASMSTART1499; GFX942-NEXT: ; use s81500; GFX942-NEXT: ;;#ASMEND1501; GFX942-NEXT: s_setpc_b64 s[30:31]1502 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1503 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 0>1504 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1505 ret void1506}1507 1508define void @s_shuffle_v2bf16_v2bf16__u_1() {1509; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__u_1:1510; GFX900: ; %bb.0:1511; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1512; GFX900-NEXT: ;;#ASMSTART1513; GFX900-NEXT: ; def s81514; GFX900-NEXT: ;;#ASMEND1515; GFX900-NEXT: ;;#ASMSTART1516; GFX900-NEXT: ; use s81517; GFX900-NEXT: ;;#ASMEND1518; GFX900-NEXT: s_setpc_b64 s[30:31]1519;1520; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__u_1:1521; GFX90A: ; %bb.0:1522; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1523; GFX90A-NEXT: ;;#ASMSTART1524; GFX90A-NEXT: ; def s81525; GFX90A-NEXT: ;;#ASMEND1526; GFX90A-NEXT: ;;#ASMSTART1527; GFX90A-NEXT: ; use s81528; GFX90A-NEXT: ;;#ASMEND1529; GFX90A-NEXT: s_setpc_b64 s[30:31]1530;1531; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__u_1:1532; GFX942: ; %bb.0:1533; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1534; GFX942-NEXT: ;;#ASMSTART1535; GFX942-NEXT: ; def s81536; GFX942-NEXT: ;;#ASMEND1537; GFX942-NEXT: s_nop 01538; GFX942-NEXT: ;;#ASMSTART1539; GFX942-NEXT: ; use s81540; GFX942-NEXT: ;;#ASMEND1541; GFX942-NEXT: s_setpc_b64 s[30:31]1542 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1543 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 poison, i32 1>1544 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1545 ret void1546}1547 1548define void @s_shuffle_v2bf16_v2bf16__0_1() {1549; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__0_1:1550; GFX900: ; %bb.0:1551; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1552; GFX900-NEXT: ;;#ASMSTART1553; GFX900-NEXT: ; def s81554; GFX900-NEXT: ;;#ASMEND1555; GFX900-NEXT: ;;#ASMSTART1556; GFX900-NEXT: ; use s81557; GFX900-NEXT: ;;#ASMEND1558; GFX900-NEXT: s_setpc_b64 s[30:31]1559;1560; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__0_1:1561; GFX90A: ; %bb.0:1562; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1563; GFX90A-NEXT: ;;#ASMSTART1564; GFX90A-NEXT: ; def s81565; GFX90A-NEXT: ;;#ASMEND1566; GFX90A-NEXT: ;;#ASMSTART1567; GFX90A-NEXT: ; use s81568; GFX90A-NEXT: ;;#ASMEND1569; GFX90A-NEXT: s_setpc_b64 s[30:31]1570;1571; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__0_1:1572; GFX942: ; %bb.0:1573; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1574; GFX942-NEXT: ;;#ASMSTART1575; GFX942-NEXT: ; def s81576; GFX942-NEXT: ;;#ASMEND1577; GFX942-NEXT: s_nop 01578; GFX942-NEXT: ;;#ASMSTART1579; GFX942-NEXT: ; use s81580; GFX942-NEXT: ;;#ASMEND1581; GFX942-NEXT: s_setpc_b64 s[30:31]1582 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1583 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 1>1584 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1585 ret void1586}1587 1588define void @s_shuffle_v2bf16_v2bf16__1_1() {1589; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__1_1:1590; GFX900: ; %bb.0:1591; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1592; GFX900-NEXT: ;;#ASMSTART1593; GFX900-NEXT: ; def s41594; GFX900-NEXT: ;;#ASMEND1595; GFX900-NEXT: s_lshr_b32 s4, s4, 161596; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s41597; GFX900-NEXT: ;;#ASMSTART1598; GFX900-NEXT: ; use s81599; GFX900-NEXT: ;;#ASMEND1600; GFX900-NEXT: s_setpc_b64 s[30:31]1601;1602; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__1_1:1603; GFX90A: ; %bb.0:1604; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1605; GFX90A-NEXT: ;;#ASMSTART1606; GFX90A-NEXT: ; def s41607; GFX90A-NEXT: ;;#ASMEND1608; GFX90A-NEXT: s_lshr_b32 s4, s4, 161609; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s41610; GFX90A-NEXT: ;;#ASMSTART1611; GFX90A-NEXT: ; use s81612; GFX90A-NEXT: ;;#ASMEND1613; GFX90A-NEXT: s_setpc_b64 s[30:31]1614;1615; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__1_1:1616; GFX942: ; %bb.0:1617; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1618; GFX942-NEXT: ;;#ASMSTART1619; GFX942-NEXT: ; def s01620; GFX942-NEXT: ;;#ASMEND1621; GFX942-NEXT: s_lshr_b32 s0, s0, 161622; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s01623; GFX942-NEXT: ;;#ASMSTART1624; GFX942-NEXT: ; use s81625; GFX942-NEXT: ;;#ASMEND1626; GFX942-NEXT: s_setpc_b64 s[30:31]1627 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1628 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 1>1629 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1630 ret void1631}1632 1633define void @s_shuffle_v2bf16_v2bf16__2_1() {1634; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__2_1:1635; GFX900: ; %bb.0:1636; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1637; GFX900-NEXT: ;;#ASMSTART1638; GFX900-NEXT: ; def s81639; GFX900-NEXT: ;;#ASMEND1640; GFX900-NEXT: ;;#ASMSTART1641; GFX900-NEXT: ; use s81642; GFX900-NEXT: ;;#ASMEND1643; GFX900-NEXT: s_setpc_b64 s[30:31]1644;1645; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__2_1:1646; GFX90A: ; %bb.0:1647; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1648; GFX90A-NEXT: ;;#ASMSTART1649; GFX90A-NEXT: ; def s81650; GFX90A-NEXT: ;;#ASMEND1651; GFX90A-NEXT: ;;#ASMSTART1652; GFX90A-NEXT: ; use s81653; GFX90A-NEXT: ;;#ASMEND1654; GFX90A-NEXT: s_setpc_b64 s[30:31]1655;1656; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__2_1:1657; GFX942: ; %bb.0:1658; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1659; GFX942-NEXT: ;;#ASMSTART1660; GFX942-NEXT: ; def s81661; GFX942-NEXT: ;;#ASMEND1662; GFX942-NEXT: s_nop 01663; GFX942-NEXT: ;;#ASMSTART1664; GFX942-NEXT: ; use s81665; GFX942-NEXT: ;;#ASMEND1666; GFX942-NEXT: s_setpc_b64 s[30:31]1667 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1668 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 1>1669 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1670 ret void1671}1672 1673define void @s_shuffle_v2bf16_v2bf16__u_2() {1674; GFX9-LABEL: s_shuffle_v2bf16_v2bf16__u_2:1675; GFX9: ; %bb.0:1676; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1677; GFX9-NEXT: ;;#ASMSTART1678; GFX9-NEXT: ; use s81679; GFX9-NEXT: ;;#ASMEND1680; GFX9-NEXT: s_setpc_b64 s[30:31]1681 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1682 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 poison, i32 2>1683 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1684 ret void1685}1686 1687define void @s_shuffle_v2bf16_v2bf16__0_2() {1688; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__0_2:1689; GFX900: ; %bb.0:1690; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1691; GFX900-NEXT: ;;#ASMSTART1692; GFX900-NEXT: ; def s81693; GFX900-NEXT: ;;#ASMEND1694; GFX900-NEXT: ;;#ASMSTART1695; GFX900-NEXT: ; use s81696; GFX900-NEXT: ;;#ASMEND1697; GFX900-NEXT: s_setpc_b64 s[30:31]1698;1699; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__0_2:1700; GFX90A: ; %bb.0:1701; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1702; GFX90A-NEXT: ;;#ASMSTART1703; GFX90A-NEXT: ; def s81704; GFX90A-NEXT: ;;#ASMEND1705; GFX90A-NEXT: ;;#ASMSTART1706; GFX90A-NEXT: ; use s81707; GFX90A-NEXT: ;;#ASMEND1708; GFX90A-NEXT: s_setpc_b64 s[30:31]1709;1710; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__0_2:1711; GFX942: ; %bb.0:1712; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1713; GFX942-NEXT: ;;#ASMSTART1714; GFX942-NEXT: ; def s81715; GFX942-NEXT: ;;#ASMEND1716; GFX942-NEXT: s_nop 01717; GFX942-NEXT: ;;#ASMSTART1718; GFX942-NEXT: ; use s81719; GFX942-NEXT: ;;#ASMEND1720; GFX942-NEXT: s_setpc_b64 s[30:31]1721 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1722 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 0, i32 2>1723 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1724 ret void1725}1726 1727define void @s_shuffle_v2bf16_v2bf16__1_2() {1728; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__1_2:1729; GFX900: ; %bb.0:1730; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1731; GFX900-NEXT: ;;#ASMSTART1732; GFX900-NEXT: ; def s41733; GFX900-NEXT: ;;#ASMEND1734; GFX900-NEXT: s_lshr_b32 s8, s4, 161735; GFX900-NEXT: ;;#ASMSTART1736; GFX900-NEXT: ; use s81737; GFX900-NEXT: ;;#ASMEND1738; GFX900-NEXT: s_setpc_b64 s[30:31]1739;1740; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__1_2:1741; GFX90A: ; %bb.0:1742; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1743; GFX90A-NEXT: ;;#ASMSTART1744; GFX90A-NEXT: ; def s41745; GFX90A-NEXT: ;;#ASMEND1746; GFX90A-NEXT: s_lshr_b32 s8, s4, 161747; GFX90A-NEXT: ;;#ASMSTART1748; GFX90A-NEXT: ; use s81749; GFX90A-NEXT: ;;#ASMEND1750; GFX90A-NEXT: s_setpc_b64 s[30:31]1751;1752; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__1_2:1753; GFX942: ; %bb.0:1754; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1755; GFX942-NEXT: ;;#ASMSTART1756; GFX942-NEXT: ; def s01757; GFX942-NEXT: ;;#ASMEND1758; GFX942-NEXT: s_lshr_b32 s8, s0, 161759; GFX942-NEXT: ;;#ASMSTART1760; GFX942-NEXT: ; use s81761; GFX942-NEXT: ;;#ASMEND1762; GFX942-NEXT: s_setpc_b64 s[30:31]1763 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1764 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 1, i32 2>1765 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1766 ret void1767}1768 1769define void @s_shuffle_v2bf16_v2bf16__2_2() {1770; GFX9-LABEL: s_shuffle_v2bf16_v2bf16__2_2:1771; GFX9: ; %bb.0:1772; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1773; GFX9-NEXT: ;;#ASMSTART1774; GFX9-NEXT: ; use s81775; GFX9-NEXT: ;;#ASMEND1776; GFX9-NEXT: s_setpc_b64 s[30:31]1777 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1778 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> poison, <2 x i32> <i32 2, i32 2>1779 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1780 ret void1781}1782 1783define void @s_shuffle_v2bf16_v2bf16__u_3() {1784; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__u_3:1785; GFX900: ; %bb.0:1786; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1787; GFX900-NEXT: ;;#ASMSTART1788; GFX900-NEXT: ; def s81789; GFX900-NEXT: ;;#ASMEND1790; GFX900-NEXT: ;;#ASMSTART1791; GFX900-NEXT: ; use s81792; GFX900-NEXT: ;;#ASMEND1793; GFX900-NEXT: s_setpc_b64 s[30:31]1794;1795; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__u_3:1796; GFX90A: ; %bb.0:1797; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1798; GFX90A-NEXT: ;;#ASMSTART1799; GFX90A-NEXT: ; def s81800; GFX90A-NEXT: ;;#ASMEND1801; GFX90A-NEXT: ;;#ASMSTART1802; GFX90A-NEXT: ; use s81803; GFX90A-NEXT: ;;#ASMEND1804; GFX90A-NEXT: s_setpc_b64 s[30:31]1805;1806; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__u_3:1807; GFX942: ; %bb.0:1808; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1809; GFX942-NEXT: ;;#ASMSTART1810; GFX942-NEXT: ; def s81811; GFX942-NEXT: ;;#ASMEND1812; GFX942-NEXT: s_nop 01813; GFX942-NEXT: ;;#ASMSTART1814; GFX942-NEXT: ; use s81815; GFX942-NEXT: ;;#ASMEND1816; GFX942-NEXT: s_setpc_b64 s[30:31]1817 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1818 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1819 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 poison, i32 3>1820 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1821 ret void1822}1823 1824define void @s_shuffle_v2bf16_v2bf16__0_3() {1825; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__0_3:1826; GFX900: ; %bb.0:1827; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1828; GFX900-NEXT: ;;#ASMSTART1829; GFX900-NEXT: ; def s51830; GFX900-NEXT: ;;#ASMEND1831; GFX900-NEXT: s_lshr_b32 s5, s5, 161832; GFX900-NEXT: ;;#ASMSTART1833; GFX900-NEXT: ; def s41834; GFX900-NEXT: ;;#ASMEND1835; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s51836; GFX900-NEXT: ;;#ASMSTART1837; GFX900-NEXT: ; use s81838; GFX900-NEXT: ;;#ASMEND1839; GFX900-NEXT: s_setpc_b64 s[30:31]1840;1841; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__0_3:1842; GFX90A: ; %bb.0:1843; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1844; GFX90A-NEXT: ;;#ASMSTART1845; GFX90A-NEXT: ; def s51846; GFX90A-NEXT: ;;#ASMEND1847; GFX90A-NEXT: s_lshr_b32 s5, s5, 161848; GFX90A-NEXT: ;;#ASMSTART1849; GFX90A-NEXT: ; def s41850; GFX90A-NEXT: ;;#ASMEND1851; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s51852; GFX90A-NEXT: ;;#ASMSTART1853; GFX90A-NEXT: ; use s81854; GFX90A-NEXT: ;;#ASMEND1855; GFX90A-NEXT: s_setpc_b64 s[30:31]1856;1857; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__0_3:1858; GFX942: ; %bb.0:1859; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1860; GFX942-NEXT: ;;#ASMSTART1861; GFX942-NEXT: ; def s11862; GFX942-NEXT: ;;#ASMEND1863; GFX942-NEXT: s_lshr_b32 s1, s1, 161864; GFX942-NEXT: ;;#ASMSTART1865; GFX942-NEXT: ; def s01866; GFX942-NEXT: ;;#ASMEND1867; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s11868; GFX942-NEXT: ;;#ASMSTART1869; GFX942-NEXT: ; use s81870; GFX942-NEXT: ;;#ASMEND1871; GFX942-NEXT: s_setpc_b64 s[30:31]1872 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1873 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1874 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 0, i32 3>1875 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1876 ret void1877}1878 1879define void @s_shuffle_v2bf16_v2bf16__1_3() {1880; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__1_3:1881; GFX900: ; %bb.0:1882; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1883; GFX900-NEXT: ;;#ASMSTART1884; GFX900-NEXT: ; def s41885; GFX900-NEXT: ;;#ASMEND1886; GFX900-NEXT: ;;#ASMSTART1887; GFX900-NEXT: ; def s51888; GFX900-NEXT: ;;#ASMEND1889; GFX900-NEXT: s_lshr_b32 s5, s5, 161890; GFX900-NEXT: s_lshr_b32 s4, s4, 161891; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s51892; GFX900-NEXT: ;;#ASMSTART1893; GFX900-NEXT: ; use s81894; GFX900-NEXT: ;;#ASMEND1895; GFX900-NEXT: s_setpc_b64 s[30:31]1896;1897; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__1_3:1898; GFX90A: ; %bb.0:1899; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1900; GFX90A-NEXT: ;;#ASMSTART1901; GFX90A-NEXT: ; def s41902; GFX90A-NEXT: ;;#ASMEND1903; GFX90A-NEXT: ;;#ASMSTART1904; GFX90A-NEXT: ; def s51905; GFX90A-NEXT: ;;#ASMEND1906; GFX90A-NEXT: s_lshr_b32 s5, s5, 161907; GFX90A-NEXT: s_lshr_b32 s4, s4, 161908; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s51909; GFX90A-NEXT: ;;#ASMSTART1910; GFX90A-NEXT: ; use s81911; GFX90A-NEXT: ;;#ASMEND1912; GFX90A-NEXT: s_setpc_b64 s[30:31]1913;1914; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__1_3:1915; GFX942: ; %bb.0:1916; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1917; GFX942-NEXT: ;;#ASMSTART1918; GFX942-NEXT: ; def s01919; GFX942-NEXT: ;;#ASMEND1920; GFX942-NEXT: ;;#ASMSTART1921; GFX942-NEXT: ; def s11922; GFX942-NEXT: ;;#ASMEND1923; GFX942-NEXT: s_lshr_b32 s1, s1, 161924; GFX942-NEXT: s_lshr_b32 s0, s0, 161925; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s11926; GFX942-NEXT: ;;#ASMSTART1927; GFX942-NEXT: ; use s81928; GFX942-NEXT: ;;#ASMEND1929; GFX942-NEXT: s_setpc_b64 s[30:31]1930 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1931 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1932 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 1, i32 3>1933 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1934 ret void1935}1936 1937define void @s_shuffle_v2bf16_v2bf16__2_3() {1938; GFX900-LABEL: s_shuffle_v2bf16_v2bf16__2_3:1939; GFX900: ; %bb.0:1940; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1941; GFX900-NEXT: ;;#ASMSTART1942; GFX900-NEXT: ; def s81943; GFX900-NEXT: ;;#ASMEND1944; GFX900-NEXT: ;;#ASMSTART1945; GFX900-NEXT: ; use s81946; GFX900-NEXT: ;;#ASMEND1947; GFX900-NEXT: s_setpc_b64 s[30:31]1948;1949; GFX90A-LABEL: s_shuffle_v2bf16_v2bf16__2_3:1950; GFX90A: ; %bb.0:1951; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1952; GFX90A-NEXT: ;;#ASMSTART1953; GFX90A-NEXT: ; def s81954; GFX90A-NEXT: ;;#ASMEND1955; GFX90A-NEXT: ;;#ASMSTART1956; GFX90A-NEXT: ; use s81957; GFX90A-NEXT: ;;#ASMEND1958; GFX90A-NEXT: s_setpc_b64 s[30:31]1959;1960; GFX942-LABEL: s_shuffle_v2bf16_v2bf16__2_3:1961; GFX942: ; %bb.0:1962; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1963; GFX942-NEXT: ;;#ASMSTART1964; GFX942-NEXT: ; def s81965; GFX942-NEXT: ;;#ASMEND1966; GFX942-NEXT: s_nop 01967; GFX942-NEXT: ;;#ASMSTART1968; GFX942-NEXT: ; use s81969; GFX942-NEXT: ;;#ASMEND1970; GFX942-NEXT: s_setpc_b64 s[30:31]1971 %vec0 = call <2 x bfloat> asm "; def $0", "=s"()1972 %vec1 = call <2 x bfloat> asm "; def $0", "=s"()1973 %shuf = shufflevector <2 x bfloat> %vec0, <2 x bfloat> %vec1, <2 x i32> <i32 2, i32 3>1974 call void asm sideeffect "; use $0", "{s8}"(<2 x bfloat> %shuf)1975 ret void1976}1977;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:1978; GFX90APLUS: {{.*}}1979