9007 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_v3bf16_v3bf16__u_u_u(ptr addrspace(1) inreg %ptr) {8; GFX9-LABEL: v_shuffle_v3bf16_v3bf16__u_u_u:9; GFX9: ; %bb.0:10; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)11; GFX9-NEXT: s_setpc_b64 s[30:31]12 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()13 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>14 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> poison15 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 816 ret void17}18 19define void @v_shuffle_v3bf16_v3bf16__0_u_u(ptr addrspace(1) inreg %ptr) {20; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_u_u:21; GFX900: ; %bb.0:22; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)23; GFX900-NEXT: v_mov_b32_e32 v2, 024; GFX900-NEXT: ;;#ASMSTART25; GFX900-NEXT: ; def v[0:1]26; GFX900-NEXT: ;;#ASMEND27; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:428; GFX900-NEXT: global_store_dword v2, v0, s[16:17]29; GFX900-NEXT: s_waitcnt vmcnt(0)30; GFX900-NEXT: s_setpc_b64 s[30:31]31;32; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_u_u:33; GFX90A: ; %bb.0:34; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)35; GFX90A-NEXT: v_mov_b32_e32 v2, 036; GFX90A-NEXT: ;;#ASMSTART37; GFX90A-NEXT: ; def v[0:1]38; GFX90A-NEXT: ;;#ASMEND39; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:440; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]41; GFX90A-NEXT: s_waitcnt vmcnt(0)42; GFX90A-NEXT: s_setpc_b64 s[30:31]43;44; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_u_u:45; GFX942: ; %bb.0:46; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)47; GFX942-NEXT: v_mov_b32_e32 v2, 048; GFX942-NEXT: ;;#ASMSTART49; GFX942-NEXT: ; def v[0:1]50; GFX942-NEXT: ;;#ASMEND51; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:452; GFX942-NEXT: global_store_dword v2, v0, s[0:1]53; GFX942-NEXT: s_waitcnt vmcnt(0)54; GFX942-NEXT: s_setpc_b64 s[30:31]55 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()56 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>57 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 poison, i32 poison>58 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 859 ret void60}61 62define void @v_shuffle_v3bf16_v3bf16__1_u_u(ptr addrspace(1) inreg %ptr) {63; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_u_u:64; GFX900: ; %bb.0:65; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)66; GFX900-NEXT: ;;#ASMSTART67; GFX900-NEXT: ; def v[0:1]68; GFX900-NEXT: ;;#ASMEND69; GFX900-NEXT: v_mov_b32_e32 v2, 070; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 1671; GFX900-NEXT: global_store_dword v2, v0, s[16:17]72; GFX900-NEXT: s_waitcnt vmcnt(0)73; GFX900-NEXT: s_setpc_b64 s[30:31]74;75; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_u_u:76; GFX90A: ; %bb.0:77; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)78; GFX90A-NEXT: ;;#ASMSTART79; GFX90A-NEXT: ; def v[0:1]80; GFX90A-NEXT: ;;#ASMEND81; GFX90A-NEXT: v_mov_b32_e32 v2, 082; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 1683; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]84; GFX90A-NEXT: s_waitcnt vmcnt(0)85; GFX90A-NEXT: s_setpc_b64 s[30:31]86;87; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_u_u:88; GFX942: ; %bb.0:89; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)90; GFX942-NEXT: ;;#ASMSTART91; GFX942-NEXT: ; def v[0:1]92; GFX942-NEXT: ;;#ASMEND93; GFX942-NEXT: v_mov_b32_e32 v2, 094; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 1695; GFX942-NEXT: global_store_dword v2, v0, s[0:1]96; GFX942-NEXT: s_waitcnt vmcnt(0)97; GFX942-NEXT: s_setpc_b64 s[30:31]98 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()99 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>100 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 poison, i32 poison>101 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8102 ret void103}104 105define void @v_shuffle_v3bf16_v3bf16__2_u_u(ptr addrspace(1) inreg %ptr) {106; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_u_u:107; GFX900: ; %bb.0:108; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)109; GFX900-NEXT: v_mov_b32_e32 v2, 0110; GFX900-NEXT: ;;#ASMSTART111; GFX900-NEXT: ; def v[0:1]112; GFX900-NEXT: ;;#ASMEND113; GFX900-NEXT: global_store_dword v2, v1, s[16:17]114; GFX900-NEXT: s_waitcnt vmcnt(0)115; GFX900-NEXT: s_setpc_b64 s[30:31]116;117; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__2_u_u:118; GFX90A: ; %bb.0:119; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)120; GFX90A-NEXT: v_mov_b32_e32 v2, 0121; GFX90A-NEXT: ;;#ASMSTART122; GFX90A-NEXT: ; def v[0:1]123; GFX90A-NEXT: ;;#ASMEND124; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]125; GFX90A-NEXT: s_waitcnt vmcnt(0)126; GFX90A-NEXT: s_setpc_b64 s[30:31]127;128; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_u_u:129; GFX942: ; %bb.0:130; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)131; GFX942-NEXT: v_mov_b32_e32 v2, 0132; GFX942-NEXT: ;;#ASMSTART133; GFX942-NEXT: ; def v[0:1]134; GFX942-NEXT: ;;#ASMEND135; GFX942-NEXT: global_store_dword v2, v1, s[0:1]136; GFX942-NEXT: s_waitcnt vmcnt(0)137; GFX942-NEXT: s_setpc_b64 s[30:31]138 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()139 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>140 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 poison, i32 poison>141 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8142 ret void143}144 145define void @v_shuffle_v3bf16_v3bf16__3_u_u(ptr addrspace(1) inreg %ptr) {146; GFX9-LABEL: v_shuffle_v3bf16_v3bf16__3_u_u:147; GFX9: ; %bb.0:148; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)149; GFX9-NEXT: s_setpc_b64 s[30:31]150 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()151 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>152 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 poison, i32 poison>153 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8154 ret void155}156 157define void @v_shuffle_v3bf16_v3bf16__4_u_u(ptr addrspace(1) inreg %ptr) {158; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_u_u:159; GFX900: ; %bb.0:160; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)161; GFX900-NEXT: ;;#ASMSTART162; GFX900-NEXT: ; def v[0:1]163; GFX900-NEXT: ;;#ASMEND164; GFX900-NEXT: v_mov_b32_e32 v2, 0165; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 16166; GFX900-NEXT: global_store_dword v2, v0, s[16:17]167; GFX900-NEXT: s_waitcnt vmcnt(0)168; GFX900-NEXT: s_setpc_b64 s[30:31]169;170; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_u_u:171; GFX90A: ; %bb.0:172; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)173; GFX90A-NEXT: ;;#ASMSTART174; GFX90A-NEXT: ; def v[0:1]175; GFX90A-NEXT: ;;#ASMEND176; GFX90A-NEXT: v_mov_b32_e32 v2, 0177; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 16178; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]179; GFX90A-NEXT: s_waitcnt vmcnt(0)180; GFX90A-NEXT: s_setpc_b64 s[30:31]181;182; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_u_u:183; GFX942: ; %bb.0:184; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)185; GFX942-NEXT: ;;#ASMSTART186; GFX942-NEXT: ; def v[0:1]187; GFX942-NEXT: ;;#ASMEND188; GFX942-NEXT: v_mov_b32_e32 v2, 0189; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 16190; GFX942-NEXT: global_store_dword v2, v0, s[0:1]191; GFX942-NEXT: s_waitcnt vmcnt(0)192; GFX942-NEXT: s_setpc_b64 s[30:31]193 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()194 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()195 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>196 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>197 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 poison, i32 poison>198 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8199 ret void200}201 202define void @v_shuffle_v3bf16_v3bf16__5_u_u(ptr addrspace(1) inreg %ptr) {203; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_u:204; GFX900: ; %bb.0:205; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)206; GFX900-NEXT: v_mov_b32_e32 v2, 0207; GFX900-NEXT: ;;#ASMSTART208; GFX900-NEXT: ; def v[0:1]209; GFX900-NEXT: ;;#ASMEND210; GFX900-NEXT: global_store_dword v2, v1, s[16:17]211; GFX900-NEXT: s_waitcnt vmcnt(0)212; GFX900-NEXT: s_setpc_b64 s[30:31]213;214; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_u:215; GFX90A: ; %bb.0:216; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)217; GFX90A-NEXT: v_mov_b32_e32 v2, 0218; GFX90A-NEXT: ;;#ASMSTART219; GFX90A-NEXT: ; def v[0:1]220; GFX90A-NEXT: ;;#ASMEND221; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]222; GFX90A-NEXT: s_waitcnt vmcnt(0)223; GFX90A-NEXT: s_setpc_b64 s[30:31]224;225; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_u:226; GFX942: ; %bb.0:227; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)228; GFX942-NEXT: v_mov_b32_e32 v2, 0229; GFX942-NEXT: ;;#ASMSTART230; GFX942-NEXT: ; def v[0:1]231; GFX942-NEXT: ;;#ASMEND232; GFX942-NEXT: global_store_dword v2, v1, s[0:1]233; GFX942-NEXT: s_waitcnt vmcnt(0)234; GFX942-NEXT: s_setpc_b64 s[30:31]235 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()236 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()237 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>238 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>239 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 poison>240 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8241 ret void242}243 244define void @v_shuffle_v3bf16_v3bf16__5_0_u(ptr addrspace(1) inreg %ptr) {245; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_u:246; GFX900: ; %bb.0:247; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)248; GFX900-NEXT: ;;#ASMSTART249; GFX900-NEXT: ; def v[0:1]250; GFX900-NEXT: ;;#ASMEND251; GFX900-NEXT: s_mov_b32 s4, 0x5040100252; GFX900-NEXT: v_mov_b32_e32 v3, 0253; GFX900-NEXT: ;;#ASMSTART254; GFX900-NEXT: ; def v[1:2]255; GFX900-NEXT: ;;#ASMEND256; GFX900-NEXT: v_perm_b32 v0, v0, v2, s4257; GFX900-NEXT: global_store_dword v3, v0, s[16:17]258; GFX900-NEXT: s_waitcnt vmcnt(0)259; GFX900-NEXT: s_setpc_b64 s[30:31]260;261; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_u:262; GFX90A: ; %bb.0:263; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)264; GFX90A-NEXT: ;;#ASMSTART265; GFX90A-NEXT: ; def v[0:1]266; GFX90A-NEXT: ;;#ASMEND267; GFX90A-NEXT: s_mov_b32 s4, 0x5040100268; GFX90A-NEXT: v_mov_b32_e32 v4, 0269; GFX90A-NEXT: ;;#ASMSTART270; GFX90A-NEXT: ; def v[2:3]271; GFX90A-NEXT: ;;#ASMEND272; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s4273; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]274; GFX90A-NEXT: s_waitcnt vmcnt(0)275; GFX90A-NEXT: s_setpc_b64 s[30:31]276;277; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_u:278; GFX942: ; %bb.0:279; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)280; GFX942-NEXT: ;;#ASMSTART281; GFX942-NEXT: ; def v[0:1]282; GFX942-NEXT: ;;#ASMEND283; GFX942-NEXT: s_mov_b32 s2, 0x5040100284; GFX942-NEXT: v_mov_b32_e32 v4, 0285; GFX942-NEXT: ;;#ASMSTART286; GFX942-NEXT: ; def v[2:3]287; GFX942-NEXT: ;;#ASMEND288; GFX942-NEXT: s_nop 0289; GFX942-NEXT: v_perm_b32 v0, v0, v3, s2290; GFX942-NEXT: global_store_dword v4, v0, s[0:1]291; GFX942-NEXT: s_waitcnt vmcnt(0)292; GFX942-NEXT: s_setpc_b64 s[30:31]293 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()294 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()295 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>296 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>297 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 poison>298 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8299 ret void300}301 302define void @v_shuffle_v3bf16_v3bf16__5_1_u(ptr addrspace(1) inreg %ptr) {303; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_u:304; GFX900: ; %bb.0:305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)306; GFX900-NEXT: ;;#ASMSTART307; GFX900-NEXT: ; def v[0:1]308; GFX900-NEXT: ;;#ASMEND309; GFX900-NEXT: s_mov_b32 s4, 0xffff310; GFX900-NEXT: v_mov_b32_e32 v3, 0311; GFX900-NEXT: ;;#ASMSTART312; GFX900-NEXT: ; def v[1:2]313; GFX900-NEXT: ;;#ASMEND314; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v0315; GFX900-NEXT: global_store_dword v3, v0, 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_v3bf16_v3bf16__5_1_u:320; GFX90A: ; %bb.0:321; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)322; GFX90A-NEXT: ;;#ASMSTART323; GFX90A-NEXT: ; def v[0:1]324; GFX90A-NEXT: ;;#ASMEND325; GFX90A-NEXT: s_mov_b32 s4, 0xffff326; GFX90A-NEXT: v_mov_b32_e32 v4, 0327; GFX90A-NEXT: ;;#ASMSTART328; GFX90A-NEXT: ; def v[2:3]329; GFX90A-NEXT: ;;#ASMEND330; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v0331; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]332; GFX90A-NEXT: s_waitcnt vmcnt(0)333; GFX90A-NEXT: s_setpc_b64 s[30:31]334;335; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_u:336; GFX942: ; %bb.0:337; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)338; GFX942-NEXT: ;;#ASMSTART339; GFX942-NEXT: ; def v[0:1]340; GFX942-NEXT: ;;#ASMEND341; GFX942-NEXT: s_mov_b32 s2, 0xffff342; GFX942-NEXT: v_mov_b32_e32 v4, 0343; GFX942-NEXT: ;;#ASMSTART344; GFX942-NEXT: ; def v[2:3]345; GFX942-NEXT: ;;#ASMEND346; GFX942-NEXT: s_nop 0347; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v0348; GFX942-NEXT: global_store_dword v4, v0, s[0:1]349; GFX942-NEXT: s_waitcnt vmcnt(0)350; GFX942-NEXT: s_setpc_b64 s[30:31]351 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()352 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()353 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>354 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>355 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 poison>356 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8357 ret void358}359 360define void @v_shuffle_v3bf16_v3bf16__5_2_u(ptr addrspace(1) inreg %ptr) {361; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_u:362; GFX900: ; %bb.0:363; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)364; GFX900-NEXT: ;;#ASMSTART365; GFX900-NEXT: ; def v[0:1]366; GFX900-NEXT: ;;#ASMEND367; GFX900-NEXT: s_mov_b32 s4, 0x5040100368; GFX900-NEXT: v_mov_b32_e32 v4, 0369; GFX900-NEXT: ;;#ASMSTART370; GFX900-NEXT: ; def v[2:3]371; GFX900-NEXT: ;;#ASMEND372; GFX900-NEXT: v_perm_b32 v0, v1, v3, s4373; GFX900-NEXT: global_store_dword v4, v0, s[16:17]374; GFX900-NEXT: s_waitcnt vmcnt(0)375; GFX900-NEXT: s_setpc_b64 s[30:31]376;377; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_u:378; GFX90A: ; %bb.0:379; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)380; GFX90A-NEXT: ;;#ASMSTART381; GFX90A-NEXT: ; def v[0:1]382; GFX90A-NEXT: ;;#ASMEND383; GFX90A-NEXT: s_mov_b32 s4, 0x5040100384; GFX90A-NEXT: v_mov_b32_e32 v4, 0385; GFX90A-NEXT: ;;#ASMSTART386; GFX90A-NEXT: ; def v[2:3]387; GFX90A-NEXT: ;;#ASMEND388; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s4389; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]390; GFX90A-NEXT: s_waitcnt vmcnt(0)391; GFX90A-NEXT: s_setpc_b64 s[30:31]392;393; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_u:394; GFX942: ; %bb.0:395; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)396; GFX942-NEXT: ;;#ASMSTART397; GFX942-NEXT: ; def v[0:1]398; GFX942-NEXT: ;;#ASMEND399; GFX942-NEXT: s_mov_b32 s2, 0x5040100400; GFX942-NEXT: v_mov_b32_e32 v4, 0401; GFX942-NEXT: ;;#ASMSTART402; GFX942-NEXT: ; def v[2:3]403; GFX942-NEXT: ;;#ASMEND404; GFX942-NEXT: s_nop 0405; GFX942-NEXT: v_perm_b32 v0, v1, v3, s2406; GFX942-NEXT: global_store_dword v4, v0, s[0:1]407; GFX942-NEXT: s_waitcnt vmcnt(0)408; GFX942-NEXT: s_setpc_b64 s[30:31]409 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()410 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()411 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>412 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>413 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 poison>414 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8415 ret void416}417 418define void @v_shuffle_v3bf16_v3bf16__5_3_u(ptr addrspace(1) inreg %ptr) {419; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_u:420; GFX900: ; %bb.0:421; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)422; GFX900-NEXT: ;;#ASMSTART423; GFX900-NEXT: ; def v[0:1]424; GFX900-NEXT: ;;#ASMEND425; GFX900-NEXT: s_mov_b32 s4, 0x5040100426; GFX900-NEXT: v_mov_b32_e32 v2, 0427; GFX900-NEXT: v_perm_b32 v0, v0, v1, s4428; GFX900-NEXT: global_store_dword v2, v0, s[16:17]429; GFX900-NEXT: s_waitcnt vmcnt(0)430; GFX900-NEXT: s_setpc_b64 s[30:31]431;432; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_u:433; GFX90A: ; %bb.0:434; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)435; GFX90A-NEXT: ;;#ASMSTART436; GFX90A-NEXT: ; def v[0:1]437; GFX90A-NEXT: ;;#ASMEND438; GFX90A-NEXT: s_mov_b32 s4, 0x5040100439; GFX90A-NEXT: v_mov_b32_e32 v2, 0440; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s4441; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]442; GFX90A-NEXT: s_waitcnt vmcnt(0)443; GFX90A-NEXT: s_setpc_b64 s[30:31]444;445; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_u:446; GFX942: ; %bb.0:447; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)448; GFX942-NEXT: ;;#ASMSTART449; GFX942-NEXT: ; def v[0:1]450; GFX942-NEXT: ;;#ASMEND451; GFX942-NEXT: s_mov_b32 s2, 0x5040100452; GFX942-NEXT: v_mov_b32_e32 v2, 0453; GFX942-NEXT: v_perm_b32 v0, v0, v1, s2454; GFX942-NEXT: global_store_dword v2, v0, s[0:1]455; GFX942-NEXT: s_waitcnt vmcnt(0)456; GFX942-NEXT: s_setpc_b64 s[30:31]457 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()458 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()459 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>460 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>461 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 poison>462 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8463 ret void464}465 466define void @v_shuffle_v3bf16_v3bf16__5_4_u(ptr addrspace(1) inreg %ptr) {467; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_u:468; GFX900: ; %bb.0:469; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)470; GFX900-NEXT: ;;#ASMSTART471; GFX900-NEXT: ; def v[0:1]472; GFX900-NEXT: ;;#ASMEND473; GFX900-NEXT: s_mov_b32 s4, 0xffff474; GFX900-NEXT: v_mov_b32_e32 v2, 0475; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v0476; GFX900-NEXT: global_store_dword v2, v0, s[16:17]477; GFX900-NEXT: s_waitcnt vmcnt(0)478; GFX900-NEXT: s_setpc_b64 s[30:31]479;480; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_u:481; GFX90A: ; %bb.0:482; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)483; GFX90A-NEXT: ;;#ASMSTART484; GFX90A-NEXT: ; def v[0:1]485; GFX90A-NEXT: ;;#ASMEND486; GFX90A-NEXT: s_mov_b32 s4, 0xffff487; GFX90A-NEXT: v_mov_b32_e32 v2, 0488; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v0489; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]490; GFX90A-NEXT: s_waitcnt vmcnt(0)491; GFX90A-NEXT: s_setpc_b64 s[30:31]492;493; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_u:494; GFX942: ; %bb.0:495; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)496; GFX942-NEXT: ;;#ASMSTART497; GFX942-NEXT: ; def v[0:1]498; GFX942-NEXT: ;;#ASMEND499; GFX942-NEXT: s_mov_b32 s2, 0xffff500; GFX942-NEXT: v_mov_b32_e32 v2, 0501; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v0502; GFX942-NEXT: global_store_dword v2, v0, s[0:1]503; GFX942-NEXT: s_waitcnt vmcnt(0)504; GFX942-NEXT: s_setpc_b64 s[30:31]505 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()506 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()507 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>508 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>509 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 poison>510 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8511 ret void512}513 514define void @v_shuffle_v3bf16_v3bf16__5_5_u(ptr addrspace(1) inreg %ptr) {515; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_u:516; GFX900: ; %bb.0:517; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)518; GFX900-NEXT: ;;#ASMSTART519; GFX900-NEXT: ; def v[0:1]520; GFX900-NEXT: ;;#ASMEND521; GFX900-NEXT: s_mov_b32 s4, 0x5040100522; GFX900-NEXT: v_mov_b32_e32 v2, 0523; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4524; GFX900-NEXT: global_store_dword v2, v0, s[16:17]525; GFX900-NEXT: s_waitcnt vmcnt(0)526; GFX900-NEXT: s_setpc_b64 s[30:31]527;528; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_u:529; GFX90A: ; %bb.0:530; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)531; GFX90A-NEXT: ;;#ASMSTART532; GFX90A-NEXT: ; def v[0:1]533; GFX90A-NEXT: ;;#ASMEND534; GFX90A-NEXT: s_mov_b32 s4, 0x5040100535; GFX90A-NEXT: v_mov_b32_e32 v2, 0536; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4537; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]538; GFX90A-NEXT: s_waitcnt vmcnt(0)539; GFX90A-NEXT: s_setpc_b64 s[30:31]540;541; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_u:542; GFX942: ; %bb.0:543; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)544; GFX942-NEXT: ;;#ASMSTART545; GFX942-NEXT: ; def v[0:1]546; GFX942-NEXT: ;;#ASMEND547; GFX942-NEXT: s_mov_b32 s2, 0x5040100548; GFX942-NEXT: v_mov_b32_e32 v2, 0549; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2550; GFX942-NEXT: global_store_dword v2, v0, s[0:1]551; GFX942-NEXT: s_waitcnt vmcnt(0)552; GFX942-NEXT: s_setpc_b64 s[30:31]553 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()554 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()555 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>556 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>557 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 poison>558 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8559 ret void560}561 562define void @v_shuffle_v3bf16_v3bf16__5_5_0(ptr addrspace(1) inreg %ptr) {563; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_0:564; GFX900: ; %bb.0:565; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)566; GFX900-NEXT: ;;#ASMSTART567; GFX900-NEXT: ; def v[0:1]568; GFX900-NEXT: ;;#ASMEND569; GFX900-NEXT: v_mov_b32_e32 v3, 0570; GFX900-NEXT: ;;#ASMSTART571; GFX900-NEXT: ; def v[1:2]572; GFX900-NEXT: ;;#ASMEND573; GFX900-NEXT: s_mov_b32 s4, 0x5040100574; GFX900-NEXT: v_perm_b32 v1, v2, v2, s4575; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:4576; GFX900-NEXT: global_store_dword v3, v1, s[16:17]577; GFX900-NEXT: s_waitcnt vmcnt(0)578; GFX900-NEXT: s_setpc_b64 s[30:31]579;580; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_0:581; GFX90A: ; %bb.0:582; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)583; GFX90A-NEXT: v_mov_b32_e32 v4, 0584; GFX90A-NEXT: ;;#ASMSTART585; GFX90A-NEXT: ; def v[0:1]586; GFX90A-NEXT: ;;#ASMEND587; GFX90A-NEXT: s_mov_b32 s4, 0x5040100588; GFX90A-NEXT: ;;#ASMSTART589; GFX90A-NEXT: ; def v[2:3]590; GFX90A-NEXT: ;;#ASMEND591; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s4592; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:4593; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]594; GFX90A-NEXT: s_waitcnt vmcnt(0)595; GFX90A-NEXT: s_setpc_b64 s[30:31]596;597; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_0:598; GFX942: ; %bb.0:599; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)600; GFX942-NEXT: v_mov_b32_e32 v4, 0601; GFX942-NEXT: ;;#ASMSTART602; GFX942-NEXT: ; def v[0:1]603; GFX942-NEXT: ;;#ASMEND604; GFX942-NEXT: s_mov_b32 s2, 0x5040100605; GFX942-NEXT: ;;#ASMSTART606; GFX942-NEXT: ; def v[2:3]607; GFX942-NEXT: ;;#ASMEND608; GFX942-NEXT: s_nop 0609; GFX942-NEXT: v_perm_b32 v1, v3, v3, s2610; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:4611; GFX942-NEXT: global_store_dword v4, v1, s[0:1]612; GFX942-NEXT: s_waitcnt vmcnt(0)613; GFX942-NEXT: s_setpc_b64 s[30:31]614 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()615 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()616 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>617 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>618 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 0>619 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8620 ret void621}622 623define void @v_shuffle_v3bf16_v3bf16__5_5_1(ptr addrspace(1) inreg %ptr) {624; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_1:625; GFX900: ; %bb.0:626; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)627; GFX900-NEXT: ;;#ASMSTART628; GFX900-NEXT: ; def v[0:1]629; GFX900-NEXT: ;;#ASMEND630; GFX900-NEXT: v_mov_b32_e32 v3, 0631; GFX900-NEXT: ;;#ASMSTART632; GFX900-NEXT: ; def v[1:2]633; GFX900-NEXT: ;;#ASMEND634; GFX900-NEXT: s_mov_b32 s4, 0x5040100635; GFX900-NEXT: v_perm_b32 v1, v2, v2, s4636; GFX900-NEXT: global_store_short_d16_hi v3, v0, s[16:17] offset:4637; GFX900-NEXT: global_store_dword v3, v1, s[16:17]638; GFX900-NEXT: s_waitcnt vmcnt(0)639; GFX900-NEXT: s_setpc_b64 s[30:31]640;641; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_1:642; GFX90A: ; %bb.0:643; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)644; GFX90A-NEXT: v_mov_b32_e32 v4, 0645; GFX90A-NEXT: ;;#ASMSTART646; GFX90A-NEXT: ; def v[0:1]647; GFX90A-NEXT: ;;#ASMEND648; GFX90A-NEXT: s_mov_b32 s4, 0x5040100649; GFX90A-NEXT: ;;#ASMSTART650; GFX90A-NEXT: ; def v[2:3]651; GFX90A-NEXT: ;;#ASMEND652; GFX90A-NEXT: v_perm_b32 v1, v3, v3, s4653; GFX90A-NEXT: global_store_short_d16_hi v4, v0, s[16:17] offset:4654; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]655; GFX90A-NEXT: s_waitcnt vmcnt(0)656; GFX90A-NEXT: s_setpc_b64 s[30:31]657;658; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_1:659; GFX942: ; %bb.0:660; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)661; GFX942-NEXT: v_mov_b32_e32 v4, 0662; GFX942-NEXT: ;;#ASMSTART663; GFX942-NEXT: ; def v[0:1]664; GFX942-NEXT: ;;#ASMEND665; GFX942-NEXT: s_mov_b32 s2, 0x5040100666; GFX942-NEXT: ;;#ASMSTART667; GFX942-NEXT: ; def v[2:3]668; GFX942-NEXT: ;;#ASMEND669; GFX942-NEXT: s_nop 0670; GFX942-NEXT: v_perm_b32 v1, v3, v3, s2671; GFX942-NEXT: global_store_short_d16_hi v4, v0, s[0:1] offset:4672; GFX942-NEXT: global_store_dword v4, v1, s[0:1]673; GFX942-NEXT: s_waitcnt vmcnt(0)674; GFX942-NEXT: s_setpc_b64 s[30:31]675 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()676 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()677 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>678 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>679 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 1>680 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8681 ret void682}683 684define void @v_shuffle_v3bf16_v3bf16__5_5_2(ptr addrspace(1) inreg %ptr) {685; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_2:686; GFX900: ; %bb.0:687; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)688; GFX900-NEXT: v_mov_b32_e32 v4, 0689; GFX900-NEXT: ;;#ASMSTART690; GFX900-NEXT: ; def v[0:1]691; GFX900-NEXT: ;;#ASMEND692; GFX900-NEXT: s_mov_b32 s4, 0x5040100693; GFX900-NEXT: ;;#ASMSTART694; GFX900-NEXT: ; def v[2:3]695; GFX900-NEXT: ;;#ASMEND696; GFX900-NEXT: v_perm_b32 v0, v3, v3, s4697; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:4698; GFX900-NEXT: global_store_dword v4, v0, s[16:17]699; GFX900-NEXT: s_waitcnt vmcnt(0)700; GFX900-NEXT: s_setpc_b64 s[30:31]701;702; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_2:703; GFX90A: ; %bb.0:704; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)705; GFX90A-NEXT: v_mov_b32_e32 v4, 0706; GFX90A-NEXT: ;;#ASMSTART707; GFX90A-NEXT: ; def v[0:1]708; GFX90A-NEXT: ;;#ASMEND709; GFX90A-NEXT: s_mov_b32 s4, 0x5040100710; GFX90A-NEXT: ;;#ASMSTART711; GFX90A-NEXT: ; def v[2:3]712; GFX90A-NEXT: ;;#ASMEND713; GFX90A-NEXT: v_perm_b32 v0, v3, v3, s4714; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:4715; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]716; GFX90A-NEXT: s_waitcnt vmcnt(0)717; GFX90A-NEXT: s_setpc_b64 s[30:31]718;719; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_2:720; GFX942: ; %bb.0:721; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)722; GFX942-NEXT: v_mov_b32_e32 v4, 0723; GFX942-NEXT: ;;#ASMSTART724; GFX942-NEXT: ; def v[0:1]725; GFX942-NEXT: ;;#ASMEND726; GFX942-NEXT: s_mov_b32 s2, 0x5040100727; GFX942-NEXT: ;;#ASMSTART728; GFX942-NEXT: ; def v[2:3]729; GFX942-NEXT: ;;#ASMEND730; GFX942-NEXT: s_nop 0731; GFX942-NEXT: v_perm_b32 v0, v3, v3, s2732; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:4733; GFX942-NEXT: global_store_dword v4, v0, s[0:1]734; GFX942-NEXT: s_waitcnt vmcnt(0)735; GFX942-NEXT: s_setpc_b64 s[30:31]736 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()737 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()738 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>739 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>740 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 2>741 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8742 ret void743}744 745define void @v_shuffle_v3bf16_v3bf16__5_5_3(ptr addrspace(1) inreg %ptr) {746; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_3:747; GFX900: ; %bb.0:748; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)749; GFX900-NEXT: v_mov_b32_e32 v2, 0750; GFX900-NEXT: ;;#ASMSTART751; GFX900-NEXT: ; def v[0:1]752; GFX900-NEXT: ;;#ASMEND753; GFX900-NEXT: s_mov_b32 s4, 0x5040100754; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4755; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:4756; GFX900-NEXT: global_store_dword v2, v1, s[16:17]757; GFX900-NEXT: s_waitcnt vmcnt(0)758; GFX900-NEXT: s_setpc_b64 s[30:31]759;760; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_3:761; GFX90A: ; %bb.0:762; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)763; GFX90A-NEXT: v_mov_b32_e32 v2, 0764; GFX90A-NEXT: ;;#ASMSTART765; GFX90A-NEXT: ; def v[0:1]766; GFX90A-NEXT: ;;#ASMEND767; GFX90A-NEXT: s_mov_b32 s4, 0x5040100768; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4769; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:4770; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]771; GFX90A-NEXT: s_waitcnt vmcnt(0)772; GFX90A-NEXT: s_setpc_b64 s[30:31]773;774; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_3:775; GFX942: ; %bb.0:776; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)777; GFX942-NEXT: v_mov_b32_e32 v2, 0778; GFX942-NEXT: ;;#ASMSTART779; GFX942-NEXT: ; def v[0:1]780; GFX942-NEXT: ;;#ASMEND781; GFX942-NEXT: s_mov_b32 s2, 0x5040100782; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2783; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:4784; GFX942-NEXT: global_store_dword v2, v1, s[0:1]785; GFX942-NEXT: s_waitcnt vmcnt(0)786; GFX942-NEXT: s_setpc_b64 s[30:31]787 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()788 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()789 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>790 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>791 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 3>792 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8793 ret void794}795 796define void @v_shuffle_v3bf16_v3bf16__5_5_4(ptr addrspace(1) inreg %ptr) {797; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_4:798; GFX900: ; %bb.0:799; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)800; GFX900-NEXT: ;;#ASMSTART801; GFX900-NEXT: ; def v[0:1]802; GFX900-NEXT: ;;#ASMEND803; GFX900-NEXT: v_mov_b32_e32 v2, 0804; GFX900-NEXT: s_mov_b32 s4, 0x5040100805; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v0806; GFX900-NEXT: v_perm_b32 v1, v1, v1, s4807; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:4808; GFX900-NEXT: global_store_dword v2, v1, s[16:17]809; GFX900-NEXT: s_waitcnt vmcnt(0)810; GFX900-NEXT: s_setpc_b64 s[30:31]811;812; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_4:813; GFX90A: ; %bb.0:814; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)815; GFX90A-NEXT: ;;#ASMSTART816; GFX90A-NEXT: ; def v[0:1]817; GFX90A-NEXT: ;;#ASMEND818; GFX90A-NEXT: v_mov_b32_e32 v2, 0819; GFX90A-NEXT: s_mov_b32 s4, 0x5040100820; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v0821; GFX90A-NEXT: v_perm_b32 v1, v1, v1, s4822; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:4823; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]824; GFX90A-NEXT: s_waitcnt vmcnt(0)825; GFX90A-NEXT: s_setpc_b64 s[30:31]826;827; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_4:828; GFX942: ; %bb.0:829; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)830; GFX942-NEXT: ;;#ASMSTART831; GFX942-NEXT: ; def v[0:1]832; GFX942-NEXT: ;;#ASMEND833; GFX942-NEXT: v_mov_b32_e32 v2, 0834; GFX942-NEXT: s_mov_b32 s2, 0x5040100835; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v0836; GFX942-NEXT: v_perm_b32 v1, v1, v1, s2837; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:4838; GFX942-NEXT: global_store_dword v2, v1, s[0:1]839; GFX942-NEXT: s_waitcnt vmcnt(0)840; GFX942-NEXT: s_setpc_b64 s[30:31]841 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()842 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()843 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>844 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>845 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 4>846 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8847 ret void848}849 850define void @v_shuffle_v3bf16_v3bf16__5_5_5(ptr addrspace(1) inreg %ptr) {851; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_5_5:852; GFX900: ; %bb.0:853; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)854; GFX900-NEXT: v_mov_b32_e32 v2, 0855; GFX900-NEXT: ;;#ASMSTART856; GFX900-NEXT: ; def v[0:1]857; GFX900-NEXT: ;;#ASMEND858; GFX900-NEXT: s_mov_b32 s4, 0x5040100859; GFX900-NEXT: v_perm_b32 v0, v1, v1, s4860; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:4861; GFX900-NEXT: global_store_dword v2, v0, s[16:17]862; GFX900-NEXT: s_waitcnt vmcnt(0)863; GFX900-NEXT: s_setpc_b64 s[30:31]864;865; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_5_5:866; GFX90A: ; %bb.0:867; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)868; GFX90A-NEXT: v_mov_b32_e32 v2, 0869; GFX90A-NEXT: ;;#ASMSTART870; GFX90A-NEXT: ; def v[0:1]871; GFX90A-NEXT: ;;#ASMEND872; GFX90A-NEXT: s_mov_b32 s4, 0x5040100873; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s4874; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:4875; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]876; GFX90A-NEXT: s_waitcnt vmcnt(0)877; GFX90A-NEXT: s_setpc_b64 s[30:31]878;879; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_5_5:880; GFX942: ; %bb.0:881; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)882; GFX942-NEXT: v_mov_b32_e32 v2, 0883; GFX942-NEXT: ;;#ASMSTART884; GFX942-NEXT: ; def v[0:1]885; GFX942-NEXT: ;;#ASMEND886; GFX942-NEXT: s_mov_b32 s2, 0x5040100887; GFX942-NEXT: v_perm_b32 v0, v1, v1, s2888; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:4889; GFX942-NEXT: global_store_dword v2, v0, s[0:1]890; GFX942-NEXT: s_waitcnt vmcnt(0)891; GFX942-NEXT: s_setpc_b64 s[30:31]892 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()893 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()894 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>895 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>896 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 5>897 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8898 ret void899}900 901define void @v_shuffle_v3bf16_v3bf16__u_0_0(ptr addrspace(1) inreg %ptr) {902; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__u_0_0:903; GFX900: ; %bb.0:904; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)905; GFX900-NEXT: v_mov_b32_e32 v2, 0906; GFX900-NEXT: ;;#ASMSTART907; GFX900-NEXT: ; def v[0:1]908; GFX900-NEXT: ;;#ASMEND909; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v0910; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:4911; GFX900-NEXT: global_store_dword v2, v1, s[16:17]912; GFX900-NEXT: s_waitcnt vmcnt(0)913; GFX900-NEXT: s_setpc_b64 s[30:31]914;915; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__u_0_0:916; GFX90A: ; %bb.0:917; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)918; GFX90A-NEXT: v_mov_b32_e32 v2, 0919; GFX90A-NEXT: ;;#ASMSTART920; GFX90A-NEXT: ; def v[0:1]921; GFX90A-NEXT: ;;#ASMEND922; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v0923; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:4924; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]925; GFX90A-NEXT: s_waitcnt vmcnt(0)926; GFX90A-NEXT: s_setpc_b64 s[30:31]927;928; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__u_0_0:929; GFX942: ; %bb.0:930; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)931; GFX942-NEXT: v_mov_b32_e32 v2, 0932; GFX942-NEXT: ;;#ASMSTART933; GFX942-NEXT: ; def v[0:1]934; GFX942-NEXT: ;;#ASMEND935; GFX942-NEXT: s_nop 0936; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v0937; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:4938; GFX942-NEXT: global_store_dword v2, v1, s[0:1]939; GFX942-NEXT: s_waitcnt vmcnt(0)940; GFX942-NEXT: s_setpc_b64 s[30:31]941 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()942 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>943 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 0, i32 0>944 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8945 ret void946}947 948define void @v_shuffle_v3bf16_v3bf16__0_0_0(ptr addrspace(1) inreg %ptr) {949; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_0_0:950; GFX900: ; %bb.0:951; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)952; GFX900-NEXT: v_mov_b32_e32 v2, 0953; GFX900-NEXT: ;;#ASMSTART954; GFX900-NEXT: ; def v[0:1]955; GFX900-NEXT: ;;#ASMEND956; GFX900-NEXT: s_mov_b32 s4, 0x5040100957; GFX900-NEXT: v_perm_b32 v1, v0, v0, s4958; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:4959; GFX900-NEXT: global_store_dword v2, v1, s[16:17]960; GFX900-NEXT: s_waitcnt vmcnt(0)961; GFX900-NEXT: s_setpc_b64 s[30:31]962;963; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_0_0:964; GFX90A: ; %bb.0:965; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)966; GFX90A-NEXT: v_mov_b32_e32 v2, 0967; GFX90A-NEXT: ;;#ASMSTART968; GFX90A-NEXT: ; def v[0:1]969; GFX90A-NEXT: ;;#ASMEND970; GFX90A-NEXT: s_mov_b32 s4, 0x5040100971; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s4972; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:4973; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]974; GFX90A-NEXT: s_waitcnt vmcnt(0)975; GFX90A-NEXT: s_setpc_b64 s[30:31]976;977; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_0_0:978; GFX942: ; %bb.0:979; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)980; GFX942-NEXT: v_mov_b32_e32 v2, 0981; GFX942-NEXT: ;;#ASMSTART982; GFX942-NEXT: ; def v[0:1]983; GFX942-NEXT: ;;#ASMEND984; GFX942-NEXT: s_mov_b32 s2, 0x5040100985; GFX942-NEXT: v_perm_b32 v1, v0, v0, s2986; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:4987; GFX942-NEXT: global_store_dword v2, v1, s[0:1]988; GFX942-NEXT: s_waitcnt vmcnt(0)989; GFX942-NEXT: s_setpc_b64 s[30:31]990 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()991 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>992 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> zeroinitializer993 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 8994 ret void995}996 997define void @v_shuffle_v3bf16_v3bf16__1_0_0(ptr addrspace(1) inreg %ptr) {998; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_0_0:999; GFX900: ; %bb.0:1000; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1001; GFX900-NEXT: v_mov_b32_e32 v2, 01002; GFX900-NEXT: ;;#ASMSTART1003; GFX900-NEXT: ; def v[0:1]1004; GFX900-NEXT: ;;#ASMEND1005; GFX900-NEXT: v_alignbit_b32 v1, v0, v0, 161006; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41007; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1008; GFX900-NEXT: s_waitcnt vmcnt(0)1009; GFX900-NEXT: s_setpc_b64 s[30:31]1010;1011; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_0_0:1012; GFX90A: ; %bb.0:1013; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1014; GFX90A-NEXT: v_mov_b32_e32 v2, 01015; GFX90A-NEXT: ;;#ASMSTART1016; GFX90A-NEXT: ; def v[0:1]1017; GFX90A-NEXT: ;;#ASMEND1018; GFX90A-NEXT: v_alignbit_b32 v1, v0, v0, 161019; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41020; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1021; GFX90A-NEXT: s_waitcnt vmcnt(0)1022; GFX90A-NEXT: s_setpc_b64 s[30:31]1023;1024; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_0_0:1025; GFX942: ; %bb.0:1026; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1027; GFX942-NEXT: v_mov_b32_e32 v2, 01028; GFX942-NEXT: ;;#ASMSTART1029; GFX942-NEXT: ; def v[0:1]1030; GFX942-NEXT: ;;#ASMEND1031; GFX942-NEXT: s_nop 01032; GFX942-NEXT: v_alignbit_b32 v1, v0, v0, 161033; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41034; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1035; GFX942-NEXT: s_waitcnt vmcnt(0)1036; GFX942-NEXT: s_setpc_b64 s[30:31]1037 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1038 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1039 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 0, i32 0>1040 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81041 ret void1042}1043 1044define void @v_shuffle_v3bf16_v3bf16__2_0_0(ptr addrspace(1) inreg %ptr) {1045; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_0_0:1046; GFX900: ; %bb.0:1047; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1048; GFX900-NEXT: v_mov_b32_e32 v2, 01049; GFX900-NEXT: ;;#ASMSTART1050; GFX900-NEXT: ; def v[0:1]1051; GFX900-NEXT: ;;#ASMEND1052; GFX900-NEXT: s_mov_b32 s4, 0x50401001053; GFX900-NEXT: v_perm_b32 v1, v0, v1, s41054; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41055; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1056; GFX900-NEXT: s_waitcnt vmcnt(0)1057; GFX900-NEXT: s_setpc_b64 s[30:31]1058;1059; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__2_0_0:1060; GFX90A: ; %bb.0:1061; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1062; GFX90A-NEXT: v_mov_b32_e32 v2, 01063; GFX90A-NEXT: ;;#ASMSTART1064; GFX90A-NEXT: ; def v[0:1]1065; GFX90A-NEXT: ;;#ASMEND1066; GFX90A-NEXT: s_mov_b32 s4, 0x50401001067; GFX90A-NEXT: v_perm_b32 v1, v0, v1, s41068; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41069; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1070; GFX90A-NEXT: s_waitcnt vmcnt(0)1071; GFX90A-NEXT: s_setpc_b64 s[30:31]1072;1073; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_0_0:1074; GFX942: ; %bb.0:1075; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1076; GFX942-NEXT: v_mov_b32_e32 v2, 01077; GFX942-NEXT: ;;#ASMSTART1078; GFX942-NEXT: ; def v[0:1]1079; GFX942-NEXT: ;;#ASMEND1080; GFX942-NEXT: s_mov_b32 s2, 0x50401001081; GFX942-NEXT: v_perm_b32 v1, v0, v1, s21082; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41083; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1084; GFX942-NEXT: s_waitcnt vmcnt(0)1085; GFX942-NEXT: s_setpc_b64 s[30:31]1086 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1087 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1088 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 0>1089 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81090 ret void1091}1092 1093define void @v_shuffle_v3bf16_v3bf16__3_0_0(ptr addrspace(1) inreg %ptr) {1094; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__3_0_0:1095; GFX900: ; %bb.0:1096; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1097; GFX900-NEXT: v_mov_b32_e32 v2, 01098; GFX900-NEXT: ;;#ASMSTART1099; GFX900-NEXT: ; def v[0:1]1100; GFX900-NEXT: ;;#ASMEND1101; GFX900-NEXT: v_lshlrev_b32_e32 v1, 16, v01102; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41103; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1104; GFX900-NEXT: s_waitcnt vmcnt(0)1105; GFX900-NEXT: s_setpc_b64 s[30:31]1106;1107; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__3_0_0:1108; GFX90A: ; %bb.0:1109; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1110; GFX90A-NEXT: v_mov_b32_e32 v2, 01111; GFX90A-NEXT: ;;#ASMSTART1112; GFX90A-NEXT: ; def v[0:1]1113; GFX90A-NEXT: ;;#ASMEND1114; GFX90A-NEXT: v_lshlrev_b32_e32 v1, 16, v01115; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41116; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1117; GFX90A-NEXT: s_waitcnt vmcnt(0)1118; GFX90A-NEXT: s_setpc_b64 s[30:31]1119;1120; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__3_0_0:1121; GFX942: ; %bb.0:1122; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1123; GFX942-NEXT: v_mov_b32_e32 v2, 01124; GFX942-NEXT: ;;#ASMSTART1125; GFX942-NEXT: ; def v[0:1]1126; GFX942-NEXT: ;;#ASMEND1127; GFX942-NEXT: s_nop 01128; GFX942-NEXT: v_lshlrev_b32_e32 v1, 16, v01129; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41130; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1131; GFX942-NEXT: s_waitcnt vmcnt(0)1132; GFX942-NEXT: s_setpc_b64 s[30:31]1133 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1134 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1135 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 0, i32 0>1136 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81137 ret void1138}1139 1140define void @v_shuffle_v3bf16_v3bf16__4_0_0(ptr addrspace(1) inreg %ptr) {1141; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_0_0:1142; GFX900: ; %bb.0:1143; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1144; GFX900-NEXT: ;;#ASMSTART1145; GFX900-NEXT: ; def v[0:1]1146; GFX900-NEXT: ;;#ASMEND1147; GFX900-NEXT: v_mov_b32_e32 v3, 01148; GFX900-NEXT: ;;#ASMSTART1149; GFX900-NEXT: ; def v[1:2]1150; GFX900-NEXT: ;;#ASMEND1151; GFX900-NEXT: v_alignbit_b32 v1, v0, v1, 161152; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41153; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1154; GFX900-NEXT: s_waitcnt vmcnt(0)1155; GFX900-NEXT: s_setpc_b64 s[30:31]1156;1157; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_0_0:1158; GFX90A: ; %bb.0:1159; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1160; GFX90A-NEXT: v_mov_b32_e32 v4, 01161; GFX90A-NEXT: ;;#ASMSTART1162; GFX90A-NEXT: ; def v[0:1]1163; GFX90A-NEXT: ;;#ASMEND1164; GFX90A-NEXT: ;;#ASMSTART1165; GFX90A-NEXT: ; def v[2:3]1166; GFX90A-NEXT: ;;#ASMEND1167; GFX90A-NEXT: v_alignbit_b32 v1, v0, v2, 161168; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41169; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1170; GFX90A-NEXT: s_waitcnt vmcnt(0)1171; GFX90A-NEXT: s_setpc_b64 s[30:31]1172;1173; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_0_0:1174; GFX942: ; %bb.0:1175; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1176; GFX942-NEXT: v_mov_b32_e32 v4, 01177; GFX942-NEXT: ;;#ASMSTART1178; GFX942-NEXT: ; def v[0:1]1179; GFX942-NEXT: ;;#ASMEND1180; GFX942-NEXT: ;;#ASMSTART1181; GFX942-NEXT: ; def v[2:3]1182; GFX942-NEXT: ;;#ASMEND1183; GFX942-NEXT: s_nop 01184; GFX942-NEXT: v_alignbit_b32 v1, v0, v2, 161185; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41186; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1187; GFX942-NEXT: s_waitcnt vmcnt(0)1188; GFX942-NEXT: s_setpc_b64 s[30:31]1189 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1190 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1191 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1192 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1193 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 0, i32 0>1194 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81195 ret void1196}1197 1198define void @v_shuffle_v3bf16_v3bf16__5_0_0(ptr addrspace(1) inreg %ptr) {1199; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_0:1200; GFX900: ; %bb.0:1201; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1202; GFX900-NEXT: ;;#ASMSTART1203; GFX900-NEXT: ; def v[0:1]1204; GFX900-NEXT: ;;#ASMEND1205; GFX900-NEXT: v_mov_b32_e32 v3, 01206; GFX900-NEXT: ;;#ASMSTART1207; GFX900-NEXT: ; def v[1:2]1208; GFX900-NEXT: ;;#ASMEND1209; GFX900-NEXT: s_mov_b32 s4, 0x50401001210; GFX900-NEXT: v_perm_b32 v1, v0, v2, s41211; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41212; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1213; GFX900-NEXT: s_waitcnt vmcnt(0)1214; GFX900-NEXT: s_setpc_b64 s[30:31]1215;1216; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_0:1217; GFX90A: ; %bb.0:1218; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1219; GFX90A-NEXT: v_mov_b32_e32 v4, 01220; GFX90A-NEXT: ;;#ASMSTART1221; GFX90A-NEXT: ; def v[0:1]1222; GFX90A-NEXT: ;;#ASMEND1223; GFX90A-NEXT: s_mov_b32 s4, 0x50401001224; GFX90A-NEXT: ;;#ASMSTART1225; GFX90A-NEXT: ; def v[2:3]1226; GFX90A-NEXT: ;;#ASMEND1227; GFX90A-NEXT: v_perm_b32 v1, v0, v3, s41228; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41229; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1230; GFX90A-NEXT: s_waitcnt vmcnt(0)1231; GFX90A-NEXT: s_setpc_b64 s[30:31]1232;1233; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_0:1234; GFX942: ; %bb.0:1235; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1236; GFX942-NEXT: v_mov_b32_e32 v4, 01237; GFX942-NEXT: ;;#ASMSTART1238; GFX942-NEXT: ; def v[0:1]1239; GFX942-NEXT: ;;#ASMEND1240; GFX942-NEXT: s_mov_b32 s2, 0x50401001241; GFX942-NEXT: ;;#ASMSTART1242; GFX942-NEXT: ; def v[2:3]1243; GFX942-NEXT: ;;#ASMEND1244; GFX942-NEXT: s_nop 01245; GFX942-NEXT: v_perm_b32 v1, v0, v3, s21246; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41247; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1248; GFX942-NEXT: s_waitcnt vmcnt(0)1249; GFX942-NEXT: s_setpc_b64 s[30:31]1250 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1251 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1252 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1253 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1254 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 0>1255 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81256 ret void1257}1258 1259define void @v_shuffle_v3bf16_v3bf16__5_u_0(ptr addrspace(1) inreg %ptr) {1260; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_0:1261; GFX900: ; %bb.0:1262; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1263; GFX900-NEXT: v_mov_b32_e32 v3, 01264; GFX900-NEXT: ;;#ASMSTART1265; GFX900-NEXT: ; def v[0:1]1266; GFX900-NEXT: ;;#ASMEND1267; GFX900-NEXT: ;;#ASMSTART1268; GFX900-NEXT: ; def v[1:2]1269; GFX900-NEXT: ;;#ASMEND1270; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41271; GFX900-NEXT: global_store_dword v3, v2, s[16:17]1272; GFX900-NEXT: s_waitcnt vmcnt(0)1273; GFX900-NEXT: s_setpc_b64 s[30:31]1274;1275; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_0:1276; GFX90A: ; %bb.0:1277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1278; GFX90A-NEXT: v_mov_b32_e32 v4, 01279; GFX90A-NEXT: ;;#ASMSTART1280; GFX90A-NEXT: ; def v[0:1]1281; GFX90A-NEXT: ;;#ASMEND1282; GFX90A-NEXT: ;;#ASMSTART1283; GFX90A-NEXT: ; def v[2:3]1284; GFX90A-NEXT: ;;#ASMEND1285; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41286; GFX90A-NEXT: global_store_dword v4, v3, s[16:17]1287; GFX90A-NEXT: s_waitcnt vmcnt(0)1288; GFX90A-NEXT: s_setpc_b64 s[30:31]1289;1290; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_0:1291; GFX942: ; %bb.0:1292; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1293; GFX942-NEXT: v_mov_b32_e32 v4, 01294; GFX942-NEXT: ;;#ASMSTART1295; GFX942-NEXT: ; def v[0:1]1296; GFX942-NEXT: ;;#ASMEND1297; GFX942-NEXT: ;;#ASMSTART1298; GFX942-NEXT: ; def v[2:3]1299; GFX942-NEXT: ;;#ASMEND1300; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41301; GFX942-NEXT: global_store_dword v4, v3, s[0:1]1302; GFX942-NEXT: s_waitcnt vmcnt(0)1303; GFX942-NEXT: s_setpc_b64 s[30:31]1304 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1305 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1306 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1307 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1308 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 0>1309 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81310 ret void1311}1312 1313define void @v_shuffle_v3bf16_v3bf16__5_1_0(ptr addrspace(1) inreg %ptr) {1314; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_0:1315; GFX900: ; %bb.0:1316; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1317; GFX900-NEXT: ;;#ASMSTART1318; GFX900-NEXT: ; def v[0:1]1319; GFX900-NEXT: ;;#ASMEND1320; GFX900-NEXT: v_mov_b32_e32 v3, 01321; GFX900-NEXT: ;;#ASMSTART1322; GFX900-NEXT: ; def v[1:2]1323; GFX900-NEXT: ;;#ASMEND1324; GFX900-NEXT: s_mov_b32 s4, 0xffff1325; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v01326; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41327; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1328; GFX900-NEXT: s_waitcnt vmcnt(0)1329; GFX900-NEXT: s_setpc_b64 s[30:31]1330;1331; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_1_0:1332; GFX90A: ; %bb.0:1333; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1334; GFX90A-NEXT: v_mov_b32_e32 v4, 01335; GFX90A-NEXT: ;;#ASMSTART1336; GFX90A-NEXT: ; def v[0:1]1337; GFX90A-NEXT: ;;#ASMEND1338; GFX90A-NEXT: s_mov_b32 s4, 0xffff1339; GFX90A-NEXT: ;;#ASMSTART1340; GFX90A-NEXT: ; def v[2:3]1341; GFX90A-NEXT: ;;#ASMEND1342; GFX90A-NEXT: v_bfi_b32 v1, s4, v3, v01343; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41344; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1345; GFX90A-NEXT: s_waitcnt vmcnt(0)1346; GFX90A-NEXT: s_setpc_b64 s[30:31]1347;1348; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_0:1349; GFX942: ; %bb.0:1350; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1351; GFX942-NEXT: v_mov_b32_e32 v4, 01352; GFX942-NEXT: ;;#ASMSTART1353; GFX942-NEXT: ; def v[0:1]1354; GFX942-NEXT: ;;#ASMEND1355; GFX942-NEXT: s_mov_b32 s2, 0xffff1356; GFX942-NEXT: ;;#ASMSTART1357; GFX942-NEXT: ; def v[2:3]1358; GFX942-NEXT: ;;#ASMEND1359; GFX942-NEXT: s_nop 01360; GFX942-NEXT: v_bfi_b32 v1, s2, v3, v01361; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41362; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1363; GFX942-NEXT: s_waitcnt vmcnt(0)1364; GFX942-NEXT: s_setpc_b64 s[30:31]1365 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1366 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1367 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1368 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1369 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 0>1370 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81371 ret void1372}1373 1374define void @v_shuffle_v3bf16_v3bf16__5_2_0(ptr addrspace(1) inreg %ptr) {1375; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_0:1376; GFX900: ; %bb.0:1377; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1378; GFX900-NEXT: v_mov_b32_e32 v4, 01379; GFX900-NEXT: ;;#ASMSTART1380; GFX900-NEXT: ; def v[0:1]1381; GFX900-NEXT: ;;#ASMEND1382; GFX900-NEXT: s_mov_b32 s4, 0x50401001383; GFX900-NEXT: ;;#ASMSTART1384; GFX900-NEXT: ; def v[2:3]1385; GFX900-NEXT: ;;#ASMEND1386; GFX900-NEXT: v_perm_b32 v1, v1, v3, s41387; GFX900-NEXT: global_store_short v4, v0, s[16:17] offset:41388; GFX900-NEXT: global_store_dword v4, v1, s[16:17]1389; GFX900-NEXT: s_waitcnt vmcnt(0)1390; GFX900-NEXT: s_setpc_b64 s[30:31]1391;1392; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_0:1393; GFX90A: ; %bb.0:1394; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1395; GFX90A-NEXT: v_mov_b32_e32 v4, 01396; GFX90A-NEXT: ;;#ASMSTART1397; GFX90A-NEXT: ; def v[0:1]1398; GFX90A-NEXT: ;;#ASMEND1399; GFX90A-NEXT: s_mov_b32 s4, 0x50401001400; GFX90A-NEXT: ;;#ASMSTART1401; GFX90A-NEXT: ; def v[2:3]1402; GFX90A-NEXT: ;;#ASMEND1403; GFX90A-NEXT: v_perm_b32 v1, v1, v3, s41404; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41405; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1406; GFX90A-NEXT: s_waitcnt vmcnt(0)1407; GFX90A-NEXT: s_setpc_b64 s[30:31]1408;1409; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_0:1410; GFX942: ; %bb.0:1411; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1412; GFX942-NEXT: v_mov_b32_e32 v4, 01413; GFX942-NEXT: ;;#ASMSTART1414; GFX942-NEXT: ; def v[0:1]1415; GFX942-NEXT: ;;#ASMEND1416; GFX942-NEXT: s_mov_b32 s2, 0x50401001417; GFX942-NEXT: ;;#ASMSTART1418; GFX942-NEXT: ; def v[2:3]1419; GFX942-NEXT: ;;#ASMEND1420; GFX942-NEXT: s_nop 01421; GFX942-NEXT: v_perm_b32 v1, v1, v3, s21422; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41423; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1424; GFX942-NEXT: s_waitcnt vmcnt(0)1425; GFX942-NEXT: s_setpc_b64 s[30:31]1426 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1427 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1428 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1429 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1430 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 0>1431 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81432 ret void1433}1434 1435define void @v_shuffle_v3bf16_v3bf16__5_3_0(ptr addrspace(1) inreg %ptr) {1436; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_0:1437; GFX900: ; %bb.0:1438; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1439; GFX900-NEXT: ;;#ASMSTART1440; GFX900-NEXT: ; def v[0:1]1441; GFX900-NEXT: ;;#ASMEND1442; GFX900-NEXT: v_mov_b32_e32 v3, 01443; GFX900-NEXT: ;;#ASMSTART1444; GFX900-NEXT: ; def v[1:2]1445; GFX900-NEXT: ;;#ASMEND1446; GFX900-NEXT: s_mov_b32 s4, 0x50401001447; GFX900-NEXT: v_perm_b32 v1, v1, v2, s41448; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41449; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1450; GFX900-NEXT: s_waitcnt vmcnt(0)1451; GFX900-NEXT: s_setpc_b64 s[30:31]1452;1453; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_0:1454; GFX90A: ; %bb.0:1455; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1456; GFX90A-NEXT: v_mov_b32_e32 v4, 01457; GFX90A-NEXT: ;;#ASMSTART1458; GFX90A-NEXT: ; def v[0:1]1459; GFX90A-NEXT: ;;#ASMEND1460; GFX90A-NEXT: s_mov_b32 s4, 0x50401001461; GFX90A-NEXT: ;;#ASMSTART1462; GFX90A-NEXT: ; def v[2:3]1463; GFX90A-NEXT: ;;#ASMEND1464; GFX90A-NEXT: v_perm_b32 v1, v2, v3, s41465; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41466; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1467; GFX90A-NEXT: s_waitcnt vmcnt(0)1468; GFX90A-NEXT: s_setpc_b64 s[30:31]1469;1470; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_0:1471; GFX942: ; %bb.0:1472; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1473; GFX942-NEXT: v_mov_b32_e32 v4, 01474; GFX942-NEXT: ;;#ASMSTART1475; GFX942-NEXT: ; def v[0:1]1476; GFX942-NEXT: ;;#ASMEND1477; GFX942-NEXT: s_mov_b32 s2, 0x50401001478; GFX942-NEXT: ;;#ASMSTART1479; GFX942-NEXT: ; def v[2:3]1480; GFX942-NEXT: ;;#ASMEND1481; GFX942-NEXT: s_nop 01482; GFX942-NEXT: v_perm_b32 v1, v2, v3, s21483; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41484; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1485; GFX942-NEXT: s_waitcnt vmcnt(0)1486; GFX942-NEXT: s_setpc_b64 s[30:31]1487 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1488 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1489 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1490 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1491 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 0>1492 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81493 ret void1494}1495 1496define void @v_shuffle_v3bf16_v3bf16__5_4_0(ptr addrspace(1) inreg %ptr) {1497; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_0:1498; GFX900: ; %bb.0:1499; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1500; GFX900-NEXT: ;;#ASMSTART1501; GFX900-NEXT: ; def v[0:1]1502; GFX900-NEXT: ;;#ASMEND1503; GFX900-NEXT: v_mov_b32_e32 v3, 01504; GFX900-NEXT: ;;#ASMSTART1505; GFX900-NEXT: ; def v[1:2]1506; GFX900-NEXT: ;;#ASMEND1507; GFX900-NEXT: s_mov_b32 s4, 0xffff1508; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v11509; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41510; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1511; GFX900-NEXT: s_waitcnt vmcnt(0)1512; GFX900-NEXT: s_setpc_b64 s[30:31]1513;1514; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_0:1515; GFX90A: ; %bb.0:1516; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1517; GFX90A-NEXT: v_mov_b32_e32 v4, 01518; GFX90A-NEXT: ;;#ASMSTART1519; GFX90A-NEXT: ; def v[0:1]1520; GFX90A-NEXT: ;;#ASMEND1521; GFX90A-NEXT: s_mov_b32 s4, 0xffff1522; GFX90A-NEXT: ;;#ASMSTART1523; GFX90A-NEXT: ; def v[2:3]1524; GFX90A-NEXT: ;;#ASMEND1525; GFX90A-NEXT: v_bfi_b32 v1, s4, v3, v21526; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41527; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1528; GFX90A-NEXT: s_waitcnt vmcnt(0)1529; GFX90A-NEXT: s_setpc_b64 s[30:31]1530;1531; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_0:1532; GFX942: ; %bb.0:1533; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1534; GFX942-NEXT: v_mov_b32_e32 v4, 01535; GFX942-NEXT: ;;#ASMSTART1536; GFX942-NEXT: ; def v[0:1]1537; GFX942-NEXT: ;;#ASMEND1538; GFX942-NEXT: s_mov_b32 s2, 0xffff1539; GFX942-NEXT: ;;#ASMSTART1540; GFX942-NEXT: ; def v[2:3]1541; GFX942-NEXT: ;;#ASMEND1542; GFX942-NEXT: s_nop 01543; GFX942-NEXT: v_bfi_b32 v1, s2, v3, v21544; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41545; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1546; GFX942-NEXT: s_waitcnt vmcnt(0)1547; GFX942-NEXT: s_setpc_b64 s[30:31]1548 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1549 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1550 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1551 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1552 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 0>1553 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81554 ret void1555}1556 1557define void @v_shuffle_v3bf16_v3bf16__u_1_1(ptr addrspace(1) inreg %ptr) {1558; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__u_1_1:1559; GFX900: ; %bb.0:1560; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1561; GFX900-NEXT: v_mov_b32_e32 v2, 01562; GFX900-NEXT: ;;#ASMSTART1563; GFX900-NEXT: ; def v[0:1]1564; GFX900-NEXT: ;;#ASMEND1565; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1566; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01567; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41568; GFX900-NEXT: s_waitcnt vmcnt(0)1569; GFX900-NEXT: s_setpc_b64 s[30:31]1570;1571; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__u_1_1:1572; GFX90A: ; %bb.0:1573; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1574; GFX90A-NEXT: v_mov_b32_e32 v2, 01575; GFX90A-NEXT: ;;#ASMSTART1576; GFX90A-NEXT: ; def v[0:1]1577; GFX90A-NEXT: ;;#ASMEND1578; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1579; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01580; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41581; GFX90A-NEXT: s_waitcnt vmcnt(0)1582; GFX90A-NEXT: s_setpc_b64 s[30:31]1583;1584; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__u_1_1:1585; GFX942: ; %bb.0:1586; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1587; GFX942-NEXT: v_mov_b32_e32 v2, 01588; GFX942-NEXT: ;;#ASMSTART1589; GFX942-NEXT: ; def v[0:1]1590; GFX942-NEXT: ;;#ASMEND1591; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1592; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01593; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41594; GFX942-NEXT: s_waitcnt vmcnt(0)1595; GFX942-NEXT: s_setpc_b64 s[30:31]1596 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1597 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1598 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 1, i32 1>1599 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81600 ret void1601}1602 1603define void @v_shuffle_v3bf16_v3bf16__0_1_1(ptr addrspace(1) inreg %ptr) {1604; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_1_1:1605; GFX900: ; %bb.0:1606; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1607; GFX900-NEXT: v_mov_b32_e32 v2, 01608; GFX900-NEXT: ;;#ASMSTART1609; GFX900-NEXT: ; def v[0:1]1610; GFX900-NEXT: ;;#ASMEND1611; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1612; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01613; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41614; GFX900-NEXT: s_waitcnt vmcnt(0)1615; GFX900-NEXT: s_setpc_b64 s[30:31]1616;1617; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_1_1:1618; GFX90A: ; %bb.0:1619; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1620; GFX90A-NEXT: v_mov_b32_e32 v2, 01621; GFX90A-NEXT: ;;#ASMSTART1622; GFX90A-NEXT: ; def v[0:1]1623; GFX90A-NEXT: ;;#ASMEND1624; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1625; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01626; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41627; GFX90A-NEXT: s_waitcnt vmcnt(0)1628; GFX90A-NEXT: s_setpc_b64 s[30:31]1629;1630; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_1_1:1631; GFX942: ; %bb.0:1632; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1633; GFX942-NEXT: v_mov_b32_e32 v2, 01634; GFX942-NEXT: ;;#ASMSTART1635; GFX942-NEXT: ; def v[0:1]1636; GFX942-NEXT: ;;#ASMEND1637; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1638; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01639; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41640; GFX942-NEXT: s_waitcnt vmcnt(0)1641; GFX942-NEXT: s_setpc_b64 s[30:31]1642 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1643 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1644 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 1>1645 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81646 ret void1647}1648 1649define void @v_shuffle_v3bf16_v3bf16__1_1_1(ptr addrspace(1) inreg %ptr) {1650; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_1_1:1651; GFX900: ; %bb.0:1652; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1653; GFX900-NEXT: ;;#ASMSTART1654; GFX900-NEXT: ; def v[0:1]1655; GFX900-NEXT: ;;#ASMEND1656; GFX900-NEXT: s_mov_b32 s4, 0x70603021657; GFX900-NEXT: v_mov_b32_e32 v2, 01658; GFX900-NEXT: v_perm_b32 v1, v0, v0, s41659; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01660; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1661; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41662; GFX900-NEXT: s_waitcnt vmcnt(0)1663; GFX900-NEXT: s_setpc_b64 s[30:31]1664;1665; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_1_1:1666; GFX90A: ; %bb.0:1667; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1668; GFX90A-NEXT: ;;#ASMSTART1669; GFX90A-NEXT: ; def v[0:1]1670; GFX90A-NEXT: ;;#ASMEND1671; GFX90A-NEXT: s_mov_b32 s4, 0x70603021672; GFX90A-NEXT: v_mov_b32_e32 v2, 01673; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s41674; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01675; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1676; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41677; GFX90A-NEXT: s_waitcnt vmcnt(0)1678; GFX90A-NEXT: s_setpc_b64 s[30:31]1679;1680; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_1_1:1681; GFX942: ; %bb.0:1682; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1683; GFX942-NEXT: ;;#ASMSTART1684; GFX942-NEXT: ; def v[0:1]1685; GFX942-NEXT: ;;#ASMEND1686; GFX942-NEXT: s_mov_b32 s2, 0x70603021687; GFX942-NEXT: v_mov_b32_e32 v2, 01688; GFX942-NEXT: v_perm_b32 v1, v0, v0, s21689; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01690; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1691; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41692; GFX942-NEXT: s_waitcnt vmcnt(0)1693; GFX942-NEXT: s_setpc_b64 s[30:31]1694 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1695 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1696 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 1, i32 1>1697 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81698 ret void1699}1700 1701define void @v_shuffle_v3bf16_v3bf16__2_1_1(ptr addrspace(1) inreg %ptr) {1702; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_1_1:1703; GFX900: ; %bb.0:1704; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1705; GFX900-NEXT: ;;#ASMSTART1706; GFX900-NEXT: ; def v[0:1]1707; GFX900-NEXT: ;;#ASMEND1708; GFX900-NEXT: s_mov_b32 s4, 0xffff1709; GFX900-NEXT: v_mov_b32_e32 v2, 01710; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v01711; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01712; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41713; GFX900-NEXT: global_store_dword v2, v1, s[16:17]1714; GFX900-NEXT: s_waitcnt vmcnt(0)1715; GFX900-NEXT: s_setpc_b64 s[30:31]1716;1717; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__2_1_1:1718; GFX90A: ; %bb.0:1719; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1720; GFX90A-NEXT: ;;#ASMSTART1721; GFX90A-NEXT: ; def v[0:1]1722; GFX90A-NEXT: ;;#ASMEND1723; GFX90A-NEXT: s_mov_b32 s4, 0xffff1724; GFX90A-NEXT: v_mov_b32_e32 v2, 01725; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v01726; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01727; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41728; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]1729; GFX90A-NEXT: s_waitcnt vmcnt(0)1730; GFX90A-NEXT: s_setpc_b64 s[30:31]1731;1732; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_1_1:1733; GFX942: ; %bb.0:1734; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1735; GFX942-NEXT: ;;#ASMSTART1736; GFX942-NEXT: ; def v[0:1]1737; GFX942-NEXT: ;;#ASMEND1738; GFX942-NEXT: s_mov_b32 s2, 0xffff1739; GFX942-NEXT: v_mov_b32_e32 v2, 01740; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v01741; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01742; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41743; GFX942-NEXT: global_store_dword v2, v1, s[0:1]1744; GFX942-NEXT: s_waitcnt vmcnt(0)1745; GFX942-NEXT: s_setpc_b64 s[30:31]1746 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1747 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1748 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 1, i32 1>1749 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81750 ret void1751}1752 1753define void @v_shuffle_v3bf16_v3bf16__3_1_1(ptr addrspace(1) inreg %ptr) {1754; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__3_1_1:1755; GFX900: ; %bb.0:1756; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1757; GFX900-NEXT: v_mov_b32_e32 v2, 01758; GFX900-NEXT: ;;#ASMSTART1759; GFX900-NEXT: ; def v[0:1]1760; GFX900-NEXT: ;;#ASMEND1761; GFX900-NEXT: global_store_dword v2, v0, s[16:17]1762; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01763; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:41764; GFX900-NEXT: s_waitcnt vmcnt(0)1765; GFX900-NEXT: s_setpc_b64 s[30:31]1766;1767; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__3_1_1:1768; GFX90A: ; %bb.0:1769; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1770; GFX90A-NEXT: v_mov_b32_e32 v2, 01771; GFX90A-NEXT: ;;#ASMSTART1772; GFX90A-NEXT: ; def v[0:1]1773; GFX90A-NEXT: ;;#ASMEND1774; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]1775; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01776; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:41777; GFX90A-NEXT: s_waitcnt vmcnt(0)1778; GFX90A-NEXT: s_setpc_b64 s[30:31]1779;1780; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__3_1_1:1781; GFX942: ; %bb.0:1782; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1783; GFX942-NEXT: v_mov_b32_e32 v2, 01784; GFX942-NEXT: ;;#ASMSTART1785; GFX942-NEXT: ; def v[0:1]1786; GFX942-NEXT: ;;#ASMEND1787; GFX942-NEXT: global_store_dword v2, v0, s[0:1]1788; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01789; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:41790; GFX942-NEXT: s_waitcnt vmcnt(0)1791; GFX942-NEXT: s_setpc_b64 s[30:31]1792 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1793 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1794 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 1, i32 1>1795 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81796 ret void1797}1798 1799define void @v_shuffle_v3bf16_v3bf16__4_1_1(ptr addrspace(1) inreg %ptr) {1800; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_1_1:1801; GFX900: ; %bb.0:1802; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1803; GFX900-NEXT: ;;#ASMSTART1804; GFX900-NEXT: ; def v[0:1]1805; GFX900-NEXT: ;;#ASMEND1806; GFX900-NEXT: ;;#ASMSTART1807; GFX900-NEXT: ; def v[1:2]1808; GFX900-NEXT: ;;#ASMEND1809; GFX900-NEXT: s_mov_b32 s4, 0x70603021810; GFX900-NEXT: v_mov_b32_e32 v3, 01811; GFX900-NEXT: v_perm_b32 v1, v0, v1, s41812; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01813; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1814; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41815; GFX900-NEXT: s_waitcnt vmcnt(0)1816; GFX900-NEXT: s_setpc_b64 s[30:31]1817;1818; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_1_1:1819; GFX90A: ; %bb.0:1820; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1821; GFX90A-NEXT: ;;#ASMSTART1822; GFX90A-NEXT: ; def v[0:1]1823; GFX90A-NEXT: ;;#ASMEND1824; GFX90A-NEXT: s_mov_b32 s4, 0x70603021825; GFX90A-NEXT: v_mov_b32_e32 v4, 01826; GFX90A-NEXT: ;;#ASMSTART1827; GFX90A-NEXT: ; def v[2:3]1828; GFX90A-NEXT: ;;#ASMEND1829; GFX90A-NEXT: v_perm_b32 v1, v0, v2, s41830; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01831; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1832; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41833; GFX90A-NEXT: s_waitcnt vmcnt(0)1834; GFX90A-NEXT: s_setpc_b64 s[30:31]1835;1836; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_1_1:1837; GFX942: ; %bb.0:1838; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1839; GFX942-NEXT: ;;#ASMSTART1840; GFX942-NEXT: ; def v[0:1]1841; GFX942-NEXT: ;;#ASMEND1842; GFX942-NEXT: s_mov_b32 s2, 0x70603021843; GFX942-NEXT: v_mov_b32_e32 v4, 01844; GFX942-NEXT: ;;#ASMSTART1845; GFX942-NEXT: ; def v[2:3]1846; GFX942-NEXT: ;;#ASMEND1847; GFX942-NEXT: s_nop 01848; GFX942-NEXT: v_perm_b32 v1, v0, v2, s21849; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01850; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1851; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41852; GFX942-NEXT: s_waitcnt vmcnt(0)1853; GFX942-NEXT: s_setpc_b64 s[30:31]1854 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1855 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1856 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1857 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1858 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 1, i32 1>1859 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81860 ret void1861}1862 1863define void @v_shuffle_v3bf16_v3bf16__5_1_1(ptr addrspace(1) inreg %ptr) {1864; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_1:1865; GFX900: ; %bb.0:1866; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1867; GFX900-NEXT: ;;#ASMSTART1868; GFX900-NEXT: ; def v[0:1]1869; GFX900-NEXT: ;;#ASMEND1870; GFX900-NEXT: ;;#ASMSTART1871; GFX900-NEXT: ; def v[1:2]1872; GFX900-NEXT: ;;#ASMEND1873; GFX900-NEXT: s_mov_b32 s4, 0xffff1874; GFX900-NEXT: v_mov_b32_e32 v3, 01875; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v01876; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01877; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41878; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1879; GFX900-NEXT: s_waitcnt vmcnt(0)1880; GFX900-NEXT: s_setpc_b64 s[30:31]1881;1882; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_1_1:1883; GFX90A: ; %bb.0:1884; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1885; GFX90A-NEXT: ;;#ASMSTART1886; GFX90A-NEXT: ; def v[0:1]1887; GFX90A-NEXT: ;;#ASMEND1888; GFX90A-NEXT: s_mov_b32 s4, 0xffff1889; GFX90A-NEXT: v_mov_b32_e32 v4, 01890; GFX90A-NEXT: ;;#ASMSTART1891; GFX90A-NEXT: ; def v[2:3]1892; GFX90A-NEXT: ;;#ASMEND1893; GFX90A-NEXT: v_bfi_b32 v1, s4, v3, v01894; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v01895; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:41896; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]1897; GFX90A-NEXT: s_waitcnt vmcnt(0)1898; GFX90A-NEXT: s_setpc_b64 s[30:31]1899;1900; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_1:1901; GFX942: ; %bb.0:1902; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1903; GFX942-NEXT: ;;#ASMSTART1904; GFX942-NEXT: ; def v[0:1]1905; GFX942-NEXT: ;;#ASMEND1906; GFX942-NEXT: s_mov_b32 s2, 0xffff1907; GFX942-NEXT: v_mov_b32_e32 v4, 01908; GFX942-NEXT: ;;#ASMSTART1909; GFX942-NEXT: ; def v[2:3]1910; GFX942-NEXT: ;;#ASMEND1911; GFX942-NEXT: s_nop 01912; GFX942-NEXT: v_bfi_b32 v1, s2, v3, v01913; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v01914; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:41915; GFX942-NEXT: global_store_dword v4, v1, s[0:1]1916; GFX942-NEXT: s_waitcnt vmcnt(0)1917; GFX942-NEXT: s_setpc_b64 s[30:31]1918 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1919 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1920 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1921 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1922 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 1>1923 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81924 ret void1925}1926 1927define void @v_shuffle_v3bf16_v3bf16__5_u_1(ptr addrspace(1) inreg %ptr) {1928; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_1:1929; GFX900: ; %bb.0:1930; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1931; GFX900-NEXT: v_mov_b32_e32 v3, 01932; GFX900-NEXT: ;;#ASMSTART1933; GFX900-NEXT: ; def v[0:1]1934; GFX900-NEXT: ;;#ASMEND1935; GFX900-NEXT: ;;#ASMSTART1936; GFX900-NEXT: ; def v[1:2]1937; GFX900-NEXT: ;;#ASMEND1938; GFX900-NEXT: global_store_short_d16_hi v3, v0, s[16:17] offset:41939; GFX900-NEXT: global_store_dword v3, v2, s[16:17]1940; GFX900-NEXT: s_waitcnt vmcnt(0)1941; GFX900-NEXT: s_setpc_b64 s[30:31]1942;1943; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_1:1944; GFX90A: ; %bb.0:1945; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1946; GFX90A-NEXT: v_mov_b32_e32 v4, 01947; GFX90A-NEXT: ;;#ASMSTART1948; GFX90A-NEXT: ; def v[0:1]1949; GFX90A-NEXT: ;;#ASMEND1950; GFX90A-NEXT: ;;#ASMSTART1951; GFX90A-NEXT: ; def v[2:3]1952; GFX90A-NEXT: ;;#ASMEND1953; GFX90A-NEXT: global_store_short_d16_hi v4, v0, s[16:17] offset:41954; GFX90A-NEXT: global_store_dword v4, v3, s[16:17]1955; GFX90A-NEXT: s_waitcnt vmcnt(0)1956; GFX90A-NEXT: s_setpc_b64 s[30:31]1957;1958; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_1:1959; GFX942: ; %bb.0:1960; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1961; GFX942-NEXT: v_mov_b32_e32 v4, 01962; GFX942-NEXT: ;;#ASMSTART1963; GFX942-NEXT: ; def v[0:1]1964; GFX942-NEXT: ;;#ASMEND1965; GFX942-NEXT: ;;#ASMSTART1966; GFX942-NEXT: ; def v[2:3]1967; GFX942-NEXT: ;;#ASMEND1968; GFX942-NEXT: global_store_short_d16_hi v4, v0, s[0:1] offset:41969; GFX942-NEXT: global_store_dword v4, v3, s[0:1]1970; GFX942-NEXT: s_waitcnt vmcnt(0)1971; GFX942-NEXT: s_setpc_b64 s[30:31]1972 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()1973 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()1974 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1975 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>1976 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 1>1977 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 81978 ret void1979}1980 1981define void @v_shuffle_v3bf16_v3bf16__5_0_1(ptr addrspace(1) inreg %ptr) {1982; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_1:1983; GFX900: ; %bb.0:1984; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)1985; GFX900-NEXT: ;;#ASMSTART1986; GFX900-NEXT: ; def v[0:1]1987; GFX900-NEXT: ;;#ASMEND1988; GFX900-NEXT: ;;#ASMSTART1989; GFX900-NEXT: ; def v[1:2]1990; GFX900-NEXT: ;;#ASMEND1991; GFX900-NEXT: s_mov_b32 s4, 0x50401001992; GFX900-NEXT: v_mov_b32_e32 v3, 01993; GFX900-NEXT: v_perm_b32 v1, v0, v2, s41994; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v01995; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:41996; GFX900-NEXT: global_store_dword v3, v1, s[16:17]1997; GFX900-NEXT: s_waitcnt vmcnt(0)1998; GFX900-NEXT: s_setpc_b64 s[30:31]1999;2000; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_1:2001; GFX90A: ; %bb.0:2002; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2003; GFX90A-NEXT: ;;#ASMSTART2004; GFX90A-NEXT: ; def v[0:1]2005; GFX90A-NEXT: ;;#ASMEND2006; GFX90A-NEXT: s_mov_b32 s4, 0x50401002007; GFX90A-NEXT: v_mov_b32_e32 v4, 02008; GFX90A-NEXT: ;;#ASMSTART2009; GFX90A-NEXT: ; def v[2:3]2010; GFX90A-NEXT: ;;#ASMEND2011; GFX90A-NEXT: v_perm_b32 v1, v0, v3, s42012; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v02013; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:42014; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]2015; GFX90A-NEXT: s_waitcnt vmcnt(0)2016; GFX90A-NEXT: s_setpc_b64 s[30:31]2017;2018; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_1:2019; GFX942: ; %bb.0:2020; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2021; GFX942-NEXT: ;;#ASMSTART2022; GFX942-NEXT: ; def v[0:1]2023; GFX942-NEXT: ;;#ASMEND2024; GFX942-NEXT: s_mov_b32 s2, 0x50401002025; GFX942-NEXT: v_mov_b32_e32 v4, 02026; GFX942-NEXT: ;;#ASMSTART2027; GFX942-NEXT: ; def v[2:3]2028; GFX942-NEXT: ;;#ASMEND2029; GFX942-NEXT: s_nop 02030; GFX942-NEXT: v_perm_b32 v1, v0, v3, s22031; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v02032; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:42033; GFX942-NEXT: global_store_dword v4, v1, s[0:1]2034; GFX942-NEXT: s_waitcnt vmcnt(0)2035; GFX942-NEXT: s_setpc_b64 s[30:31]2036 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2037 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2038 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2039 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2040 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 1>2041 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82042 ret void2043}2044 2045define void @v_shuffle_v3bf16_v3bf16__5_2_1(ptr addrspace(1) inreg %ptr) {2046; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_1:2047; GFX900: ; %bb.0:2048; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2049; GFX900-NEXT: ;;#ASMSTART2050; GFX900-NEXT: ; def v[0:1]2051; GFX900-NEXT: ;;#ASMEND2052; GFX900-NEXT: v_mov_b32_e32 v4, 02053; GFX900-NEXT: s_mov_b32 s4, 0x50401002054; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v02055; GFX900-NEXT: ;;#ASMSTART2056; GFX900-NEXT: ; def v[2:3]2057; GFX900-NEXT: ;;#ASMEND2058; GFX900-NEXT: v_perm_b32 v1, v1, v3, s42059; GFX900-NEXT: global_store_short v4, v0, s[16:17] offset:42060; GFX900-NEXT: global_store_dword v4, v1, s[16:17]2061; GFX900-NEXT: s_waitcnt vmcnt(0)2062; GFX900-NEXT: s_setpc_b64 s[30:31]2063;2064; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_1:2065; GFX90A: ; %bb.0:2066; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2067; GFX90A-NEXT: ;;#ASMSTART2068; GFX90A-NEXT: ; def v[0:1]2069; GFX90A-NEXT: ;;#ASMEND2070; GFX90A-NEXT: v_mov_b32_e32 v4, 02071; GFX90A-NEXT: s_mov_b32 s4, 0x50401002072; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v02073; GFX90A-NEXT: ;;#ASMSTART2074; GFX90A-NEXT: ; def v[2:3]2075; GFX90A-NEXT: ;;#ASMEND2076; GFX90A-NEXT: v_perm_b32 v1, v1, v3, s42077; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:42078; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]2079; GFX90A-NEXT: s_waitcnt vmcnt(0)2080; GFX90A-NEXT: s_setpc_b64 s[30:31]2081;2082; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_1:2083; GFX942: ; %bb.0:2084; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2085; GFX942-NEXT: ;;#ASMSTART2086; GFX942-NEXT: ; def v[0:1]2087; GFX942-NEXT: ;;#ASMEND2088; GFX942-NEXT: v_mov_b32_e32 v4, 02089; GFX942-NEXT: s_mov_b32 s2, 0x50401002090; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v02091; GFX942-NEXT: ;;#ASMSTART2092; GFX942-NEXT: ; def v[2:3]2093; GFX942-NEXT: ;;#ASMEND2094; GFX942-NEXT: s_nop 02095; GFX942-NEXT: v_perm_b32 v1, v1, v3, s22096; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:42097; GFX942-NEXT: global_store_dword v4, v1, s[0:1]2098; GFX942-NEXT: s_waitcnt vmcnt(0)2099; GFX942-NEXT: s_setpc_b64 s[30:31]2100 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2101 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2102 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2103 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2104 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 1>2105 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82106 ret void2107}2108 2109define void @v_shuffle_v3bf16_v3bf16__5_3_1(ptr addrspace(1) inreg %ptr) {2110; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_1:2111; GFX900: ; %bb.0:2112; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2113; GFX900-NEXT: ;;#ASMSTART2114; GFX900-NEXT: ; def v[0:1]2115; GFX900-NEXT: ;;#ASMEND2116; GFX900-NEXT: v_mov_b32_e32 v3, 02117; GFX900-NEXT: ;;#ASMSTART2118; GFX900-NEXT: ; def v[1:2]2119; GFX900-NEXT: ;;#ASMEND2120; GFX900-NEXT: s_mov_b32 s4, 0x50401002121; GFX900-NEXT: v_perm_b32 v1, v1, v2, s42122; GFX900-NEXT: global_store_short_d16_hi v3, v0, s[16:17] offset:42123; GFX900-NEXT: global_store_dword v3, v1, s[16:17]2124; GFX900-NEXT: s_waitcnt vmcnt(0)2125; GFX900-NEXT: s_setpc_b64 s[30:31]2126;2127; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_1:2128; GFX90A: ; %bb.0:2129; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2130; GFX90A-NEXT: v_mov_b32_e32 v4, 02131; GFX90A-NEXT: ;;#ASMSTART2132; GFX90A-NEXT: ; def v[0:1]2133; GFX90A-NEXT: ;;#ASMEND2134; GFX90A-NEXT: s_mov_b32 s4, 0x50401002135; GFX90A-NEXT: ;;#ASMSTART2136; GFX90A-NEXT: ; def v[2:3]2137; GFX90A-NEXT: ;;#ASMEND2138; GFX90A-NEXT: v_perm_b32 v1, v2, v3, s42139; GFX90A-NEXT: global_store_short_d16_hi v4, v0, s[16:17] offset:42140; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]2141; GFX90A-NEXT: s_waitcnt vmcnt(0)2142; GFX90A-NEXT: s_setpc_b64 s[30:31]2143;2144; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_1:2145; GFX942: ; %bb.0:2146; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2147; GFX942-NEXT: v_mov_b32_e32 v4, 02148; GFX942-NEXT: ;;#ASMSTART2149; GFX942-NEXT: ; def v[0:1]2150; GFX942-NEXT: ;;#ASMEND2151; GFX942-NEXT: s_mov_b32 s2, 0x50401002152; GFX942-NEXT: ;;#ASMSTART2153; GFX942-NEXT: ; def v[2:3]2154; GFX942-NEXT: ;;#ASMEND2155; GFX942-NEXT: s_nop 02156; GFX942-NEXT: v_perm_b32 v1, v2, v3, s22157; GFX942-NEXT: global_store_short_d16_hi v4, v0, s[0:1] offset:42158; GFX942-NEXT: global_store_dword v4, v1, s[0:1]2159; GFX942-NEXT: s_waitcnt vmcnt(0)2160; GFX942-NEXT: s_setpc_b64 s[30:31]2161 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2162 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2163 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2164 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2165 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 1>2166 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82167 ret void2168}2169 2170define void @v_shuffle_v3bf16_v3bf16__5_4_1(ptr addrspace(1) inreg %ptr) {2171; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_1:2172; GFX900: ; %bb.0:2173; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2174; GFX900-NEXT: ;;#ASMSTART2175; GFX900-NEXT: ; def v[0:1]2176; GFX900-NEXT: ;;#ASMEND2177; GFX900-NEXT: v_mov_b32_e32 v3, 02178; GFX900-NEXT: ;;#ASMSTART2179; GFX900-NEXT: ; def v[1:2]2180; GFX900-NEXT: ;;#ASMEND2181; GFX900-NEXT: s_mov_b32 s4, 0xffff2182; GFX900-NEXT: v_bfi_b32 v1, s4, v2, v12183; GFX900-NEXT: global_store_short_d16_hi v3, v0, s[16:17] offset:42184; GFX900-NEXT: global_store_dword v3, v1, s[16:17]2185; GFX900-NEXT: s_waitcnt vmcnt(0)2186; GFX900-NEXT: s_setpc_b64 s[30:31]2187;2188; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_1:2189; GFX90A: ; %bb.0:2190; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2191; GFX90A-NEXT: v_mov_b32_e32 v4, 02192; GFX90A-NEXT: ;;#ASMSTART2193; GFX90A-NEXT: ; def v[0:1]2194; GFX90A-NEXT: ;;#ASMEND2195; GFX90A-NEXT: s_mov_b32 s4, 0xffff2196; GFX90A-NEXT: ;;#ASMSTART2197; GFX90A-NEXT: ; def v[2:3]2198; GFX90A-NEXT: ;;#ASMEND2199; GFX90A-NEXT: v_bfi_b32 v1, s4, v3, v22200; GFX90A-NEXT: global_store_short_d16_hi v4, v0, s[16:17] offset:42201; GFX90A-NEXT: global_store_dword v4, v1, s[16:17]2202; GFX90A-NEXT: s_waitcnt vmcnt(0)2203; GFX90A-NEXT: s_setpc_b64 s[30:31]2204;2205; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_1:2206; GFX942: ; %bb.0:2207; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2208; GFX942-NEXT: v_mov_b32_e32 v4, 02209; GFX942-NEXT: ;;#ASMSTART2210; GFX942-NEXT: ; def v[0:1]2211; GFX942-NEXT: ;;#ASMEND2212; GFX942-NEXT: s_mov_b32 s2, 0xffff2213; GFX942-NEXT: ;;#ASMSTART2214; GFX942-NEXT: ; def v[2:3]2215; GFX942-NEXT: ;;#ASMEND2216; GFX942-NEXT: s_nop 02217; GFX942-NEXT: v_bfi_b32 v1, s2, v3, v22218; GFX942-NEXT: global_store_short_d16_hi v4, v0, s[0:1] offset:42219; GFX942-NEXT: global_store_dword v4, v1, s[0:1]2220; GFX942-NEXT: s_waitcnt vmcnt(0)2221; GFX942-NEXT: s_setpc_b64 s[30:31]2222 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2223 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2224 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2225 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2226 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 1>2227 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82228 ret void2229}2230 2231define void @v_shuffle_v3bf16_v3bf16__u_2_2(ptr addrspace(1) inreg %ptr) {2232; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__u_2_2:2233; GFX900: ; %bb.0:2234; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2235; GFX900-NEXT: v_mov_b32_e32 v2, 02236; GFX900-NEXT: ;;#ASMSTART2237; GFX900-NEXT: ; def v[0:1]2238; GFX900-NEXT: ;;#ASMEND2239; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v12240; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:42241; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2242; GFX900-NEXT: s_waitcnt vmcnt(0)2243; GFX900-NEXT: s_setpc_b64 s[30:31]2244;2245; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__u_2_2:2246; GFX90A: ; %bb.0:2247; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2248; GFX90A-NEXT: v_mov_b32_e32 v2, 02249; GFX90A-NEXT: ;;#ASMSTART2250; GFX90A-NEXT: ; def v[0:1]2251; GFX90A-NEXT: ;;#ASMEND2252; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v12253; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:42254; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2255; GFX90A-NEXT: s_waitcnt vmcnt(0)2256; GFX90A-NEXT: s_setpc_b64 s[30:31]2257;2258; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__u_2_2:2259; GFX942: ; %bb.0:2260; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2261; GFX942-NEXT: v_mov_b32_e32 v2, 02262; GFX942-NEXT: ;;#ASMSTART2263; GFX942-NEXT: ; def v[0:1]2264; GFX942-NEXT: ;;#ASMEND2265; GFX942-NEXT: s_nop 02266; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v12267; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:42268; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2269; GFX942-NEXT: s_waitcnt vmcnt(0)2270; GFX942-NEXT: s_setpc_b64 s[30:31]2271 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2272 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2273 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 2, i32 2>2274 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82275 ret void2276}2277 2278define void @v_shuffle_v3bf16_v3bf16__0_2_2(ptr addrspace(1) inreg %ptr) {2279; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_2_2:2280; GFX900: ; %bb.0:2281; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2282; GFX900-NEXT: v_mov_b32_e32 v2, 02283; GFX900-NEXT: ;;#ASMSTART2284; GFX900-NEXT: ; def v[0:1]2285; GFX900-NEXT: ;;#ASMEND2286; GFX900-NEXT: s_mov_b32 s4, 0x50401002287; GFX900-NEXT: v_perm_b32 v0, v1, v0, s42288; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:42289; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2290; GFX900-NEXT: s_waitcnt vmcnt(0)2291; GFX900-NEXT: s_setpc_b64 s[30:31]2292;2293; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_2_2:2294; GFX90A: ; %bb.0:2295; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2296; GFX90A-NEXT: v_mov_b32_e32 v2, 02297; GFX90A-NEXT: ;;#ASMSTART2298; GFX90A-NEXT: ; def v[0:1]2299; GFX90A-NEXT: ;;#ASMEND2300; GFX90A-NEXT: s_mov_b32 s4, 0x50401002301; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s42302; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:42303; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2304; GFX90A-NEXT: s_waitcnt vmcnt(0)2305; GFX90A-NEXT: s_setpc_b64 s[30:31]2306;2307; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_2_2:2308; GFX942: ; %bb.0:2309; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2310; GFX942-NEXT: v_mov_b32_e32 v2, 02311; GFX942-NEXT: ;;#ASMSTART2312; GFX942-NEXT: ; def v[0:1]2313; GFX942-NEXT: ;;#ASMEND2314; GFX942-NEXT: s_mov_b32 s2, 0x50401002315; GFX942-NEXT: v_perm_b32 v0, v1, v0, s22316; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:42317; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2318; GFX942-NEXT: s_waitcnt vmcnt(0)2319; GFX942-NEXT: s_setpc_b64 s[30:31]2320 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2321 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2322 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 2, i32 2>2323 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82324 ret void2325}2326 2327define void @v_shuffle_v3bf16_v3bf16__1_2_2(ptr addrspace(1) inreg %ptr) {2328; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_2_2:2329; GFX900: ; %bb.0:2330; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2331; GFX900-NEXT: v_mov_b32_e32 v2, 02332; GFX900-NEXT: ;;#ASMSTART2333; GFX900-NEXT: ; def v[0:1]2334; GFX900-NEXT: ;;#ASMEND2335; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 162336; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:42337; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2338; GFX900-NEXT: s_waitcnt vmcnt(0)2339; GFX900-NEXT: s_setpc_b64 s[30:31]2340;2341; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_2_2:2342; GFX90A: ; %bb.0:2343; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2344; GFX90A-NEXT: v_mov_b32_e32 v2, 02345; GFX90A-NEXT: ;;#ASMSTART2346; GFX90A-NEXT: ; def v[0:1]2347; GFX90A-NEXT: ;;#ASMEND2348; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 162349; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:42350; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2351; GFX90A-NEXT: s_waitcnt vmcnt(0)2352; GFX90A-NEXT: s_setpc_b64 s[30:31]2353;2354; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_2_2:2355; GFX942: ; %bb.0:2356; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2357; GFX942-NEXT: v_mov_b32_e32 v2, 02358; GFX942-NEXT: ;;#ASMSTART2359; GFX942-NEXT: ; def v[0:1]2360; GFX942-NEXT: ;;#ASMEND2361; GFX942-NEXT: s_nop 02362; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 162363; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:42364; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2365; GFX942-NEXT: s_waitcnt vmcnt(0)2366; GFX942-NEXT: s_setpc_b64 s[30:31]2367 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2368 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2369 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 2>2370 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82371 ret void2372}2373 2374define void @v_shuffle_v3bf16_v3bf16__2_2_2(ptr addrspace(1) inreg %ptr) {2375; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_2_2:2376; GFX900: ; %bb.0:2377; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2378; GFX900-NEXT: v_mov_b32_e32 v2, 02379; GFX900-NEXT: ;;#ASMSTART2380; GFX900-NEXT: ; def v[0:1]2381; GFX900-NEXT: ;;#ASMEND2382; GFX900-NEXT: s_mov_b32 s4, 0x50401002383; GFX900-NEXT: v_perm_b32 v0, v1, v1, s42384; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:42385; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2386; GFX900-NEXT: s_waitcnt vmcnt(0)2387; GFX900-NEXT: s_setpc_b64 s[30:31]2388;2389; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__2_2_2:2390; GFX90A: ; %bb.0:2391; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2392; GFX90A-NEXT: v_mov_b32_e32 v2, 02393; GFX90A-NEXT: ;;#ASMSTART2394; GFX90A-NEXT: ; def v[0:1]2395; GFX90A-NEXT: ;;#ASMEND2396; GFX90A-NEXT: s_mov_b32 s4, 0x50401002397; GFX90A-NEXT: v_perm_b32 v0, v1, v1, s42398; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:42399; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2400; GFX90A-NEXT: s_waitcnt vmcnt(0)2401; GFX90A-NEXT: s_setpc_b64 s[30:31]2402;2403; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_2_2:2404; GFX942: ; %bb.0:2405; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2406; GFX942-NEXT: v_mov_b32_e32 v2, 02407; GFX942-NEXT: ;;#ASMSTART2408; GFX942-NEXT: ; def v[0:1]2409; GFX942-NEXT: ;;#ASMEND2410; GFX942-NEXT: s_mov_b32 s2, 0x50401002411; GFX942-NEXT: v_perm_b32 v0, v1, v1, s22412; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:42413; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2414; GFX942-NEXT: s_waitcnt vmcnt(0)2415; GFX942-NEXT: s_setpc_b64 s[30:31]2416 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2417 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2418 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 2, i32 2>2419 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82420 ret void2421}2422 2423define void @v_shuffle_v3bf16_v3bf16__3_2_2(ptr addrspace(1) inreg %ptr) {2424; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__3_2_2:2425; GFX900: ; %bb.0:2426; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2427; GFX900-NEXT: v_mov_b32_e32 v2, 02428; GFX900-NEXT: ;;#ASMSTART2429; GFX900-NEXT: ; def v[0:1]2430; GFX900-NEXT: ;;#ASMEND2431; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v12432; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:42433; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2434; GFX900-NEXT: s_waitcnt vmcnt(0)2435; GFX900-NEXT: s_setpc_b64 s[30:31]2436;2437; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__3_2_2:2438; GFX90A: ; %bb.0:2439; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2440; GFX90A-NEXT: v_mov_b32_e32 v2, 02441; GFX90A-NEXT: ;;#ASMSTART2442; GFX90A-NEXT: ; def v[0:1]2443; GFX90A-NEXT: ;;#ASMEND2444; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v12445; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:42446; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2447; GFX90A-NEXT: s_waitcnt vmcnt(0)2448; GFX90A-NEXT: s_setpc_b64 s[30:31]2449;2450; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__3_2_2:2451; GFX942: ; %bb.0:2452; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2453; GFX942-NEXT: v_mov_b32_e32 v2, 02454; GFX942-NEXT: ;;#ASMSTART2455; GFX942-NEXT: ; def v[0:1]2456; GFX942-NEXT: ;;#ASMEND2457; GFX942-NEXT: s_nop 02458; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v12459; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:42460; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2461; GFX942-NEXT: s_waitcnt vmcnt(0)2462; GFX942-NEXT: s_setpc_b64 s[30:31]2463 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2464 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2465 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 2, i32 2>2466 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82467 ret void2468}2469 2470define void @v_shuffle_v3bf16_v3bf16__4_2_2(ptr addrspace(1) inreg %ptr) {2471; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_2_2:2472; GFX900: ; %bb.0:2473; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2474; GFX900-NEXT: v_mov_b32_e32 v4, 02475; GFX900-NEXT: ;;#ASMSTART2476; GFX900-NEXT: ; def v[0:1]2477; GFX900-NEXT: ;;#ASMEND2478; GFX900-NEXT: ;;#ASMSTART2479; GFX900-NEXT: ; def v[2:3]2480; GFX900-NEXT: ;;#ASMEND2481; GFX900-NEXT: v_alignbit_b32 v0, v1, v2, 162482; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42483; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2484; GFX900-NEXT: s_waitcnt vmcnt(0)2485; GFX900-NEXT: s_setpc_b64 s[30:31]2486;2487; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_2_2:2488; GFX90A: ; %bb.0:2489; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2490; GFX90A-NEXT: v_mov_b32_e32 v4, 02491; GFX90A-NEXT: ;;#ASMSTART2492; GFX90A-NEXT: ; def v[0:1]2493; GFX90A-NEXT: ;;#ASMEND2494; GFX90A-NEXT: ;;#ASMSTART2495; GFX90A-NEXT: ; def v[2:3]2496; GFX90A-NEXT: ;;#ASMEND2497; GFX90A-NEXT: v_alignbit_b32 v0, v1, v2, 162498; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42499; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2500; GFX90A-NEXT: s_waitcnt vmcnt(0)2501; GFX90A-NEXT: s_setpc_b64 s[30:31]2502;2503; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_2_2:2504; GFX942: ; %bb.0:2505; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2506; GFX942-NEXT: v_mov_b32_e32 v4, 02507; GFX942-NEXT: ;;#ASMSTART2508; GFX942-NEXT: ; def v[0:1]2509; GFX942-NEXT: ;;#ASMEND2510; GFX942-NEXT: ;;#ASMSTART2511; GFX942-NEXT: ; def v[2:3]2512; GFX942-NEXT: ;;#ASMEND2513; GFX942-NEXT: s_nop 02514; GFX942-NEXT: v_alignbit_b32 v0, v1, v2, 162515; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42516; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2517; GFX942-NEXT: s_waitcnt vmcnt(0)2518; GFX942-NEXT: s_setpc_b64 s[30:31]2519 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2520 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2521 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2522 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2523 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 2, i32 2>2524 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82525 ret void2526}2527 2528define void @v_shuffle_v3bf16_v3bf16__5_2_2(ptr addrspace(1) inreg %ptr) {2529; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_2:2530; GFX900: ; %bb.0:2531; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2532; GFX900-NEXT: v_mov_b32_e32 v4, 02533; GFX900-NEXT: ;;#ASMSTART2534; GFX900-NEXT: ; def v[0:1]2535; GFX900-NEXT: ;;#ASMEND2536; GFX900-NEXT: s_mov_b32 s4, 0x50401002537; GFX900-NEXT: ;;#ASMSTART2538; GFX900-NEXT: ; def v[2:3]2539; GFX900-NEXT: ;;#ASMEND2540; GFX900-NEXT: v_perm_b32 v0, v1, v3, s42541; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42542; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2543; GFX900-NEXT: s_waitcnt vmcnt(0)2544; GFX900-NEXT: s_setpc_b64 s[30:31]2545;2546; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_2:2547; GFX90A: ; %bb.0:2548; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2549; GFX90A-NEXT: v_mov_b32_e32 v4, 02550; GFX90A-NEXT: ;;#ASMSTART2551; GFX90A-NEXT: ; def v[0:1]2552; GFX90A-NEXT: ;;#ASMEND2553; GFX90A-NEXT: s_mov_b32 s4, 0x50401002554; GFX90A-NEXT: ;;#ASMSTART2555; GFX90A-NEXT: ; def v[2:3]2556; GFX90A-NEXT: ;;#ASMEND2557; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s42558; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42559; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2560; GFX90A-NEXT: s_waitcnt vmcnt(0)2561; GFX90A-NEXT: s_setpc_b64 s[30:31]2562;2563; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_2:2564; GFX942: ; %bb.0:2565; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2566; GFX942-NEXT: v_mov_b32_e32 v4, 02567; GFX942-NEXT: ;;#ASMSTART2568; GFX942-NEXT: ; def v[0:1]2569; GFX942-NEXT: ;;#ASMEND2570; GFX942-NEXT: s_mov_b32 s2, 0x50401002571; GFX942-NEXT: ;;#ASMSTART2572; GFX942-NEXT: ; def v[2:3]2573; GFX942-NEXT: ;;#ASMEND2574; GFX942-NEXT: s_nop 02575; GFX942-NEXT: v_perm_b32 v0, v1, v3, s22576; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42577; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2578; GFX942-NEXT: s_waitcnt vmcnt(0)2579; GFX942-NEXT: s_setpc_b64 s[30:31]2580 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2581 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2582 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2583 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2584 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 2>2585 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82586 ret void2587}2588 2589define void @v_shuffle_v3bf16_v3bf16__5_u_2(ptr addrspace(1) inreg %ptr) {2590; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_2:2591; GFX900: ; %bb.0:2592; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2593; GFX900-NEXT: v_mov_b32_e32 v4, 02594; GFX900-NEXT: ;;#ASMSTART2595; GFX900-NEXT: ; def v[0:1]2596; GFX900-NEXT: ;;#ASMEND2597; GFX900-NEXT: ;;#ASMSTART2598; GFX900-NEXT: ; def v[2:3]2599; GFX900-NEXT: ;;#ASMEND2600; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42601; GFX900-NEXT: global_store_dword v4, v3, s[16:17]2602; GFX900-NEXT: s_waitcnt vmcnt(0)2603; GFX900-NEXT: s_setpc_b64 s[30:31]2604;2605; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_2:2606; GFX90A: ; %bb.0:2607; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2608; GFX90A-NEXT: v_mov_b32_e32 v4, 02609; GFX90A-NEXT: ;;#ASMSTART2610; GFX90A-NEXT: ; def v[0:1]2611; GFX90A-NEXT: ;;#ASMEND2612; GFX90A-NEXT: ;;#ASMSTART2613; GFX90A-NEXT: ; def v[2:3]2614; GFX90A-NEXT: ;;#ASMEND2615; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42616; GFX90A-NEXT: global_store_dword v4, v3, s[16:17]2617; GFX90A-NEXT: s_waitcnt vmcnt(0)2618; GFX90A-NEXT: s_setpc_b64 s[30:31]2619;2620; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_2:2621; GFX942: ; %bb.0:2622; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2623; GFX942-NEXT: v_mov_b32_e32 v4, 02624; GFX942-NEXT: ;;#ASMSTART2625; GFX942-NEXT: ; def v[0:1]2626; GFX942-NEXT: ;;#ASMEND2627; GFX942-NEXT: ;;#ASMSTART2628; GFX942-NEXT: ; def v[2:3]2629; GFX942-NEXT: ;;#ASMEND2630; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42631; GFX942-NEXT: global_store_dword v4, v3, s[0:1]2632; GFX942-NEXT: s_waitcnt vmcnt(0)2633; GFX942-NEXT: s_setpc_b64 s[30:31]2634 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2635 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2636 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2637 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2638 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 2>2639 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82640 ret void2641}2642 2643define void @v_shuffle_v3bf16_v3bf16__5_0_2(ptr addrspace(1) inreg %ptr) {2644; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_2:2645; GFX900: ; %bb.0:2646; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2647; GFX900-NEXT: v_mov_b32_e32 v4, 02648; GFX900-NEXT: ;;#ASMSTART2649; GFX900-NEXT: ; def v[0:1]2650; GFX900-NEXT: ;;#ASMEND2651; GFX900-NEXT: s_mov_b32 s4, 0x50401002652; GFX900-NEXT: ;;#ASMSTART2653; GFX900-NEXT: ; def v[2:3]2654; GFX900-NEXT: ;;#ASMEND2655; GFX900-NEXT: v_perm_b32 v0, v0, v3, s42656; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42657; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2658; GFX900-NEXT: s_waitcnt vmcnt(0)2659; GFX900-NEXT: s_setpc_b64 s[30:31]2660;2661; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_2:2662; GFX90A: ; %bb.0:2663; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2664; GFX90A-NEXT: v_mov_b32_e32 v4, 02665; GFX90A-NEXT: ;;#ASMSTART2666; GFX90A-NEXT: ; def v[0:1]2667; GFX90A-NEXT: ;;#ASMEND2668; GFX90A-NEXT: s_mov_b32 s4, 0x50401002669; GFX90A-NEXT: ;;#ASMSTART2670; GFX90A-NEXT: ; def v[2:3]2671; GFX90A-NEXT: ;;#ASMEND2672; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s42673; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42674; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2675; GFX90A-NEXT: s_waitcnt vmcnt(0)2676; GFX90A-NEXT: s_setpc_b64 s[30:31]2677;2678; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_2:2679; GFX942: ; %bb.0:2680; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2681; GFX942-NEXT: v_mov_b32_e32 v4, 02682; GFX942-NEXT: ;;#ASMSTART2683; GFX942-NEXT: ; def v[0:1]2684; GFX942-NEXT: ;;#ASMEND2685; GFX942-NEXT: s_mov_b32 s2, 0x50401002686; GFX942-NEXT: ;;#ASMSTART2687; GFX942-NEXT: ; def v[2:3]2688; GFX942-NEXT: ;;#ASMEND2689; GFX942-NEXT: s_nop 02690; GFX942-NEXT: v_perm_b32 v0, v0, v3, s22691; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42692; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2693; GFX942-NEXT: s_waitcnt vmcnt(0)2694; GFX942-NEXT: s_setpc_b64 s[30:31]2695 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2696 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2697 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2698 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2699 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 2>2700 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82701 ret void2702}2703 2704define void @v_shuffle_v3bf16_v3bf16__5_1_2(ptr addrspace(1) inreg %ptr) {2705; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_2:2706; GFX900: ; %bb.0:2707; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2708; GFX900-NEXT: v_mov_b32_e32 v4, 02709; GFX900-NEXT: ;;#ASMSTART2710; GFX900-NEXT: ; def v[0:1]2711; GFX900-NEXT: ;;#ASMEND2712; GFX900-NEXT: s_mov_b32 s4, 0xffff2713; GFX900-NEXT: ;;#ASMSTART2714; GFX900-NEXT: ; def v[2:3]2715; GFX900-NEXT: ;;#ASMEND2716; GFX900-NEXT: v_bfi_b32 v0, s4, v3, v02717; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42718; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2719; GFX900-NEXT: s_waitcnt vmcnt(0)2720; GFX900-NEXT: s_setpc_b64 s[30:31]2721;2722; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_1_2:2723; GFX90A: ; %bb.0:2724; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2725; GFX90A-NEXT: v_mov_b32_e32 v4, 02726; GFX90A-NEXT: ;;#ASMSTART2727; GFX90A-NEXT: ; def v[0:1]2728; GFX90A-NEXT: ;;#ASMEND2729; GFX90A-NEXT: s_mov_b32 s4, 0xffff2730; GFX90A-NEXT: ;;#ASMSTART2731; GFX90A-NEXT: ; def v[2:3]2732; GFX90A-NEXT: ;;#ASMEND2733; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v02734; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42735; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2736; GFX90A-NEXT: s_waitcnt vmcnt(0)2737; GFX90A-NEXT: s_setpc_b64 s[30:31]2738;2739; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_2:2740; GFX942: ; %bb.0:2741; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2742; GFX942-NEXT: v_mov_b32_e32 v4, 02743; GFX942-NEXT: ;;#ASMSTART2744; GFX942-NEXT: ; def v[0:1]2745; GFX942-NEXT: ;;#ASMEND2746; GFX942-NEXT: s_mov_b32 s2, 0xffff2747; GFX942-NEXT: ;;#ASMSTART2748; GFX942-NEXT: ; def v[2:3]2749; GFX942-NEXT: ;;#ASMEND2750; GFX942-NEXT: s_nop 02751; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v02752; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42753; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2754; GFX942-NEXT: s_waitcnt vmcnt(0)2755; GFX942-NEXT: s_setpc_b64 s[30:31]2756 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2757 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2758 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2759 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2760 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 2>2761 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82762 ret void2763}2764 2765define void @v_shuffle_v3bf16_v3bf16__5_3_2(ptr addrspace(1) inreg %ptr) {2766; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_2:2767; GFX900: ; %bb.0:2768; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2769; GFX900-NEXT: v_mov_b32_e32 v4, 02770; GFX900-NEXT: ;;#ASMSTART2771; GFX900-NEXT: ; def v[0:1]2772; GFX900-NEXT: ;;#ASMEND2773; GFX900-NEXT: s_mov_b32 s4, 0x50401002774; GFX900-NEXT: ;;#ASMSTART2775; GFX900-NEXT: ; def v[2:3]2776; GFX900-NEXT: ;;#ASMEND2777; GFX900-NEXT: v_perm_b32 v0, v2, v3, s42778; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42779; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2780; GFX900-NEXT: s_waitcnt vmcnt(0)2781; GFX900-NEXT: s_setpc_b64 s[30:31]2782;2783; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_2:2784; GFX90A: ; %bb.0:2785; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2786; GFX90A-NEXT: v_mov_b32_e32 v4, 02787; GFX90A-NEXT: ;;#ASMSTART2788; GFX90A-NEXT: ; def v[0:1]2789; GFX90A-NEXT: ;;#ASMEND2790; GFX90A-NEXT: s_mov_b32 s4, 0x50401002791; GFX90A-NEXT: ;;#ASMSTART2792; GFX90A-NEXT: ; def v[2:3]2793; GFX90A-NEXT: ;;#ASMEND2794; GFX90A-NEXT: v_perm_b32 v0, v2, v3, s42795; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42796; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2797; GFX90A-NEXT: s_waitcnt vmcnt(0)2798; GFX90A-NEXT: s_setpc_b64 s[30:31]2799;2800; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_2:2801; GFX942: ; %bb.0:2802; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2803; GFX942-NEXT: v_mov_b32_e32 v4, 02804; GFX942-NEXT: ;;#ASMSTART2805; GFX942-NEXT: ; def v[0:1]2806; GFX942-NEXT: ;;#ASMEND2807; GFX942-NEXT: s_mov_b32 s2, 0x50401002808; GFX942-NEXT: ;;#ASMSTART2809; GFX942-NEXT: ; def v[2:3]2810; GFX942-NEXT: ;;#ASMEND2811; GFX942-NEXT: s_nop 02812; GFX942-NEXT: v_perm_b32 v0, v2, v3, s22813; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42814; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2815; GFX942-NEXT: s_waitcnt vmcnt(0)2816; GFX942-NEXT: s_setpc_b64 s[30:31]2817 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2818 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2819 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2820 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2821 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 2>2822 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82823 ret void2824}2825 2826define void @v_shuffle_v3bf16_v3bf16__5_4_2(ptr addrspace(1) inreg %ptr) {2827; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_2:2828; GFX900: ; %bb.0:2829; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2830; GFX900-NEXT: v_mov_b32_e32 v4, 02831; GFX900-NEXT: ;;#ASMSTART2832; GFX900-NEXT: ; def v[0:1]2833; GFX900-NEXT: ;;#ASMEND2834; GFX900-NEXT: s_mov_b32 s4, 0xffff2835; GFX900-NEXT: ;;#ASMSTART2836; GFX900-NEXT: ; def v[2:3]2837; GFX900-NEXT: ;;#ASMEND2838; GFX900-NEXT: v_bfi_b32 v0, s4, v3, v22839; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:42840; GFX900-NEXT: global_store_dword v4, v0, s[16:17]2841; GFX900-NEXT: s_waitcnt vmcnt(0)2842; GFX900-NEXT: s_setpc_b64 s[30:31]2843;2844; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_2:2845; GFX90A: ; %bb.0:2846; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2847; GFX90A-NEXT: v_mov_b32_e32 v4, 02848; GFX90A-NEXT: ;;#ASMSTART2849; GFX90A-NEXT: ; def v[0:1]2850; GFX90A-NEXT: ;;#ASMEND2851; GFX90A-NEXT: s_mov_b32 s4, 0xffff2852; GFX90A-NEXT: ;;#ASMSTART2853; GFX90A-NEXT: ; def v[2:3]2854; GFX90A-NEXT: ;;#ASMEND2855; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v22856; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:42857; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]2858; GFX90A-NEXT: s_waitcnt vmcnt(0)2859; GFX90A-NEXT: s_setpc_b64 s[30:31]2860;2861; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_2:2862; GFX942: ; %bb.0:2863; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2864; GFX942-NEXT: v_mov_b32_e32 v4, 02865; GFX942-NEXT: ;;#ASMSTART2866; GFX942-NEXT: ; def v[0:1]2867; GFX942-NEXT: ;;#ASMEND2868; GFX942-NEXT: s_mov_b32 s2, 0xffff2869; GFX942-NEXT: ;;#ASMSTART2870; GFX942-NEXT: ; def v[2:3]2871; GFX942-NEXT: ;;#ASMEND2872; GFX942-NEXT: s_nop 02873; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v22874; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:42875; GFX942-NEXT: global_store_dword v4, v0, s[0:1]2876; GFX942-NEXT: s_waitcnt vmcnt(0)2877; GFX942-NEXT: s_setpc_b64 s[30:31]2878 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2879 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()2880 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2881 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2882 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 2>2883 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82884 ret void2885}2886 2887define void @v_shuffle_v3bf16_v3bf16__u_3_3(ptr addrspace(1) inreg %ptr) {2888; GFX9-LABEL: v_shuffle_v3bf16_v3bf16__u_3_3:2889; GFX9: ; %bb.0:2890; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2891; GFX9-NEXT: s_setpc_b64 s[30:31]2892 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2893 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2894 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 3, i32 3>2895 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82896 ret void2897}2898 2899define void @v_shuffle_v3bf16_v3bf16__0_3_3(ptr addrspace(1) inreg %ptr) {2900; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_3_3:2901; GFX900: ; %bb.0:2902; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2903; GFX900-NEXT: v_mov_b32_e32 v2, 02904; GFX900-NEXT: ;;#ASMSTART2905; GFX900-NEXT: ; def v[0:1]2906; GFX900-NEXT: ;;#ASMEND2907; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:42908; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2909; GFX900-NEXT: s_waitcnt vmcnt(0)2910; GFX900-NEXT: s_setpc_b64 s[30:31]2911;2912; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_3_3:2913; GFX90A: ; %bb.0:2914; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2915; GFX90A-NEXT: v_mov_b32_e32 v2, 02916; GFX90A-NEXT: ;;#ASMSTART2917; GFX90A-NEXT: ; def v[0:1]2918; GFX90A-NEXT: ;;#ASMEND2919; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:42920; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2921; GFX90A-NEXT: s_waitcnt vmcnt(0)2922; GFX90A-NEXT: s_setpc_b64 s[30:31]2923;2924; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_3_3:2925; GFX942: ; %bb.0:2926; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2927; GFX942-NEXT: v_mov_b32_e32 v2, 02928; GFX942-NEXT: ;;#ASMSTART2929; GFX942-NEXT: ; def v[0:1]2930; GFX942-NEXT: ;;#ASMEND2931; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:42932; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2933; GFX942-NEXT: s_waitcnt vmcnt(0)2934; GFX942-NEXT: s_setpc_b64 s[30:31]2935 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2936 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2937 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 3, i32 3>2938 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82939 ret void2940}2941 2942define void @v_shuffle_v3bf16_v3bf16__1_3_3(ptr addrspace(1) inreg %ptr) {2943; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_3_3:2944; GFX900: ; %bb.0:2945; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2946; GFX900-NEXT: ;;#ASMSTART2947; GFX900-NEXT: ; def v[0:1]2948; GFX900-NEXT: ;;#ASMEND2949; GFX900-NEXT: v_mov_b32_e32 v2, 02950; GFX900-NEXT: v_alignbit_b32 v0, s4, v0, 162951; GFX900-NEXT: global_store_dword v2, v0, s[16:17]2952; GFX900-NEXT: s_waitcnt vmcnt(0)2953; GFX900-NEXT: s_setpc_b64 s[30:31]2954;2955; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_3_3:2956; GFX90A: ; %bb.0:2957; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2958; GFX90A-NEXT: ;;#ASMSTART2959; GFX90A-NEXT: ; def v[0:1]2960; GFX90A-NEXT: ;;#ASMEND2961; GFX90A-NEXT: v_mov_b32_e32 v2, 02962; GFX90A-NEXT: v_alignbit_b32 v0, s4, v0, 162963; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]2964; GFX90A-NEXT: s_waitcnt vmcnt(0)2965; GFX90A-NEXT: s_setpc_b64 s[30:31]2966;2967; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_3_3:2968; GFX942: ; %bb.0:2969; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2970; GFX942-NEXT: ;;#ASMSTART2971; GFX942-NEXT: ; def v[0:1]2972; GFX942-NEXT: ;;#ASMEND2973; GFX942-NEXT: v_mov_b32_e32 v2, 02974; GFX942-NEXT: v_alignbit_b32 v0, s0, v0, 162975; GFX942-NEXT: global_store_dword v2, v0, s[0:1]2976; GFX942-NEXT: s_waitcnt vmcnt(0)2977; GFX942-NEXT: s_setpc_b64 s[30:31]2978 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()2979 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>2980 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 3, i32 3>2981 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 82982 ret void2983}2984 2985define void @v_shuffle_v3bf16_v3bf16__2_3_3(ptr addrspace(1) inreg %ptr) {2986; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_3_3:2987; GFX900: ; %bb.0:2988; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)2989; GFX900-NEXT: v_mov_b32_e32 v2, 02990; GFX900-NEXT: ;;#ASMSTART2991; GFX900-NEXT: ; def v[0:1]2992; GFX900-NEXT: ;;#ASMEND2993; GFX900-NEXT: global_store_dword v2, v1, s[16:17]2994; GFX900-NEXT: s_waitcnt vmcnt(0)2995; GFX900-NEXT: s_setpc_b64 s[30:31]2996;2997; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__2_3_3:2998; GFX90A: ; %bb.0:2999; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3000; GFX90A-NEXT: v_mov_b32_e32 v2, 03001; GFX90A-NEXT: ;;#ASMSTART3002; GFX90A-NEXT: ; def v[0:1]3003; GFX90A-NEXT: ;;#ASMEND3004; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3005; GFX90A-NEXT: s_waitcnt vmcnt(0)3006; GFX90A-NEXT: s_setpc_b64 s[30:31]3007;3008; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_3_3:3009; GFX942: ; %bb.0:3010; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3011; GFX942-NEXT: v_mov_b32_e32 v2, 03012; GFX942-NEXT: ;;#ASMSTART3013; GFX942-NEXT: ; def v[0:1]3014; GFX942-NEXT: ;;#ASMEND3015; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3016; GFX942-NEXT: s_waitcnt vmcnt(0)3017; GFX942-NEXT: s_setpc_b64 s[30:31]3018 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3019 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3020 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 3, i32 3>3021 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83022 ret void3023}3024 3025define void @v_shuffle_v3bf16_v3bf16__3_3_3(ptr addrspace(1) inreg %ptr) {3026; GFX9-LABEL: v_shuffle_v3bf16_v3bf16__3_3_3:3027; GFX9: ; %bb.0:3028; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3029; GFX9-NEXT: s_setpc_b64 s[30:31]3030 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3031 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3032 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 3, i32 3>3033 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83034 ret void3035}3036 3037define void @v_shuffle_v3bf16_v3bf16__4_3_3(ptr addrspace(1) inreg %ptr) {3038; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_3_3:3039; GFX900: ; %bb.0:3040; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3041; GFX900-NEXT: v_mov_b32_e32 v2, 03042; GFX900-NEXT: ;;#ASMSTART3043; GFX900-NEXT: ; def v[0:1]3044; GFX900-NEXT: ;;#ASMEND3045; GFX900-NEXT: v_alignbit_b32 v1, v0, v0, 163046; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43047; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3048; GFX900-NEXT: s_waitcnt vmcnt(0)3049; GFX900-NEXT: s_setpc_b64 s[30:31]3050;3051; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_3_3:3052; GFX90A: ; %bb.0:3053; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3054; GFX90A-NEXT: v_mov_b32_e32 v2, 03055; GFX90A-NEXT: ;;#ASMSTART3056; GFX90A-NEXT: ; def v[0:1]3057; GFX90A-NEXT: ;;#ASMEND3058; GFX90A-NEXT: v_alignbit_b32 v1, v0, v0, 163059; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43060; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3061; GFX90A-NEXT: s_waitcnt vmcnt(0)3062; GFX90A-NEXT: s_setpc_b64 s[30:31]3063;3064; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_3_3:3065; GFX942: ; %bb.0:3066; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3067; GFX942-NEXT: v_mov_b32_e32 v2, 03068; GFX942-NEXT: ;;#ASMSTART3069; GFX942-NEXT: ; def v[0:1]3070; GFX942-NEXT: ;;#ASMEND3071; GFX942-NEXT: s_nop 03072; GFX942-NEXT: v_alignbit_b32 v1, v0, v0, 163073; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43074; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3075; GFX942-NEXT: s_waitcnt vmcnt(0)3076; GFX942-NEXT: s_setpc_b64 s[30:31]3077 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3078 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3079 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3080 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3081 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 3, i32 3>3082 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83083 ret void3084}3085 3086define void @v_shuffle_v3bf16_v3bf16__5_3_3(ptr addrspace(1) inreg %ptr) {3087; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_3:3088; GFX900: ; %bb.0:3089; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3090; GFX900-NEXT: v_mov_b32_e32 v2, 03091; GFX900-NEXT: ;;#ASMSTART3092; GFX900-NEXT: ; def v[0:1]3093; GFX900-NEXT: ;;#ASMEND3094; GFX900-NEXT: s_mov_b32 s4, 0x50401003095; GFX900-NEXT: v_perm_b32 v1, v0, v1, s43096; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43097; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3098; GFX900-NEXT: s_waitcnt vmcnt(0)3099; GFX900-NEXT: s_setpc_b64 s[30:31]3100;3101; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_3:3102; GFX90A: ; %bb.0:3103; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3104; GFX90A-NEXT: v_mov_b32_e32 v2, 03105; GFX90A-NEXT: ;;#ASMSTART3106; GFX90A-NEXT: ; def v[0:1]3107; GFX90A-NEXT: ;;#ASMEND3108; GFX90A-NEXT: s_mov_b32 s4, 0x50401003109; GFX90A-NEXT: v_perm_b32 v1, v0, v1, s43110; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43111; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3112; GFX90A-NEXT: s_waitcnt vmcnt(0)3113; GFX90A-NEXT: s_setpc_b64 s[30:31]3114;3115; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_3:3116; GFX942: ; %bb.0:3117; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3118; GFX942-NEXT: v_mov_b32_e32 v2, 03119; GFX942-NEXT: ;;#ASMSTART3120; GFX942-NEXT: ; def v[0:1]3121; GFX942-NEXT: ;;#ASMEND3122; GFX942-NEXT: s_mov_b32 s2, 0x50401003123; GFX942-NEXT: v_perm_b32 v1, v0, v1, s23124; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43125; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3126; GFX942-NEXT: s_waitcnt vmcnt(0)3127; GFX942-NEXT: s_setpc_b64 s[30:31]3128 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3129 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3130 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3131 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3132 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 3>3133 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83134 ret void3135}3136 3137define void @v_shuffle_v3bf16_v3bf16__5_u_3(ptr addrspace(1) inreg %ptr) {3138; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_3:3139; GFX900: ; %bb.0:3140; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3141; GFX900-NEXT: v_mov_b32_e32 v2, 03142; GFX900-NEXT: ;;#ASMSTART3143; GFX900-NEXT: ; def v[0:1]3144; GFX900-NEXT: ;;#ASMEND3145; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43146; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3147; GFX900-NEXT: s_waitcnt vmcnt(0)3148; GFX900-NEXT: s_setpc_b64 s[30:31]3149;3150; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_3:3151; GFX90A: ; %bb.0:3152; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3153; GFX90A-NEXT: v_mov_b32_e32 v2, 03154; GFX90A-NEXT: ;;#ASMSTART3155; GFX90A-NEXT: ; def v[0:1]3156; GFX90A-NEXT: ;;#ASMEND3157; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43158; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3159; GFX90A-NEXT: s_waitcnt vmcnt(0)3160; GFX90A-NEXT: s_setpc_b64 s[30:31]3161;3162; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_3:3163; GFX942: ; %bb.0:3164; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3165; GFX942-NEXT: v_mov_b32_e32 v2, 03166; GFX942-NEXT: ;;#ASMSTART3167; GFX942-NEXT: ; def v[0:1]3168; GFX942-NEXT: ;;#ASMEND3169; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43170; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3171; GFX942-NEXT: s_waitcnt vmcnt(0)3172; GFX942-NEXT: s_setpc_b64 s[30:31]3173 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3174 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3175 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3176 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3177 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 3>3178 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83179 ret void3180}3181 3182define void @v_shuffle_v3bf16_v3bf16__5_0_3(ptr addrspace(1) inreg %ptr) {3183; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_3:3184; GFX900: ; %bb.0:3185; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3186; GFX900-NEXT: ;;#ASMSTART3187; GFX900-NEXT: ; def v[0:1]3188; GFX900-NEXT: ;;#ASMEND3189; GFX900-NEXT: v_mov_b32_e32 v3, 03190; GFX900-NEXT: ;;#ASMSTART3191; GFX900-NEXT: ; def v[1:2]3192; GFX900-NEXT: ;;#ASMEND3193; GFX900-NEXT: s_mov_b32 s4, 0x50401003194; GFX900-NEXT: v_perm_b32 v0, v0, v2, s43195; GFX900-NEXT: global_store_short v3, v1, s[16:17] offset:43196; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3197; GFX900-NEXT: s_waitcnt vmcnt(0)3198; GFX900-NEXT: s_setpc_b64 s[30:31]3199;3200; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_3:3201; GFX90A: ; %bb.0:3202; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3203; GFX90A-NEXT: v_mov_b32_e32 v4, 03204; GFX90A-NEXT: ;;#ASMSTART3205; GFX90A-NEXT: ; def v[0:1]3206; GFX90A-NEXT: ;;#ASMEND3207; GFX90A-NEXT: ;;#ASMSTART3208; GFX90A-NEXT: ; def v[2:3]3209; GFX90A-NEXT: ;;#ASMEND3210; GFX90A-NEXT: s_mov_b32 s4, 0x50401003211; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s43212; GFX90A-NEXT: global_store_short v4, v2, s[16:17] offset:43213; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3214; GFX90A-NEXT: s_waitcnt vmcnt(0)3215; GFX90A-NEXT: s_setpc_b64 s[30:31]3216;3217; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_3:3218; GFX942: ; %bb.0:3219; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3220; GFX942-NEXT: v_mov_b32_e32 v4, 03221; GFX942-NEXT: ;;#ASMSTART3222; GFX942-NEXT: ; def v[0:1]3223; GFX942-NEXT: ;;#ASMEND3224; GFX942-NEXT: ;;#ASMSTART3225; GFX942-NEXT: ; def v[2:3]3226; GFX942-NEXT: ;;#ASMEND3227; GFX942-NEXT: s_mov_b32 s2, 0x50401003228; GFX942-NEXT: v_perm_b32 v0, v0, v3, s23229; GFX942-NEXT: global_store_short v4, v2, s[0:1] offset:43230; GFX942-NEXT: global_store_dword v4, 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 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3236 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3237 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 3>3238 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83239 ret void3240}3241 3242define void @v_shuffle_v3bf16_v3bf16__5_1_3(ptr addrspace(1) inreg %ptr) {3243; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_3:3244; GFX900: ; %bb.0:3245; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3246; GFX900-NEXT: ;;#ASMSTART3247; GFX900-NEXT: ; def v[0:1]3248; GFX900-NEXT: ;;#ASMEND3249; GFX900-NEXT: v_mov_b32_e32 v3, 03250; GFX900-NEXT: ;;#ASMSTART3251; GFX900-NEXT: ; def v[1:2]3252; GFX900-NEXT: ;;#ASMEND3253; GFX900-NEXT: s_mov_b32 s4, 0xffff3254; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v03255; GFX900-NEXT: global_store_short v3, v1, s[16:17] offset:43256; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3257; GFX900-NEXT: s_waitcnt vmcnt(0)3258; GFX900-NEXT: s_setpc_b64 s[30:31]3259;3260; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_1_3:3261; GFX90A: ; %bb.0:3262; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3263; GFX90A-NEXT: v_mov_b32_e32 v4, 03264; GFX90A-NEXT: ;;#ASMSTART3265; GFX90A-NEXT: ; def v[0:1]3266; GFX90A-NEXT: ;;#ASMEND3267; GFX90A-NEXT: ;;#ASMSTART3268; GFX90A-NEXT: ; def v[2:3]3269; GFX90A-NEXT: ;;#ASMEND3270; GFX90A-NEXT: s_mov_b32 s4, 0xffff3271; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v03272; GFX90A-NEXT: global_store_short v4, v2, s[16:17] offset:43273; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3274; GFX90A-NEXT: s_waitcnt vmcnt(0)3275; GFX90A-NEXT: s_setpc_b64 s[30:31]3276;3277; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_3:3278; GFX942: ; %bb.0:3279; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3280; GFX942-NEXT: v_mov_b32_e32 v4, 03281; GFX942-NEXT: ;;#ASMSTART3282; GFX942-NEXT: ; def v[0:1]3283; GFX942-NEXT: ;;#ASMEND3284; GFX942-NEXT: ;;#ASMSTART3285; GFX942-NEXT: ; def v[2:3]3286; GFX942-NEXT: ;;#ASMEND3287; GFX942-NEXT: s_mov_b32 s2, 0xffff3288; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v03289; GFX942-NEXT: global_store_short v4, v2, s[0:1] offset:43290; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3291; GFX942-NEXT: s_waitcnt vmcnt(0)3292; GFX942-NEXT: s_setpc_b64 s[30:31]3293 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3294 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3295 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3296 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3297 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 3>3298 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83299 ret void3300}3301 3302define void @v_shuffle_v3bf16_v3bf16__5_2_3(ptr addrspace(1) inreg %ptr) {3303; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_3:3304; GFX900: ; %bb.0:3305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3306; GFX900-NEXT: v_mov_b32_e32 v4, 03307; GFX900-NEXT: ;;#ASMSTART3308; GFX900-NEXT: ; def v[0:1]3309; GFX900-NEXT: ;;#ASMEND3310; GFX900-NEXT: ;;#ASMSTART3311; GFX900-NEXT: ; def v[2:3]3312; GFX900-NEXT: ;;#ASMEND3313; GFX900-NEXT: s_mov_b32 s4, 0x50401003314; GFX900-NEXT: v_perm_b32 v0, v1, v3, s43315; GFX900-NEXT: global_store_short v4, v2, s[16:17] offset:43316; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3317; GFX900-NEXT: s_waitcnt vmcnt(0)3318; GFX900-NEXT: s_setpc_b64 s[30:31]3319;3320; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_3:3321; GFX90A: ; %bb.0:3322; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3323; GFX90A-NEXT: v_mov_b32_e32 v4, 03324; GFX90A-NEXT: ;;#ASMSTART3325; GFX90A-NEXT: ; def v[0:1]3326; GFX90A-NEXT: ;;#ASMEND3327; GFX90A-NEXT: ;;#ASMSTART3328; GFX90A-NEXT: ; def v[2:3]3329; GFX90A-NEXT: ;;#ASMEND3330; GFX90A-NEXT: s_mov_b32 s4, 0x50401003331; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s43332; GFX90A-NEXT: global_store_short v4, v2, s[16:17] offset:43333; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3334; GFX90A-NEXT: s_waitcnt vmcnt(0)3335; GFX90A-NEXT: s_setpc_b64 s[30:31]3336;3337; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_3:3338; GFX942: ; %bb.0:3339; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3340; GFX942-NEXT: v_mov_b32_e32 v4, 03341; GFX942-NEXT: ;;#ASMSTART3342; GFX942-NEXT: ; def v[0:1]3343; GFX942-NEXT: ;;#ASMEND3344; GFX942-NEXT: ;;#ASMSTART3345; GFX942-NEXT: ; def v[2:3]3346; GFX942-NEXT: ;;#ASMEND3347; GFX942-NEXT: s_mov_b32 s2, 0x50401003348; GFX942-NEXT: v_perm_b32 v0, v1, v3, s23349; GFX942-NEXT: global_store_short v4, v2, s[0:1] offset:43350; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3351; GFX942-NEXT: s_waitcnt vmcnt(0)3352; GFX942-NEXT: s_setpc_b64 s[30:31]3353 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3354 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3355 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3356 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3357 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 3>3358 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83359 ret void3360}3361 3362define void @v_shuffle_v3bf16_v3bf16__5_4_3(ptr addrspace(1) inreg %ptr) {3363; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_3:3364; GFX900: ; %bb.0:3365; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3366; GFX900-NEXT: v_mov_b32_e32 v2, 03367; GFX900-NEXT: ;;#ASMSTART3368; GFX900-NEXT: ; def v[0:1]3369; GFX900-NEXT: ;;#ASMEND3370; GFX900-NEXT: s_mov_b32 s4, 0xffff3371; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v03372; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43373; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3374; GFX900-NEXT: s_waitcnt vmcnt(0)3375; GFX900-NEXT: s_setpc_b64 s[30:31]3376;3377; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_3:3378; GFX90A: ; %bb.0:3379; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3380; GFX90A-NEXT: v_mov_b32_e32 v2, 03381; GFX90A-NEXT: ;;#ASMSTART3382; GFX90A-NEXT: ; def v[0:1]3383; GFX90A-NEXT: ;;#ASMEND3384; GFX90A-NEXT: s_mov_b32 s4, 0xffff3385; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v03386; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43387; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3388; GFX90A-NEXT: s_waitcnt vmcnt(0)3389; GFX90A-NEXT: s_setpc_b64 s[30:31]3390;3391; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_3:3392; GFX942: ; %bb.0:3393; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3394; GFX942-NEXT: v_mov_b32_e32 v2, 03395; GFX942-NEXT: ;;#ASMSTART3396; GFX942-NEXT: ; def v[0:1]3397; GFX942-NEXT: ;;#ASMEND3398; GFX942-NEXT: s_mov_b32 s2, 0xffff3399; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v03400; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43401; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3402; GFX942-NEXT: s_waitcnt vmcnt(0)3403; GFX942-NEXT: s_setpc_b64 s[30:31]3404 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3405 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3406 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3407 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3408 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 3>3409 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83410 ret void3411}3412 3413define void @v_shuffle_v3bf16_v3bf16__u_4_4(ptr addrspace(1) inreg %ptr) {3414; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__u_4_4:3415; GFX900: ; %bb.0:3416; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3417; GFX900-NEXT: v_mov_b32_e32 v2, 03418; GFX900-NEXT: ;;#ASMSTART3419; GFX900-NEXT: ; def v[0:1]3420; GFX900-NEXT: ;;#ASMEND3421; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3422; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v03423; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43424; GFX900-NEXT: s_waitcnt vmcnt(0)3425; GFX900-NEXT: s_setpc_b64 s[30:31]3426;3427; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__u_4_4:3428; GFX90A: ; %bb.0:3429; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3430; GFX90A-NEXT: v_mov_b32_e32 v2, 03431; GFX90A-NEXT: ;;#ASMSTART3432; GFX90A-NEXT: ; def v[0:1]3433; GFX90A-NEXT: ;;#ASMEND3434; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3435; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v03436; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43437; GFX90A-NEXT: s_waitcnt vmcnt(0)3438; GFX90A-NEXT: s_setpc_b64 s[30:31]3439;3440; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__u_4_4:3441; GFX942: ; %bb.0:3442; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3443; GFX942-NEXT: v_mov_b32_e32 v2, 03444; GFX942-NEXT: ;;#ASMSTART3445; GFX942-NEXT: ; def v[0:1]3446; GFX942-NEXT: ;;#ASMEND3447; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3448; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v03449; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43450; GFX942-NEXT: s_waitcnt vmcnt(0)3451; GFX942-NEXT: s_setpc_b64 s[30:31]3452 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3453 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3454 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3455 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3456 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 poison, i32 4, i32 4>3457 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83458 ret void3459}3460 3461define void @v_shuffle_v3bf16_v3bf16__0_4_4(ptr addrspace(1) inreg %ptr) {3462; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_4_4:3463; GFX900: ; %bb.0:3464; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3465; GFX900-NEXT: ;;#ASMSTART3466; GFX900-NEXT: ; def v[0:1]3467; GFX900-NEXT: ;;#ASMEND3468; GFX900-NEXT: s_mov_b32 s4, 0xffff3469; GFX900-NEXT: v_mov_b32_e32 v3, 03470; GFX900-NEXT: ;;#ASMSTART3471; GFX900-NEXT: ; def v[1:2]3472; GFX900-NEXT: ;;#ASMEND3473; GFX900-NEXT: v_bfi_b32 v0, s4, v0, v13474; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3475; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v13476; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:43477; GFX900-NEXT: s_waitcnt vmcnt(0)3478; GFX900-NEXT: s_setpc_b64 s[30:31]3479;3480; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_4_4:3481; GFX90A: ; %bb.0:3482; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3483; GFX90A-NEXT: ;;#ASMSTART3484; GFX90A-NEXT: ; def v[0:1]3485; GFX90A-NEXT: ;;#ASMEND3486; GFX90A-NEXT: s_mov_b32 s4, 0xffff3487; GFX90A-NEXT: v_mov_b32_e32 v4, 03488; GFX90A-NEXT: ;;#ASMSTART3489; GFX90A-NEXT: ; def v[2:3]3490; GFX90A-NEXT: ;;#ASMEND3491; GFX90A-NEXT: v_bfi_b32 v0, s4, v0, v23492; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3493; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v23494; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:43495; GFX90A-NEXT: s_waitcnt vmcnt(0)3496; GFX90A-NEXT: s_setpc_b64 s[30:31]3497;3498; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_4_4:3499; GFX942: ; %bb.0:3500; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3501; GFX942-NEXT: ;;#ASMSTART3502; GFX942-NEXT: ; def v[0:1]3503; GFX942-NEXT: ;;#ASMEND3504; GFX942-NEXT: s_mov_b32 s2, 0xffff3505; GFX942-NEXT: v_mov_b32_e32 v4, 03506; GFX942-NEXT: ;;#ASMSTART3507; GFX942-NEXT: ; def v[2:3]3508; GFX942-NEXT: ;;#ASMEND3509; GFX942-NEXT: s_nop 03510; GFX942-NEXT: v_bfi_b32 v0, s2, v0, v23511; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3512; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v23513; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:43514; GFX942-NEXT: s_waitcnt vmcnt(0)3515; GFX942-NEXT: s_setpc_b64 s[30:31]3516 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3517 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3518 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3519 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3520 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 0, i32 4, i32 4>3521 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83522 ret void3523}3524 3525define void @v_shuffle_v3bf16_v3bf16__1_4_4(ptr addrspace(1) inreg %ptr) {3526; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_4_4:3527; GFX900: ; %bb.0:3528; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3529; GFX900-NEXT: ;;#ASMSTART3530; GFX900-NEXT: ; def v[0:1]3531; GFX900-NEXT: ;;#ASMEND3532; GFX900-NEXT: s_mov_b32 s4, 0x70603023533; GFX900-NEXT: v_mov_b32_e32 v3, 03534; GFX900-NEXT: ;;#ASMSTART3535; GFX900-NEXT: ; def v[1:2]3536; GFX900-NEXT: ;;#ASMEND3537; GFX900-NEXT: v_perm_b32 v0, v1, v0, s43538; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3539; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v13540; GFX900-NEXT: global_store_short v3, v0, s[16:17] offset:43541; GFX900-NEXT: s_waitcnt vmcnt(0)3542; GFX900-NEXT: s_setpc_b64 s[30:31]3543;3544; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_4_4:3545; GFX90A: ; %bb.0:3546; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3547; GFX90A-NEXT: ;;#ASMSTART3548; GFX90A-NEXT: ; def v[0:1]3549; GFX90A-NEXT: ;;#ASMEND3550; GFX90A-NEXT: s_mov_b32 s4, 0x70603023551; GFX90A-NEXT: v_mov_b32_e32 v4, 03552; GFX90A-NEXT: ;;#ASMSTART3553; GFX90A-NEXT: ; def v[2:3]3554; GFX90A-NEXT: ;;#ASMEND3555; GFX90A-NEXT: v_perm_b32 v0, v2, v0, s43556; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3557; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v23558; GFX90A-NEXT: global_store_short v4, v0, s[16:17] offset:43559; GFX90A-NEXT: s_waitcnt vmcnt(0)3560; GFX90A-NEXT: s_setpc_b64 s[30:31]3561;3562; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_4_4:3563; GFX942: ; %bb.0:3564; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3565; GFX942-NEXT: ;;#ASMSTART3566; GFX942-NEXT: ; def v[0:1]3567; GFX942-NEXT: ;;#ASMEND3568; GFX942-NEXT: s_mov_b32 s2, 0x70603023569; GFX942-NEXT: v_mov_b32_e32 v4, 03570; GFX942-NEXT: ;;#ASMSTART3571; GFX942-NEXT: ; def v[2:3]3572; GFX942-NEXT: ;;#ASMEND3573; GFX942-NEXT: s_nop 03574; GFX942-NEXT: v_perm_b32 v0, v2, v0, s23575; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3576; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v23577; GFX942-NEXT: global_store_short v4, v0, s[0:1] offset:43578; GFX942-NEXT: s_waitcnt vmcnt(0)3579; GFX942-NEXT: s_setpc_b64 s[30:31]3580 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3581 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3582 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3583 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3584 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 1, i32 4, i32 4>3585 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83586 ret void3587}3588 3589define void @v_shuffle_v3bf16_v3bf16__2_4_4(ptr addrspace(1) inreg %ptr) {3590; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_4_4:3591; GFX900: ; %bb.0:3592; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3593; GFX900-NEXT: ;;#ASMSTART3594; GFX900-NEXT: ; def v[0:1]3595; GFX900-NEXT: ;;#ASMEND3596; GFX900-NEXT: s_mov_b32 s4, 0xffff3597; GFX900-NEXT: v_mov_b32_e32 v4, 03598; GFX900-NEXT: ;;#ASMSTART3599; GFX900-NEXT: ; def v[2:3]3600; GFX900-NEXT: ;;#ASMEND3601; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v23602; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v23603; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:43604; GFX900-NEXT: global_store_dword v4, v0, 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_v3bf16_v3bf16__2_4_4:3609; GFX90A: ; %bb.0:3610; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3611; GFX90A-NEXT: ;;#ASMSTART3612; GFX90A-NEXT: ; def v[0:1]3613; GFX90A-NEXT: ;;#ASMEND3614; GFX90A-NEXT: s_mov_b32 s4, 0xffff3615; GFX90A-NEXT: v_mov_b32_e32 v4, 03616; GFX90A-NEXT: ;;#ASMSTART3617; GFX90A-NEXT: ; def v[2:3]3618; GFX90A-NEXT: ;;#ASMEND3619; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v23620; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v23621; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:43622; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3623; GFX90A-NEXT: s_waitcnt vmcnt(0)3624; GFX90A-NEXT: s_setpc_b64 s[30:31]3625;3626; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_4_4:3627; GFX942: ; %bb.0:3628; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3629; GFX942-NEXT: ;;#ASMSTART3630; GFX942-NEXT: ; def v[0:1]3631; GFX942-NEXT: ;;#ASMEND3632; GFX942-NEXT: s_mov_b32 s2, 0xffff3633; GFX942-NEXT: v_mov_b32_e32 v4, 03634; GFX942-NEXT: ;;#ASMSTART3635; GFX942-NEXT: ; def v[2:3]3636; GFX942-NEXT: ;;#ASMEND3637; GFX942-NEXT: s_nop 03638; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v23639; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v23640; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:43641; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3642; GFX942-NEXT: s_waitcnt vmcnt(0)3643; GFX942-NEXT: s_setpc_b64 s[30:31]3644 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3645 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3646 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3647 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3648 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 2, i32 4, i32 4>3649 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83650 ret void3651}3652 3653define void @v_shuffle_v3bf16_v3bf16__3_4_4(ptr addrspace(1) inreg %ptr) {3654; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__3_4_4:3655; GFX900: ; %bb.0:3656; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3657; GFX900-NEXT: v_mov_b32_e32 v2, 03658; GFX900-NEXT: ;;#ASMSTART3659; GFX900-NEXT: ; def v[0:1]3660; GFX900-NEXT: ;;#ASMEND3661; GFX900-NEXT: global_store_dword v2, v0, s[16:17]3662; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v03663; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43664; GFX900-NEXT: s_waitcnt vmcnt(0)3665; GFX900-NEXT: s_setpc_b64 s[30:31]3666;3667; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__3_4_4:3668; GFX90A: ; %bb.0:3669; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3670; GFX90A-NEXT: v_mov_b32_e32 v2, 03671; GFX90A-NEXT: ;;#ASMSTART3672; GFX90A-NEXT: ; def v[0:1]3673; GFX90A-NEXT: ;;#ASMEND3674; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]3675; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v03676; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43677; GFX90A-NEXT: s_waitcnt vmcnt(0)3678; GFX90A-NEXT: s_setpc_b64 s[30:31]3679;3680; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__3_4_4:3681; GFX942: ; %bb.0:3682; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3683; GFX942-NEXT: v_mov_b32_e32 v2, 03684; GFX942-NEXT: ;;#ASMSTART3685; GFX942-NEXT: ; def v[0:1]3686; GFX942-NEXT: ;;#ASMEND3687; GFX942-NEXT: global_store_dword v2, v0, s[0:1]3688; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v03689; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43690; GFX942-NEXT: s_waitcnt vmcnt(0)3691; GFX942-NEXT: s_setpc_b64 s[30:31]3692 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3693 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3694 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3695 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3696 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 3, i32 4, i32 4>3697 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83698 ret void3699}3700 3701define void @v_shuffle_v3bf16_v3bf16__4_4_4(ptr addrspace(1) inreg %ptr) {3702; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_4_4:3703; GFX900: ; %bb.0:3704; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3705; GFX900-NEXT: ;;#ASMSTART3706; GFX900-NEXT: ; def v[0:1]3707; GFX900-NEXT: ;;#ASMEND3708; GFX900-NEXT: s_mov_b32 s4, 0x70603023709; GFX900-NEXT: v_mov_b32_e32 v2, 03710; GFX900-NEXT: v_perm_b32 v1, v0, v0, s43711; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v03712; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3713; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43714; GFX900-NEXT: s_waitcnt vmcnt(0)3715; GFX900-NEXT: s_setpc_b64 s[30:31]3716;3717; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_4_4:3718; GFX90A: ; %bb.0:3719; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3720; GFX90A-NEXT: ;;#ASMSTART3721; GFX90A-NEXT: ; def v[0:1]3722; GFX90A-NEXT: ;;#ASMEND3723; GFX90A-NEXT: s_mov_b32 s4, 0x70603023724; GFX90A-NEXT: v_mov_b32_e32 v2, 03725; GFX90A-NEXT: v_perm_b32 v1, v0, v0, s43726; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v03727; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3728; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43729; GFX90A-NEXT: s_waitcnt vmcnt(0)3730; GFX90A-NEXT: s_setpc_b64 s[30:31]3731;3732; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_4_4:3733; GFX942: ; %bb.0:3734; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3735; GFX942-NEXT: ;;#ASMSTART3736; GFX942-NEXT: ; def v[0:1]3737; GFX942-NEXT: ;;#ASMEND3738; GFX942-NEXT: s_mov_b32 s2, 0x70603023739; GFX942-NEXT: v_mov_b32_e32 v2, 03740; GFX942-NEXT: v_perm_b32 v1, v0, v0, s23741; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v03742; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3743; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43744; GFX942-NEXT: s_waitcnt vmcnt(0)3745; GFX942-NEXT: s_setpc_b64 s[30:31]3746 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3747 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3748 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3749 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3750 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 4, i32 4>3751 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83752 ret void3753}3754 3755define void @v_shuffle_v3bf16_v3bf16__5_4_4(ptr addrspace(1) inreg %ptr) {3756; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_4:3757; GFX900: ; %bb.0:3758; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3759; GFX900-NEXT: ;;#ASMSTART3760; GFX900-NEXT: ; def v[0:1]3761; GFX900-NEXT: ;;#ASMEND3762; GFX900-NEXT: s_mov_b32 s4, 0xffff3763; GFX900-NEXT: v_mov_b32_e32 v2, 03764; GFX900-NEXT: v_bfi_b32 v1, s4, v1, v03765; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v03766; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43767; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3768; GFX900-NEXT: s_waitcnt vmcnt(0)3769; GFX900-NEXT: s_setpc_b64 s[30:31]3770;3771; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_4:3772; GFX90A: ; %bb.0:3773; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3774; GFX90A-NEXT: ;;#ASMSTART3775; GFX90A-NEXT: ; def v[0:1]3776; GFX90A-NEXT: ;;#ASMEND3777; GFX90A-NEXT: s_mov_b32 s4, 0xffff3778; GFX90A-NEXT: v_mov_b32_e32 v2, 03779; GFX90A-NEXT: v_bfi_b32 v1, s4, v1, v03780; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v03781; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43782; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3783; GFX90A-NEXT: s_waitcnt vmcnt(0)3784; GFX90A-NEXT: s_setpc_b64 s[30:31]3785;3786; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_4:3787; GFX942: ; %bb.0:3788; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3789; GFX942-NEXT: ;;#ASMSTART3790; GFX942-NEXT: ; def v[0:1]3791; GFX942-NEXT: ;;#ASMEND3792; GFX942-NEXT: s_mov_b32 s2, 0xffff3793; GFX942-NEXT: v_mov_b32_e32 v2, 03794; GFX942-NEXT: v_bfi_b32 v1, s2, v1, v03795; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v03796; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43797; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3798; GFX942-NEXT: s_waitcnt vmcnt(0)3799; GFX942-NEXT: s_setpc_b64 s[30:31]3800 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3801 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3802 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3803 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3804 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 4>3805 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83806 ret void3807}3808 3809define void @v_shuffle_v3bf16_v3bf16__5_u_4(ptr addrspace(1) inreg %ptr) {3810; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_4:3811; GFX900: ; %bb.0:3812; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3813; GFX900-NEXT: ;;#ASMSTART3814; GFX900-NEXT: ; def v[0:1]3815; GFX900-NEXT: ;;#ASMEND3816; GFX900-NEXT: v_mov_b32_e32 v2, 03817; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v03818; GFX900-NEXT: global_store_dword v2, v1, s[16:17]3819; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:43820; GFX900-NEXT: s_waitcnt vmcnt(0)3821; GFX900-NEXT: s_setpc_b64 s[30:31]3822;3823; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_4:3824; GFX90A: ; %bb.0:3825; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3826; GFX90A-NEXT: ;;#ASMSTART3827; GFX90A-NEXT: ; def v[0:1]3828; GFX90A-NEXT: ;;#ASMEND3829; GFX90A-NEXT: v_mov_b32_e32 v2, 03830; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v03831; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]3832; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:43833; GFX90A-NEXT: s_waitcnt vmcnt(0)3834; GFX90A-NEXT: s_setpc_b64 s[30:31]3835;3836; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_4:3837; GFX942: ; %bb.0:3838; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3839; GFX942-NEXT: ;;#ASMSTART3840; GFX942-NEXT: ; def v[0:1]3841; GFX942-NEXT: ;;#ASMEND3842; GFX942-NEXT: v_mov_b32_e32 v2, 03843; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v03844; GFX942-NEXT: global_store_dword v2, v1, s[0:1]3845; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:43846; GFX942-NEXT: s_waitcnt vmcnt(0)3847; GFX942-NEXT: s_setpc_b64 s[30:31]3848 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3849 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3850 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3851 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3852 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 4>3853 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83854 ret void3855}3856 3857define void @v_shuffle_v3bf16_v3bf16__5_0_4(ptr addrspace(1) inreg %ptr) {3858; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_4:3859; GFX900: ; %bb.0:3860; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3861; GFX900-NEXT: ;;#ASMSTART3862; GFX900-NEXT: ; def v[0:1]3863; GFX900-NEXT: ;;#ASMEND3864; GFX900-NEXT: ;;#ASMSTART3865; GFX900-NEXT: ; def v[1:2]3866; GFX900-NEXT: ;;#ASMEND3867; GFX900-NEXT: v_mov_b32_e32 v3, 03868; GFX900-NEXT: s_mov_b32 s4, 0x50401003869; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v13870; GFX900-NEXT: v_perm_b32 v0, v0, v2, s43871; GFX900-NEXT: global_store_short v3, v1, s[16:17] offset:43872; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3873; GFX900-NEXT: s_waitcnt vmcnt(0)3874; GFX900-NEXT: s_setpc_b64 s[30:31]3875;3876; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_4:3877; GFX90A: ; %bb.0:3878; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3879; GFX90A-NEXT: ;;#ASMSTART3880; GFX90A-NEXT: ; def v[0:1]3881; GFX90A-NEXT: ;;#ASMEND3882; GFX90A-NEXT: v_mov_b32_e32 v4, 03883; GFX90A-NEXT: ;;#ASMSTART3884; GFX90A-NEXT: ; def v[2:3]3885; GFX90A-NEXT: ;;#ASMEND3886; GFX90A-NEXT: s_mov_b32 s4, 0x50401003887; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v23888; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s43889; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:43890; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3891; GFX90A-NEXT: s_waitcnt vmcnt(0)3892; GFX90A-NEXT: s_setpc_b64 s[30:31]3893;3894; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_4:3895; GFX942: ; %bb.0:3896; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3897; GFX942-NEXT: ;;#ASMSTART3898; GFX942-NEXT: ; def v[0:1]3899; GFX942-NEXT: ;;#ASMEND3900; GFX942-NEXT: v_mov_b32_e32 v4, 03901; GFX942-NEXT: ;;#ASMSTART3902; GFX942-NEXT: ; def v[2:3]3903; GFX942-NEXT: ;;#ASMEND3904; GFX942-NEXT: s_mov_b32 s2, 0x50401003905; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v23906; GFX942-NEXT: v_perm_b32 v0, v0, v3, s23907; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:43908; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3909; GFX942-NEXT: s_waitcnt vmcnt(0)3910; GFX942-NEXT: s_setpc_b64 s[30:31]3911 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3912 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3913 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3914 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3915 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 4>3916 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83917 ret void3918}3919 3920define void @v_shuffle_v3bf16_v3bf16__5_1_4(ptr addrspace(1) inreg %ptr) {3921; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_4:3922; GFX900: ; %bb.0:3923; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3924; GFX900-NEXT: ;;#ASMSTART3925; GFX900-NEXT: ; def v[0:1]3926; GFX900-NEXT: ;;#ASMEND3927; GFX900-NEXT: ;;#ASMSTART3928; GFX900-NEXT: ; def v[1:2]3929; GFX900-NEXT: ;;#ASMEND3930; GFX900-NEXT: v_mov_b32_e32 v3, 03931; GFX900-NEXT: s_mov_b32 s4, 0xffff3932; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v13933; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v03934; GFX900-NEXT: global_store_short v3, v1, s[16:17] offset:43935; GFX900-NEXT: global_store_dword v3, v0, s[16:17]3936; GFX900-NEXT: s_waitcnt vmcnt(0)3937; GFX900-NEXT: s_setpc_b64 s[30:31]3938;3939; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_1_4:3940; GFX90A: ; %bb.0:3941; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3942; GFX90A-NEXT: ;;#ASMSTART3943; GFX90A-NEXT: ; def v[0:1]3944; GFX90A-NEXT: ;;#ASMEND3945; GFX90A-NEXT: v_mov_b32_e32 v4, 03946; GFX90A-NEXT: ;;#ASMSTART3947; GFX90A-NEXT: ; def v[2:3]3948; GFX90A-NEXT: ;;#ASMEND3949; GFX90A-NEXT: s_mov_b32 s4, 0xffff3950; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v23951; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v03952; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:43953; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]3954; GFX90A-NEXT: s_waitcnt vmcnt(0)3955; GFX90A-NEXT: s_setpc_b64 s[30:31]3956;3957; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_4:3958; GFX942: ; %bb.0:3959; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3960; GFX942-NEXT: ;;#ASMSTART3961; GFX942-NEXT: ; def v[0:1]3962; GFX942-NEXT: ;;#ASMEND3963; GFX942-NEXT: v_mov_b32_e32 v4, 03964; GFX942-NEXT: ;;#ASMSTART3965; GFX942-NEXT: ; def v[2:3]3966; GFX942-NEXT: ;;#ASMEND3967; GFX942-NEXT: s_mov_b32 s2, 0xffff3968; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v23969; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v03970; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:43971; GFX942-NEXT: global_store_dword v4, v0, s[0:1]3972; GFX942-NEXT: s_waitcnt vmcnt(0)3973; GFX942-NEXT: s_setpc_b64 s[30:31]3974 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()3975 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()3976 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3977 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>3978 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 4>3979 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 83980 ret void3981}3982 3983define void @v_shuffle_v3bf16_v3bf16__5_2_4(ptr addrspace(1) inreg %ptr) {3984; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_4:3985; GFX900: ; %bb.0:3986; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)3987; GFX900-NEXT: ;;#ASMSTART3988; GFX900-NEXT: ; def v[0:1]3989; GFX900-NEXT: ;;#ASMEND3990; GFX900-NEXT: s_mov_b32 s4, 0x50401003991; GFX900-NEXT: v_mov_b32_e32 v4, 03992; GFX900-NEXT: ;;#ASMSTART3993; GFX900-NEXT: ; def v[2:3]3994; GFX900-NEXT: ;;#ASMEND3995; GFX900-NEXT: v_perm_b32 v0, v1, v3, s43996; GFX900-NEXT: v_lshrrev_b32_e32 v1, 16, v23997; GFX900-NEXT: global_store_short v4, v1, s[16:17] offset:43998; GFX900-NEXT: global_store_dword v4, v0, s[16:17]3999; GFX900-NEXT: s_waitcnt vmcnt(0)4000; GFX900-NEXT: s_setpc_b64 s[30:31]4001;4002; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_4:4003; GFX90A: ; %bb.0:4004; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4005; GFX90A-NEXT: ;;#ASMSTART4006; GFX90A-NEXT: ; def v[0:1]4007; GFX90A-NEXT: ;;#ASMEND4008; GFX90A-NEXT: s_mov_b32 s4, 0x50401004009; GFX90A-NEXT: v_mov_b32_e32 v4, 04010; GFX90A-NEXT: ;;#ASMSTART4011; GFX90A-NEXT: ; def v[2:3]4012; GFX90A-NEXT: ;;#ASMEND4013; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s44014; GFX90A-NEXT: v_lshrrev_b32_e32 v1, 16, v24015; GFX90A-NEXT: global_store_short v4, v1, s[16:17] offset:44016; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4017; GFX90A-NEXT: s_waitcnt vmcnt(0)4018; GFX90A-NEXT: s_setpc_b64 s[30:31]4019;4020; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_4:4021; GFX942: ; %bb.0:4022; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4023; GFX942-NEXT: ;;#ASMSTART4024; GFX942-NEXT: ; def v[0:1]4025; GFX942-NEXT: ;;#ASMEND4026; GFX942-NEXT: s_mov_b32 s2, 0x50401004027; GFX942-NEXT: v_mov_b32_e32 v4, 04028; GFX942-NEXT: ;;#ASMSTART4029; GFX942-NEXT: ; def v[2:3]4030; GFX942-NEXT: ;;#ASMEND4031; GFX942-NEXT: s_nop 04032; GFX942-NEXT: v_perm_b32 v0, v1, v3, s24033; GFX942-NEXT: v_lshrrev_b32_e32 v1, 16, v24034; GFX942-NEXT: global_store_short v4, v1, s[0:1] offset:44035; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4036; GFX942-NEXT: s_waitcnt vmcnt(0)4037; GFX942-NEXT: s_setpc_b64 s[30:31]4038 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4039 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4040 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4041 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4042 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 4>4043 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84044 ret void4045}4046 4047define void @v_shuffle_v3bf16_v3bf16__5_3_4(ptr addrspace(1) inreg %ptr) {4048; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_4:4049; GFX900: ; %bb.0:4050; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4051; GFX900-NEXT: ;;#ASMSTART4052; GFX900-NEXT: ; def v[0:1]4053; GFX900-NEXT: ;;#ASMEND4054; GFX900-NEXT: s_mov_b32 s4, 0x50401004055; GFX900-NEXT: v_mov_b32_e32 v2, 04056; GFX900-NEXT: v_perm_b32 v1, v0, v1, s44057; GFX900-NEXT: v_lshrrev_b32_e32 v0, 16, v04058; GFX900-NEXT: global_store_short v2, v0, s[16:17] offset:44059; GFX900-NEXT: global_store_dword v2, v1, s[16:17]4060; GFX900-NEXT: s_waitcnt vmcnt(0)4061; GFX900-NEXT: s_setpc_b64 s[30:31]4062;4063; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_4:4064; GFX90A: ; %bb.0:4065; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4066; GFX90A-NEXT: ;;#ASMSTART4067; GFX90A-NEXT: ; def v[0:1]4068; GFX90A-NEXT: ;;#ASMEND4069; GFX90A-NEXT: s_mov_b32 s4, 0x50401004070; GFX90A-NEXT: v_mov_b32_e32 v2, 04071; GFX90A-NEXT: v_perm_b32 v1, v0, v1, s44072; GFX90A-NEXT: v_lshrrev_b32_e32 v0, 16, v04073; GFX90A-NEXT: global_store_short v2, v0, s[16:17] offset:44074; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]4075; GFX90A-NEXT: s_waitcnt vmcnt(0)4076; GFX90A-NEXT: s_setpc_b64 s[30:31]4077;4078; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_4:4079; GFX942: ; %bb.0:4080; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4081; GFX942-NEXT: ;;#ASMSTART4082; GFX942-NEXT: ; def v[0:1]4083; GFX942-NEXT: ;;#ASMEND4084; GFX942-NEXT: s_mov_b32 s2, 0x50401004085; GFX942-NEXT: v_mov_b32_e32 v2, 04086; GFX942-NEXT: v_perm_b32 v1, v0, v1, s24087; GFX942-NEXT: v_lshrrev_b32_e32 v0, 16, v04088; GFX942-NEXT: global_store_short v2, v0, s[0:1] offset:44089; GFX942-NEXT: global_store_dword v2, v1, s[0:1]4090; GFX942-NEXT: s_waitcnt vmcnt(0)4091; GFX942-NEXT: s_setpc_b64 s[30:31]4092 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4093 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4094 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4095 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4096 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 4>4097 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84098 ret void4099}4100 4101define void @v_shuffle_v3bf16_v3bf16__u_5_5(ptr addrspace(1) inreg %ptr) {4102; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__u_5_5:4103; GFX900: ; %bb.0:4104; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4105; GFX900-NEXT: v_mov_b32_e32 v2, 04106; GFX900-NEXT: ;;#ASMSTART4107; GFX900-NEXT: ; def v[0:1]4108; GFX900-NEXT: ;;#ASMEND4109; GFX900-NEXT: v_lshlrev_b32_e32 v0, 16, v14110; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:44111; GFX900-NEXT: global_store_dword v2, v0, s[16:17]4112; GFX900-NEXT: s_waitcnt vmcnt(0)4113; GFX900-NEXT: s_setpc_b64 s[30:31]4114;4115; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__u_5_5:4116; GFX90A: ; %bb.0:4117; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4118; GFX90A-NEXT: v_mov_b32_e32 v2, 04119; GFX90A-NEXT: ;;#ASMSTART4120; GFX90A-NEXT: ; def v[0:1]4121; GFX90A-NEXT: ;;#ASMEND4122; GFX90A-NEXT: v_lshlrev_b32_e32 v0, 16, v14123; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:44124; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]4125; GFX90A-NEXT: s_waitcnt vmcnt(0)4126; GFX90A-NEXT: s_setpc_b64 s[30:31]4127;4128; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__u_5_5:4129; GFX942: ; %bb.0:4130; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4131; GFX942-NEXT: v_mov_b32_e32 v2, 04132; GFX942-NEXT: ;;#ASMSTART4133; GFX942-NEXT: ; def v[0:1]4134; GFX942-NEXT: ;;#ASMEND4135; GFX942-NEXT: s_nop 04136; GFX942-NEXT: v_lshlrev_b32_e32 v0, 16, v14137; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:44138; GFX942-NEXT: global_store_dword v2, v0, s[0:1]4139; GFX942-NEXT: s_waitcnt vmcnt(0)4140; GFX942-NEXT: s_setpc_b64 s[30:31]4141 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4142 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4143 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4144 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4145 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 poison, i32 5, i32 5>4146 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84147 ret void4148}4149 4150define void @v_shuffle_v3bf16_v3bf16__0_5_5(ptr addrspace(1) inreg %ptr) {4151; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__0_5_5:4152; GFX900: ; %bb.0:4153; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4154; GFX900-NEXT: ;;#ASMSTART4155; GFX900-NEXT: ; def v[0:1]4156; GFX900-NEXT: ;;#ASMEND4157; GFX900-NEXT: v_mov_b32_e32 v3, 04158; GFX900-NEXT: ;;#ASMSTART4159; GFX900-NEXT: ; def v[1:2]4160; GFX900-NEXT: ;;#ASMEND4161; GFX900-NEXT: s_mov_b32 s4, 0x50401004162; GFX900-NEXT: v_perm_b32 v0, v2, v0, s44163; GFX900-NEXT: global_store_short v3, v2, s[16:17] offset:44164; GFX900-NEXT: global_store_dword v3, v0, s[16:17]4165; GFX900-NEXT: s_waitcnt vmcnt(0)4166; GFX900-NEXT: s_setpc_b64 s[30:31]4167;4168; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__0_5_5:4169; GFX90A: ; %bb.0:4170; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4171; GFX90A-NEXT: v_mov_b32_e32 v4, 04172; GFX90A-NEXT: ;;#ASMSTART4173; GFX90A-NEXT: ; def v[0:1]4174; GFX90A-NEXT: ;;#ASMEND4175; GFX90A-NEXT: ;;#ASMSTART4176; GFX90A-NEXT: ; def v[2:3]4177; GFX90A-NEXT: ;;#ASMEND4178; GFX90A-NEXT: s_mov_b32 s4, 0x50401004179; GFX90A-NEXT: v_perm_b32 v0, v3, v0, s44180; GFX90A-NEXT: global_store_short v4, v3, s[16:17] offset:44181; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4182; GFX90A-NEXT: s_waitcnt vmcnt(0)4183; GFX90A-NEXT: s_setpc_b64 s[30:31]4184;4185; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__0_5_5:4186; GFX942: ; %bb.0:4187; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4188; GFX942-NEXT: v_mov_b32_e32 v4, 04189; GFX942-NEXT: ;;#ASMSTART4190; GFX942-NEXT: ; def v[0:1]4191; GFX942-NEXT: ;;#ASMEND4192; GFX942-NEXT: ;;#ASMSTART4193; GFX942-NEXT: ; def v[2:3]4194; GFX942-NEXT: ;;#ASMEND4195; GFX942-NEXT: s_mov_b32 s2, 0x50401004196; GFX942-NEXT: v_perm_b32 v0, v3, v0, s24197; GFX942-NEXT: global_store_short v4, v3, s[0:1] offset:44198; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4199; GFX942-NEXT: s_waitcnt vmcnt(0)4200; GFX942-NEXT: s_setpc_b64 s[30:31]4201 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4202 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4203 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4204 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4205 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 0, i32 5, i32 5>4206 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84207 ret void4208}4209 4210define void @v_shuffle_v3bf16_v3bf16__1_5_5(ptr addrspace(1) inreg %ptr) {4211; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__1_5_5:4212; GFX900: ; %bb.0:4213; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4214; GFX900-NEXT: ;;#ASMSTART4215; GFX900-NEXT: ; def v[0:1]4216; GFX900-NEXT: ;;#ASMEND4217; GFX900-NEXT: v_mov_b32_e32 v3, 04218; GFX900-NEXT: ;;#ASMSTART4219; GFX900-NEXT: ; def v[1:2]4220; GFX900-NEXT: ;;#ASMEND4221; GFX900-NEXT: v_alignbit_b32 v0, v2, v0, 164222; GFX900-NEXT: global_store_short v3, v2, s[16:17] offset:44223; GFX900-NEXT: global_store_dword v3, v0, s[16:17]4224; GFX900-NEXT: s_waitcnt vmcnt(0)4225; GFX900-NEXT: s_setpc_b64 s[30:31]4226;4227; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__1_5_5:4228; GFX90A: ; %bb.0:4229; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4230; GFX90A-NEXT: v_mov_b32_e32 v4, 04231; GFX90A-NEXT: ;;#ASMSTART4232; GFX90A-NEXT: ; def v[0:1]4233; GFX90A-NEXT: ;;#ASMEND4234; GFX90A-NEXT: ;;#ASMSTART4235; GFX90A-NEXT: ; def v[2:3]4236; GFX90A-NEXT: ;;#ASMEND4237; GFX90A-NEXT: v_alignbit_b32 v0, v3, v0, 164238; GFX90A-NEXT: global_store_short v4, v3, s[16:17] offset:44239; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4240; GFX90A-NEXT: s_waitcnt vmcnt(0)4241; GFX90A-NEXT: s_setpc_b64 s[30:31]4242;4243; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__1_5_5:4244; GFX942: ; %bb.0:4245; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4246; GFX942-NEXT: v_mov_b32_e32 v4, 04247; GFX942-NEXT: ;;#ASMSTART4248; GFX942-NEXT: ; def v[0:1]4249; GFX942-NEXT: ;;#ASMEND4250; GFX942-NEXT: ;;#ASMSTART4251; GFX942-NEXT: ; def v[2:3]4252; GFX942-NEXT: ;;#ASMEND4253; GFX942-NEXT: s_nop 04254; GFX942-NEXT: v_alignbit_b32 v0, v3, v0, 164255; GFX942-NEXT: global_store_short v4, v3, s[0:1] offset:44256; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4257; GFX942-NEXT: s_waitcnt vmcnt(0)4258; GFX942-NEXT: s_setpc_b64 s[30:31]4259 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4260 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4261 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4262 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4263 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 1, i32 5, i32 5>4264 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84265 ret void4266}4267 4268define void @v_shuffle_v3bf16_v3bf16__2_5_5(ptr addrspace(1) inreg %ptr) {4269; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__2_5_5:4270; GFX900: ; %bb.0:4271; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4272; GFX900-NEXT: v_mov_b32_e32 v4, 04273; GFX900-NEXT: ;;#ASMSTART4274; GFX900-NEXT: ; def v[0:1]4275; GFX900-NEXT: ;;#ASMEND4276; GFX900-NEXT: ;;#ASMSTART4277; GFX900-NEXT: ; def v[2:3]4278; GFX900-NEXT: ;;#ASMEND4279; GFX900-NEXT: s_mov_b32 s4, 0x50401004280; GFX900-NEXT: v_perm_b32 v0, v3, v1, s44281; GFX900-NEXT: global_store_short v4, v3, s[16:17] offset:44282; GFX900-NEXT: global_store_dword v4, v0, s[16:17]4283; GFX900-NEXT: s_waitcnt vmcnt(0)4284; GFX900-NEXT: s_setpc_b64 s[30:31]4285;4286; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__2_5_5:4287; GFX90A: ; %bb.0:4288; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4289; GFX90A-NEXT: v_mov_b32_e32 v4, 04290; GFX90A-NEXT: ;;#ASMSTART4291; GFX90A-NEXT: ; def v[0:1]4292; GFX90A-NEXT: ;;#ASMEND4293; GFX90A-NEXT: ;;#ASMSTART4294; GFX90A-NEXT: ; def v[2:3]4295; GFX90A-NEXT: ;;#ASMEND4296; GFX90A-NEXT: s_mov_b32 s4, 0x50401004297; GFX90A-NEXT: v_perm_b32 v0, v3, v1, s44298; GFX90A-NEXT: global_store_short v4, v3, s[16:17] offset:44299; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4300; GFX90A-NEXT: s_waitcnt vmcnt(0)4301; GFX90A-NEXT: s_setpc_b64 s[30:31]4302;4303; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__2_5_5:4304; GFX942: ; %bb.0:4305; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4306; GFX942-NEXT: v_mov_b32_e32 v4, 04307; GFX942-NEXT: ;;#ASMSTART4308; GFX942-NEXT: ; def v[0:1]4309; GFX942-NEXT: ;;#ASMEND4310; GFX942-NEXT: ;;#ASMSTART4311; GFX942-NEXT: ; def v[2:3]4312; GFX942-NEXT: ;;#ASMEND4313; GFX942-NEXT: s_mov_b32 s2, 0x50401004314; GFX942-NEXT: v_perm_b32 v0, v3, v1, s24315; GFX942-NEXT: global_store_short v4, v3, s[0:1] offset:44316; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4317; GFX942-NEXT: s_waitcnt vmcnt(0)4318; GFX942-NEXT: s_setpc_b64 s[30:31]4319 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4320 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4321 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4322 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4323 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 2, i32 5, i32 5>4324 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84325 ret void4326}4327 4328define void @v_shuffle_v3bf16_v3bf16__3_5_5(ptr addrspace(1) inreg %ptr) {4329; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__3_5_5:4330; GFX900: ; %bb.0:4331; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4332; GFX900-NEXT: v_mov_b32_e32 v2, 04333; GFX900-NEXT: ;;#ASMSTART4334; GFX900-NEXT: ; def v[0:1]4335; GFX900-NEXT: ;;#ASMEND4336; GFX900-NEXT: s_mov_b32 s4, 0x50401004337; GFX900-NEXT: v_perm_b32 v0, v1, v0, s44338; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:44339; GFX900-NEXT: global_store_dword v2, v0, s[16:17]4340; GFX900-NEXT: s_waitcnt vmcnt(0)4341; GFX900-NEXT: s_setpc_b64 s[30:31]4342;4343; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__3_5_5:4344; GFX90A: ; %bb.0:4345; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4346; GFX90A-NEXT: v_mov_b32_e32 v2, 04347; GFX90A-NEXT: ;;#ASMSTART4348; GFX90A-NEXT: ; def v[0:1]4349; GFX90A-NEXT: ;;#ASMEND4350; GFX90A-NEXT: s_mov_b32 s4, 0x50401004351; GFX90A-NEXT: v_perm_b32 v0, v1, v0, s44352; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:44353; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]4354; GFX90A-NEXT: s_waitcnt vmcnt(0)4355; GFX90A-NEXT: s_setpc_b64 s[30:31]4356;4357; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__3_5_5:4358; GFX942: ; %bb.0:4359; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4360; GFX942-NEXT: v_mov_b32_e32 v2, 04361; GFX942-NEXT: ;;#ASMSTART4362; GFX942-NEXT: ; def v[0:1]4363; GFX942-NEXT: ;;#ASMEND4364; GFX942-NEXT: s_mov_b32 s2, 0x50401004365; GFX942-NEXT: v_perm_b32 v0, v1, v0, s24366; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:44367; GFX942-NEXT: global_store_dword v2, v0, s[0:1]4368; GFX942-NEXT: s_waitcnt vmcnt(0)4369; GFX942-NEXT: s_setpc_b64 s[30:31]4370 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4371 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4372 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4373 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4374 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 3, i32 5, i32 5>4375 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84376 ret void4377}4378 4379define void @v_shuffle_v3bf16_v3bf16__4_5_5(ptr addrspace(1) inreg %ptr) {4380; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__4_5_5:4381; GFX900: ; %bb.0:4382; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4383; GFX900-NEXT: v_mov_b32_e32 v2, 04384; GFX900-NEXT: ;;#ASMSTART4385; GFX900-NEXT: ; def v[0:1]4386; GFX900-NEXT: ;;#ASMEND4387; GFX900-NEXT: v_alignbit_b32 v0, v1, v0, 164388; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:44389; GFX900-NEXT: global_store_dword v2, v0, s[16:17]4390; GFX900-NEXT: s_waitcnt vmcnt(0)4391; GFX900-NEXT: s_setpc_b64 s[30:31]4392;4393; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__4_5_5:4394; GFX90A: ; %bb.0:4395; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4396; GFX90A-NEXT: v_mov_b32_e32 v2, 04397; GFX90A-NEXT: ;;#ASMSTART4398; GFX90A-NEXT: ; def v[0:1]4399; GFX90A-NEXT: ;;#ASMEND4400; GFX90A-NEXT: v_alignbit_b32 v0, v1, v0, 164401; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:44402; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]4403; GFX90A-NEXT: s_waitcnt vmcnt(0)4404; GFX90A-NEXT: s_setpc_b64 s[30:31]4405;4406; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__4_5_5:4407; GFX942: ; %bb.0:4408; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4409; GFX942-NEXT: v_mov_b32_e32 v2, 04410; GFX942-NEXT: ;;#ASMSTART4411; GFX942-NEXT: ; def v[0:1]4412; GFX942-NEXT: ;;#ASMEND4413; GFX942-NEXT: s_nop 04414; GFX942-NEXT: v_alignbit_b32 v0, v1, v0, 164415; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:44416; GFX942-NEXT: global_store_dword v2, v0, s[0:1]4417; GFX942-NEXT: s_waitcnt vmcnt(0)4418; GFX942-NEXT: s_setpc_b64 s[30:31]4419 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4420 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4421 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4422 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4423 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 5, i32 5>4424 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84425 ret void4426}4427 4428define void @v_shuffle_v3bf16_v3bf16__5_u_5(ptr addrspace(1) inreg %ptr) {4429; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_u_5:4430; GFX900: ; %bb.0:4431; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4432; GFX900-NEXT: v_mov_b32_e32 v2, 04433; GFX900-NEXT: ;;#ASMSTART4434; GFX900-NEXT: ; def v[0:1]4435; GFX900-NEXT: ;;#ASMEND4436; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:44437; GFX900-NEXT: global_store_dword v2, v1, s[16:17]4438; GFX900-NEXT: s_waitcnt vmcnt(0)4439; GFX900-NEXT: s_setpc_b64 s[30:31]4440;4441; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_u_5:4442; GFX90A: ; %bb.0:4443; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4444; GFX90A-NEXT: v_mov_b32_e32 v2, 04445; GFX90A-NEXT: ;;#ASMSTART4446; GFX90A-NEXT: ; def v[0:1]4447; GFX90A-NEXT: ;;#ASMEND4448; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:44449; GFX90A-NEXT: global_store_dword v2, v1, s[16:17]4450; GFX90A-NEXT: s_waitcnt vmcnt(0)4451; GFX90A-NEXT: s_setpc_b64 s[30:31]4452;4453; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_u_5:4454; GFX942: ; %bb.0:4455; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4456; GFX942-NEXT: v_mov_b32_e32 v2, 04457; GFX942-NEXT: ;;#ASMSTART4458; GFX942-NEXT: ; def v[0:1]4459; GFX942-NEXT: ;;#ASMEND4460; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:44461; GFX942-NEXT: global_store_dword v2, v1, s[0:1]4462; GFX942-NEXT: s_waitcnt vmcnt(0)4463; GFX942-NEXT: s_setpc_b64 s[30:31]4464 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4465 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4466 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4467 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4468 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 5>4469 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84470 ret void4471}4472 4473define void @v_shuffle_v3bf16_v3bf16__5_0_5(ptr addrspace(1) inreg %ptr) {4474; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_0_5:4475; GFX900: ; %bb.0:4476; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4477; GFX900-NEXT: ;;#ASMSTART4478; GFX900-NEXT: ; def v[0:1]4479; GFX900-NEXT: ;;#ASMEND4480; GFX900-NEXT: v_mov_b32_e32 v3, 04481; GFX900-NEXT: ;;#ASMSTART4482; GFX900-NEXT: ; def v[1:2]4483; GFX900-NEXT: ;;#ASMEND4484; GFX900-NEXT: s_mov_b32 s4, 0x50401004485; GFX900-NEXT: v_perm_b32 v0, v0, v2, s44486; GFX900-NEXT: global_store_short v3, v2, s[16:17] offset:44487; GFX900-NEXT: global_store_dword v3, v0, s[16:17]4488; GFX900-NEXT: s_waitcnt vmcnt(0)4489; GFX900-NEXT: s_setpc_b64 s[30:31]4490;4491; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_0_5:4492; GFX90A: ; %bb.0:4493; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4494; GFX90A-NEXT: v_mov_b32_e32 v4, 04495; GFX90A-NEXT: ;;#ASMSTART4496; GFX90A-NEXT: ; def v[0:1]4497; GFX90A-NEXT: ;;#ASMEND4498; GFX90A-NEXT: ;;#ASMSTART4499; GFX90A-NEXT: ; def v[2:3]4500; GFX90A-NEXT: ;;#ASMEND4501; GFX90A-NEXT: s_mov_b32 s4, 0x50401004502; GFX90A-NEXT: v_perm_b32 v0, v0, v3, s44503; GFX90A-NEXT: global_store_short v4, v3, s[16:17] offset:44504; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4505; GFX90A-NEXT: s_waitcnt vmcnt(0)4506; GFX90A-NEXT: s_setpc_b64 s[30:31]4507;4508; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_0_5:4509; GFX942: ; %bb.0:4510; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4511; GFX942-NEXT: v_mov_b32_e32 v4, 04512; GFX942-NEXT: ;;#ASMSTART4513; GFX942-NEXT: ; def v[0:1]4514; GFX942-NEXT: ;;#ASMEND4515; GFX942-NEXT: ;;#ASMSTART4516; GFX942-NEXT: ; def v[2:3]4517; GFX942-NEXT: ;;#ASMEND4518; GFX942-NEXT: s_mov_b32 s2, 0x50401004519; GFX942-NEXT: v_perm_b32 v0, v0, v3, s24520; GFX942-NEXT: global_store_short v4, v3, s[0:1] offset:44521; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4522; GFX942-NEXT: s_waitcnt vmcnt(0)4523; GFX942-NEXT: s_setpc_b64 s[30:31]4524 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4525 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4526 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4527 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4528 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 5>4529 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84530 ret void4531}4532 4533define void @v_shuffle_v3bf16_v3bf16__5_1_5(ptr addrspace(1) inreg %ptr) {4534; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_1_5:4535; GFX900: ; %bb.0:4536; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4537; GFX900-NEXT: ;;#ASMSTART4538; GFX900-NEXT: ; def v[0:1]4539; GFX900-NEXT: ;;#ASMEND4540; GFX900-NEXT: v_mov_b32_e32 v3, 04541; GFX900-NEXT: ;;#ASMSTART4542; GFX900-NEXT: ; def v[1:2]4543; GFX900-NEXT: ;;#ASMEND4544; GFX900-NEXT: s_mov_b32 s4, 0xffff4545; GFX900-NEXT: v_bfi_b32 v0, s4, v2, v04546; GFX900-NEXT: global_store_short v3, v2, s[16:17] offset:44547; GFX900-NEXT: global_store_dword v3, v0, s[16:17]4548; GFX900-NEXT: s_waitcnt vmcnt(0)4549; GFX900-NEXT: s_setpc_b64 s[30:31]4550;4551; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_1_5:4552; GFX90A: ; %bb.0:4553; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4554; GFX90A-NEXT: v_mov_b32_e32 v4, 04555; GFX90A-NEXT: ;;#ASMSTART4556; GFX90A-NEXT: ; def v[0:1]4557; GFX90A-NEXT: ;;#ASMEND4558; GFX90A-NEXT: ;;#ASMSTART4559; GFX90A-NEXT: ; def v[2:3]4560; GFX90A-NEXT: ;;#ASMEND4561; GFX90A-NEXT: s_mov_b32 s4, 0xffff4562; GFX90A-NEXT: v_bfi_b32 v0, s4, v3, v04563; GFX90A-NEXT: global_store_short v4, v3, s[16:17] offset:44564; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4565; GFX90A-NEXT: s_waitcnt vmcnt(0)4566; GFX90A-NEXT: s_setpc_b64 s[30:31]4567;4568; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_1_5:4569; GFX942: ; %bb.0:4570; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4571; GFX942-NEXT: v_mov_b32_e32 v4, 04572; GFX942-NEXT: ;;#ASMSTART4573; GFX942-NEXT: ; def v[0:1]4574; GFX942-NEXT: ;;#ASMEND4575; GFX942-NEXT: ;;#ASMSTART4576; GFX942-NEXT: ; def v[2:3]4577; GFX942-NEXT: ;;#ASMEND4578; GFX942-NEXT: s_mov_b32 s2, 0xffff4579; GFX942-NEXT: v_bfi_b32 v0, s2, v3, v04580; GFX942-NEXT: global_store_short v4, v3, s[0:1] offset:44581; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4582; GFX942-NEXT: s_waitcnt vmcnt(0)4583; GFX942-NEXT: s_setpc_b64 s[30:31]4584 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4585 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4586 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4587 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4588 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 5>4589 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84590 ret void4591}4592 4593define void @v_shuffle_v3bf16_v3bf16__5_2_5(ptr addrspace(1) inreg %ptr) {4594; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_2_5:4595; GFX900: ; %bb.0:4596; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4597; GFX900-NEXT: v_mov_b32_e32 v4, 04598; GFX900-NEXT: ;;#ASMSTART4599; GFX900-NEXT: ; def v[0:1]4600; GFX900-NEXT: ;;#ASMEND4601; GFX900-NEXT: ;;#ASMSTART4602; GFX900-NEXT: ; def v[2:3]4603; GFX900-NEXT: ;;#ASMEND4604; GFX900-NEXT: s_mov_b32 s4, 0x50401004605; GFX900-NEXT: v_perm_b32 v0, v1, v3, s44606; GFX900-NEXT: global_store_short v4, v3, s[16:17] offset:44607; GFX900-NEXT: global_store_dword v4, v0, s[16:17]4608; GFX900-NEXT: s_waitcnt vmcnt(0)4609; GFX900-NEXT: s_setpc_b64 s[30:31]4610;4611; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_2_5:4612; GFX90A: ; %bb.0:4613; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4614; GFX90A-NEXT: v_mov_b32_e32 v4, 04615; GFX90A-NEXT: ;;#ASMSTART4616; GFX90A-NEXT: ; def v[0:1]4617; GFX90A-NEXT: ;;#ASMEND4618; GFX90A-NEXT: ;;#ASMSTART4619; GFX90A-NEXT: ; def v[2:3]4620; GFX90A-NEXT: ;;#ASMEND4621; GFX90A-NEXT: s_mov_b32 s4, 0x50401004622; GFX90A-NEXT: v_perm_b32 v0, v1, v3, s44623; GFX90A-NEXT: global_store_short v4, v3, s[16:17] offset:44624; GFX90A-NEXT: global_store_dword v4, v0, s[16:17]4625; GFX90A-NEXT: s_waitcnt vmcnt(0)4626; GFX90A-NEXT: s_setpc_b64 s[30:31]4627;4628; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_2_5:4629; GFX942: ; %bb.0:4630; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4631; GFX942-NEXT: v_mov_b32_e32 v4, 04632; GFX942-NEXT: ;;#ASMSTART4633; GFX942-NEXT: ; def v[0:1]4634; GFX942-NEXT: ;;#ASMEND4635; GFX942-NEXT: ;;#ASMSTART4636; GFX942-NEXT: ; def v[2:3]4637; GFX942-NEXT: ;;#ASMEND4638; GFX942-NEXT: s_mov_b32 s2, 0x50401004639; GFX942-NEXT: v_perm_b32 v0, v1, v3, s24640; GFX942-NEXT: global_store_short v4, v3, s[0:1] offset:44641; GFX942-NEXT: global_store_dword v4, v0, s[0:1]4642; GFX942-NEXT: s_waitcnt vmcnt(0)4643; GFX942-NEXT: s_setpc_b64 s[30:31]4644 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4645 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4646 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4647 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4648 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 5>4649 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84650 ret void4651}4652 4653define void @v_shuffle_v3bf16_v3bf16__5_3_5(ptr addrspace(1) inreg %ptr) {4654; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_3_5:4655; GFX900: ; %bb.0:4656; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4657; GFX900-NEXT: v_mov_b32_e32 v2, 04658; GFX900-NEXT: ;;#ASMSTART4659; GFX900-NEXT: ; def v[0:1]4660; GFX900-NEXT: ;;#ASMEND4661; GFX900-NEXT: s_mov_b32 s4, 0x50401004662; GFX900-NEXT: v_perm_b32 v0, v0, v1, s44663; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:44664; GFX900-NEXT: global_store_dword v2, v0, s[16:17]4665; GFX900-NEXT: s_waitcnt vmcnt(0)4666; GFX900-NEXT: s_setpc_b64 s[30:31]4667;4668; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_3_5:4669; GFX90A: ; %bb.0:4670; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4671; GFX90A-NEXT: v_mov_b32_e32 v2, 04672; GFX90A-NEXT: ;;#ASMSTART4673; GFX90A-NEXT: ; def v[0:1]4674; GFX90A-NEXT: ;;#ASMEND4675; GFX90A-NEXT: s_mov_b32 s4, 0x50401004676; GFX90A-NEXT: v_perm_b32 v0, v0, v1, s44677; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:44678; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]4679; GFX90A-NEXT: s_waitcnt vmcnt(0)4680; GFX90A-NEXT: s_setpc_b64 s[30:31]4681;4682; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_3_5:4683; GFX942: ; %bb.0:4684; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4685; GFX942-NEXT: v_mov_b32_e32 v2, 04686; GFX942-NEXT: ;;#ASMSTART4687; GFX942-NEXT: ; def v[0:1]4688; GFX942-NEXT: ;;#ASMEND4689; GFX942-NEXT: s_mov_b32 s2, 0x50401004690; GFX942-NEXT: v_perm_b32 v0, v0, v1, s24691; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:44692; GFX942-NEXT: global_store_dword v2, v0, s[0:1]4693; GFX942-NEXT: s_waitcnt vmcnt(0)4694; GFX942-NEXT: s_setpc_b64 s[30:31]4695 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4696 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4697 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4698 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4699 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 5>4700 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84701 ret void4702}4703 4704define void @v_shuffle_v3bf16_v3bf16__5_4_5(ptr addrspace(1) inreg %ptr) {4705; GFX900-LABEL: v_shuffle_v3bf16_v3bf16__5_4_5:4706; GFX900: ; %bb.0:4707; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4708; GFX900-NEXT: v_mov_b32_e32 v2, 04709; GFX900-NEXT: ;;#ASMSTART4710; GFX900-NEXT: ; def v[0:1]4711; GFX900-NEXT: ;;#ASMEND4712; GFX900-NEXT: s_mov_b32 s4, 0xffff4713; GFX900-NEXT: v_bfi_b32 v0, s4, v1, v04714; GFX900-NEXT: global_store_short v2, v1, s[16:17] offset:44715; GFX900-NEXT: global_store_dword v2, v0, s[16:17]4716; GFX900-NEXT: s_waitcnt vmcnt(0)4717; GFX900-NEXT: s_setpc_b64 s[30:31]4718;4719; GFX90A-LABEL: v_shuffle_v3bf16_v3bf16__5_4_5:4720; GFX90A: ; %bb.0:4721; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4722; GFX90A-NEXT: v_mov_b32_e32 v2, 04723; GFX90A-NEXT: ;;#ASMSTART4724; GFX90A-NEXT: ; def v[0:1]4725; GFX90A-NEXT: ;;#ASMEND4726; GFX90A-NEXT: s_mov_b32 s4, 0xffff4727; GFX90A-NEXT: v_bfi_b32 v0, s4, v1, v04728; GFX90A-NEXT: global_store_short v2, v1, s[16:17] offset:44729; GFX90A-NEXT: global_store_dword v2, v0, s[16:17]4730; GFX90A-NEXT: s_waitcnt vmcnt(0)4731; GFX90A-NEXT: s_setpc_b64 s[30:31]4732;4733; GFX942-LABEL: v_shuffle_v3bf16_v3bf16__5_4_5:4734; GFX942: ; %bb.0:4735; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4736; GFX942-NEXT: v_mov_b32_e32 v2, 04737; GFX942-NEXT: ;;#ASMSTART4738; GFX942-NEXT: ; def v[0:1]4739; GFX942-NEXT: ;;#ASMEND4740; GFX942-NEXT: s_mov_b32 s2, 0xffff4741; GFX942-NEXT: v_bfi_b32 v0, s2, v1, v04742; GFX942-NEXT: global_store_short v2, v1, s[0:1] offset:44743; GFX942-NEXT: global_store_dword v2, v0, s[0:1]4744; GFX942-NEXT: s_waitcnt vmcnt(0)4745; GFX942-NEXT: s_setpc_b64 s[30:31]4746 %vec0 = call <4 x bfloat> asm "; def $0", "=v"()4747 %vec1 = call <4 x bfloat> asm "; def $0", "=v"()4748 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4749 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4750 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 5>4751 store <3 x bfloat> %shuf, ptr addrspace(1) %ptr, align 84752 ret void4753}4754 4755define void @s_shuffle_v3bf16_v3bf16__u_u_u() {4756; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__u_u_u:4757; GFX9: ; %bb.0:4758; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4759; GFX9-NEXT: ;;#ASMSTART4760; GFX9-NEXT: ; use s[8:9]4761; GFX9-NEXT: ;;#ASMEND4762; GFX9-NEXT: s_setpc_b64 s[30:31]4763 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4764 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4765 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> poison4766 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4767 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)4768 ret void4769}4770 4771define void @s_shuffle_v3bf16_v3bf16__0_u_u() {4772; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__0_u_u:4773; GFX900: ; %bb.0:4774; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4775; GFX900-NEXT: ;;#ASMSTART4776; GFX900-NEXT: ; def s[8:9]4777; GFX900-NEXT: ;;#ASMEND4778; GFX900-NEXT: ;;#ASMSTART4779; GFX900-NEXT: ; use s[8:9]4780; GFX900-NEXT: ;;#ASMEND4781; GFX900-NEXT: s_setpc_b64 s[30:31]4782;4783; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__0_u_u:4784; GFX90A: ; %bb.0:4785; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4786; GFX90A-NEXT: ;;#ASMSTART4787; GFX90A-NEXT: ; def s[8:9]4788; GFX90A-NEXT: ;;#ASMEND4789; GFX90A-NEXT: ;;#ASMSTART4790; GFX90A-NEXT: ; use s[8:9]4791; GFX90A-NEXT: ;;#ASMEND4792; GFX90A-NEXT: s_setpc_b64 s[30:31]4793;4794; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__0_u_u:4795; GFX942: ; %bb.0:4796; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4797; GFX942-NEXT: ;;#ASMSTART4798; GFX942-NEXT: ; def s[8:9]4799; GFX942-NEXT: ;;#ASMEND4800; GFX942-NEXT: s_nop 04801; GFX942-NEXT: ;;#ASMSTART4802; GFX942-NEXT: ; use s[8:9]4803; GFX942-NEXT: ;;#ASMEND4804; GFX942-NEXT: s_setpc_b64 s[30:31]4805 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4806 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4807 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 poison, i32 poison>4808 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4809 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)4810 ret void4811}4812 4813define void @s_shuffle_v3bf16_v3bf16__1_u_u() {4814; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_u_u:4815; GFX900: ; %bb.0:4816; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4817; GFX900-NEXT: ;;#ASMSTART4818; GFX900-NEXT: ; def s[4:5]4819; GFX900-NEXT: ;;#ASMEND4820; GFX900-NEXT: s_lshr_b32 s8, s4, 164821; GFX900-NEXT: ;;#ASMSTART4822; GFX900-NEXT: ; use s[8:9]4823; GFX900-NEXT: ;;#ASMEND4824; GFX900-NEXT: s_setpc_b64 s[30:31]4825;4826; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_u_u:4827; GFX90A: ; %bb.0:4828; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4829; GFX90A-NEXT: ;;#ASMSTART4830; GFX90A-NEXT: ; def s[4:5]4831; GFX90A-NEXT: ;;#ASMEND4832; GFX90A-NEXT: s_lshr_b32 s8, s4, 164833; GFX90A-NEXT: ;;#ASMSTART4834; GFX90A-NEXT: ; use s[8:9]4835; GFX90A-NEXT: ;;#ASMEND4836; GFX90A-NEXT: s_setpc_b64 s[30:31]4837;4838; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_u_u:4839; GFX942: ; %bb.0:4840; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4841; GFX942-NEXT: ;;#ASMSTART4842; GFX942-NEXT: ; def s[0:1]4843; GFX942-NEXT: ;;#ASMEND4844; GFX942-NEXT: s_lshr_b32 s8, s0, 164845; GFX942-NEXT: ;;#ASMSTART4846; GFX942-NEXT: ; use s[8:9]4847; GFX942-NEXT: ;;#ASMEND4848; GFX942-NEXT: s_setpc_b64 s[30:31]4849 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4850 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4851 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 poison, i32 poison>4852 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4853 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)4854 ret void4855}4856 4857define void @s_shuffle_v3bf16_v3bf16__2_u_u() {4858; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__2_u_u:4859; GFX900: ; %bb.0:4860; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4861; GFX900-NEXT: ;;#ASMSTART4862; GFX900-NEXT: ; def s[4:5]4863; GFX900-NEXT: ;;#ASMEND4864; GFX900-NEXT: s_mov_b32 s8, s54865; GFX900-NEXT: ;;#ASMSTART4866; GFX900-NEXT: ; use s[8:9]4867; GFX900-NEXT: ;;#ASMEND4868; GFX900-NEXT: s_setpc_b64 s[30:31]4869;4870; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__2_u_u:4871; GFX90A: ; %bb.0:4872; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4873; GFX90A-NEXT: ;;#ASMSTART4874; GFX90A-NEXT: ; def s[4:5]4875; GFX90A-NEXT: ;;#ASMEND4876; GFX90A-NEXT: s_mov_b32 s8, s54877; GFX90A-NEXT: ;;#ASMSTART4878; GFX90A-NEXT: ; use s[8:9]4879; GFX90A-NEXT: ;;#ASMEND4880; GFX90A-NEXT: s_setpc_b64 s[30:31]4881;4882; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__2_u_u:4883; GFX942: ; %bb.0:4884; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4885; GFX942-NEXT: ;;#ASMSTART4886; GFX942-NEXT: ; def s[0:1]4887; GFX942-NEXT: ;;#ASMEND4888; GFX942-NEXT: s_mov_b32 s8, s14889; GFX942-NEXT: ;;#ASMSTART4890; GFX942-NEXT: ; use s[8:9]4891; GFX942-NEXT: ;;#ASMEND4892; GFX942-NEXT: s_setpc_b64 s[30:31]4893 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4894 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4895 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 poison, i32 poison>4896 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4897 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)4898 ret void4899}4900 4901define void @s_shuffle_v3bf16_v3bf16__3_u_u() {4902; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__3_u_u:4903; GFX9: ; %bb.0:4904; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4905; GFX9-NEXT: ;;#ASMSTART4906; GFX9-NEXT: ; use s[8:9]4907; GFX9-NEXT: ;;#ASMEND4908; GFX9-NEXT: s_setpc_b64 s[30:31]4909 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4910 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4911 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 poison, i32 poison>4912 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4913 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)4914 ret void4915}4916 4917define void @s_shuffle_v3bf16_v3bf16__4_u_u() {4918; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_u_u:4919; GFX900: ; %bb.0:4920; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4921; GFX900-NEXT: ;;#ASMSTART4922; GFX900-NEXT: ; def s[4:5]4923; GFX900-NEXT: ;;#ASMEND4924; GFX900-NEXT: s_lshr_b32 s8, s4, 164925; GFX900-NEXT: ;;#ASMSTART4926; GFX900-NEXT: ; use s[8:9]4927; GFX900-NEXT: ;;#ASMEND4928; GFX900-NEXT: s_setpc_b64 s[30:31]4929;4930; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_u_u:4931; GFX90A: ; %bb.0:4932; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4933; GFX90A-NEXT: ;;#ASMSTART4934; GFX90A-NEXT: ; def s[4:5]4935; GFX90A-NEXT: ;;#ASMEND4936; GFX90A-NEXT: s_lshr_b32 s8, s4, 164937; GFX90A-NEXT: ;;#ASMSTART4938; GFX90A-NEXT: ; use s[8:9]4939; GFX90A-NEXT: ;;#ASMEND4940; GFX90A-NEXT: s_setpc_b64 s[30:31]4941;4942; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_u_u:4943; GFX942: ; %bb.0:4944; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4945; GFX942-NEXT: ;;#ASMSTART4946; GFX942-NEXT: ; def s[0:1]4947; GFX942-NEXT: ;;#ASMEND4948; GFX942-NEXT: s_lshr_b32 s8, s0, 164949; GFX942-NEXT: ;;#ASMSTART4950; GFX942-NEXT: ; use s[8:9]4951; GFX942-NEXT: ;;#ASMEND4952; GFX942-NEXT: s_setpc_b64 s[30:31]4953 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()4954 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()4955 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4956 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>4957 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 poison, i32 poison>4958 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>4959 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)4960 ret void4961}4962 4963define void @s_shuffle_v3bf16_v3bf16__5_u_u() {4964; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_u_u:4965; GFX900: ; %bb.0:4966; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4967; GFX900-NEXT: ;;#ASMSTART4968; GFX900-NEXT: ; def s[4:5]4969; GFX900-NEXT: ;;#ASMEND4970; GFX900-NEXT: s_mov_b32 s8, s54971; GFX900-NEXT: ;;#ASMSTART4972; GFX900-NEXT: ; use s[8:9]4973; GFX900-NEXT: ;;#ASMEND4974; GFX900-NEXT: s_setpc_b64 s[30:31]4975;4976; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_u_u:4977; GFX90A: ; %bb.0:4978; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4979; GFX90A-NEXT: ;;#ASMSTART4980; GFX90A-NEXT: ; def s[4:5]4981; GFX90A-NEXT: ;;#ASMEND4982; GFX90A-NEXT: s_mov_b32 s8, s54983; GFX90A-NEXT: ;;#ASMSTART4984; GFX90A-NEXT: ; use s[8:9]4985; GFX90A-NEXT: ;;#ASMEND4986; GFX90A-NEXT: s_setpc_b64 s[30:31]4987;4988; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_u_u:4989; GFX942: ; %bb.0:4990; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)4991; GFX942-NEXT: ;;#ASMSTART4992; GFX942-NEXT: ; def s[0:1]4993; GFX942-NEXT: ;;#ASMEND4994; GFX942-NEXT: s_mov_b32 s8, s14995; GFX942-NEXT: ;;#ASMSTART4996; GFX942-NEXT: ; use s[8:9]4997; GFX942-NEXT: ;;#ASMEND4998; GFX942-NEXT: s_setpc_b64 s[30:31]4999 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5000 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5001 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5002 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5003 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 poison>5004 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5005 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5006 ret void5007}5008 5009define void @s_shuffle_v3bf16_v3bf16__5_0_u() {5010; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_u:5011; GFX900: ; %bb.0:5012; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5013; GFX900-NEXT: ;;#ASMSTART5014; GFX900-NEXT: ; def s[4:5]5015; GFX900-NEXT: ;;#ASMEND5016; GFX900-NEXT: ;;#ASMSTART5017; GFX900-NEXT: ; def s[6:7]5018; GFX900-NEXT: ;;#ASMEND5019; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s45020; GFX900-NEXT: ;;#ASMSTART5021; GFX900-NEXT: ; use s[8:9]5022; GFX900-NEXT: ;;#ASMEND5023; GFX900-NEXT: s_setpc_b64 s[30:31]5024;5025; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_u:5026; GFX90A: ; %bb.0:5027; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5028; GFX90A-NEXT: ;;#ASMSTART5029; GFX90A-NEXT: ; def s[4:5]5030; GFX90A-NEXT: ;;#ASMEND5031; GFX90A-NEXT: ;;#ASMSTART5032; GFX90A-NEXT: ; def s[6:7]5033; GFX90A-NEXT: ;;#ASMEND5034; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s45035; GFX90A-NEXT: ;;#ASMSTART5036; GFX90A-NEXT: ; use s[8:9]5037; GFX90A-NEXT: ;;#ASMEND5038; GFX90A-NEXT: s_setpc_b64 s[30:31]5039;5040; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_u:5041; GFX942: ; %bb.0:5042; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5043; GFX942-NEXT: ;;#ASMSTART5044; GFX942-NEXT: ; def s[0:1]5045; GFX942-NEXT: ;;#ASMEND5046; GFX942-NEXT: ;;#ASMSTART5047; GFX942-NEXT: ; def s[2:3]5048; GFX942-NEXT: ;;#ASMEND5049; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s05050; GFX942-NEXT: ;;#ASMSTART5051; GFX942-NEXT: ; use s[8:9]5052; GFX942-NEXT: ;;#ASMEND5053; GFX942-NEXT: s_setpc_b64 s[30:31]5054 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5055 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5056 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5057 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5058 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 poison>5059 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5060 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5061 ret void5062}5063 5064define void @s_shuffle_v3bf16_v3bf16__5_1_u() {5065; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_u:5066; GFX900: ; %bb.0:5067; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5068; GFX900-NEXT: ;;#ASMSTART5069; GFX900-NEXT: ; def s[4:5]5070; GFX900-NEXT: ;;#ASMEND5071; GFX900-NEXT: s_lshr_b32 s4, s4, 165072; GFX900-NEXT: ;;#ASMSTART5073; GFX900-NEXT: ; def s[6:7]5074; GFX900-NEXT: ;;#ASMEND5075; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s45076; GFX900-NEXT: ;;#ASMSTART5077; GFX900-NEXT: ; use s[8:9]5078; GFX900-NEXT: ;;#ASMEND5079; GFX900-NEXT: s_setpc_b64 s[30:31]5080;5081; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_u:5082; GFX90A: ; %bb.0:5083; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5084; GFX90A-NEXT: ;;#ASMSTART5085; GFX90A-NEXT: ; def s[4:5]5086; GFX90A-NEXT: ;;#ASMEND5087; GFX90A-NEXT: s_lshr_b32 s4, s4, 165088; GFX90A-NEXT: ;;#ASMSTART5089; GFX90A-NEXT: ; def s[6:7]5090; GFX90A-NEXT: ;;#ASMEND5091; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s45092; GFX90A-NEXT: ;;#ASMSTART5093; GFX90A-NEXT: ; use s[8:9]5094; GFX90A-NEXT: ;;#ASMEND5095; GFX90A-NEXT: s_setpc_b64 s[30:31]5096;5097; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_u:5098; GFX942: ; %bb.0:5099; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5100; GFX942-NEXT: ;;#ASMSTART5101; GFX942-NEXT: ; def s[0:1]5102; GFX942-NEXT: ;;#ASMEND5103; GFX942-NEXT: s_lshr_b32 s0, s0, 165104; GFX942-NEXT: ;;#ASMSTART5105; GFX942-NEXT: ; def s[2:3]5106; GFX942-NEXT: ;;#ASMEND5107; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s05108; GFX942-NEXT: ;;#ASMSTART5109; GFX942-NEXT: ; use s[8:9]5110; GFX942-NEXT: ;;#ASMEND5111; GFX942-NEXT: s_setpc_b64 s[30:31]5112 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5113 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5114 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5115 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5116 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 poison>5117 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5118 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5119 ret void5120}5121 5122define void @s_shuffle_v3bf16_v3bf16__5_2_u() {5123; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_u:5124; GFX900: ; %bb.0:5125; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5126; GFX900-NEXT: ;;#ASMSTART5127; GFX900-NEXT: ; def s[4:5]5128; GFX900-NEXT: ;;#ASMEND5129; GFX900-NEXT: ;;#ASMSTART5130; GFX900-NEXT: ; def s[6:7]5131; GFX900-NEXT: ;;#ASMEND5132; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s55133; GFX900-NEXT: ;;#ASMSTART5134; GFX900-NEXT: ; use s[8:9]5135; GFX900-NEXT: ;;#ASMEND5136; GFX900-NEXT: s_setpc_b64 s[30:31]5137;5138; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_u:5139; GFX90A: ; %bb.0:5140; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5141; GFX90A-NEXT: ;;#ASMSTART5142; GFX90A-NEXT: ; def s[4:5]5143; GFX90A-NEXT: ;;#ASMEND5144; GFX90A-NEXT: ;;#ASMSTART5145; GFX90A-NEXT: ; def s[6:7]5146; GFX90A-NEXT: ;;#ASMEND5147; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s55148; GFX90A-NEXT: ;;#ASMSTART5149; GFX90A-NEXT: ; use s[8:9]5150; GFX90A-NEXT: ;;#ASMEND5151; GFX90A-NEXT: s_setpc_b64 s[30:31]5152;5153; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_u:5154; GFX942: ; %bb.0:5155; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5156; GFX942-NEXT: ;;#ASMSTART5157; GFX942-NEXT: ; def s[0:1]5158; GFX942-NEXT: ;;#ASMEND5159; GFX942-NEXT: ;;#ASMSTART5160; GFX942-NEXT: ; def s[2:3]5161; GFX942-NEXT: ;;#ASMEND5162; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s15163; GFX942-NEXT: ;;#ASMSTART5164; GFX942-NEXT: ; use s[8:9]5165; GFX942-NEXT: ;;#ASMEND5166; GFX942-NEXT: s_setpc_b64 s[30:31]5167 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5168 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5169 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5170 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5171 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 poison>5172 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5173 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5174 ret void5175}5176 5177define void @s_shuffle_v3bf16_v3bf16__5_3_u() {5178; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_3_u:5179; GFX900: ; %bb.0:5180; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5181; GFX900-NEXT: ;;#ASMSTART5182; GFX900-NEXT: ; def s[4:5]5183; GFX900-NEXT: ;;#ASMEND5184; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45185; GFX900-NEXT: ;;#ASMSTART5186; GFX900-NEXT: ; use s[8:9]5187; GFX900-NEXT: ;;#ASMEND5188; GFX900-NEXT: s_setpc_b64 s[30:31]5189;5190; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_3_u:5191; GFX90A: ; %bb.0:5192; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5193; GFX90A-NEXT: ;;#ASMSTART5194; GFX90A-NEXT: ; def s[4:5]5195; GFX90A-NEXT: ;;#ASMEND5196; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45197; GFX90A-NEXT: ;;#ASMSTART5198; GFX90A-NEXT: ; use s[8:9]5199; GFX90A-NEXT: ;;#ASMEND5200; GFX90A-NEXT: s_setpc_b64 s[30:31]5201;5202; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_3_u:5203; GFX942: ; %bb.0:5204; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5205; GFX942-NEXT: ;;#ASMSTART5206; GFX942-NEXT: ; def s[0:1]5207; GFX942-NEXT: ;;#ASMEND5208; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05209; GFX942-NEXT: ;;#ASMSTART5210; GFX942-NEXT: ; use s[8:9]5211; GFX942-NEXT: ;;#ASMEND5212; GFX942-NEXT: s_setpc_b64 s[30:31]5213 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5214 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5215 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5216 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5217 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 poison>5218 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5219 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5220 ret void5221}5222 5223define void @s_shuffle_v3bf16_v3bf16__5_4_u() {5224; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_u:5225; GFX900: ; %bb.0:5226; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5227; GFX900-NEXT: ;;#ASMSTART5228; GFX900-NEXT: ; def s[4:5]5229; GFX900-NEXT: ;;#ASMEND5230; GFX900-NEXT: s_lshr_b32 s4, s4, 165231; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45232; GFX900-NEXT: ;;#ASMSTART5233; GFX900-NEXT: ; use s[8:9]5234; GFX900-NEXT: ;;#ASMEND5235; GFX900-NEXT: s_setpc_b64 s[30:31]5236;5237; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_u:5238; GFX90A: ; %bb.0:5239; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5240; GFX90A-NEXT: ;;#ASMSTART5241; GFX90A-NEXT: ; def s[4:5]5242; GFX90A-NEXT: ;;#ASMEND5243; GFX90A-NEXT: s_lshr_b32 s4, s4, 165244; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45245; GFX90A-NEXT: ;;#ASMSTART5246; GFX90A-NEXT: ; use s[8:9]5247; GFX90A-NEXT: ;;#ASMEND5248; GFX90A-NEXT: s_setpc_b64 s[30:31]5249;5250; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_u:5251; GFX942: ; %bb.0:5252; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5253; GFX942-NEXT: ;;#ASMSTART5254; GFX942-NEXT: ; def s[0:1]5255; GFX942-NEXT: ;;#ASMEND5256; GFX942-NEXT: s_lshr_b32 s0, s0, 165257; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05258; GFX942-NEXT: ;;#ASMSTART5259; GFX942-NEXT: ; use s[8:9]5260; GFX942-NEXT: ;;#ASMEND5261; GFX942-NEXT: s_setpc_b64 s[30:31]5262 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5263 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5264 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5265 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5266 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 poison>5267 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5268 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5269 ret void5270}5271 5272define void @s_shuffle_v3bf16_v3bf16__5_5_u() {5273; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_5_u:5274; GFX900: ; %bb.0:5275; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5276; GFX900-NEXT: ;;#ASMSTART5277; GFX900-NEXT: ; def s[4:5]5278; GFX900-NEXT: ;;#ASMEND5279; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55280; GFX900-NEXT: ;;#ASMSTART5281; GFX900-NEXT: ; use s[8:9]5282; GFX900-NEXT: ;;#ASMEND5283; GFX900-NEXT: s_setpc_b64 s[30:31]5284;5285; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_5_u:5286; GFX90A: ; %bb.0:5287; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5288; GFX90A-NEXT: ;;#ASMSTART5289; GFX90A-NEXT: ; def s[4:5]5290; GFX90A-NEXT: ;;#ASMEND5291; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55292; GFX90A-NEXT: ;;#ASMSTART5293; GFX90A-NEXT: ; use s[8:9]5294; GFX90A-NEXT: ;;#ASMEND5295; GFX90A-NEXT: s_setpc_b64 s[30:31]5296;5297; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_5_u:5298; GFX942: ; %bb.0:5299; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5300; GFX942-NEXT: ;;#ASMSTART5301; GFX942-NEXT: ; def s[0:1]5302; GFX942-NEXT: ;;#ASMEND5303; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15304; GFX942-NEXT: ;;#ASMSTART5305; GFX942-NEXT: ; use s[8:9]5306; GFX942-NEXT: ;;#ASMEND5307; GFX942-NEXT: s_setpc_b64 s[30:31]5308 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5309 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5310 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5311 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5312 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 poison>5313 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5314 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5315 ret void5316}5317 5318define void @s_shuffle_v3bf16_v3bf16__5_5_0() {5319; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_5_0:5320; GFX900: ; %bb.0:5321; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5322; GFX900-NEXT: ;;#ASMSTART5323; GFX900-NEXT: ; def s[4:5]5324; GFX900-NEXT: ;;#ASMEND5325; GFX900-NEXT: ;;#ASMSTART5326; GFX900-NEXT: ; def s[6:7]5327; GFX900-NEXT: ;;#ASMEND5328; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s75329; GFX900-NEXT: s_mov_b32 s9, s45330; GFX900-NEXT: ;;#ASMSTART5331; GFX900-NEXT: ; use s[8:9]5332; GFX900-NEXT: ;;#ASMEND5333; GFX900-NEXT: s_setpc_b64 s[30:31]5334;5335; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_5_0:5336; GFX90A: ; %bb.0:5337; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5338; GFX90A-NEXT: ;;#ASMSTART5339; GFX90A-NEXT: ; def s[4:5]5340; GFX90A-NEXT: ;;#ASMEND5341; GFX90A-NEXT: ;;#ASMSTART5342; GFX90A-NEXT: ; def s[6:7]5343; GFX90A-NEXT: ;;#ASMEND5344; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s75345; GFX90A-NEXT: s_mov_b32 s9, s45346; GFX90A-NEXT: ;;#ASMSTART5347; GFX90A-NEXT: ; use s[8:9]5348; GFX90A-NEXT: ;;#ASMEND5349; GFX90A-NEXT: s_setpc_b64 s[30:31]5350;5351; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_5_0:5352; GFX942: ; %bb.0:5353; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5354; GFX942-NEXT: ;;#ASMSTART5355; GFX942-NEXT: ; def s[0:1]5356; GFX942-NEXT: ;;#ASMEND5357; GFX942-NEXT: ;;#ASMSTART5358; GFX942-NEXT: ; def s[2:3]5359; GFX942-NEXT: ;;#ASMEND5360; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s35361; GFX942-NEXT: s_mov_b32 s9, s05362; GFX942-NEXT: ;;#ASMSTART5363; GFX942-NEXT: ; use s[8:9]5364; GFX942-NEXT: ;;#ASMEND5365; GFX942-NEXT: s_setpc_b64 s[30:31]5366 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5367 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5368 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5369 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5370 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 0>5371 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5372 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5373 ret void5374}5375 5376define void @s_shuffle_v3bf16_v3bf16__5_5_1() {5377; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_5_1:5378; GFX900: ; %bb.0:5379; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5380; GFX900-NEXT: ;;#ASMSTART5381; GFX900-NEXT: ; def s[4:5]5382; GFX900-NEXT: ;;#ASMEND5383; GFX900-NEXT: ;;#ASMSTART5384; GFX900-NEXT: ; def s[6:7]5385; GFX900-NEXT: ;;#ASMEND5386; GFX900-NEXT: s_lshr_b32 s9, s4, 165387; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s75388; GFX900-NEXT: ;;#ASMSTART5389; GFX900-NEXT: ; use s[8:9]5390; GFX900-NEXT: ;;#ASMEND5391; GFX900-NEXT: s_setpc_b64 s[30:31]5392;5393; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_5_1:5394; GFX90A: ; %bb.0:5395; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5396; GFX90A-NEXT: ;;#ASMSTART5397; GFX90A-NEXT: ; def s[4:5]5398; GFX90A-NEXT: ;;#ASMEND5399; GFX90A-NEXT: ;;#ASMSTART5400; GFX90A-NEXT: ; def s[6:7]5401; GFX90A-NEXT: ;;#ASMEND5402; GFX90A-NEXT: s_lshr_b32 s9, s4, 165403; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s75404; GFX90A-NEXT: ;;#ASMSTART5405; GFX90A-NEXT: ; use s[8:9]5406; GFX90A-NEXT: ;;#ASMEND5407; GFX90A-NEXT: s_setpc_b64 s[30:31]5408;5409; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_5_1:5410; GFX942: ; %bb.0:5411; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5412; GFX942-NEXT: ;;#ASMSTART5413; GFX942-NEXT: ; def s[0:1]5414; GFX942-NEXT: ;;#ASMEND5415; GFX942-NEXT: ;;#ASMSTART5416; GFX942-NEXT: ; def s[2:3]5417; GFX942-NEXT: ;;#ASMEND5418; GFX942-NEXT: s_lshr_b32 s9, s0, 165419; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s35420; GFX942-NEXT: ;;#ASMSTART5421; GFX942-NEXT: ; use s[8:9]5422; GFX942-NEXT: ;;#ASMEND5423; GFX942-NEXT: s_setpc_b64 s[30:31]5424 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5425 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5426 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5427 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5428 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 1>5429 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5430 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5431 ret void5432}5433 5434define void @s_shuffle_v3bf16_v3bf16__5_5_2() {5435; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_5_2:5436; GFX900: ; %bb.0:5437; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5438; GFX900-NEXT: ;;#ASMSTART5439; GFX900-NEXT: ; def s[8:9]5440; GFX900-NEXT: ;;#ASMEND5441; GFX900-NEXT: ;;#ASMSTART5442; GFX900-NEXT: ; def s[4:5]5443; GFX900-NEXT: ;;#ASMEND5444; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55445; GFX900-NEXT: ;;#ASMSTART5446; GFX900-NEXT: ; use s[8:9]5447; GFX900-NEXT: ;;#ASMEND5448; GFX900-NEXT: s_setpc_b64 s[30:31]5449;5450; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_5_2:5451; GFX90A: ; %bb.0:5452; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5453; GFX90A-NEXT: ;;#ASMSTART5454; GFX90A-NEXT: ; def s[8:9]5455; GFX90A-NEXT: ;;#ASMEND5456; GFX90A-NEXT: ;;#ASMSTART5457; GFX90A-NEXT: ; def s[4:5]5458; GFX90A-NEXT: ;;#ASMEND5459; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55460; GFX90A-NEXT: ;;#ASMSTART5461; GFX90A-NEXT: ; use s[8:9]5462; GFX90A-NEXT: ;;#ASMEND5463; GFX90A-NEXT: s_setpc_b64 s[30:31]5464;5465; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_5_2:5466; GFX942: ; %bb.0:5467; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5468; GFX942-NEXT: ;;#ASMSTART5469; GFX942-NEXT: ; def s[8:9]5470; GFX942-NEXT: ;;#ASMEND5471; GFX942-NEXT: ;;#ASMSTART5472; GFX942-NEXT: ; def s[0:1]5473; GFX942-NEXT: ;;#ASMEND5474; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15475; GFX942-NEXT: ;;#ASMSTART5476; GFX942-NEXT: ; use s[8:9]5477; GFX942-NEXT: ;;#ASMEND5478; GFX942-NEXT: s_setpc_b64 s[30:31]5479 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5480 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5481 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5482 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5483 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 2>5484 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5485 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5486 ret void5487}5488 5489define void @s_shuffle_v3bf16_v3bf16__5_5_3() {5490; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_5_3:5491; GFX900: ; %bb.0:5492; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5493; GFX900-NEXT: ;;#ASMSTART5494; GFX900-NEXT: ; def s[4:5]5495; GFX900-NEXT: ;;#ASMEND5496; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55497; GFX900-NEXT: s_mov_b32 s9, s45498; GFX900-NEXT: ;;#ASMSTART5499; GFX900-NEXT: ; use s[8:9]5500; GFX900-NEXT: ;;#ASMEND5501; GFX900-NEXT: s_setpc_b64 s[30:31]5502;5503; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_5_3:5504; GFX90A: ; %bb.0:5505; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5506; GFX90A-NEXT: ;;#ASMSTART5507; GFX90A-NEXT: ; def s[4:5]5508; GFX90A-NEXT: ;;#ASMEND5509; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55510; GFX90A-NEXT: s_mov_b32 s9, s45511; GFX90A-NEXT: ;;#ASMSTART5512; GFX90A-NEXT: ; use s[8:9]5513; GFX90A-NEXT: ;;#ASMEND5514; GFX90A-NEXT: s_setpc_b64 s[30:31]5515;5516; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_5_3:5517; GFX942: ; %bb.0:5518; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5519; GFX942-NEXT: ;;#ASMSTART5520; GFX942-NEXT: ; def s[0:1]5521; GFX942-NEXT: ;;#ASMEND5522; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15523; GFX942-NEXT: s_mov_b32 s9, s05524; GFX942-NEXT: ;;#ASMSTART5525; GFX942-NEXT: ; use s[8:9]5526; GFX942-NEXT: ;;#ASMEND5527; GFX942-NEXT: s_setpc_b64 s[30:31]5528 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5529 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5530 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5531 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5532 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 3>5533 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5534 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5535 ret void5536}5537 5538define void @s_shuffle_v3bf16_v3bf16__5_5_4() {5539; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_5_4:5540; GFX900: ; %bb.0:5541; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5542; GFX900-NEXT: ;;#ASMSTART5543; GFX900-NEXT: ; def s[4:5]5544; GFX900-NEXT: ;;#ASMEND5545; GFX900-NEXT: s_lshr_b32 s9, s4, 165546; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s55547; GFX900-NEXT: ;;#ASMSTART5548; GFX900-NEXT: ; use s[8:9]5549; GFX900-NEXT: ;;#ASMEND5550; GFX900-NEXT: s_setpc_b64 s[30:31]5551;5552; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_5_4:5553; GFX90A: ; %bb.0:5554; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5555; GFX90A-NEXT: ;;#ASMSTART5556; GFX90A-NEXT: ; def s[4:5]5557; GFX90A-NEXT: ;;#ASMEND5558; GFX90A-NEXT: s_lshr_b32 s9, s4, 165559; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s55560; GFX90A-NEXT: ;;#ASMSTART5561; GFX90A-NEXT: ; use s[8:9]5562; GFX90A-NEXT: ;;#ASMEND5563; GFX90A-NEXT: s_setpc_b64 s[30:31]5564;5565; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_5_4:5566; GFX942: ; %bb.0:5567; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5568; GFX942-NEXT: ;;#ASMSTART5569; GFX942-NEXT: ; def s[0:1]5570; GFX942-NEXT: ;;#ASMEND5571; GFX942-NEXT: s_lshr_b32 s9, s0, 165572; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s15573; GFX942-NEXT: ;;#ASMSTART5574; GFX942-NEXT: ; use s[8:9]5575; GFX942-NEXT: ;;#ASMEND5576; GFX942-NEXT: s_setpc_b64 s[30:31]5577 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5578 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5579 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5580 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5581 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 4>5582 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5583 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5584 ret void5585}5586 5587define void @s_shuffle_v3bf16_v3bf16__5_5_5() {5588; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__5_5_5:5589; GFX9: ; %bb.0:5590; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5591; GFX9-NEXT: ;;#ASMSTART5592; GFX9-NEXT: ; def s[8:9]5593; GFX9-NEXT: ;;#ASMEND5594; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s95595; GFX9-NEXT: ;;#ASMSTART5596; GFX9-NEXT: ; use s[8:9]5597; GFX9-NEXT: ;;#ASMEND5598; GFX9-NEXT: s_setpc_b64 s[30:31]5599 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5600 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5601 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5602 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5603 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 5, i32 5>5604 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5605 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5606 ret void5607}5608 5609define void @s_shuffle_v3bf16_v3bf16__u_0_0() {5610; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__u_0_0:5611; GFX900: ; %bb.0:5612; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5613; GFX900-NEXT: ;;#ASMSTART5614; GFX900-NEXT: ; def s[4:5]5615; GFX900-NEXT: ;;#ASMEND5616; GFX900-NEXT: s_lshl_b32 s8, s4, 165617; GFX900-NEXT: s_mov_b32 s9, s45618; GFX900-NEXT: ;;#ASMSTART5619; GFX900-NEXT: ; use s[8:9]5620; GFX900-NEXT: ;;#ASMEND5621; GFX900-NEXT: s_setpc_b64 s[30:31]5622;5623; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__u_0_0:5624; GFX90A: ; %bb.0:5625; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5626; GFX90A-NEXT: ;;#ASMSTART5627; GFX90A-NEXT: ; def s[4:5]5628; GFX90A-NEXT: ;;#ASMEND5629; GFX90A-NEXT: s_lshl_b32 s8, s4, 165630; GFX90A-NEXT: s_mov_b32 s9, s45631; GFX90A-NEXT: ;;#ASMSTART5632; GFX90A-NEXT: ; use s[8:9]5633; GFX90A-NEXT: ;;#ASMEND5634; GFX90A-NEXT: s_setpc_b64 s[30:31]5635;5636; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__u_0_0:5637; GFX942: ; %bb.0:5638; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5639; GFX942-NEXT: ;;#ASMSTART5640; GFX942-NEXT: ; def s[0:1]5641; GFX942-NEXT: ;;#ASMEND5642; GFX942-NEXT: s_lshl_b32 s8, s0, 165643; GFX942-NEXT: s_mov_b32 s9, s05644; GFX942-NEXT: ;;#ASMSTART5645; GFX942-NEXT: ; use s[8:9]5646; GFX942-NEXT: ;;#ASMEND5647; GFX942-NEXT: s_setpc_b64 s[30:31]5648 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5649 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5650 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 0, i32 0>5651 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5652 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5653 ret void5654}5655 5656define void @s_shuffle_v3bf16_v3bf16__0_0_0() {5657; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__0_0_0:5658; GFX900: ; %bb.0:5659; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5660; GFX900-NEXT: ;;#ASMSTART5661; GFX900-NEXT: ; def s[4:5]5662; GFX900-NEXT: ;;#ASMEND5663; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s45664; GFX900-NEXT: s_mov_b32 s9, s45665; GFX900-NEXT: ;;#ASMSTART5666; GFX900-NEXT: ; use s[8:9]5667; GFX900-NEXT: ;;#ASMEND5668; GFX900-NEXT: s_setpc_b64 s[30:31]5669;5670; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__0_0_0:5671; GFX90A: ; %bb.0:5672; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5673; GFX90A-NEXT: ;;#ASMSTART5674; GFX90A-NEXT: ; def s[4:5]5675; GFX90A-NEXT: ;;#ASMEND5676; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s45677; GFX90A-NEXT: s_mov_b32 s9, s45678; GFX90A-NEXT: ;;#ASMSTART5679; GFX90A-NEXT: ; use s[8:9]5680; GFX90A-NEXT: ;;#ASMEND5681; GFX90A-NEXT: s_setpc_b64 s[30:31]5682;5683; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__0_0_0:5684; GFX942: ; %bb.0:5685; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5686; GFX942-NEXT: ;;#ASMSTART5687; GFX942-NEXT: ; def s[0:1]5688; GFX942-NEXT: ;;#ASMEND5689; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s05690; GFX942-NEXT: s_mov_b32 s9, s05691; GFX942-NEXT: ;;#ASMSTART5692; GFX942-NEXT: ; use s[8:9]5693; GFX942-NEXT: ;;#ASMEND5694; GFX942-NEXT: s_setpc_b64 s[30:31]5695 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5696 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5697 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> zeroinitializer5698 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5699 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5700 ret void5701}5702 5703define void @s_shuffle_v3bf16_v3bf16__1_0_0() {5704; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_0_0:5705; GFX900: ; %bb.0:5706; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5707; GFX900-NEXT: ;;#ASMSTART5708; GFX900-NEXT: ; def s[4:5]5709; GFX900-NEXT: ;;#ASMEND5710; GFX900-NEXT: s_lshr_b32 s5, s4, 165711; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45712; GFX900-NEXT: s_mov_b32 s9, s45713; GFX900-NEXT: ;;#ASMSTART5714; GFX900-NEXT: ; use s[8:9]5715; GFX900-NEXT: ;;#ASMEND5716; GFX900-NEXT: s_setpc_b64 s[30:31]5717;5718; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_0_0:5719; GFX90A: ; %bb.0:5720; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5721; GFX90A-NEXT: ;;#ASMSTART5722; GFX90A-NEXT: ; def s[4:5]5723; GFX90A-NEXT: ;;#ASMEND5724; GFX90A-NEXT: s_lshr_b32 s5, s4, 165725; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45726; GFX90A-NEXT: s_mov_b32 s9, s45727; GFX90A-NEXT: ;;#ASMSTART5728; GFX90A-NEXT: ; use s[8:9]5729; GFX90A-NEXT: ;;#ASMEND5730; GFX90A-NEXT: s_setpc_b64 s[30:31]5731;5732; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_0_0:5733; GFX942: ; %bb.0:5734; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5735; GFX942-NEXT: ;;#ASMSTART5736; GFX942-NEXT: ; def s[0:1]5737; GFX942-NEXT: ;;#ASMEND5738; GFX942-NEXT: s_lshr_b32 s1, s0, 165739; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05740; GFX942-NEXT: s_mov_b32 s9, s05741; GFX942-NEXT: ;;#ASMSTART5742; GFX942-NEXT: ; use s[8:9]5743; GFX942-NEXT: ;;#ASMEND5744; GFX942-NEXT: s_setpc_b64 s[30:31]5745 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5746 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5747 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 0, i32 0>5748 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5749 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5750 ret void5751}5752 5753define void @s_shuffle_v3bf16_v3bf16__2_0_0() {5754; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__2_0_0:5755; GFX900: ; %bb.0:5756; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5757; GFX900-NEXT: ;;#ASMSTART5758; GFX900-NEXT: ; def s[4:5]5759; GFX900-NEXT: ;;#ASMEND5760; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45761; GFX900-NEXT: s_mov_b32 s9, s45762; GFX900-NEXT: ;;#ASMSTART5763; GFX900-NEXT: ; use s[8:9]5764; GFX900-NEXT: ;;#ASMEND5765; GFX900-NEXT: s_setpc_b64 s[30:31]5766;5767; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__2_0_0:5768; GFX90A: ; %bb.0:5769; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5770; GFX90A-NEXT: ;;#ASMSTART5771; GFX90A-NEXT: ; def s[4:5]5772; GFX90A-NEXT: ;;#ASMEND5773; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45774; GFX90A-NEXT: s_mov_b32 s9, s45775; GFX90A-NEXT: ;;#ASMSTART5776; GFX90A-NEXT: ; use s[8:9]5777; GFX90A-NEXT: ;;#ASMEND5778; GFX90A-NEXT: s_setpc_b64 s[30:31]5779;5780; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__2_0_0:5781; GFX942: ; %bb.0:5782; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5783; GFX942-NEXT: ;;#ASMSTART5784; GFX942-NEXT: ; def s[0:1]5785; GFX942-NEXT: ;;#ASMEND5786; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05787; GFX942-NEXT: s_mov_b32 s9, s05788; GFX942-NEXT: ;;#ASMSTART5789; GFX942-NEXT: ; use s[8:9]5790; GFX942-NEXT: ;;#ASMEND5791; GFX942-NEXT: s_setpc_b64 s[30:31]5792 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5793 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5794 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 0, i32 0>5795 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5796 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5797 ret void5798}5799 5800define void @s_shuffle_v3bf16_v3bf16__3_0_0() {5801; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__3_0_0:5802; GFX900: ; %bb.0:5803; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5804; GFX900-NEXT: ;;#ASMSTART5805; GFX900-NEXT: ; def s[4:5]5806; GFX900-NEXT: ;;#ASMEND5807; GFX900-NEXT: s_lshl_b32 s8, s4, 165808; GFX900-NEXT: s_mov_b32 s9, s45809; GFX900-NEXT: ;;#ASMSTART5810; GFX900-NEXT: ; use s[8:9]5811; GFX900-NEXT: ;;#ASMEND5812; GFX900-NEXT: s_setpc_b64 s[30:31]5813;5814; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__3_0_0:5815; GFX90A: ; %bb.0:5816; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5817; GFX90A-NEXT: ;;#ASMSTART5818; GFX90A-NEXT: ; def s[4:5]5819; GFX90A-NEXT: ;;#ASMEND5820; GFX90A-NEXT: s_lshl_b32 s8, s4, 165821; GFX90A-NEXT: s_mov_b32 s9, s45822; GFX90A-NEXT: ;;#ASMSTART5823; GFX90A-NEXT: ; use s[8:9]5824; GFX90A-NEXT: ;;#ASMEND5825; GFX90A-NEXT: s_setpc_b64 s[30:31]5826;5827; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__3_0_0:5828; GFX942: ; %bb.0:5829; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5830; GFX942-NEXT: ;;#ASMSTART5831; GFX942-NEXT: ; def s[0:1]5832; GFX942-NEXT: ;;#ASMEND5833; GFX942-NEXT: s_lshl_b32 s8, s0, 165834; GFX942-NEXT: s_mov_b32 s9, s05835; GFX942-NEXT: ;;#ASMSTART5836; GFX942-NEXT: ; use s[8:9]5837; GFX942-NEXT: ;;#ASMEND5838; GFX942-NEXT: s_setpc_b64 s[30:31]5839 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5840 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5841 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 0, i32 0>5842 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5843 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5844 ret void5845}5846 5847define void @s_shuffle_v3bf16_v3bf16__4_0_0() {5848; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_0_0:5849; GFX900: ; %bb.0:5850; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5851; GFX900-NEXT: ;;#ASMSTART5852; GFX900-NEXT: ; def s[4:5]5853; GFX900-NEXT: ;;#ASMEND5854; GFX900-NEXT: ;;#ASMSTART5855; GFX900-NEXT: ; def s[6:7]5856; GFX900-NEXT: ;;#ASMEND5857; GFX900-NEXT: s_lshr_b32 s5, s6, 165858; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s45859; GFX900-NEXT: s_mov_b32 s9, s45860; GFX900-NEXT: ;;#ASMSTART5861; GFX900-NEXT: ; use s[8:9]5862; GFX900-NEXT: ;;#ASMEND5863; GFX900-NEXT: s_setpc_b64 s[30:31]5864;5865; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_0_0:5866; GFX90A: ; %bb.0:5867; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5868; GFX90A-NEXT: ;;#ASMSTART5869; GFX90A-NEXT: ; def s[4:5]5870; GFX90A-NEXT: ;;#ASMEND5871; GFX90A-NEXT: ;;#ASMSTART5872; GFX90A-NEXT: ; def s[6:7]5873; GFX90A-NEXT: ;;#ASMEND5874; GFX90A-NEXT: s_lshr_b32 s5, s6, 165875; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s45876; GFX90A-NEXT: s_mov_b32 s9, s45877; GFX90A-NEXT: ;;#ASMSTART5878; GFX90A-NEXT: ; use s[8:9]5879; GFX90A-NEXT: ;;#ASMEND5880; GFX90A-NEXT: s_setpc_b64 s[30:31]5881;5882; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_0_0:5883; GFX942: ; %bb.0:5884; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5885; GFX942-NEXT: ;;#ASMSTART5886; GFX942-NEXT: ; def s[0:1]5887; GFX942-NEXT: ;;#ASMEND5888; GFX942-NEXT: ;;#ASMSTART5889; GFX942-NEXT: ; def s[2:3]5890; GFX942-NEXT: ;;#ASMEND5891; GFX942-NEXT: s_lshr_b32 s1, s2, 165892; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s05893; GFX942-NEXT: s_mov_b32 s9, s05894; GFX942-NEXT: ;;#ASMSTART5895; GFX942-NEXT: ; use s[8:9]5896; GFX942-NEXT: ;;#ASMEND5897; GFX942-NEXT: s_setpc_b64 s[30:31]5898 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5899 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5900 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5901 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5902 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 0, i32 0>5903 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5904 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5905 ret void5906}5907 5908define void @s_shuffle_v3bf16_v3bf16__5_0_0() {5909; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_0:5910; GFX900: ; %bb.0:5911; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5912; GFX900-NEXT: ;;#ASMSTART5913; GFX900-NEXT: ; def s[4:5]5914; GFX900-NEXT: ;;#ASMEND5915; GFX900-NEXT: ;;#ASMSTART5916; GFX900-NEXT: ; def s[6:7]5917; GFX900-NEXT: ;;#ASMEND5918; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s45919; GFX900-NEXT: s_mov_b32 s9, s45920; GFX900-NEXT: ;;#ASMSTART5921; GFX900-NEXT: ; use s[8:9]5922; GFX900-NEXT: ;;#ASMEND5923; GFX900-NEXT: s_setpc_b64 s[30:31]5924;5925; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_0:5926; GFX90A: ; %bb.0:5927; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5928; GFX90A-NEXT: ;;#ASMSTART5929; GFX90A-NEXT: ; def s[4:5]5930; GFX90A-NEXT: ;;#ASMEND5931; GFX90A-NEXT: ;;#ASMSTART5932; GFX90A-NEXT: ; def s[6:7]5933; GFX90A-NEXT: ;;#ASMEND5934; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s45935; GFX90A-NEXT: s_mov_b32 s9, s45936; GFX90A-NEXT: ;;#ASMSTART5937; GFX90A-NEXT: ; use s[8:9]5938; GFX90A-NEXT: ;;#ASMEND5939; GFX90A-NEXT: s_setpc_b64 s[30:31]5940;5941; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_0:5942; GFX942: ; %bb.0:5943; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5944; GFX942-NEXT: ;;#ASMSTART5945; GFX942-NEXT: ; def s[0:1]5946; GFX942-NEXT: ;;#ASMEND5947; GFX942-NEXT: ;;#ASMSTART5948; GFX942-NEXT: ; def s[2:3]5949; GFX942-NEXT: ;;#ASMEND5950; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s05951; GFX942-NEXT: s_mov_b32 s9, s05952; GFX942-NEXT: ;;#ASMSTART5953; GFX942-NEXT: ; use s[8:9]5954; GFX942-NEXT: ;;#ASMEND5955; GFX942-NEXT: s_setpc_b64 s[30:31]5956 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()5957 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()5958 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5959 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>5960 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 0>5961 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>5962 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)5963 ret void5964}5965 5966define void @s_shuffle_v3bf16_v3bf16__5_u_0() {5967; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_u_0:5968; GFX900: ; %bb.0:5969; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5970; GFX900-NEXT: ;;#ASMSTART5971; GFX900-NEXT: ; def s[4:5]5972; GFX900-NEXT: ;;#ASMEND5973; GFX900-NEXT: ;;#ASMSTART5974; GFX900-NEXT: ; def s[6:7]5975; GFX900-NEXT: ;;#ASMEND5976; GFX900-NEXT: s_mov_b32 s8, s75977; GFX900-NEXT: s_mov_b32 s9, s45978; GFX900-NEXT: ;;#ASMSTART5979; GFX900-NEXT: ; use s[8:9]5980; GFX900-NEXT: ;;#ASMEND5981; GFX900-NEXT: s_setpc_b64 s[30:31]5982;5983; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_u_0:5984; GFX90A: ; %bb.0:5985; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)5986; GFX90A-NEXT: ;;#ASMSTART5987; GFX90A-NEXT: ; def s[4:5]5988; GFX90A-NEXT: ;;#ASMEND5989; GFX90A-NEXT: ;;#ASMSTART5990; GFX90A-NEXT: ; def s[6:7]5991; GFX90A-NEXT: ;;#ASMEND5992; GFX90A-NEXT: s_mov_b32 s8, s75993; GFX90A-NEXT: s_mov_b32 s9, s45994; GFX90A-NEXT: ;;#ASMSTART5995; GFX90A-NEXT: ; use s[8:9]5996; GFX90A-NEXT: ;;#ASMEND5997; GFX90A-NEXT: s_setpc_b64 s[30:31]5998;5999; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_u_0:6000; GFX942: ; %bb.0:6001; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6002; GFX942-NEXT: ;;#ASMSTART6003; GFX942-NEXT: ; def s[0:1]6004; GFX942-NEXT: ;;#ASMEND6005; GFX942-NEXT: ;;#ASMSTART6006; GFX942-NEXT: ; def s[2:3]6007; GFX942-NEXT: ;;#ASMEND6008; GFX942-NEXT: s_mov_b32 s8, s36009; GFX942-NEXT: s_mov_b32 s9, s06010; GFX942-NEXT: ;;#ASMSTART6011; GFX942-NEXT: ; use s[8:9]6012; GFX942-NEXT: ;;#ASMEND6013; GFX942-NEXT: s_setpc_b64 s[30:31]6014 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6015 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6016 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6017 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6018 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 0>6019 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6020 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6021 ret void6022}6023 6024define void @s_shuffle_v3bf16_v3bf16__5_1_0() {6025; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_0:6026; GFX900: ; %bb.0:6027; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6028; GFX900-NEXT: ;;#ASMSTART6029; GFX900-NEXT: ; def s[4:5]6030; GFX900-NEXT: ;;#ASMEND6031; GFX900-NEXT: s_lshr_b32 s5, s4, 166032; GFX900-NEXT: ;;#ASMSTART6033; GFX900-NEXT: ; def s[6:7]6034; GFX900-NEXT: ;;#ASMEND6035; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s56036; GFX900-NEXT: s_mov_b32 s9, s46037; GFX900-NEXT: ;;#ASMSTART6038; GFX900-NEXT: ; use s[8:9]6039; GFX900-NEXT: ;;#ASMEND6040; GFX900-NEXT: s_setpc_b64 s[30:31]6041;6042; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_0:6043; GFX90A: ; %bb.0:6044; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6045; GFX90A-NEXT: ;;#ASMSTART6046; GFX90A-NEXT: ; def s[4:5]6047; GFX90A-NEXT: ;;#ASMEND6048; GFX90A-NEXT: s_lshr_b32 s5, s4, 166049; GFX90A-NEXT: ;;#ASMSTART6050; GFX90A-NEXT: ; def s[6:7]6051; GFX90A-NEXT: ;;#ASMEND6052; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s56053; GFX90A-NEXT: s_mov_b32 s9, s46054; GFX90A-NEXT: ;;#ASMSTART6055; GFX90A-NEXT: ; use s[8:9]6056; GFX90A-NEXT: ;;#ASMEND6057; GFX90A-NEXT: s_setpc_b64 s[30:31]6058;6059; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_0:6060; GFX942: ; %bb.0:6061; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6062; GFX942-NEXT: ;;#ASMSTART6063; GFX942-NEXT: ; def s[0:1]6064; GFX942-NEXT: ;;#ASMEND6065; GFX942-NEXT: s_lshr_b32 s1, s0, 166066; GFX942-NEXT: ;;#ASMSTART6067; GFX942-NEXT: ; def s[2:3]6068; GFX942-NEXT: ;;#ASMEND6069; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s16070; GFX942-NEXT: s_mov_b32 s9, s06071; GFX942-NEXT: ;;#ASMSTART6072; GFX942-NEXT: ; use s[8:9]6073; GFX942-NEXT: ;;#ASMEND6074; GFX942-NEXT: s_setpc_b64 s[30:31]6075 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6076 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6077 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6078 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6079 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 0>6080 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6081 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6082 ret void6083}6084 6085define void @s_shuffle_v3bf16_v3bf16__5_2_0() {6086; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_0:6087; GFX900: ; %bb.0:6088; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6089; GFX900-NEXT: ;;#ASMSTART6090; GFX900-NEXT: ; def s[4:5]6091; GFX900-NEXT: ;;#ASMEND6092; GFX900-NEXT: ;;#ASMSTART6093; GFX900-NEXT: ; def s[6:7]6094; GFX900-NEXT: ;;#ASMEND6095; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s56096; GFX900-NEXT: s_mov_b32 s9, s46097; GFX900-NEXT: ;;#ASMSTART6098; GFX900-NEXT: ; use s[8:9]6099; GFX900-NEXT: ;;#ASMEND6100; GFX900-NEXT: s_setpc_b64 s[30:31]6101;6102; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_0:6103; GFX90A: ; %bb.0:6104; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6105; GFX90A-NEXT: ;;#ASMSTART6106; GFX90A-NEXT: ; def s[4:5]6107; GFX90A-NEXT: ;;#ASMEND6108; GFX90A-NEXT: ;;#ASMSTART6109; GFX90A-NEXT: ; def s[6:7]6110; GFX90A-NEXT: ;;#ASMEND6111; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s56112; GFX90A-NEXT: s_mov_b32 s9, s46113; GFX90A-NEXT: ;;#ASMSTART6114; GFX90A-NEXT: ; use s[8:9]6115; GFX90A-NEXT: ;;#ASMEND6116; GFX90A-NEXT: s_setpc_b64 s[30:31]6117;6118; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_0:6119; GFX942: ; %bb.0:6120; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6121; GFX942-NEXT: ;;#ASMSTART6122; GFX942-NEXT: ; def s[0:1]6123; GFX942-NEXT: ;;#ASMEND6124; GFX942-NEXT: ;;#ASMSTART6125; GFX942-NEXT: ; def s[2:3]6126; GFX942-NEXT: ;;#ASMEND6127; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s16128; GFX942-NEXT: s_mov_b32 s9, s06129; GFX942-NEXT: ;;#ASMSTART6130; GFX942-NEXT: ; use s[8:9]6131; GFX942-NEXT: ;;#ASMEND6132; GFX942-NEXT: s_setpc_b64 s[30:31]6133 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6134 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6135 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6136 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6137 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 0>6138 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6139 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6140 ret void6141}6142 6143define void @s_shuffle_v3bf16_v3bf16__5_3_0() {6144; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_3_0:6145; GFX900: ; %bb.0:6146; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6147; GFX900-NEXT: ;;#ASMSTART6148; GFX900-NEXT: ; def s[4:5]6149; GFX900-NEXT: ;;#ASMEND6150; GFX900-NEXT: ;;#ASMSTART6151; GFX900-NEXT: ; def s[6:7]6152; GFX900-NEXT: ;;#ASMEND6153; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s66154; GFX900-NEXT: s_mov_b32 s9, s46155; GFX900-NEXT: ;;#ASMSTART6156; GFX900-NEXT: ; use s[8:9]6157; GFX900-NEXT: ;;#ASMEND6158; GFX900-NEXT: s_setpc_b64 s[30:31]6159;6160; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_3_0:6161; GFX90A: ; %bb.0:6162; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6163; GFX90A-NEXT: ;;#ASMSTART6164; GFX90A-NEXT: ; def s[4:5]6165; GFX90A-NEXT: ;;#ASMEND6166; GFX90A-NEXT: ;;#ASMSTART6167; GFX90A-NEXT: ; def s[6:7]6168; GFX90A-NEXT: ;;#ASMEND6169; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s66170; GFX90A-NEXT: s_mov_b32 s9, s46171; GFX90A-NEXT: ;;#ASMSTART6172; GFX90A-NEXT: ; use s[8:9]6173; GFX90A-NEXT: ;;#ASMEND6174; GFX90A-NEXT: s_setpc_b64 s[30:31]6175;6176; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_3_0:6177; GFX942: ; %bb.0:6178; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6179; GFX942-NEXT: ;;#ASMSTART6180; GFX942-NEXT: ; def s[0:1]6181; GFX942-NEXT: ;;#ASMEND6182; GFX942-NEXT: ;;#ASMSTART6183; GFX942-NEXT: ; def s[2:3]6184; GFX942-NEXT: ;;#ASMEND6185; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s26186; GFX942-NEXT: s_mov_b32 s9, s06187; GFX942-NEXT: ;;#ASMSTART6188; GFX942-NEXT: ; use s[8:9]6189; GFX942-NEXT: ;;#ASMEND6190; GFX942-NEXT: s_setpc_b64 s[30:31]6191 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6192 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6193 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6194 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6195 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 0>6196 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6197 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6198 ret void6199}6200 6201define void @s_shuffle_v3bf16_v3bf16__5_4_0() {6202; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_0:6203; GFX900: ; %bb.0:6204; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6205; GFX900-NEXT: ;;#ASMSTART6206; GFX900-NEXT: ; def s[4:5]6207; GFX900-NEXT: ;;#ASMEND6208; GFX900-NEXT: ;;#ASMSTART6209; GFX900-NEXT: ; def s[6:7]6210; GFX900-NEXT: ;;#ASMEND6211; GFX900-NEXT: s_lshr_b32 s5, s6, 166212; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s56213; GFX900-NEXT: s_mov_b32 s9, s46214; GFX900-NEXT: ;;#ASMSTART6215; GFX900-NEXT: ; use s[8:9]6216; GFX900-NEXT: ;;#ASMEND6217; GFX900-NEXT: s_setpc_b64 s[30:31]6218;6219; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_0:6220; GFX90A: ; %bb.0:6221; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6222; GFX90A-NEXT: ;;#ASMSTART6223; GFX90A-NEXT: ; def s[4:5]6224; GFX90A-NEXT: ;;#ASMEND6225; GFX90A-NEXT: ;;#ASMSTART6226; GFX90A-NEXT: ; def s[6:7]6227; GFX90A-NEXT: ;;#ASMEND6228; GFX90A-NEXT: s_lshr_b32 s5, s6, 166229; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s56230; GFX90A-NEXT: s_mov_b32 s9, s46231; GFX90A-NEXT: ;;#ASMSTART6232; GFX90A-NEXT: ; use s[8:9]6233; GFX90A-NEXT: ;;#ASMEND6234; GFX90A-NEXT: s_setpc_b64 s[30:31]6235;6236; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_0:6237; GFX942: ; %bb.0:6238; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6239; GFX942-NEXT: ;;#ASMSTART6240; GFX942-NEXT: ; def s[0:1]6241; GFX942-NEXT: ;;#ASMEND6242; GFX942-NEXT: ;;#ASMSTART6243; GFX942-NEXT: ; def s[2:3]6244; GFX942-NEXT: ;;#ASMEND6245; GFX942-NEXT: s_lshr_b32 s1, s2, 166246; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s16247; GFX942-NEXT: s_mov_b32 s9, s06248; GFX942-NEXT: ;;#ASMSTART6249; GFX942-NEXT: ; use s[8:9]6250; GFX942-NEXT: ;;#ASMEND6251; GFX942-NEXT: s_setpc_b64 s[30:31]6252 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6253 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6254 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6255 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6256 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 0>6257 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6258 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6259 ret void6260}6261 6262define void @s_shuffle_v3bf16_v3bf16__u_1_1() {6263; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__u_1_1:6264; GFX9: ; %bb.0:6265; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6266; GFX9-NEXT: ;;#ASMSTART6267; GFX9-NEXT: ; def s[8:9]6268; GFX9-NEXT: ;;#ASMEND6269; GFX9-NEXT: s_lshr_b32 s9, s8, 166270; GFX9-NEXT: ;;#ASMSTART6271; GFX9-NEXT: ; use s[8:9]6272; GFX9-NEXT: ;;#ASMEND6273; GFX9-NEXT: s_setpc_b64 s[30:31]6274 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6275 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6276 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 1, i32 1>6277 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6278 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6279 ret void6280}6281 6282define void @s_shuffle_v3bf16_v3bf16__0_1_1() {6283; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__0_1_1:6284; GFX9: ; %bb.0:6285; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6286; GFX9-NEXT: ;;#ASMSTART6287; GFX9-NEXT: ; def s[8:9]6288; GFX9-NEXT: ;;#ASMEND6289; GFX9-NEXT: s_lshr_b32 s9, s8, 166290; GFX9-NEXT: ;;#ASMSTART6291; GFX9-NEXT: ; use s[8:9]6292; GFX9-NEXT: ;;#ASMEND6293; GFX9-NEXT: s_setpc_b64 s[30:31]6294 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6295 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6296 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 1>6297 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6298 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6299 ret void6300}6301 6302define void @s_shuffle_v3bf16_v3bf16__1_1_1() {6303; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_1_1:6304; GFX900: ; %bb.0:6305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6306; GFX900-NEXT: ;;#ASMSTART6307; GFX900-NEXT: ; def s[4:5]6308; GFX900-NEXT: ;;#ASMEND6309; GFX900-NEXT: s_lshr_b32 s9, s4, 166310; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s96311; GFX900-NEXT: ;;#ASMSTART6312; GFX900-NEXT: ; use s[8:9]6313; GFX900-NEXT: ;;#ASMEND6314; GFX900-NEXT: s_setpc_b64 s[30:31]6315;6316; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_1_1:6317; GFX90A: ; %bb.0:6318; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6319; GFX90A-NEXT: ;;#ASMSTART6320; GFX90A-NEXT: ; def s[4:5]6321; GFX90A-NEXT: ;;#ASMEND6322; GFX90A-NEXT: s_lshr_b32 s9, s4, 166323; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s96324; GFX90A-NEXT: ;;#ASMSTART6325; GFX90A-NEXT: ; use s[8:9]6326; GFX90A-NEXT: ;;#ASMEND6327; GFX90A-NEXT: s_setpc_b64 s[30:31]6328;6329; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_1_1:6330; GFX942: ; %bb.0:6331; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6332; GFX942-NEXT: ;;#ASMSTART6333; GFX942-NEXT: ; def s[0:1]6334; GFX942-NEXT: ;;#ASMEND6335; GFX942-NEXT: s_lshr_b32 s9, s0, 166336; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s96337; GFX942-NEXT: ;;#ASMSTART6338; GFX942-NEXT: ; use s[8:9]6339; GFX942-NEXT: ;;#ASMEND6340; GFX942-NEXT: s_setpc_b64 s[30:31]6341 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6342 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6343 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 1, i32 1>6344 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6345 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6346 ret void6347}6348 6349define void @s_shuffle_v3bf16_v3bf16__2_1_1() {6350; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__2_1_1:6351; GFX900: ; %bb.0:6352; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6353; GFX900-NEXT: ;;#ASMSTART6354; GFX900-NEXT: ; def s[4:5]6355; GFX900-NEXT: ;;#ASMEND6356; GFX900-NEXT: s_lshr_b32 s9, s4, 166357; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s96358; GFX900-NEXT: ;;#ASMSTART6359; GFX900-NEXT: ; use s[8:9]6360; GFX900-NEXT: ;;#ASMEND6361; GFX900-NEXT: s_setpc_b64 s[30:31]6362;6363; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__2_1_1:6364; GFX90A: ; %bb.0:6365; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6366; GFX90A-NEXT: ;;#ASMSTART6367; GFX90A-NEXT: ; def s[4:5]6368; GFX90A-NEXT: ;;#ASMEND6369; GFX90A-NEXT: s_lshr_b32 s9, s4, 166370; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s96371; GFX90A-NEXT: ;;#ASMSTART6372; GFX90A-NEXT: ; use s[8:9]6373; GFX90A-NEXT: ;;#ASMEND6374; GFX90A-NEXT: s_setpc_b64 s[30:31]6375;6376; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__2_1_1:6377; GFX942: ; %bb.0:6378; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6379; GFX942-NEXT: ;;#ASMSTART6380; GFX942-NEXT: ; def s[0:1]6381; GFX942-NEXT: ;;#ASMEND6382; GFX942-NEXT: s_lshr_b32 s9, s0, 166383; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s96384; GFX942-NEXT: ;;#ASMSTART6385; GFX942-NEXT: ; use s[8:9]6386; GFX942-NEXT: ;;#ASMEND6387; GFX942-NEXT: s_setpc_b64 s[30:31]6388 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6389 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6390 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 1, i32 1>6391 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6392 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6393 ret void6394}6395 6396define void @s_shuffle_v3bf16_v3bf16__3_1_1() {6397; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__3_1_1:6398; GFX9: ; %bb.0:6399; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6400; GFX9-NEXT: ;;#ASMSTART6401; GFX9-NEXT: ; def s[8:9]6402; GFX9-NEXT: ;;#ASMEND6403; GFX9-NEXT: s_lshr_b32 s9, s8, 166404; GFX9-NEXT: ;;#ASMSTART6405; GFX9-NEXT: ; use s[8:9]6406; GFX9-NEXT: ;;#ASMEND6407; GFX9-NEXT: s_setpc_b64 s[30:31]6408 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6409 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6410 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 1, i32 1>6411 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6412 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6413 ret void6414}6415 6416define void @s_shuffle_v3bf16_v3bf16__4_1_1() {6417; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_1_1:6418; GFX900: ; %bb.0:6419; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6420; GFX900-NEXT: ;;#ASMSTART6421; GFX900-NEXT: ; def s[4:5]6422; GFX900-NEXT: ;;#ASMEND6423; GFX900-NEXT: ;;#ASMSTART6424; GFX900-NEXT: ; def s[6:7]6425; GFX900-NEXT: ;;#ASMEND6426; GFX900-NEXT: s_lshr_b32 s9, s4, 166427; GFX900-NEXT: s_lshr_b32 s4, s6, 166428; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s96429; GFX900-NEXT: ;;#ASMSTART6430; GFX900-NEXT: ; use s[8:9]6431; GFX900-NEXT: ;;#ASMEND6432; GFX900-NEXT: s_setpc_b64 s[30:31]6433;6434; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_1_1:6435; GFX90A: ; %bb.0:6436; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6437; GFX90A-NEXT: ;;#ASMSTART6438; GFX90A-NEXT: ; def s[4:5]6439; GFX90A-NEXT: ;;#ASMEND6440; GFX90A-NEXT: ;;#ASMSTART6441; GFX90A-NEXT: ; def s[6:7]6442; GFX90A-NEXT: ;;#ASMEND6443; GFX90A-NEXT: s_lshr_b32 s9, s4, 166444; GFX90A-NEXT: s_lshr_b32 s4, s6, 166445; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s96446; GFX90A-NEXT: ;;#ASMSTART6447; GFX90A-NEXT: ; use s[8:9]6448; GFX90A-NEXT: ;;#ASMEND6449; GFX90A-NEXT: s_setpc_b64 s[30:31]6450;6451; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_1_1:6452; GFX942: ; %bb.0:6453; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6454; GFX942-NEXT: ;;#ASMSTART6455; GFX942-NEXT: ; def s[0:1]6456; GFX942-NEXT: ;;#ASMEND6457; GFX942-NEXT: ;;#ASMSTART6458; GFX942-NEXT: ; def s[2:3]6459; GFX942-NEXT: ;;#ASMEND6460; GFX942-NEXT: s_lshr_b32 s9, s0, 166461; GFX942-NEXT: s_lshr_b32 s0, s2, 166462; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s96463; GFX942-NEXT: ;;#ASMSTART6464; GFX942-NEXT: ; use s[8:9]6465; GFX942-NEXT: ;;#ASMEND6466; GFX942-NEXT: s_setpc_b64 s[30:31]6467 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6468 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6469 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6470 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6471 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 1, i32 1>6472 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6473 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6474 ret void6475}6476 6477define void @s_shuffle_v3bf16_v3bf16__5_1_1() {6478; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_1:6479; GFX900: ; %bb.0:6480; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6481; GFX900-NEXT: ;;#ASMSTART6482; GFX900-NEXT: ; def s[4:5]6483; GFX900-NEXT: ;;#ASMEND6484; GFX900-NEXT: s_lshr_b32 s9, s4, 166485; GFX900-NEXT: ;;#ASMSTART6486; GFX900-NEXT: ; def s[6:7]6487; GFX900-NEXT: ;;#ASMEND6488; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s96489; GFX900-NEXT: ;;#ASMSTART6490; GFX900-NEXT: ; use s[8:9]6491; GFX900-NEXT: ;;#ASMEND6492; GFX900-NEXT: s_setpc_b64 s[30:31]6493;6494; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_1:6495; GFX90A: ; %bb.0:6496; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6497; GFX90A-NEXT: ;;#ASMSTART6498; GFX90A-NEXT: ; def s[4:5]6499; GFX90A-NEXT: ;;#ASMEND6500; GFX90A-NEXT: s_lshr_b32 s9, s4, 166501; GFX90A-NEXT: ;;#ASMSTART6502; GFX90A-NEXT: ; def s[6:7]6503; GFX90A-NEXT: ;;#ASMEND6504; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s96505; GFX90A-NEXT: ;;#ASMSTART6506; GFX90A-NEXT: ; use s[8:9]6507; GFX90A-NEXT: ;;#ASMEND6508; GFX90A-NEXT: s_setpc_b64 s[30:31]6509;6510; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_1:6511; GFX942: ; %bb.0:6512; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6513; GFX942-NEXT: ;;#ASMSTART6514; GFX942-NEXT: ; def s[0:1]6515; GFX942-NEXT: ;;#ASMEND6516; GFX942-NEXT: s_lshr_b32 s9, s0, 166517; GFX942-NEXT: ;;#ASMSTART6518; GFX942-NEXT: ; def s[2:3]6519; GFX942-NEXT: ;;#ASMEND6520; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s96521; GFX942-NEXT: ;;#ASMSTART6522; GFX942-NEXT: ; use s[8:9]6523; GFX942-NEXT: ;;#ASMEND6524; GFX942-NEXT: s_setpc_b64 s[30:31]6525 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6526 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6527 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6528 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6529 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 1>6530 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6531 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6532 ret void6533}6534 6535define void @s_shuffle_v3bf16_v3bf16__5_u_1() {6536; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_u_1:6537; GFX900: ; %bb.0:6538; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6539; GFX900-NEXT: ;;#ASMSTART6540; GFX900-NEXT: ; def s[4:5]6541; GFX900-NEXT: ;;#ASMEND6542; GFX900-NEXT: ;;#ASMSTART6543; GFX900-NEXT: ; def s[6:7]6544; GFX900-NEXT: ;;#ASMEND6545; GFX900-NEXT: s_lshr_b32 s9, s4, 166546; GFX900-NEXT: s_mov_b32 s8, s76547; GFX900-NEXT: ;;#ASMSTART6548; GFX900-NEXT: ; use s[8:9]6549; GFX900-NEXT: ;;#ASMEND6550; GFX900-NEXT: s_setpc_b64 s[30:31]6551;6552; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_u_1:6553; GFX90A: ; %bb.0:6554; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6555; GFX90A-NEXT: ;;#ASMSTART6556; GFX90A-NEXT: ; def s[4:5]6557; GFX90A-NEXT: ;;#ASMEND6558; GFX90A-NEXT: ;;#ASMSTART6559; GFX90A-NEXT: ; def s[6:7]6560; GFX90A-NEXT: ;;#ASMEND6561; GFX90A-NEXT: s_lshr_b32 s9, s4, 166562; GFX90A-NEXT: s_mov_b32 s8, s76563; GFX90A-NEXT: ;;#ASMSTART6564; GFX90A-NEXT: ; use s[8:9]6565; GFX90A-NEXT: ;;#ASMEND6566; GFX90A-NEXT: s_setpc_b64 s[30:31]6567;6568; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_u_1:6569; GFX942: ; %bb.0:6570; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6571; GFX942-NEXT: ;;#ASMSTART6572; GFX942-NEXT: ; def s[0:1]6573; GFX942-NEXT: ;;#ASMEND6574; GFX942-NEXT: ;;#ASMSTART6575; GFX942-NEXT: ; def s[2:3]6576; GFX942-NEXT: ;;#ASMEND6577; GFX942-NEXT: s_lshr_b32 s9, s0, 166578; GFX942-NEXT: s_mov_b32 s8, s36579; GFX942-NEXT: ;;#ASMSTART6580; GFX942-NEXT: ; use s[8:9]6581; GFX942-NEXT: ;;#ASMEND6582; GFX942-NEXT: s_setpc_b64 s[30:31]6583 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6584 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6585 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6586 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6587 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 1>6588 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6589 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6590 ret void6591}6592 6593define void @s_shuffle_v3bf16_v3bf16__5_0_1() {6594; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_1:6595; GFX900: ; %bb.0:6596; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6597; GFX900-NEXT: ;;#ASMSTART6598; GFX900-NEXT: ; def s[4:5]6599; GFX900-NEXT: ;;#ASMEND6600; GFX900-NEXT: ;;#ASMSTART6601; GFX900-NEXT: ; def s[6:7]6602; GFX900-NEXT: ;;#ASMEND6603; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s46604; GFX900-NEXT: s_lshr_b32 s9, s4, 166605; GFX900-NEXT: ;;#ASMSTART6606; GFX900-NEXT: ; use s[8:9]6607; GFX900-NEXT: ;;#ASMEND6608; GFX900-NEXT: s_setpc_b64 s[30:31]6609;6610; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_1:6611; GFX90A: ; %bb.0:6612; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6613; GFX90A-NEXT: ;;#ASMSTART6614; GFX90A-NEXT: ; def s[4:5]6615; GFX90A-NEXT: ;;#ASMEND6616; GFX90A-NEXT: ;;#ASMSTART6617; GFX90A-NEXT: ; def s[6:7]6618; GFX90A-NEXT: ;;#ASMEND6619; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s46620; GFX90A-NEXT: s_lshr_b32 s9, s4, 166621; GFX90A-NEXT: ;;#ASMSTART6622; GFX90A-NEXT: ; use s[8:9]6623; GFX90A-NEXT: ;;#ASMEND6624; GFX90A-NEXT: s_setpc_b64 s[30:31]6625;6626; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_1:6627; GFX942: ; %bb.0:6628; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6629; GFX942-NEXT: ;;#ASMSTART6630; GFX942-NEXT: ; def s[0:1]6631; GFX942-NEXT: ;;#ASMEND6632; GFX942-NEXT: ;;#ASMSTART6633; GFX942-NEXT: ; def s[2:3]6634; GFX942-NEXT: ;;#ASMEND6635; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s06636; GFX942-NEXT: s_lshr_b32 s9, s0, 166637; GFX942-NEXT: ;;#ASMSTART6638; GFX942-NEXT: ; use s[8:9]6639; GFX942-NEXT: ;;#ASMEND6640; GFX942-NEXT: s_setpc_b64 s[30:31]6641 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6642 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6643 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6644 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6645 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 1>6646 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6647 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6648 ret void6649}6650 6651define void @s_shuffle_v3bf16_v3bf16__5_2_1() {6652; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_1:6653; GFX900: ; %bb.0:6654; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6655; GFX900-NEXT: ;;#ASMSTART6656; GFX900-NEXT: ; def s[4:5]6657; GFX900-NEXT: ;;#ASMEND6658; GFX900-NEXT: ;;#ASMSTART6659; GFX900-NEXT: ; def s[6:7]6660; GFX900-NEXT: ;;#ASMEND6661; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s56662; GFX900-NEXT: s_lshr_b32 s9, s4, 166663; GFX900-NEXT: ;;#ASMSTART6664; GFX900-NEXT: ; use s[8:9]6665; GFX900-NEXT: ;;#ASMEND6666; GFX900-NEXT: s_setpc_b64 s[30:31]6667;6668; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_1:6669; GFX90A: ; %bb.0:6670; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6671; GFX90A-NEXT: ;;#ASMSTART6672; GFX90A-NEXT: ; def s[4:5]6673; GFX90A-NEXT: ;;#ASMEND6674; GFX90A-NEXT: ;;#ASMSTART6675; GFX90A-NEXT: ; def s[6:7]6676; GFX90A-NEXT: ;;#ASMEND6677; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s56678; GFX90A-NEXT: s_lshr_b32 s9, s4, 166679; GFX90A-NEXT: ;;#ASMSTART6680; GFX90A-NEXT: ; use s[8:9]6681; GFX90A-NEXT: ;;#ASMEND6682; GFX90A-NEXT: s_setpc_b64 s[30:31]6683;6684; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_1:6685; GFX942: ; %bb.0:6686; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6687; GFX942-NEXT: ;;#ASMSTART6688; GFX942-NEXT: ; def s[0:1]6689; GFX942-NEXT: ;;#ASMEND6690; GFX942-NEXT: ;;#ASMSTART6691; GFX942-NEXT: ; def s[2:3]6692; GFX942-NEXT: ;;#ASMEND6693; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s16694; GFX942-NEXT: s_lshr_b32 s9, s0, 166695; GFX942-NEXT: ;;#ASMSTART6696; GFX942-NEXT: ; use s[8:9]6697; GFX942-NEXT: ;;#ASMEND6698; GFX942-NEXT: s_setpc_b64 s[30:31]6699 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6700 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6701 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6702 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6703 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 1>6704 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6705 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6706 ret void6707}6708 6709define void @s_shuffle_v3bf16_v3bf16__5_3_1() {6710; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_3_1:6711; GFX900: ; %bb.0:6712; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6713; GFX900-NEXT: ;;#ASMSTART6714; GFX900-NEXT: ; def s[4:5]6715; GFX900-NEXT: ;;#ASMEND6716; GFX900-NEXT: ;;#ASMSTART6717; GFX900-NEXT: ; def s[6:7]6718; GFX900-NEXT: ;;#ASMEND6719; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s66720; GFX900-NEXT: s_lshr_b32 s9, s4, 166721; GFX900-NEXT: ;;#ASMSTART6722; GFX900-NEXT: ; use s[8:9]6723; GFX900-NEXT: ;;#ASMEND6724; GFX900-NEXT: s_setpc_b64 s[30:31]6725;6726; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_3_1:6727; GFX90A: ; %bb.0:6728; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6729; GFX90A-NEXT: ;;#ASMSTART6730; GFX90A-NEXT: ; def s[4:5]6731; GFX90A-NEXT: ;;#ASMEND6732; GFX90A-NEXT: ;;#ASMSTART6733; GFX90A-NEXT: ; def s[6:7]6734; GFX90A-NEXT: ;;#ASMEND6735; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s66736; GFX90A-NEXT: s_lshr_b32 s9, s4, 166737; GFX90A-NEXT: ;;#ASMSTART6738; GFX90A-NEXT: ; use s[8:9]6739; GFX90A-NEXT: ;;#ASMEND6740; GFX90A-NEXT: s_setpc_b64 s[30:31]6741;6742; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_3_1:6743; GFX942: ; %bb.0:6744; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6745; GFX942-NEXT: ;;#ASMSTART6746; GFX942-NEXT: ; def s[0:1]6747; GFX942-NEXT: ;;#ASMEND6748; GFX942-NEXT: ;;#ASMSTART6749; GFX942-NEXT: ; def s[2:3]6750; GFX942-NEXT: ;;#ASMEND6751; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s26752; GFX942-NEXT: s_lshr_b32 s9, s0, 166753; GFX942-NEXT: ;;#ASMSTART6754; GFX942-NEXT: ; use s[8:9]6755; GFX942-NEXT: ;;#ASMEND6756; GFX942-NEXT: s_setpc_b64 s[30:31]6757 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6758 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6759 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6760 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6761 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 1>6762 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6763 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6764 ret void6765}6766 6767define void @s_shuffle_v3bf16_v3bf16__5_4_1() {6768; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_1:6769; GFX900: ; %bb.0:6770; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6771; GFX900-NEXT: ;;#ASMSTART6772; GFX900-NEXT: ; def s[4:5]6773; GFX900-NEXT: ;;#ASMEND6774; GFX900-NEXT: ;;#ASMSTART6775; GFX900-NEXT: ; def s[6:7]6776; GFX900-NEXT: ;;#ASMEND6777; GFX900-NEXT: s_lshr_b32 s5, s6, 166778; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s56779; GFX900-NEXT: s_lshr_b32 s9, s4, 166780; GFX900-NEXT: ;;#ASMSTART6781; GFX900-NEXT: ; use s[8:9]6782; GFX900-NEXT: ;;#ASMEND6783; GFX900-NEXT: s_setpc_b64 s[30:31]6784;6785; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_1:6786; GFX90A: ; %bb.0:6787; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6788; GFX90A-NEXT: ;;#ASMSTART6789; GFX90A-NEXT: ; def s[4:5]6790; GFX90A-NEXT: ;;#ASMEND6791; GFX90A-NEXT: ;;#ASMSTART6792; GFX90A-NEXT: ; def s[6:7]6793; GFX90A-NEXT: ;;#ASMEND6794; GFX90A-NEXT: s_lshr_b32 s5, s6, 166795; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s56796; GFX90A-NEXT: s_lshr_b32 s9, s4, 166797; GFX90A-NEXT: ;;#ASMSTART6798; GFX90A-NEXT: ; use s[8:9]6799; GFX90A-NEXT: ;;#ASMEND6800; GFX90A-NEXT: s_setpc_b64 s[30:31]6801;6802; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_1:6803; GFX942: ; %bb.0:6804; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6805; GFX942-NEXT: ;;#ASMSTART6806; GFX942-NEXT: ; def s[0:1]6807; GFX942-NEXT: ;;#ASMEND6808; GFX942-NEXT: ;;#ASMSTART6809; GFX942-NEXT: ; def s[2:3]6810; GFX942-NEXT: ;;#ASMEND6811; GFX942-NEXT: s_lshr_b32 s1, s2, 166812; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s16813; GFX942-NEXT: s_lshr_b32 s9, s0, 166814; GFX942-NEXT: ;;#ASMSTART6815; GFX942-NEXT: ; use s[8:9]6816; GFX942-NEXT: ;;#ASMEND6817; GFX942-NEXT: s_setpc_b64 s[30:31]6818 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6819 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()6820 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6821 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6822 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 1>6823 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6824 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6825 ret void6826}6827 6828define void @s_shuffle_v3bf16_v3bf16__u_2_2() {6829; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__u_2_2:6830; GFX9: ; %bb.0:6831; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6832; GFX9-NEXT: ;;#ASMSTART6833; GFX9-NEXT: ; def s[8:9]6834; GFX9-NEXT: ;;#ASMEND6835; GFX9-NEXT: s_lshl_b32 s8, s9, 166836; GFX9-NEXT: ;;#ASMSTART6837; GFX9-NEXT: ; use s[8:9]6838; GFX9-NEXT: ;;#ASMEND6839; GFX9-NEXT: s_setpc_b64 s[30:31]6840 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6841 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6842 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 2, i32 2>6843 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6844 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6845 ret void6846}6847 6848define void @s_shuffle_v3bf16_v3bf16__0_2_2() {6849; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__0_2_2:6850; GFX9: ; %bb.0:6851; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6852; GFX9-NEXT: ;;#ASMSTART6853; GFX9-NEXT: ; def s[8:9]6854; GFX9-NEXT: ;;#ASMEND6855; GFX9-NEXT: s_pack_ll_b32_b16 s8, s8, s96856; GFX9-NEXT: ;;#ASMSTART6857; GFX9-NEXT: ; use s[8:9]6858; GFX9-NEXT: ;;#ASMEND6859; GFX9-NEXT: s_setpc_b64 s[30:31]6860 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6861 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6862 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 2, i32 2>6863 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6864 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6865 ret void6866}6867 6868define void @s_shuffle_v3bf16_v3bf16__1_2_2() {6869; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_2_2:6870; GFX900: ; %bb.0:6871; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6872; GFX900-NEXT: ;;#ASMSTART6873; GFX900-NEXT: ; def s[8:9]6874; GFX900-NEXT: ;;#ASMEND6875; GFX900-NEXT: s_lshr_b32 s4, s8, 166876; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s96877; GFX900-NEXT: ;;#ASMSTART6878; GFX900-NEXT: ; use s[8:9]6879; GFX900-NEXT: ;;#ASMEND6880; GFX900-NEXT: s_setpc_b64 s[30:31]6881;6882; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_2_2:6883; GFX90A: ; %bb.0:6884; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6885; GFX90A-NEXT: ;;#ASMSTART6886; GFX90A-NEXT: ; def s[8:9]6887; GFX90A-NEXT: ;;#ASMEND6888; GFX90A-NEXT: s_lshr_b32 s4, s8, 166889; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s96890; GFX90A-NEXT: ;;#ASMSTART6891; GFX90A-NEXT: ; use s[8:9]6892; GFX90A-NEXT: ;;#ASMEND6893; GFX90A-NEXT: s_setpc_b64 s[30:31]6894;6895; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_2_2:6896; GFX942: ; %bb.0:6897; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6898; GFX942-NEXT: ;;#ASMSTART6899; GFX942-NEXT: ; def s[8:9]6900; GFX942-NEXT: ;;#ASMEND6901; GFX942-NEXT: s_lshr_b32 s0, s8, 166902; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s96903; GFX942-NEXT: ;;#ASMSTART6904; GFX942-NEXT: ; use s[8:9]6905; GFX942-NEXT: ;;#ASMEND6906; GFX942-NEXT: s_setpc_b64 s[30:31]6907 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6908 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6909 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 2, i32 2>6910 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6911 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6912 ret void6913}6914 6915define void @s_shuffle_v3bf16_v3bf16__2_2_2() {6916; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__2_2_2:6917; GFX9: ; %bb.0:6918; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6919; GFX9-NEXT: ;;#ASMSTART6920; GFX9-NEXT: ; def s[8:9]6921; GFX9-NEXT: ;;#ASMEND6922; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s96923; GFX9-NEXT: ;;#ASMSTART6924; GFX9-NEXT: ; use s[8:9]6925; GFX9-NEXT: ;;#ASMEND6926; GFX9-NEXT: s_setpc_b64 s[30:31]6927 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6928 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6929 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 2, i32 2>6930 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6931 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6932 ret void6933}6934 6935define void @s_shuffle_v3bf16_v3bf16__3_2_2() {6936; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__3_2_2:6937; GFX9: ; %bb.0:6938; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6939; GFX9-NEXT: ;;#ASMSTART6940; GFX9-NEXT: ; def s[8:9]6941; GFX9-NEXT: ;;#ASMEND6942; GFX9-NEXT: s_lshl_b32 s8, s9, 166943; GFX9-NEXT: ;;#ASMSTART6944; GFX9-NEXT: ; use s[8:9]6945; GFX9-NEXT: ;;#ASMEND6946; GFX9-NEXT: s_setpc_b64 s[30:31]6947 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()6948 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>6949 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 2, i32 2>6950 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>6951 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)6952 ret void6953}6954 6955define void @s_shuffle_v3bf16_v3bf16__4_2_2() {6956; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_2_2:6957; GFX900: ; %bb.0:6958; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6959; GFX900-NEXT: ;;#ASMSTART6960; GFX900-NEXT: ; def s[4:5]6961; GFX900-NEXT: ;;#ASMEND6962; GFX900-NEXT: ;;#ASMSTART6963; GFX900-NEXT: ; def s[8:9]6964; GFX900-NEXT: ;;#ASMEND6965; GFX900-NEXT: s_lshr_b32 s4, s4, 166966; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s96967; GFX900-NEXT: ;;#ASMSTART6968; GFX900-NEXT: ; use s[8:9]6969; GFX900-NEXT: ;;#ASMEND6970; GFX900-NEXT: s_setpc_b64 s[30:31]6971;6972; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_2_2:6973; GFX90A: ; %bb.0:6974; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6975; GFX90A-NEXT: ;;#ASMSTART6976; GFX90A-NEXT: ; def s[4:5]6977; GFX90A-NEXT: ;;#ASMEND6978; GFX90A-NEXT: ;;#ASMSTART6979; GFX90A-NEXT: ; def s[8:9]6980; GFX90A-NEXT: ;;#ASMEND6981; GFX90A-NEXT: s_lshr_b32 s4, s4, 166982; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s96983; GFX90A-NEXT: ;;#ASMSTART6984; GFX90A-NEXT: ; use s[8:9]6985; GFX90A-NEXT: ;;#ASMEND6986; GFX90A-NEXT: s_setpc_b64 s[30:31]6987;6988; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_2_2:6989; GFX942: ; %bb.0:6990; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)6991; GFX942-NEXT: ;;#ASMSTART6992; GFX942-NEXT: ; def s[0:1]6993; GFX942-NEXT: ;;#ASMEND6994; GFX942-NEXT: ;;#ASMSTART6995; GFX942-NEXT: ; def s[8:9]6996; GFX942-NEXT: ;;#ASMEND6997; GFX942-NEXT: s_lshr_b32 s0, s0, 166998; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s96999; GFX942-NEXT: ;;#ASMSTART7000; GFX942-NEXT: ; use s[8:9]7001; GFX942-NEXT: ;;#ASMEND7002; GFX942-NEXT: s_setpc_b64 s[30:31]7003 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7004 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7005 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7006 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7007 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 2, i32 2>7008 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7009 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7010 ret void7011}7012 7013define void @s_shuffle_v3bf16_v3bf16__5_2_2() {7014; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_2:7015; GFX900: ; %bb.0:7016; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7017; GFX900-NEXT: ;;#ASMSTART7018; GFX900-NEXT: ; def s[8:9]7019; GFX900-NEXT: ;;#ASMEND7020; GFX900-NEXT: ;;#ASMSTART7021; GFX900-NEXT: ; def s[4:5]7022; GFX900-NEXT: ;;#ASMEND7023; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s97024; GFX900-NEXT: ;;#ASMSTART7025; GFX900-NEXT: ; use s[8:9]7026; GFX900-NEXT: ;;#ASMEND7027; GFX900-NEXT: s_setpc_b64 s[30:31]7028;7029; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_2:7030; GFX90A: ; %bb.0:7031; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7032; GFX90A-NEXT: ;;#ASMSTART7033; GFX90A-NEXT: ; def s[8:9]7034; GFX90A-NEXT: ;;#ASMEND7035; GFX90A-NEXT: ;;#ASMSTART7036; GFX90A-NEXT: ; def s[4:5]7037; GFX90A-NEXT: ;;#ASMEND7038; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s97039; GFX90A-NEXT: ;;#ASMSTART7040; GFX90A-NEXT: ; use s[8:9]7041; GFX90A-NEXT: ;;#ASMEND7042; GFX90A-NEXT: s_setpc_b64 s[30:31]7043;7044; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_2:7045; GFX942: ; %bb.0:7046; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7047; GFX942-NEXT: ;;#ASMSTART7048; GFX942-NEXT: ; def s[8:9]7049; GFX942-NEXT: ;;#ASMEND7050; GFX942-NEXT: ;;#ASMSTART7051; GFX942-NEXT: ; def s[0:1]7052; GFX942-NEXT: ;;#ASMEND7053; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s97054; GFX942-NEXT: ;;#ASMSTART7055; GFX942-NEXT: ; use s[8:9]7056; GFX942-NEXT: ;;#ASMEND7057; GFX942-NEXT: s_setpc_b64 s[30:31]7058 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7059 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7060 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7061 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7062 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 2>7063 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7064 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7065 ret void7066}7067 7068define void @s_shuffle_v3bf16_v3bf16__5_u_2() {7069; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_u_2:7070; GFX900: ; %bb.0:7071; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7072; GFX900-NEXT: ;;#ASMSTART7073; GFX900-NEXT: ; def s[8:9]7074; GFX900-NEXT: ;;#ASMEND7075; GFX900-NEXT: ;;#ASMSTART7076; GFX900-NEXT: ; def s[4:5]7077; GFX900-NEXT: ;;#ASMEND7078; GFX900-NEXT: s_mov_b32 s8, s57079; GFX900-NEXT: ;;#ASMSTART7080; GFX900-NEXT: ; use s[8:9]7081; GFX900-NEXT: ;;#ASMEND7082; GFX900-NEXT: s_setpc_b64 s[30:31]7083;7084; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_u_2:7085; GFX90A: ; %bb.0:7086; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7087; GFX90A-NEXT: ;;#ASMSTART7088; GFX90A-NEXT: ; def s[8:9]7089; GFX90A-NEXT: ;;#ASMEND7090; GFX90A-NEXT: ;;#ASMSTART7091; GFX90A-NEXT: ; def s[4:5]7092; GFX90A-NEXT: ;;#ASMEND7093; GFX90A-NEXT: s_mov_b32 s8, s57094; GFX90A-NEXT: ;;#ASMSTART7095; GFX90A-NEXT: ; use s[8:9]7096; GFX90A-NEXT: ;;#ASMEND7097; GFX90A-NEXT: s_setpc_b64 s[30:31]7098;7099; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_u_2:7100; GFX942: ; %bb.0:7101; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7102; GFX942-NEXT: ;;#ASMSTART7103; GFX942-NEXT: ; def s[8:9]7104; GFX942-NEXT: ;;#ASMEND7105; GFX942-NEXT: ;;#ASMSTART7106; GFX942-NEXT: ; def s[0:1]7107; GFX942-NEXT: ;;#ASMEND7108; GFX942-NEXT: s_mov_b32 s8, s17109; GFX942-NEXT: ;;#ASMSTART7110; GFX942-NEXT: ; use s[8:9]7111; GFX942-NEXT: ;;#ASMEND7112; GFX942-NEXT: s_setpc_b64 s[30:31]7113 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7114 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7115 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7116 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7117 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 2>7118 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7119 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7120 ret void7121}7122 7123define void @s_shuffle_v3bf16_v3bf16__5_0_2() {7124; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_2:7125; GFX900: ; %bb.0:7126; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7127; GFX900-NEXT: ;;#ASMSTART7128; GFX900-NEXT: ; def s[8:9]7129; GFX900-NEXT: ;;#ASMEND7130; GFX900-NEXT: ;;#ASMSTART7131; GFX900-NEXT: ; def s[4:5]7132; GFX900-NEXT: ;;#ASMEND7133; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s87134; GFX900-NEXT: ;;#ASMSTART7135; GFX900-NEXT: ; use s[8:9]7136; GFX900-NEXT: ;;#ASMEND7137; GFX900-NEXT: s_setpc_b64 s[30:31]7138;7139; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_2:7140; GFX90A: ; %bb.0:7141; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7142; GFX90A-NEXT: ;;#ASMSTART7143; GFX90A-NEXT: ; def s[8:9]7144; GFX90A-NEXT: ;;#ASMEND7145; GFX90A-NEXT: ;;#ASMSTART7146; GFX90A-NEXT: ; def s[4:5]7147; GFX90A-NEXT: ;;#ASMEND7148; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s87149; GFX90A-NEXT: ;;#ASMSTART7150; GFX90A-NEXT: ; use s[8:9]7151; GFX90A-NEXT: ;;#ASMEND7152; GFX90A-NEXT: s_setpc_b64 s[30:31]7153;7154; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_2:7155; GFX942: ; %bb.0:7156; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7157; GFX942-NEXT: ;;#ASMSTART7158; GFX942-NEXT: ; def s[8:9]7159; GFX942-NEXT: ;;#ASMEND7160; GFX942-NEXT: ;;#ASMSTART7161; GFX942-NEXT: ; def s[0:1]7162; GFX942-NEXT: ;;#ASMEND7163; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s87164; GFX942-NEXT: ;;#ASMSTART7165; GFX942-NEXT: ; use s[8:9]7166; GFX942-NEXT: ;;#ASMEND7167; GFX942-NEXT: s_setpc_b64 s[30:31]7168 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7169 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7170 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7171 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7172 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 2>7173 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7174 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7175 ret void7176}7177 7178define void @s_shuffle_v3bf16_v3bf16__5_1_2() {7179; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_2:7180; GFX900: ; %bb.0:7181; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7182; GFX900-NEXT: ;;#ASMSTART7183; GFX900-NEXT: ; def s[4:5]7184; GFX900-NEXT: ;;#ASMEND7185; GFX900-NEXT: ;;#ASMSTART7186; GFX900-NEXT: ; def s[8:9]7187; GFX900-NEXT: ;;#ASMEND7188; GFX900-NEXT: s_lshr_b32 s4, s8, 167189; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47190; GFX900-NEXT: ;;#ASMSTART7191; GFX900-NEXT: ; use s[8:9]7192; GFX900-NEXT: ;;#ASMEND7193; GFX900-NEXT: s_setpc_b64 s[30:31]7194;7195; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_2:7196; GFX90A: ; %bb.0:7197; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7198; GFX90A-NEXT: ;;#ASMSTART7199; GFX90A-NEXT: ; def s[4:5]7200; GFX90A-NEXT: ;;#ASMEND7201; GFX90A-NEXT: ;;#ASMSTART7202; GFX90A-NEXT: ; def s[8:9]7203; GFX90A-NEXT: ;;#ASMEND7204; GFX90A-NEXT: s_lshr_b32 s4, s8, 167205; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47206; GFX90A-NEXT: ;;#ASMSTART7207; GFX90A-NEXT: ; use s[8:9]7208; GFX90A-NEXT: ;;#ASMEND7209; GFX90A-NEXT: s_setpc_b64 s[30:31]7210;7211; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_2:7212; GFX942: ; %bb.0:7213; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7214; GFX942-NEXT: ;;#ASMSTART7215; GFX942-NEXT: ; def s[0:1]7216; GFX942-NEXT: ;;#ASMEND7217; GFX942-NEXT: ;;#ASMSTART7218; GFX942-NEXT: ; def s[8:9]7219; GFX942-NEXT: ;;#ASMEND7220; GFX942-NEXT: s_lshr_b32 s0, s8, 167221; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07222; GFX942-NEXT: ;;#ASMSTART7223; GFX942-NEXT: ; use s[8:9]7224; GFX942-NEXT: ;;#ASMEND7225; GFX942-NEXT: s_setpc_b64 s[30:31]7226 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7227 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7228 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7229 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7230 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 2>7231 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7232 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7233 ret void7234}7235 7236define void @s_shuffle_v3bf16_v3bf16__5_3_2() {7237; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_3_2:7238; GFX900: ; %bb.0:7239; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7240; GFX900-NEXT: ;;#ASMSTART7241; GFX900-NEXT: ; def s[8:9]7242; GFX900-NEXT: ;;#ASMEND7243; GFX900-NEXT: ;;#ASMSTART7244; GFX900-NEXT: ; def s[4:5]7245; GFX900-NEXT: ;;#ASMEND7246; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47247; GFX900-NEXT: ;;#ASMSTART7248; GFX900-NEXT: ; use s[8:9]7249; GFX900-NEXT: ;;#ASMEND7250; GFX900-NEXT: s_setpc_b64 s[30:31]7251;7252; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_3_2:7253; GFX90A: ; %bb.0:7254; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7255; GFX90A-NEXT: ;;#ASMSTART7256; GFX90A-NEXT: ; def s[8:9]7257; GFX90A-NEXT: ;;#ASMEND7258; GFX90A-NEXT: ;;#ASMSTART7259; GFX90A-NEXT: ; def s[4:5]7260; GFX90A-NEXT: ;;#ASMEND7261; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47262; GFX90A-NEXT: ;;#ASMSTART7263; GFX90A-NEXT: ; use s[8:9]7264; GFX90A-NEXT: ;;#ASMEND7265; GFX90A-NEXT: s_setpc_b64 s[30:31]7266;7267; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_3_2:7268; GFX942: ; %bb.0:7269; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7270; GFX942-NEXT: ;;#ASMSTART7271; GFX942-NEXT: ; def s[8:9]7272; GFX942-NEXT: ;;#ASMEND7273; GFX942-NEXT: ;;#ASMSTART7274; GFX942-NEXT: ; def s[0:1]7275; GFX942-NEXT: ;;#ASMEND7276; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07277; GFX942-NEXT: ;;#ASMSTART7278; GFX942-NEXT: ; use s[8:9]7279; GFX942-NEXT: ;;#ASMEND7280; GFX942-NEXT: s_setpc_b64 s[30:31]7281 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7282 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7283 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7284 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7285 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 2>7286 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7287 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7288 ret void7289}7290 7291define void @s_shuffle_v3bf16_v3bf16__5_4_2() {7292; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_2:7293; GFX900: ; %bb.0:7294; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7295; GFX900-NEXT: ;;#ASMSTART7296; GFX900-NEXT: ; def s[4:5]7297; GFX900-NEXT: ;;#ASMEND7298; GFX900-NEXT: ;;#ASMSTART7299; GFX900-NEXT: ; def s[8:9]7300; GFX900-NEXT: ;;#ASMEND7301; GFX900-NEXT: s_lshr_b32 s4, s4, 167302; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47303; GFX900-NEXT: ;;#ASMSTART7304; GFX900-NEXT: ; use s[8:9]7305; GFX900-NEXT: ;;#ASMEND7306; GFX900-NEXT: s_setpc_b64 s[30:31]7307;7308; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_2:7309; GFX90A: ; %bb.0:7310; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7311; GFX90A-NEXT: ;;#ASMSTART7312; GFX90A-NEXT: ; def s[4:5]7313; GFX90A-NEXT: ;;#ASMEND7314; GFX90A-NEXT: ;;#ASMSTART7315; GFX90A-NEXT: ; def s[8:9]7316; GFX90A-NEXT: ;;#ASMEND7317; GFX90A-NEXT: s_lshr_b32 s4, s4, 167318; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47319; GFX90A-NEXT: ;;#ASMSTART7320; GFX90A-NEXT: ; use s[8:9]7321; GFX90A-NEXT: ;;#ASMEND7322; GFX90A-NEXT: s_setpc_b64 s[30:31]7323;7324; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_2:7325; GFX942: ; %bb.0:7326; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7327; GFX942-NEXT: ;;#ASMSTART7328; GFX942-NEXT: ; def s[0:1]7329; GFX942-NEXT: ;;#ASMEND7330; GFX942-NEXT: ;;#ASMSTART7331; GFX942-NEXT: ; def s[8:9]7332; GFX942-NEXT: ;;#ASMEND7333; GFX942-NEXT: s_lshr_b32 s0, s0, 167334; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07335; GFX942-NEXT: ;;#ASMSTART7336; GFX942-NEXT: ; use s[8:9]7337; GFX942-NEXT: ;;#ASMEND7338; GFX942-NEXT: s_setpc_b64 s[30:31]7339 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7340 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7341 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7342 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7343 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 2>7344 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7345 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7346 ret void7347}7348 7349define void @s_shuffle_v3bf16_v3bf16__u_3_3() {7350; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__u_3_3:7351; GFX9: ; %bb.0:7352; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7353; GFX9-NEXT: ;;#ASMSTART7354; GFX9-NEXT: ; use s[8:9]7355; GFX9-NEXT: ;;#ASMEND7356; GFX9-NEXT: s_setpc_b64 s[30:31]7357 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7358 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7359 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 poison, i32 3, i32 3>7360 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7361 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7362 ret void7363}7364 7365define void @s_shuffle_v3bf16_v3bf16__0_3_3() {7366; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__0_3_3:7367; GFX900: ; %bb.0:7368; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7369; GFX900-NEXT: ;;#ASMSTART7370; GFX900-NEXT: ; def s[8:9]7371; GFX900-NEXT: ;;#ASMEND7372; GFX900-NEXT: ;;#ASMSTART7373; GFX900-NEXT: ; use s[8:9]7374; GFX900-NEXT: ;;#ASMEND7375; GFX900-NEXT: s_setpc_b64 s[30:31]7376;7377; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__0_3_3:7378; GFX90A: ; %bb.0:7379; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7380; GFX90A-NEXT: ;;#ASMSTART7381; GFX90A-NEXT: ; def s[8:9]7382; GFX90A-NEXT: ;;#ASMEND7383; GFX90A-NEXT: ;;#ASMSTART7384; GFX90A-NEXT: ; use s[8:9]7385; GFX90A-NEXT: ;;#ASMEND7386; GFX90A-NEXT: s_setpc_b64 s[30:31]7387;7388; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__0_3_3:7389; GFX942: ; %bb.0:7390; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7391; GFX942-NEXT: ;;#ASMSTART7392; GFX942-NEXT: ; def s[8:9]7393; GFX942-NEXT: ;;#ASMEND7394; GFX942-NEXT: s_nop 07395; GFX942-NEXT: ;;#ASMSTART7396; GFX942-NEXT: ; use s[8:9]7397; GFX942-NEXT: ;;#ASMEND7398; GFX942-NEXT: s_setpc_b64 s[30:31]7399 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7400 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7401 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 0, i32 3, i32 3>7402 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7403 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7404 ret void7405}7406 7407define void @s_shuffle_v3bf16_v3bf16__1_3_3() {7408; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_3_3:7409; GFX900: ; %bb.0:7410; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7411; GFX900-NEXT: ;;#ASMSTART7412; GFX900-NEXT: ; def s[4:5]7413; GFX900-NEXT: ;;#ASMEND7414; GFX900-NEXT: s_lshr_b32 s8, s4, 167415; GFX900-NEXT: ;;#ASMSTART7416; GFX900-NEXT: ; use s[8:9]7417; GFX900-NEXT: ;;#ASMEND7418; GFX900-NEXT: s_setpc_b64 s[30:31]7419;7420; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_3_3:7421; GFX90A: ; %bb.0:7422; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7423; GFX90A-NEXT: ;;#ASMSTART7424; GFX90A-NEXT: ; def s[4:5]7425; GFX90A-NEXT: ;;#ASMEND7426; GFX90A-NEXT: s_lshr_b32 s8, s4, 167427; GFX90A-NEXT: ;;#ASMSTART7428; GFX90A-NEXT: ; use s[8:9]7429; GFX90A-NEXT: ;;#ASMEND7430; GFX90A-NEXT: s_setpc_b64 s[30:31]7431;7432; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_3_3:7433; GFX942: ; %bb.0:7434; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7435; GFX942-NEXT: ;;#ASMSTART7436; GFX942-NEXT: ; def s[0:1]7437; GFX942-NEXT: ;;#ASMEND7438; GFX942-NEXT: s_lshr_b32 s8, s0, 167439; GFX942-NEXT: ;;#ASMSTART7440; GFX942-NEXT: ; use s[8:9]7441; GFX942-NEXT: ;;#ASMEND7442; GFX942-NEXT: s_setpc_b64 s[30:31]7443 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7444 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7445 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 1, i32 3, i32 3>7446 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7447 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7448 ret void7449}7450 7451define void @s_shuffle_v3bf16_v3bf16__2_3_3() {7452; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__2_3_3:7453; GFX900: ; %bb.0:7454; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7455; GFX900-NEXT: ;;#ASMSTART7456; GFX900-NEXT: ; def s[4:5]7457; GFX900-NEXT: ;;#ASMEND7458; GFX900-NEXT: s_mov_b32 s8, s57459; GFX900-NEXT: ;;#ASMSTART7460; GFX900-NEXT: ; use s[8:9]7461; GFX900-NEXT: ;;#ASMEND7462; GFX900-NEXT: s_setpc_b64 s[30:31]7463;7464; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__2_3_3:7465; GFX90A: ; %bb.0:7466; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7467; GFX90A-NEXT: ;;#ASMSTART7468; GFX90A-NEXT: ; def s[4:5]7469; GFX90A-NEXT: ;;#ASMEND7470; GFX90A-NEXT: s_mov_b32 s8, s57471; GFX90A-NEXT: ;;#ASMSTART7472; GFX90A-NEXT: ; use s[8:9]7473; GFX90A-NEXT: ;;#ASMEND7474; GFX90A-NEXT: s_setpc_b64 s[30:31]7475;7476; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__2_3_3:7477; GFX942: ; %bb.0:7478; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7479; GFX942-NEXT: ;;#ASMSTART7480; GFX942-NEXT: ; def s[0:1]7481; GFX942-NEXT: ;;#ASMEND7482; GFX942-NEXT: s_mov_b32 s8, s17483; GFX942-NEXT: ;;#ASMSTART7484; GFX942-NEXT: ; use s[8:9]7485; GFX942-NEXT: ;;#ASMEND7486; GFX942-NEXT: s_setpc_b64 s[30:31]7487 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7488 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7489 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 2, i32 3, i32 3>7490 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7491 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7492 ret void7493}7494 7495define void @s_shuffle_v3bf16_v3bf16__3_3_3() {7496; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__3_3_3:7497; GFX9: ; %bb.0:7498; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7499; GFX9-NEXT: ;;#ASMSTART7500; GFX9-NEXT: ; use s[8:9]7501; GFX9-NEXT: ;;#ASMEND7502; GFX9-NEXT: s_setpc_b64 s[30:31]7503 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7504 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7505 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> poison, <3 x i32> <i32 3, i32 3, i32 3>7506 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7507 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7508 ret void7509}7510 7511define void @s_shuffle_v3bf16_v3bf16__4_3_3() {7512; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_3_3:7513; GFX900: ; %bb.0:7514; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7515; GFX900-NEXT: ;;#ASMSTART7516; GFX900-NEXT: ; def s[4:5]7517; GFX900-NEXT: ;;#ASMEND7518; GFX900-NEXT: s_lshr_b32 s5, s4, 167519; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47520; GFX900-NEXT: s_mov_b32 s9, s47521; GFX900-NEXT: ;;#ASMSTART7522; GFX900-NEXT: ; use s[8:9]7523; GFX900-NEXT: ;;#ASMEND7524; GFX900-NEXT: s_setpc_b64 s[30:31]7525;7526; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_3_3:7527; GFX90A: ; %bb.0:7528; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7529; GFX90A-NEXT: ;;#ASMSTART7530; GFX90A-NEXT: ; def s[4:5]7531; GFX90A-NEXT: ;;#ASMEND7532; GFX90A-NEXT: s_lshr_b32 s5, s4, 167533; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47534; GFX90A-NEXT: s_mov_b32 s9, s47535; GFX90A-NEXT: ;;#ASMSTART7536; GFX90A-NEXT: ; use s[8:9]7537; GFX90A-NEXT: ;;#ASMEND7538; GFX90A-NEXT: s_setpc_b64 s[30:31]7539;7540; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_3_3:7541; GFX942: ; %bb.0:7542; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7543; GFX942-NEXT: ;;#ASMSTART7544; GFX942-NEXT: ; def s[0:1]7545; GFX942-NEXT: ;;#ASMEND7546; GFX942-NEXT: s_lshr_b32 s1, s0, 167547; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07548; GFX942-NEXT: s_mov_b32 s9, s07549; GFX942-NEXT: ;;#ASMSTART7550; GFX942-NEXT: ; use s[8:9]7551; GFX942-NEXT: ;;#ASMEND7552; GFX942-NEXT: s_setpc_b64 s[30:31]7553 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7554 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7555 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7556 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7557 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 3, i32 3>7558 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7559 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7560 ret void7561}7562 7563define void @s_shuffle_v3bf16_v3bf16__5_3_3() {7564; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_3_3:7565; GFX900: ; %bb.0:7566; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7567; GFX900-NEXT: ;;#ASMSTART7568; GFX900-NEXT: ; def s[4:5]7569; GFX900-NEXT: ;;#ASMEND7570; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s47571; GFX900-NEXT: s_mov_b32 s9, s47572; GFX900-NEXT: ;;#ASMSTART7573; GFX900-NEXT: ; use s[8:9]7574; GFX900-NEXT: ;;#ASMEND7575; GFX900-NEXT: s_setpc_b64 s[30:31]7576;7577; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_3_3:7578; GFX90A: ; %bb.0:7579; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7580; GFX90A-NEXT: ;;#ASMSTART7581; GFX90A-NEXT: ; def s[4:5]7582; GFX90A-NEXT: ;;#ASMEND7583; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s47584; GFX90A-NEXT: s_mov_b32 s9, s47585; GFX90A-NEXT: ;;#ASMSTART7586; GFX90A-NEXT: ; use s[8:9]7587; GFX90A-NEXT: ;;#ASMEND7588; GFX90A-NEXT: s_setpc_b64 s[30:31]7589;7590; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_3_3:7591; GFX942: ; %bb.0:7592; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7593; GFX942-NEXT: ;;#ASMSTART7594; GFX942-NEXT: ; def s[0:1]7595; GFX942-NEXT: ;;#ASMEND7596; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s07597; GFX942-NEXT: s_mov_b32 s9, s07598; GFX942-NEXT: ;;#ASMSTART7599; GFX942-NEXT: ; use s[8:9]7600; GFX942-NEXT: ;;#ASMEND7601; GFX942-NEXT: s_setpc_b64 s[30:31]7602 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7603 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7604 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7605 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7606 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 3>7607 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7608 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7609 ret void7610}7611 7612define void @s_shuffle_v3bf16_v3bf16__5_u_3() {7613; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_u_3:7614; GFX900: ; %bb.0:7615; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7616; GFX900-NEXT: ;;#ASMSTART7617; GFX900-NEXT: ; def s[4:5]7618; GFX900-NEXT: ;;#ASMEND7619; GFX900-NEXT: s_mov_b32 s8, s57620; GFX900-NEXT: s_mov_b32 s9, s47621; GFX900-NEXT: ;;#ASMSTART7622; GFX900-NEXT: ; use s[8:9]7623; GFX900-NEXT: ;;#ASMEND7624; GFX900-NEXT: s_setpc_b64 s[30:31]7625;7626; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_u_3:7627; GFX90A: ; %bb.0:7628; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7629; GFX90A-NEXT: ;;#ASMSTART7630; GFX90A-NEXT: ; def s[4:5]7631; GFX90A-NEXT: ;;#ASMEND7632; GFX90A-NEXT: s_mov_b32 s8, s57633; GFX90A-NEXT: s_mov_b32 s9, s47634; GFX90A-NEXT: ;;#ASMSTART7635; GFX90A-NEXT: ; use s[8:9]7636; GFX90A-NEXT: ;;#ASMEND7637; GFX90A-NEXT: s_setpc_b64 s[30:31]7638;7639; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_u_3:7640; GFX942: ; %bb.0:7641; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7642; GFX942-NEXT: ;;#ASMSTART7643; GFX942-NEXT: ; def s[0:1]7644; GFX942-NEXT: ;;#ASMEND7645; GFX942-NEXT: s_mov_b32 s8, s17646; GFX942-NEXT: s_mov_b32 s9, s07647; GFX942-NEXT: ;;#ASMSTART7648; GFX942-NEXT: ; use s[8:9]7649; GFX942-NEXT: ;;#ASMEND7650; GFX942-NEXT: s_setpc_b64 s[30:31]7651 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7652 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7653 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7654 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7655 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 3>7656 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7657 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7658 ret void7659}7660 7661define void @s_shuffle_v3bf16_v3bf16__5_0_3() {7662; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_3:7663; GFX900: ; %bb.0:7664; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7665; GFX900-NEXT: ;;#ASMSTART7666; GFX900-NEXT: ; def s[4:5]7667; GFX900-NEXT: ;;#ASMEND7668; GFX900-NEXT: ;;#ASMSTART7669; GFX900-NEXT: ; def s[6:7]7670; GFX900-NEXT: ;;#ASMEND7671; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s47672; GFX900-NEXT: s_mov_b32 s9, s67673; GFX900-NEXT: ;;#ASMSTART7674; GFX900-NEXT: ; use s[8:9]7675; GFX900-NEXT: ;;#ASMEND7676; GFX900-NEXT: s_setpc_b64 s[30:31]7677;7678; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_3:7679; GFX90A: ; %bb.0:7680; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7681; GFX90A-NEXT: ;;#ASMSTART7682; GFX90A-NEXT: ; def s[4:5]7683; GFX90A-NEXT: ;;#ASMEND7684; GFX90A-NEXT: ;;#ASMSTART7685; GFX90A-NEXT: ; def s[6:7]7686; GFX90A-NEXT: ;;#ASMEND7687; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s47688; GFX90A-NEXT: s_mov_b32 s9, s67689; GFX90A-NEXT: ;;#ASMSTART7690; GFX90A-NEXT: ; use s[8:9]7691; GFX90A-NEXT: ;;#ASMEND7692; GFX90A-NEXT: s_setpc_b64 s[30:31]7693;7694; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_3:7695; GFX942: ; %bb.0:7696; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7697; GFX942-NEXT: ;;#ASMSTART7698; GFX942-NEXT: ; def s[0:1]7699; GFX942-NEXT: ;;#ASMEND7700; GFX942-NEXT: ;;#ASMSTART7701; GFX942-NEXT: ; def s[2:3]7702; GFX942-NEXT: ;;#ASMEND7703; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s07704; GFX942-NEXT: s_mov_b32 s9, s27705; GFX942-NEXT: ;;#ASMSTART7706; GFX942-NEXT: ; use s[8:9]7707; GFX942-NEXT: ;;#ASMEND7708; GFX942-NEXT: s_setpc_b64 s[30:31]7709 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7710 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7711 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7712 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7713 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 3>7714 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7715 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7716 ret void7717}7718 7719define void @s_shuffle_v3bf16_v3bf16__5_1_3() {7720; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_3:7721; GFX900: ; %bb.0:7722; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7723; GFX900-NEXT: ;;#ASMSTART7724; GFX900-NEXT: ; def s[4:5]7725; GFX900-NEXT: ;;#ASMEND7726; GFX900-NEXT: s_lshr_b32 s4, s4, 167727; GFX900-NEXT: ;;#ASMSTART7728; GFX900-NEXT: ; def s[6:7]7729; GFX900-NEXT: ;;#ASMEND7730; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s47731; GFX900-NEXT: s_mov_b32 s9, s67732; GFX900-NEXT: ;;#ASMSTART7733; GFX900-NEXT: ; use s[8:9]7734; GFX900-NEXT: ;;#ASMEND7735; GFX900-NEXT: s_setpc_b64 s[30:31]7736;7737; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_3:7738; GFX90A: ; %bb.0:7739; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7740; GFX90A-NEXT: ;;#ASMSTART7741; GFX90A-NEXT: ; def s[4:5]7742; GFX90A-NEXT: ;;#ASMEND7743; GFX90A-NEXT: s_lshr_b32 s4, s4, 167744; GFX90A-NEXT: ;;#ASMSTART7745; GFX90A-NEXT: ; def s[6:7]7746; GFX90A-NEXT: ;;#ASMEND7747; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s47748; GFX90A-NEXT: s_mov_b32 s9, s67749; GFX90A-NEXT: ;;#ASMSTART7750; GFX90A-NEXT: ; use s[8:9]7751; GFX90A-NEXT: ;;#ASMEND7752; GFX90A-NEXT: s_setpc_b64 s[30:31]7753;7754; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_3:7755; GFX942: ; %bb.0:7756; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7757; GFX942-NEXT: ;;#ASMSTART7758; GFX942-NEXT: ; def s[0:1]7759; GFX942-NEXT: ;;#ASMEND7760; GFX942-NEXT: s_lshr_b32 s0, s0, 167761; GFX942-NEXT: ;;#ASMSTART7762; GFX942-NEXT: ; def s[2:3]7763; GFX942-NEXT: ;;#ASMEND7764; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s07765; GFX942-NEXT: s_mov_b32 s9, s27766; GFX942-NEXT: ;;#ASMSTART7767; GFX942-NEXT: ; use s[8:9]7768; GFX942-NEXT: ;;#ASMEND7769; GFX942-NEXT: s_setpc_b64 s[30:31]7770 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7771 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7772 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7773 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7774 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 3>7775 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7776 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7777 ret void7778}7779 7780define void @s_shuffle_v3bf16_v3bf16__5_2_3() {7781; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_3:7782; GFX900: ; %bb.0:7783; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7784; GFX900-NEXT: ;;#ASMSTART7785; GFX900-NEXT: ; def s[4:5]7786; GFX900-NEXT: ;;#ASMEND7787; GFX900-NEXT: ;;#ASMSTART7788; GFX900-NEXT: ; def s[6:7]7789; GFX900-NEXT: ;;#ASMEND7790; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s57791; GFX900-NEXT: s_mov_b32 s9, s67792; GFX900-NEXT: ;;#ASMSTART7793; GFX900-NEXT: ; use s[8:9]7794; GFX900-NEXT: ;;#ASMEND7795; GFX900-NEXT: s_setpc_b64 s[30:31]7796;7797; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_3:7798; GFX90A: ; %bb.0:7799; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7800; GFX90A-NEXT: ;;#ASMSTART7801; GFX90A-NEXT: ; def s[4:5]7802; GFX90A-NEXT: ;;#ASMEND7803; GFX90A-NEXT: ;;#ASMSTART7804; GFX90A-NEXT: ; def s[6:7]7805; GFX90A-NEXT: ;;#ASMEND7806; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s57807; GFX90A-NEXT: s_mov_b32 s9, s67808; GFX90A-NEXT: ;;#ASMSTART7809; GFX90A-NEXT: ; use s[8:9]7810; GFX90A-NEXT: ;;#ASMEND7811; GFX90A-NEXT: s_setpc_b64 s[30:31]7812;7813; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_3:7814; GFX942: ; %bb.0:7815; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7816; GFX942-NEXT: ;;#ASMSTART7817; GFX942-NEXT: ; def s[0:1]7818; GFX942-NEXT: ;;#ASMEND7819; GFX942-NEXT: ;;#ASMSTART7820; GFX942-NEXT: ; def s[2:3]7821; GFX942-NEXT: ;;#ASMEND7822; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s17823; GFX942-NEXT: s_mov_b32 s9, s27824; GFX942-NEXT: ;;#ASMSTART7825; GFX942-NEXT: ; use s[8:9]7826; GFX942-NEXT: ;;#ASMEND7827; GFX942-NEXT: s_setpc_b64 s[30:31]7828 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7829 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7830 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7831 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7832 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 3>7833 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7834 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7835 ret void7836}7837 7838define void @s_shuffle_v3bf16_v3bf16__5_4_3() {7839; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_3:7840; GFX900: ; %bb.0:7841; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7842; GFX900-NEXT: ;;#ASMSTART7843; GFX900-NEXT: ; def s[4:5]7844; GFX900-NEXT: ;;#ASMEND7845; GFX900-NEXT: s_lshr_b32 s6, s4, 167846; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s67847; GFX900-NEXT: s_mov_b32 s9, s47848; GFX900-NEXT: ;;#ASMSTART7849; GFX900-NEXT: ; use s[8:9]7850; GFX900-NEXT: ;;#ASMEND7851; GFX900-NEXT: s_setpc_b64 s[30:31]7852;7853; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_3:7854; GFX90A: ; %bb.0:7855; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7856; GFX90A-NEXT: ;;#ASMSTART7857; GFX90A-NEXT: ; def s[4:5]7858; GFX90A-NEXT: ;;#ASMEND7859; GFX90A-NEXT: s_lshr_b32 s6, s4, 167860; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s67861; GFX90A-NEXT: s_mov_b32 s9, s47862; GFX90A-NEXT: ;;#ASMSTART7863; GFX90A-NEXT: ; use s[8:9]7864; GFX90A-NEXT: ;;#ASMEND7865; GFX90A-NEXT: s_setpc_b64 s[30:31]7866;7867; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_3:7868; GFX942: ; %bb.0:7869; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7870; GFX942-NEXT: ;;#ASMSTART7871; GFX942-NEXT: ; def s[0:1]7872; GFX942-NEXT: ;;#ASMEND7873; GFX942-NEXT: s_lshr_b32 s2, s0, 167874; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s27875; GFX942-NEXT: s_mov_b32 s9, s07876; GFX942-NEXT: ;;#ASMSTART7877; GFX942-NEXT: ; use s[8:9]7878; GFX942-NEXT: ;;#ASMEND7879; GFX942-NEXT: s_setpc_b64 s[30:31]7880 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7881 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7882 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7883 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7884 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 3>7885 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7886 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7887 ret void7888}7889 7890define void @s_shuffle_v3bf16_v3bf16__u_4_4() {7891; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__u_4_4:7892; GFX9: ; %bb.0:7893; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7894; GFX9-NEXT: ;;#ASMSTART7895; GFX9-NEXT: ; def s[8:9]7896; GFX9-NEXT: ;;#ASMEND7897; GFX9-NEXT: s_lshr_b32 s9, s8, 167898; GFX9-NEXT: ;;#ASMSTART7899; GFX9-NEXT: ; use s[8:9]7900; GFX9-NEXT: ;;#ASMEND7901; GFX9-NEXT: s_setpc_b64 s[30:31]7902 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7903 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7904 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7905 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7906 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 poison, i32 4, i32 4>7907 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7908 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7909 ret void7910}7911 7912define void @s_shuffle_v3bf16_v3bf16__0_4_4() {7913; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__0_4_4:7914; GFX900: ; %bb.0:7915; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7916; GFX900-NEXT: ;;#ASMSTART7917; GFX900-NEXT: ; def s[6:7]7918; GFX900-NEXT: ;;#ASMEND7919; GFX900-NEXT: s_lshr_b32 s9, s6, 167920; GFX900-NEXT: ;;#ASMSTART7921; GFX900-NEXT: ; def s[4:5]7922; GFX900-NEXT: ;;#ASMEND7923; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s97924; GFX900-NEXT: ;;#ASMSTART7925; GFX900-NEXT: ; use s[8:9]7926; GFX900-NEXT: ;;#ASMEND7927; GFX900-NEXT: s_setpc_b64 s[30:31]7928;7929; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__0_4_4:7930; GFX90A: ; %bb.0:7931; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7932; GFX90A-NEXT: ;;#ASMSTART7933; GFX90A-NEXT: ; def s[6:7]7934; GFX90A-NEXT: ;;#ASMEND7935; GFX90A-NEXT: s_lshr_b32 s9, s6, 167936; GFX90A-NEXT: ;;#ASMSTART7937; GFX90A-NEXT: ; def s[4:5]7938; GFX90A-NEXT: ;;#ASMEND7939; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s97940; GFX90A-NEXT: ;;#ASMSTART7941; GFX90A-NEXT: ; use s[8:9]7942; GFX90A-NEXT: ;;#ASMEND7943; GFX90A-NEXT: s_setpc_b64 s[30:31]7944;7945; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__0_4_4:7946; GFX942: ; %bb.0:7947; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7948; GFX942-NEXT: ;;#ASMSTART7949; GFX942-NEXT: ; def s[2:3]7950; GFX942-NEXT: ;;#ASMEND7951; GFX942-NEXT: s_lshr_b32 s9, s2, 167952; GFX942-NEXT: ;;#ASMSTART7953; GFX942-NEXT: ; def s[0:1]7954; GFX942-NEXT: ;;#ASMEND7955; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s97956; GFX942-NEXT: ;;#ASMSTART7957; GFX942-NEXT: ; use s[8:9]7958; GFX942-NEXT: ;;#ASMEND7959; GFX942-NEXT: s_setpc_b64 s[30:31]7960 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()7961 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()7962 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7963 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>7964 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 0, i32 4, i32 4>7965 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>7966 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)7967 ret void7968}7969 7970define void @s_shuffle_v3bf16_v3bf16__1_4_4() {7971; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_4_4:7972; GFX900: ; %bb.0:7973; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7974; GFX900-NEXT: ;;#ASMSTART7975; GFX900-NEXT: ; def s[4:5]7976; GFX900-NEXT: ;;#ASMEND7977; GFX900-NEXT: ;;#ASMSTART7978; GFX900-NEXT: ; def s[6:7]7979; GFX900-NEXT: ;;#ASMEND7980; GFX900-NEXT: s_lshr_b32 s9, s6, 167981; GFX900-NEXT: s_lshr_b32 s4, s4, 167982; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s97983; GFX900-NEXT: ;;#ASMSTART7984; GFX900-NEXT: ; use s[8:9]7985; GFX900-NEXT: ;;#ASMEND7986; GFX900-NEXT: s_setpc_b64 s[30:31]7987;7988; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_4_4:7989; GFX90A: ; %bb.0:7990; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)7991; GFX90A-NEXT: ;;#ASMSTART7992; GFX90A-NEXT: ; def s[4:5]7993; GFX90A-NEXT: ;;#ASMEND7994; GFX90A-NEXT: ;;#ASMSTART7995; GFX90A-NEXT: ; def s[6:7]7996; GFX90A-NEXT: ;;#ASMEND7997; GFX90A-NEXT: s_lshr_b32 s9, s6, 167998; GFX90A-NEXT: s_lshr_b32 s4, s4, 167999; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s98000; GFX90A-NEXT: ;;#ASMSTART8001; GFX90A-NEXT: ; use s[8:9]8002; GFX90A-NEXT: ;;#ASMEND8003; GFX90A-NEXT: s_setpc_b64 s[30:31]8004;8005; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_4_4:8006; GFX942: ; %bb.0:8007; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8008; GFX942-NEXT: ;;#ASMSTART8009; GFX942-NEXT: ; def s[0:1]8010; GFX942-NEXT: ;;#ASMEND8011; GFX942-NEXT: ;;#ASMSTART8012; GFX942-NEXT: ; def s[2:3]8013; GFX942-NEXT: ;;#ASMEND8014; GFX942-NEXT: s_lshr_b32 s9, s2, 168015; GFX942-NEXT: s_lshr_b32 s0, s0, 168016; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s98017; GFX942-NEXT: ;;#ASMSTART8018; GFX942-NEXT: ; use s[8:9]8019; GFX942-NEXT: ;;#ASMEND8020; GFX942-NEXT: s_setpc_b64 s[30:31]8021 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8022 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8023 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8024 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8025 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 1, i32 4, i32 4>8026 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8027 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8028 ret void8029}8030 8031define void @s_shuffle_v3bf16_v3bf16__2_4_4() {8032; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__2_4_4:8033; GFX900: ; %bb.0:8034; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8035; GFX900-NEXT: ;;#ASMSTART8036; GFX900-NEXT: ; def s[6:7]8037; GFX900-NEXT: ;;#ASMEND8038; GFX900-NEXT: s_lshr_b32 s9, s6, 168039; GFX900-NEXT: ;;#ASMSTART8040; GFX900-NEXT: ; def s[4:5]8041; GFX900-NEXT: ;;#ASMEND8042; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s98043; GFX900-NEXT: ;;#ASMSTART8044; GFX900-NEXT: ; use s[8:9]8045; GFX900-NEXT: ;;#ASMEND8046; GFX900-NEXT: s_setpc_b64 s[30:31]8047;8048; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__2_4_4:8049; GFX90A: ; %bb.0:8050; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8051; GFX90A-NEXT: ;;#ASMSTART8052; GFX90A-NEXT: ; def s[6:7]8053; GFX90A-NEXT: ;;#ASMEND8054; GFX90A-NEXT: s_lshr_b32 s9, s6, 168055; GFX90A-NEXT: ;;#ASMSTART8056; GFX90A-NEXT: ; def s[4:5]8057; GFX90A-NEXT: ;;#ASMEND8058; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s98059; GFX90A-NEXT: ;;#ASMSTART8060; GFX90A-NEXT: ; use s[8:9]8061; GFX90A-NEXT: ;;#ASMEND8062; GFX90A-NEXT: s_setpc_b64 s[30:31]8063;8064; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__2_4_4:8065; GFX942: ; %bb.0:8066; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8067; GFX942-NEXT: ;;#ASMSTART8068; GFX942-NEXT: ; def s[2:3]8069; GFX942-NEXT: ;;#ASMEND8070; GFX942-NEXT: s_lshr_b32 s9, s2, 168071; GFX942-NEXT: ;;#ASMSTART8072; GFX942-NEXT: ; def s[0:1]8073; GFX942-NEXT: ;;#ASMEND8074; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s98075; GFX942-NEXT: ;;#ASMSTART8076; GFX942-NEXT: ; use s[8:9]8077; GFX942-NEXT: ;;#ASMEND8078; GFX942-NEXT: s_setpc_b64 s[30:31]8079 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8080 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8081 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8082 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8083 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 2, i32 4, i32 4>8084 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8085 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8086 ret void8087}8088 8089define void @s_shuffle_v3bf16_v3bf16__3_4_4() {8090; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__3_4_4:8091; GFX9: ; %bb.0:8092; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8093; GFX9-NEXT: ;;#ASMSTART8094; GFX9-NEXT: ; def s[8:9]8095; GFX9-NEXT: ;;#ASMEND8096; GFX9-NEXT: s_lshr_b32 s9, s8, 168097; GFX9-NEXT: ;;#ASMSTART8098; GFX9-NEXT: ; use s[8:9]8099; GFX9-NEXT: ;;#ASMEND8100; GFX9-NEXT: s_setpc_b64 s[30:31]8101 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8102 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8103 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8104 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8105 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 3, i32 4, i32 4>8106 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8107 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8108 ret void8109}8110 8111define void @s_shuffle_v3bf16_v3bf16__4_4_4() {8112; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_4_4:8113; GFX900: ; %bb.0:8114; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8115; GFX900-NEXT: ;;#ASMSTART8116; GFX900-NEXT: ; def s[4:5]8117; GFX900-NEXT: ;;#ASMEND8118; GFX900-NEXT: s_lshr_b32 s9, s4, 168119; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s98120; GFX900-NEXT: ;;#ASMSTART8121; GFX900-NEXT: ; use s[8:9]8122; GFX900-NEXT: ;;#ASMEND8123; GFX900-NEXT: s_setpc_b64 s[30:31]8124;8125; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_4_4:8126; GFX90A: ; %bb.0:8127; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8128; GFX90A-NEXT: ;;#ASMSTART8129; GFX90A-NEXT: ; def s[4:5]8130; GFX90A-NEXT: ;;#ASMEND8131; GFX90A-NEXT: s_lshr_b32 s9, s4, 168132; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s98133; GFX90A-NEXT: ;;#ASMSTART8134; GFX90A-NEXT: ; use s[8:9]8135; GFX90A-NEXT: ;;#ASMEND8136; GFX90A-NEXT: s_setpc_b64 s[30:31]8137;8138; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_4_4:8139; GFX942: ; %bb.0:8140; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8141; GFX942-NEXT: ;;#ASMSTART8142; GFX942-NEXT: ; def s[0:1]8143; GFX942-NEXT: ;;#ASMEND8144; GFX942-NEXT: s_lshr_b32 s9, s0, 168145; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s98146; GFX942-NEXT: ;;#ASMSTART8147; GFX942-NEXT: ; use s[8:9]8148; GFX942-NEXT: ;;#ASMEND8149; GFX942-NEXT: s_setpc_b64 s[30:31]8150 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8151 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8152 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8153 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8154 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 4, i32 4>8155 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8156 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8157 ret void8158}8159 8160define void @s_shuffle_v3bf16_v3bf16__5_4_4() {8161; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_4:8162; GFX900: ; %bb.0:8163; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8164; GFX900-NEXT: ;;#ASMSTART8165; GFX900-NEXT: ; def s[4:5]8166; GFX900-NEXT: ;;#ASMEND8167; GFX900-NEXT: s_lshr_b32 s9, s4, 168168; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s98169; GFX900-NEXT: ;;#ASMSTART8170; GFX900-NEXT: ; use s[8:9]8171; GFX900-NEXT: ;;#ASMEND8172; GFX900-NEXT: s_setpc_b64 s[30:31]8173;8174; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_4:8175; GFX90A: ; %bb.0:8176; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8177; GFX90A-NEXT: ;;#ASMSTART8178; GFX90A-NEXT: ; def s[4:5]8179; GFX90A-NEXT: ;;#ASMEND8180; GFX90A-NEXT: s_lshr_b32 s9, s4, 168181; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s98182; GFX90A-NEXT: ;;#ASMSTART8183; GFX90A-NEXT: ; use s[8:9]8184; GFX90A-NEXT: ;;#ASMEND8185; GFX90A-NEXT: s_setpc_b64 s[30:31]8186;8187; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_4:8188; GFX942: ; %bb.0:8189; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8190; GFX942-NEXT: ;;#ASMSTART8191; GFX942-NEXT: ; def s[0:1]8192; GFX942-NEXT: ;;#ASMEND8193; GFX942-NEXT: s_lshr_b32 s9, s0, 168194; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s98195; GFX942-NEXT: ;;#ASMSTART8196; GFX942-NEXT: ; use s[8:9]8197; GFX942-NEXT: ;;#ASMEND8198; GFX942-NEXT: s_setpc_b64 s[30:31]8199 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8200 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8201 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8202 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8203 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 4>8204 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8205 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8206 ret void8207}8208 8209define void @s_shuffle_v3bf16_v3bf16__5_u_4() {8210; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_u_4:8211; GFX900: ; %bb.0:8212; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8213; GFX900-NEXT: ;;#ASMSTART8214; GFX900-NEXT: ; def s[4:5]8215; GFX900-NEXT: ;;#ASMEND8216; GFX900-NEXT: s_lshr_b32 s9, s4, 168217; GFX900-NEXT: s_mov_b32 s8, s58218; GFX900-NEXT: ;;#ASMSTART8219; GFX900-NEXT: ; use s[8:9]8220; GFX900-NEXT: ;;#ASMEND8221; GFX900-NEXT: s_setpc_b64 s[30:31]8222;8223; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_u_4:8224; GFX90A: ; %bb.0:8225; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8226; GFX90A-NEXT: ;;#ASMSTART8227; GFX90A-NEXT: ; def s[4:5]8228; GFX90A-NEXT: ;;#ASMEND8229; GFX90A-NEXT: s_lshr_b32 s9, s4, 168230; GFX90A-NEXT: s_mov_b32 s8, s58231; GFX90A-NEXT: ;;#ASMSTART8232; GFX90A-NEXT: ; use s[8:9]8233; GFX90A-NEXT: ;;#ASMEND8234; GFX90A-NEXT: s_setpc_b64 s[30:31]8235;8236; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_u_4:8237; GFX942: ; %bb.0:8238; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8239; GFX942-NEXT: ;;#ASMSTART8240; GFX942-NEXT: ; def s[0:1]8241; GFX942-NEXT: ;;#ASMEND8242; GFX942-NEXT: s_lshr_b32 s9, s0, 168243; GFX942-NEXT: s_mov_b32 s8, s18244; GFX942-NEXT: ;;#ASMSTART8245; GFX942-NEXT: ; use s[8:9]8246; GFX942-NEXT: ;;#ASMEND8247; GFX942-NEXT: s_setpc_b64 s[30:31]8248 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8249 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8250 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8251 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8252 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 4>8253 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8254 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8255 ret void8256}8257 8258define void @s_shuffle_v3bf16_v3bf16__5_0_4() {8259; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_4:8260; GFX900: ; %bb.0:8261; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8262; GFX900-NEXT: ;;#ASMSTART8263; GFX900-NEXT: ; def s[4:5]8264; GFX900-NEXT: ;;#ASMEND8265; GFX900-NEXT: ;;#ASMSTART8266; GFX900-NEXT: ; def s[6:7]8267; GFX900-NEXT: ;;#ASMEND8268; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s48269; GFX900-NEXT: s_lshr_b32 s9, s6, 168270; GFX900-NEXT: ;;#ASMSTART8271; GFX900-NEXT: ; use s[8:9]8272; GFX900-NEXT: ;;#ASMEND8273; GFX900-NEXT: s_setpc_b64 s[30:31]8274;8275; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_4:8276; GFX90A: ; %bb.0:8277; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8278; GFX90A-NEXT: ;;#ASMSTART8279; GFX90A-NEXT: ; def s[4:5]8280; GFX90A-NEXT: ;;#ASMEND8281; GFX90A-NEXT: ;;#ASMSTART8282; GFX90A-NEXT: ; def s[6:7]8283; GFX90A-NEXT: ;;#ASMEND8284; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s48285; GFX90A-NEXT: s_lshr_b32 s9, s6, 168286; GFX90A-NEXT: ;;#ASMSTART8287; GFX90A-NEXT: ; use s[8:9]8288; GFX90A-NEXT: ;;#ASMEND8289; GFX90A-NEXT: s_setpc_b64 s[30:31]8290;8291; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_4:8292; GFX942: ; %bb.0:8293; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8294; GFX942-NEXT: ;;#ASMSTART8295; GFX942-NEXT: ; def s[0:1]8296; GFX942-NEXT: ;;#ASMEND8297; GFX942-NEXT: ;;#ASMSTART8298; GFX942-NEXT: ; def s[2:3]8299; GFX942-NEXT: ;;#ASMEND8300; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s08301; GFX942-NEXT: s_lshr_b32 s9, s2, 168302; GFX942-NEXT: ;;#ASMSTART8303; GFX942-NEXT: ; use s[8:9]8304; GFX942-NEXT: ;;#ASMEND8305; GFX942-NEXT: s_setpc_b64 s[30:31]8306 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8307 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8308 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8309 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8310 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 4>8311 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8312 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8313 ret void8314}8315 8316define void @s_shuffle_v3bf16_v3bf16__5_1_4() {8317; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_4:8318; GFX900: ; %bb.0:8319; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8320; GFX900-NEXT: ;;#ASMSTART8321; GFX900-NEXT: ; def s[4:5]8322; GFX900-NEXT: ;;#ASMEND8323; GFX900-NEXT: s_lshr_b32 s4, s4, 168324; GFX900-NEXT: ;;#ASMSTART8325; GFX900-NEXT: ; def s[6:7]8326; GFX900-NEXT: ;;#ASMEND8327; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s48328; GFX900-NEXT: s_lshr_b32 s9, s6, 168329; GFX900-NEXT: ;;#ASMSTART8330; GFX900-NEXT: ; use s[8:9]8331; GFX900-NEXT: ;;#ASMEND8332; GFX900-NEXT: s_setpc_b64 s[30:31]8333;8334; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_4:8335; GFX90A: ; %bb.0:8336; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8337; GFX90A-NEXT: ;;#ASMSTART8338; GFX90A-NEXT: ; def s[4:5]8339; GFX90A-NEXT: ;;#ASMEND8340; GFX90A-NEXT: s_lshr_b32 s4, s4, 168341; GFX90A-NEXT: ;;#ASMSTART8342; GFX90A-NEXT: ; def s[6:7]8343; GFX90A-NEXT: ;;#ASMEND8344; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s48345; GFX90A-NEXT: s_lshr_b32 s9, s6, 168346; GFX90A-NEXT: ;;#ASMSTART8347; GFX90A-NEXT: ; use s[8:9]8348; GFX90A-NEXT: ;;#ASMEND8349; GFX90A-NEXT: s_setpc_b64 s[30:31]8350;8351; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_4:8352; GFX942: ; %bb.0:8353; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8354; GFX942-NEXT: ;;#ASMSTART8355; GFX942-NEXT: ; def s[0:1]8356; GFX942-NEXT: ;;#ASMEND8357; GFX942-NEXT: s_lshr_b32 s0, s0, 168358; GFX942-NEXT: ;;#ASMSTART8359; GFX942-NEXT: ; def s[2:3]8360; GFX942-NEXT: ;;#ASMEND8361; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s08362; GFX942-NEXT: s_lshr_b32 s9, s2, 168363; GFX942-NEXT: ;;#ASMSTART8364; GFX942-NEXT: ; use s[8:9]8365; GFX942-NEXT: ;;#ASMEND8366; GFX942-NEXT: s_setpc_b64 s[30:31]8367 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8368 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8369 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8370 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8371 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 4>8372 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8373 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8374 ret void8375}8376 8377define void @s_shuffle_v3bf16_v3bf16__5_2_4() {8378; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_4:8379; GFX900: ; %bb.0:8380; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8381; GFX900-NEXT: ;;#ASMSTART8382; GFX900-NEXT: ; def s[4:5]8383; GFX900-NEXT: ;;#ASMEND8384; GFX900-NEXT: ;;#ASMSTART8385; GFX900-NEXT: ; def s[6:7]8386; GFX900-NEXT: ;;#ASMEND8387; GFX900-NEXT: s_pack_ll_b32_b16 s8, s7, s58388; GFX900-NEXT: s_lshr_b32 s9, s6, 168389; GFX900-NEXT: ;;#ASMSTART8390; GFX900-NEXT: ; use s[8:9]8391; GFX900-NEXT: ;;#ASMEND8392; GFX900-NEXT: s_setpc_b64 s[30:31]8393;8394; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_4:8395; GFX90A: ; %bb.0:8396; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8397; GFX90A-NEXT: ;;#ASMSTART8398; GFX90A-NEXT: ; def s[4:5]8399; GFX90A-NEXT: ;;#ASMEND8400; GFX90A-NEXT: ;;#ASMSTART8401; GFX90A-NEXT: ; def s[6:7]8402; GFX90A-NEXT: ;;#ASMEND8403; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s7, s58404; GFX90A-NEXT: s_lshr_b32 s9, s6, 168405; GFX90A-NEXT: ;;#ASMSTART8406; GFX90A-NEXT: ; use s[8:9]8407; GFX90A-NEXT: ;;#ASMEND8408; GFX90A-NEXT: s_setpc_b64 s[30:31]8409;8410; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_4:8411; GFX942: ; %bb.0:8412; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8413; GFX942-NEXT: ;;#ASMSTART8414; GFX942-NEXT: ; def s[0:1]8415; GFX942-NEXT: ;;#ASMEND8416; GFX942-NEXT: ;;#ASMSTART8417; GFX942-NEXT: ; def s[2:3]8418; GFX942-NEXT: ;;#ASMEND8419; GFX942-NEXT: s_pack_ll_b32_b16 s8, s3, s18420; GFX942-NEXT: s_lshr_b32 s9, s2, 168421; GFX942-NEXT: ;;#ASMSTART8422; GFX942-NEXT: ; use s[8:9]8423; GFX942-NEXT: ;;#ASMEND8424; GFX942-NEXT: s_setpc_b64 s[30:31]8425 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8426 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8427 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8428 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8429 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 4>8430 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8431 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8432 ret void8433}8434 8435define void @s_shuffle_v3bf16_v3bf16__5_3_4() {8436; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_3_4:8437; GFX900: ; %bb.0:8438; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8439; GFX900-NEXT: ;;#ASMSTART8440; GFX900-NEXT: ; def s[4:5]8441; GFX900-NEXT: ;;#ASMEND8442; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s48443; GFX900-NEXT: s_lshr_b32 s9, s4, 168444; GFX900-NEXT: ;;#ASMSTART8445; GFX900-NEXT: ; use s[8:9]8446; GFX900-NEXT: ;;#ASMEND8447; GFX900-NEXT: s_setpc_b64 s[30:31]8448;8449; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_3_4:8450; GFX90A: ; %bb.0:8451; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8452; GFX90A-NEXT: ;;#ASMSTART8453; GFX90A-NEXT: ; def s[4:5]8454; GFX90A-NEXT: ;;#ASMEND8455; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s48456; GFX90A-NEXT: s_lshr_b32 s9, s4, 168457; GFX90A-NEXT: ;;#ASMSTART8458; GFX90A-NEXT: ; use s[8:9]8459; GFX90A-NEXT: ;;#ASMEND8460; GFX90A-NEXT: s_setpc_b64 s[30:31]8461;8462; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_3_4:8463; GFX942: ; %bb.0:8464; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8465; GFX942-NEXT: ;;#ASMSTART8466; GFX942-NEXT: ; def s[0:1]8467; GFX942-NEXT: ;;#ASMEND8468; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s08469; GFX942-NEXT: s_lshr_b32 s9, s0, 168470; GFX942-NEXT: ;;#ASMSTART8471; GFX942-NEXT: ; use s[8:9]8472; GFX942-NEXT: ;;#ASMEND8473; GFX942-NEXT: s_setpc_b64 s[30:31]8474 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8475 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8476 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8477 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8478 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 4>8479 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8480 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8481 ret void8482}8483 8484define void @s_shuffle_v3bf16_v3bf16__u_5_5() {8485; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__u_5_5:8486; GFX9: ; %bb.0:8487; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8488; GFX9-NEXT: ;;#ASMSTART8489; GFX9-NEXT: ; def s[8:9]8490; GFX9-NEXT: ;;#ASMEND8491; GFX9-NEXT: s_lshl_b32 s8, s9, 168492; GFX9-NEXT: ;;#ASMSTART8493; GFX9-NEXT: ; use s[8:9]8494; GFX9-NEXT: ;;#ASMEND8495; GFX9-NEXT: s_setpc_b64 s[30:31]8496 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8497 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8498 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8499 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8500 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 poison, i32 5, i32 5>8501 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8502 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8503 ret void8504}8505 8506define void @s_shuffle_v3bf16_v3bf16__0_5_5() {8507; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__0_5_5:8508; GFX900: ; %bb.0:8509; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8510; GFX900-NEXT: ;;#ASMSTART8511; GFX900-NEXT: ; def s[8:9]8512; GFX900-NEXT: ;;#ASMEND8513; GFX900-NEXT: ;;#ASMSTART8514; GFX900-NEXT: ; def s[4:5]8515; GFX900-NEXT: ;;#ASMEND8516; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s98517; GFX900-NEXT: ;;#ASMSTART8518; GFX900-NEXT: ; use s[8:9]8519; GFX900-NEXT: ;;#ASMEND8520; GFX900-NEXT: s_setpc_b64 s[30:31]8521;8522; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__0_5_5:8523; GFX90A: ; %bb.0:8524; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8525; GFX90A-NEXT: ;;#ASMSTART8526; GFX90A-NEXT: ; def s[8:9]8527; GFX90A-NEXT: ;;#ASMEND8528; GFX90A-NEXT: ;;#ASMSTART8529; GFX90A-NEXT: ; def s[4:5]8530; GFX90A-NEXT: ;;#ASMEND8531; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s98532; GFX90A-NEXT: ;;#ASMSTART8533; GFX90A-NEXT: ; use s[8:9]8534; GFX90A-NEXT: ;;#ASMEND8535; GFX90A-NEXT: s_setpc_b64 s[30:31]8536;8537; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__0_5_5:8538; GFX942: ; %bb.0:8539; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8540; GFX942-NEXT: ;;#ASMSTART8541; GFX942-NEXT: ; def s[8:9]8542; GFX942-NEXT: ;;#ASMEND8543; GFX942-NEXT: ;;#ASMSTART8544; GFX942-NEXT: ; def s[0:1]8545; GFX942-NEXT: ;;#ASMEND8546; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s98547; GFX942-NEXT: ;;#ASMSTART8548; GFX942-NEXT: ; use s[8:9]8549; GFX942-NEXT: ;;#ASMEND8550; GFX942-NEXT: s_setpc_b64 s[30:31]8551 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8552 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8553 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8554 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8555 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 0, i32 5, i32 5>8556 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8557 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8558 ret void8559}8560 8561define void @s_shuffle_v3bf16_v3bf16__1_5_5() {8562; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__1_5_5:8563; GFX900: ; %bb.0:8564; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8565; GFX900-NEXT: ;;#ASMSTART8566; GFX900-NEXT: ; def s[4:5]8567; GFX900-NEXT: ;;#ASMEND8568; GFX900-NEXT: ;;#ASMSTART8569; GFX900-NEXT: ; def s[8:9]8570; GFX900-NEXT: ;;#ASMEND8571; GFX900-NEXT: s_lshr_b32 s4, s4, 168572; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s98573; GFX900-NEXT: ;;#ASMSTART8574; GFX900-NEXT: ; use s[8:9]8575; GFX900-NEXT: ;;#ASMEND8576; GFX900-NEXT: s_setpc_b64 s[30:31]8577;8578; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__1_5_5:8579; GFX90A: ; %bb.0:8580; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8581; GFX90A-NEXT: ;;#ASMSTART8582; GFX90A-NEXT: ; def s[4:5]8583; GFX90A-NEXT: ;;#ASMEND8584; GFX90A-NEXT: ;;#ASMSTART8585; GFX90A-NEXT: ; def s[8:9]8586; GFX90A-NEXT: ;;#ASMEND8587; GFX90A-NEXT: s_lshr_b32 s4, s4, 168588; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s98589; GFX90A-NEXT: ;;#ASMSTART8590; GFX90A-NEXT: ; use s[8:9]8591; GFX90A-NEXT: ;;#ASMEND8592; GFX90A-NEXT: s_setpc_b64 s[30:31]8593;8594; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__1_5_5:8595; GFX942: ; %bb.0:8596; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8597; GFX942-NEXT: ;;#ASMSTART8598; GFX942-NEXT: ; def s[0:1]8599; GFX942-NEXT: ;;#ASMEND8600; GFX942-NEXT: ;;#ASMSTART8601; GFX942-NEXT: ; def s[8:9]8602; GFX942-NEXT: ;;#ASMEND8603; GFX942-NEXT: s_lshr_b32 s0, s0, 168604; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s98605; GFX942-NEXT: ;;#ASMSTART8606; GFX942-NEXT: ; use s[8:9]8607; GFX942-NEXT: ;;#ASMEND8608; GFX942-NEXT: s_setpc_b64 s[30:31]8609 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8610 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8611 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8612 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8613 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 1, i32 5, i32 5>8614 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8615 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8616 ret void8617}8618 8619define void @s_shuffle_v3bf16_v3bf16__2_5_5() {8620; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__2_5_5:8621; GFX900: ; %bb.0:8622; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8623; GFX900-NEXT: ;;#ASMSTART8624; GFX900-NEXT: ; def s[8:9]8625; GFX900-NEXT: ;;#ASMEND8626; GFX900-NEXT: ;;#ASMSTART8627; GFX900-NEXT: ; def s[4:5]8628; GFX900-NEXT: ;;#ASMEND8629; GFX900-NEXT: s_pack_ll_b32_b16 s8, s5, s98630; GFX900-NEXT: ;;#ASMSTART8631; GFX900-NEXT: ; use s[8:9]8632; GFX900-NEXT: ;;#ASMEND8633; GFX900-NEXT: s_setpc_b64 s[30:31]8634;8635; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__2_5_5:8636; GFX90A: ; %bb.0:8637; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8638; GFX90A-NEXT: ;;#ASMSTART8639; GFX90A-NEXT: ; def s[8:9]8640; GFX90A-NEXT: ;;#ASMEND8641; GFX90A-NEXT: ;;#ASMSTART8642; GFX90A-NEXT: ; def s[4:5]8643; GFX90A-NEXT: ;;#ASMEND8644; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s5, s98645; GFX90A-NEXT: ;;#ASMSTART8646; GFX90A-NEXT: ; use s[8:9]8647; GFX90A-NEXT: ;;#ASMEND8648; GFX90A-NEXT: s_setpc_b64 s[30:31]8649;8650; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__2_5_5:8651; GFX942: ; %bb.0:8652; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8653; GFX942-NEXT: ;;#ASMSTART8654; GFX942-NEXT: ; def s[8:9]8655; GFX942-NEXT: ;;#ASMEND8656; GFX942-NEXT: ;;#ASMSTART8657; GFX942-NEXT: ; def s[0:1]8658; GFX942-NEXT: ;;#ASMEND8659; GFX942-NEXT: s_pack_ll_b32_b16 s8, s1, s98660; GFX942-NEXT: ;;#ASMSTART8661; GFX942-NEXT: ; use s[8:9]8662; GFX942-NEXT: ;;#ASMEND8663; GFX942-NEXT: s_setpc_b64 s[30:31]8664 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8665 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8666 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8667 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8668 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 2, i32 5, i32 5>8669 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8670 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8671 ret void8672}8673 8674define void @s_shuffle_v3bf16_v3bf16__3_5_5() {8675; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__3_5_5:8676; GFX9: ; %bb.0:8677; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8678; GFX9-NEXT: ;;#ASMSTART8679; GFX9-NEXT: ; def s[8:9]8680; GFX9-NEXT: ;;#ASMEND8681; GFX9-NEXT: s_pack_ll_b32_b16 s8, s8, s98682; GFX9-NEXT: ;;#ASMSTART8683; GFX9-NEXT: ; use s[8:9]8684; GFX9-NEXT: ;;#ASMEND8685; GFX9-NEXT: s_setpc_b64 s[30:31]8686 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8687 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8688 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8689 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8690 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 3, i32 5, i32 5>8691 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8692 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8693 ret void8694}8695 8696define void @s_shuffle_v3bf16_v3bf16__4_5_5() {8697; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__4_5_5:8698; GFX900: ; %bb.0:8699; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8700; GFX900-NEXT: ;;#ASMSTART8701; GFX900-NEXT: ; def s[8:9]8702; GFX900-NEXT: ;;#ASMEND8703; GFX900-NEXT: s_lshr_b32 s4, s8, 168704; GFX900-NEXT: s_pack_ll_b32_b16 s8, s4, s98705; GFX900-NEXT: ;;#ASMSTART8706; GFX900-NEXT: ; use s[8:9]8707; GFX900-NEXT: ;;#ASMEND8708; GFX900-NEXT: s_setpc_b64 s[30:31]8709;8710; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__4_5_5:8711; GFX90A: ; %bb.0:8712; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8713; GFX90A-NEXT: ;;#ASMSTART8714; GFX90A-NEXT: ; def s[8:9]8715; GFX90A-NEXT: ;;#ASMEND8716; GFX90A-NEXT: s_lshr_b32 s4, s8, 168717; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s4, s98718; GFX90A-NEXT: ;;#ASMSTART8719; GFX90A-NEXT: ; use s[8:9]8720; GFX90A-NEXT: ;;#ASMEND8721; GFX90A-NEXT: s_setpc_b64 s[30:31]8722;8723; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__4_5_5:8724; GFX942: ; %bb.0:8725; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8726; GFX942-NEXT: ;;#ASMSTART8727; GFX942-NEXT: ; def s[8:9]8728; GFX942-NEXT: ;;#ASMEND8729; GFX942-NEXT: s_lshr_b32 s0, s8, 168730; GFX942-NEXT: s_pack_ll_b32_b16 s8, s0, s98731; GFX942-NEXT: ;;#ASMSTART8732; GFX942-NEXT: ; use s[8:9]8733; GFX942-NEXT: ;;#ASMEND8734; GFX942-NEXT: s_setpc_b64 s[30:31]8735 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8736 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8737 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8738 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8739 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 4, i32 5, i32 5>8740 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8741 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8742 ret void8743}8744 8745define void @s_shuffle_v3bf16_v3bf16__5_u_5() {8746; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__5_u_5:8747; GFX9: ; %bb.0:8748; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8749; GFX9-NEXT: ;;#ASMSTART8750; GFX9-NEXT: ; def s[8:9]8751; GFX9-NEXT: ;;#ASMEND8752; GFX9-NEXT: s_mov_b32 s8, s98753; GFX9-NEXT: ;;#ASMSTART8754; GFX9-NEXT: ; use s[8:9]8755; GFX9-NEXT: ;;#ASMEND8756; GFX9-NEXT: s_setpc_b64 s[30:31]8757 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8758 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8759 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8760 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8761 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 poison, i32 5>8762 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8763 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8764 ret void8765}8766 8767define void @s_shuffle_v3bf16_v3bf16__5_0_5() {8768; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_0_5:8769; GFX900: ; %bb.0:8770; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8771; GFX900-NEXT: ;;#ASMSTART8772; GFX900-NEXT: ; def s[8:9]8773; GFX900-NEXT: ;;#ASMEND8774; GFX900-NEXT: ;;#ASMSTART8775; GFX900-NEXT: ; def s[4:5]8776; GFX900-NEXT: ;;#ASMEND8777; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s48778; GFX900-NEXT: ;;#ASMSTART8779; GFX900-NEXT: ; use s[8:9]8780; GFX900-NEXT: ;;#ASMEND8781; GFX900-NEXT: s_setpc_b64 s[30:31]8782;8783; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_0_5:8784; GFX90A: ; %bb.0:8785; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8786; GFX90A-NEXT: ;;#ASMSTART8787; GFX90A-NEXT: ; def s[8:9]8788; GFX90A-NEXT: ;;#ASMEND8789; GFX90A-NEXT: ;;#ASMSTART8790; GFX90A-NEXT: ; def s[4:5]8791; GFX90A-NEXT: ;;#ASMEND8792; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s48793; GFX90A-NEXT: ;;#ASMSTART8794; GFX90A-NEXT: ; use s[8:9]8795; GFX90A-NEXT: ;;#ASMEND8796; GFX90A-NEXT: s_setpc_b64 s[30:31]8797;8798; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_0_5:8799; GFX942: ; %bb.0:8800; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8801; GFX942-NEXT: ;;#ASMSTART8802; GFX942-NEXT: ; def s[8:9]8803; GFX942-NEXT: ;;#ASMEND8804; GFX942-NEXT: ;;#ASMSTART8805; GFX942-NEXT: ; def s[0:1]8806; GFX942-NEXT: ;;#ASMEND8807; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s08808; GFX942-NEXT: ;;#ASMSTART8809; GFX942-NEXT: ; use s[8:9]8810; GFX942-NEXT: ;;#ASMEND8811; GFX942-NEXT: s_setpc_b64 s[30:31]8812 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8813 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8814 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8815 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8816 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 0, i32 5>8817 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8818 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8819 ret void8820}8821 8822define void @s_shuffle_v3bf16_v3bf16__5_1_5() {8823; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_1_5:8824; GFX900: ; %bb.0:8825; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8826; GFX900-NEXT: ;;#ASMSTART8827; GFX900-NEXT: ; def s[4:5]8828; GFX900-NEXT: ;;#ASMEND8829; GFX900-NEXT: ;;#ASMSTART8830; GFX900-NEXT: ; def s[8:9]8831; GFX900-NEXT: ;;#ASMEND8832; GFX900-NEXT: s_lshr_b32 s4, s4, 168833; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s48834; GFX900-NEXT: ;;#ASMSTART8835; GFX900-NEXT: ; use s[8:9]8836; GFX900-NEXT: ;;#ASMEND8837; GFX900-NEXT: s_setpc_b64 s[30:31]8838;8839; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_1_5:8840; GFX90A: ; %bb.0:8841; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8842; GFX90A-NEXT: ;;#ASMSTART8843; GFX90A-NEXT: ; def s[4:5]8844; GFX90A-NEXT: ;;#ASMEND8845; GFX90A-NEXT: ;;#ASMSTART8846; GFX90A-NEXT: ; def s[8:9]8847; GFX90A-NEXT: ;;#ASMEND8848; GFX90A-NEXT: s_lshr_b32 s4, s4, 168849; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s48850; GFX90A-NEXT: ;;#ASMSTART8851; GFX90A-NEXT: ; use s[8:9]8852; GFX90A-NEXT: ;;#ASMEND8853; GFX90A-NEXT: s_setpc_b64 s[30:31]8854;8855; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_1_5:8856; GFX942: ; %bb.0:8857; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8858; GFX942-NEXT: ;;#ASMSTART8859; GFX942-NEXT: ; def s[0:1]8860; GFX942-NEXT: ;;#ASMEND8861; GFX942-NEXT: ;;#ASMSTART8862; GFX942-NEXT: ; def s[8:9]8863; GFX942-NEXT: ;;#ASMEND8864; GFX942-NEXT: s_lshr_b32 s0, s0, 168865; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s08866; GFX942-NEXT: ;;#ASMSTART8867; GFX942-NEXT: ; use s[8:9]8868; GFX942-NEXT: ;;#ASMEND8869; GFX942-NEXT: s_setpc_b64 s[30:31]8870 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8871 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8872 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8873 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8874 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 1, i32 5>8875 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8876 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8877 ret void8878}8879 8880define void @s_shuffle_v3bf16_v3bf16__5_2_5() {8881; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_2_5:8882; GFX900: ; %bb.0:8883; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8884; GFX900-NEXT: ;;#ASMSTART8885; GFX900-NEXT: ; def s[8:9]8886; GFX900-NEXT: ;;#ASMEND8887; GFX900-NEXT: ;;#ASMSTART8888; GFX900-NEXT: ; def s[4:5]8889; GFX900-NEXT: ;;#ASMEND8890; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s58891; GFX900-NEXT: ;;#ASMSTART8892; GFX900-NEXT: ; use s[8:9]8893; GFX900-NEXT: ;;#ASMEND8894; GFX900-NEXT: s_setpc_b64 s[30:31]8895;8896; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_2_5:8897; GFX90A: ; %bb.0:8898; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8899; GFX90A-NEXT: ;;#ASMSTART8900; GFX90A-NEXT: ; def s[8:9]8901; GFX90A-NEXT: ;;#ASMEND8902; GFX90A-NEXT: ;;#ASMSTART8903; GFX90A-NEXT: ; def s[4:5]8904; GFX90A-NEXT: ;;#ASMEND8905; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s58906; GFX90A-NEXT: ;;#ASMSTART8907; GFX90A-NEXT: ; use s[8:9]8908; GFX90A-NEXT: ;;#ASMEND8909; GFX90A-NEXT: s_setpc_b64 s[30:31]8910;8911; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_2_5:8912; GFX942: ; %bb.0:8913; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8914; GFX942-NEXT: ;;#ASMSTART8915; GFX942-NEXT: ; def s[8:9]8916; GFX942-NEXT: ;;#ASMEND8917; GFX942-NEXT: ;;#ASMSTART8918; GFX942-NEXT: ; def s[0:1]8919; GFX942-NEXT: ;;#ASMEND8920; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s18921; GFX942-NEXT: ;;#ASMSTART8922; GFX942-NEXT: ; use s[8:9]8923; GFX942-NEXT: ;;#ASMEND8924; GFX942-NEXT: s_setpc_b64 s[30:31]8925 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8926 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8927 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8928 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8929 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 2, i32 5>8930 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8931 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8932 ret void8933}8934 8935define void @s_shuffle_v3bf16_v3bf16__5_3_5() {8936; GFX9-LABEL: s_shuffle_v3bf16_v3bf16__5_3_5:8937; GFX9: ; %bb.0:8938; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8939; GFX9-NEXT: ;;#ASMSTART8940; GFX9-NEXT: ; def s[8:9]8941; GFX9-NEXT: ;;#ASMEND8942; GFX9-NEXT: s_pack_ll_b32_b16 s8, s9, s88943; GFX9-NEXT: ;;#ASMSTART8944; GFX9-NEXT: ; use s[8:9]8945; GFX9-NEXT: ;;#ASMEND8946; GFX9-NEXT: s_setpc_b64 s[30:31]8947 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8948 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8949 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8950 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8951 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 3, i32 5>8952 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>8953 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)8954 ret void8955}8956 8957define void @s_shuffle_v3bf16_v3bf16__5_4_5() {8958; GFX900-LABEL: s_shuffle_v3bf16_v3bf16__5_4_5:8959; GFX900: ; %bb.0:8960; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8961; GFX900-NEXT: ;;#ASMSTART8962; GFX900-NEXT: ; def s[8:9]8963; GFX900-NEXT: ;;#ASMEND8964; GFX900-NEXT: s_lshr_b32 s4, s8, 168965; GFX900-NEXT: s_pack_ll_b32_b16 s8, s9, s48966; GFX900-NEXT: ;;#ASMSTART8967; GFX900-NEXT: ; use s[8:9]8968; GFX900-NEXT: ;;#ASMEND8969; GFX900-NEXT: s_setpc_b64 s[30:31]8970;8971; GFX90A-LABEL: s_shuffle_v3bf16_v3bf16__5_4_5:8972; GFX90A: ; %bb.0:8973; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8974; GFX90A-NEXT: ;;#ASMSTART8975; GFX90A-NEXT: ; def s[8:9]8976; GFX90A-NEXT: ;;#ASMEND8977; GFX90A-NEXT: s_lshr_b32 s4, s8, 168978; GFX90A-NEXT: s_pack_ll_b32_b16 s8, s9, s48979; GFX90A-NEXT: ;;#ASMSTART8980; GFX90A-NEXT: ; use s[8:9]8981; GFX90A-NEXT: ;;#ASMEND8982; GFX90A-NEXT: s_setpc_b64 s[30:31]8983;8984; GFX942-LABEL: s_shuffle_v3bf16_v3bf16__5_4_5:8985; GFX942: ; %bb.0:8986; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)8987; GFX942-NEXT: ;;#ASMSTART8988; GFX942-NEXT: ; def s[8:9]8989; GFX942-NEXT: ;;#ASMEND8990; GFX942-NEXT: s_lshr_b32 s0, s8, 168991; GFX942-NEXT: s_pack_ll_b32_b16 s8, s9, s08992; GFX942-NEXT: ;;#ASMSTART8993; GFX942-NEXT: ; use s[8:9]8994; GFX942-NEXT: ;;#ASMEND8995; GFX942-NEXT: s_setpc_b64 s[30:31]8996 %vec0 = call <4 x bfloat> asm "; def $0", "=s"()8997 %vec1 = call <4 x bfloat> asm "; def $0", "=s"()8998 %extract3 = shufflevector <4 x bfloat> %vec0, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>8999 %extract31 = shufflevector <4 x bfloat> %vec1, <4 x bfloat> poison, <3 x i32> <i32 0, i32 1, i32 2>9000 %shuf = shufflevector <3 x bfloat> %extract3, <3 x bfloat> %extract31, <3 x i32> <i32 5, i32 4, i32 5>9001 %extend3 = shufflevector <3 x bfloat> %shuf, <3 x bfloat> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>9002 call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x bfloat> %extend3)9003 ret void9004}9005;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:9006; GFX90APLUS: {{.*}}9007