brintos

brintos / llvm-project-archived public Read only

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